View Javadoc

1   // SECTION-START[License Header]
2   // <editor-fold defaultstate="collapsed" desc=" Generated License ">
3   /*
4    *   Java Object Management and Configuration
5    *   Copyright (C) Christian Schulte, 2005-206
6    *   All rights reserved.
7    *
8    *   Redistribution and use in source and binary forms, with or without
9    *   modification, are permitted provided that the following conditions
10   *   are met:
11   *
12   *     o Redistributions of source code must retain the above copyright
13   *       notice, this list of conditions and the following disclaimer.
14   *
15   *     o Redistributions in binary form must reproduce the above copyright
16   *       notice, this list of conditions and the following disclaimer in
17   *       the documentation and/or other materials provided with the
18   *       distribution.
19   *
20   *   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
21   *   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22   *   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23   *   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
24   *   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25   *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26   *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27   *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28   *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29   *   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30   *
31   *   $JOMC: ImplementationTest.java 4588 2012-06-03 06:01:30Z schulte2005 $
32   *
33   */
34  // </editor-fold>
35  // SECTION-END
36  package org.jomc.ri.test;
37  
38  import java.util.Locale;
39  import org.junit.Test;
40  import static org.junit.Assert.assertNull;
41  
42  // SECTION-START[Documentation]
43  // <editor-fold defaultstate="collapsed" desc=" Generated Documentation ">
44  /**
45   * Implementation {@code <JOMC :: RI :: Tests :: Implementation Test>}.
46   *
47   * <dl>
48   *   <dt><b>Identifier:</b></dt><dd>JOMC :: RI :: Tests :: Implementation Test</dd>
49   *   <dt><b>Name:</b></dt><dd>JOMC :: RI :: Tests :: Implementation Test</dd>
50   *   <dt><b>Specifications:</b></dt>
51   *     <dd>JOMC :: RI :: Tests :: Test Multiton Specification @ 1.3</dd>
52   *     <dd>JOMC :: RI :: Tests :: Test Scope Specification @ 1.3</dd>
53   *     <dd>JOMC :: RI :: Tests :: Test Singleton Specification @ 1.3</dd>
54   *     <dd>JOMC :: RI :: Tests :: Test Specification Many @ 1.3</dd>
55   *     <dd>JOMC :: RI :: Tests :: Test Specification One @ 1.3</dd>
56   *   <dt><b>Abstract:</b></dt><dd>No</dd>
57   *   <dt><b>Final:</b></dt><dd>No</dd>
58   *   <dt><b>Stateless:</b></dt><dd>No</dd>
59   * </dl>
60   *
61   * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
62   * @version 1.3
63   */
64  // </editor-fold>
65  // SECTION-END
66  // SECTION-START[Annotations]
67  // <editor-fold defaultstate="collapsed" desc=" Generated Annotations ">
68  @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
69  // </editor-fold>
70  // SECTION-END
71  public class ImplementationTest
72      implements
73      org.jomc.ri.test.support.TestSpecification,
74      org.jomc.ri.test.support.TestSpecificationOne,
75      org.jomc.ri.test.support.TestSpecificationMany,
76      org.jomc.ri.test.support.TestScopeSpecification
77  {
78      // SECTION-START[TestSpecification]
79      // SECTION-END
80      // SECTION-START[TestScopeSpecification]
81      // SECTION-END
82      // SECTION-START[TestSpecificationMany]
83      // SECTION-END
84      // SECTION-START[TestSpecificationOne]
85      // SECTION-END
86      // SECTION-START[ImplementationTest]
87  
88      private static final int NUM_REQUESTS = 25000;
89  
90      private static final int NUM_RUNS = 2;
91  
92      @Test
93      public final void testBoundMultitons() throws Exception
94      {
95          this.printEstimatedExecutionTime( "BoundMultitons", new Runnable()
96          {
97  
98              public void run()
99              {
100                 getBoundMultitons();
101             }
102 
103         } );
104 
105     }
106 
107     @Test
108     public final void testUnboundMultitons() throws Exception
109     {
110         this.printEstimatedExecutionTime( "UnboundMultitons", new Runnable()
111         {
112 
113             public void run()
114             {
115                 getUnboundMultitons();
116             }
117 
118         } );
119 
120     }
121 
122     @Test
123     public final void testSelectedBoundMultiton() throws Exception
124     {
125         this.printEstimatedExecutionTime( "SelectedBoundMultiton", new Runnable()
126         {
127 
128             public void run()
129             {
130                 getSelectedBoundMultiton();
131             }
132 
133         } );
134 
135     }
136 
137     @Test
138     public final void testSelectedUnboundMultiton() throws Exception
139     {
140         this.printEstimatedExecutionTime( "SelectedUnboundMultiton", new Runnable()
141         {
142 
143             public void run()
144             {
145                 getSelectedUnboundMultiton();
146             }
147 
148         } );
149 
150     }
151 
152     @Test
153     public final void testBoundSingletons() throws Exception
154     {
155         this.printEstimatedExecutionTime( "BoundSingletons", new Runnable()
156         {
157 
158             public void run()
159             {
160                 getBoundSingletons();
161             }
162 
163         } );
164 
165     }
166 
167     @Test
168     public final void testUnboundSingletons() throws Exception
169     {
170         this.printEstimatedExecutionTime( "UnboundSingletons", new Runnable()
171         {
172 
173             public void run()
174             {
175                 getUnboundSingletons();
176             }
177 
178         } );
179 
180     }
181 
182     @Test
183     public final void testSelectedBoundSingleton() throws Exception
184     {
185         this.printEstimatedExecutionTime( "SelectedBoundSingleton", new Runnable()
186         {
187 
188             public void run()
189             {
190                 getSelectedBoundSingleton();
191             }
192 
193         } );
194 
195     }
196 
197     @Test
198     public final void testSelectedUnboundSingleton() throws Exception
199     {
200         this.printEstimatedExecutionTime( "SelectedUnboundSingleton", new Runnable()
201         {
202 
203             public void run()
204             {
205                 getSelectedUnboundSingleton();
206             }
207 
208         } );
209 
210     }
211 
212     @Test
213     public final void testProperties() throws Exception
214     {
215         this.printEstimatedExecutionTime( "TestProperty", new Runnable()
216         {
217 
218             public void run()
219             {
220                 getTestProperty();
221             }
222 
223         } );
224 
225     }
226 
227     @Test
228     public final void testMessages() throws Exception
229     {
230         this.printEstimatedExecutionTime( "TestMessage", new Runnable()
231         {
232 
233             public void run()
234             {
235                 getTestMessage( Locale.getDefault(), "arg" );
236             }
237 
238         } );
239 
240     }
241 
242     @Test
243     public final void testOptionalDependency() throws Exception
244     {
245         assertNull( this.getOptionalLocale() );
246     }
247 
248     @Test
249     public final void testInvoker() throws Exception
250     {
251         this.getInvokerTestSpecification().invoke( "TEST" );
252     }
253 
254     protected void printEstimatedExecutionTime( final String identifier, final Runnable runnable )
255     {
256         long t = 0L;
257 
258         for ( int i = NUM_RUNS - 1; i >= 0; i-- )
259         {
260             final long t0 = System.currentTimeMillis();
261 
262             for ( long l = NUM_REQUESTS - 1; l >= 0; l-- )
263             {
264                 runnable.run();
265             }
266 
267             t += ( System.currentTimeMillis() - t0 );
268         }
269 
270         System.out.println( NUM_REQUESTS + " * '" + identifier + "': ~" + ( t / NUM_RUNS ) + "ms." );
271     }
272 
273     // SECTION-END
274     // SECTION-START[Constructors]
275     // <editor-fold defaultstate="collapsed" desc=" Generated Constructors ">
276     /** Creates a new {@code ImplementationTest} instance. */
277     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
278     public ImplementationTest()
279     {
280         // SECTION-START[Default Constructor]
281         super();
282         // SECTION-END
283     }
284     // </editor-fold>
285     // SECTION-END
286     // SECTION-START[Dependencies]
287     // <editor-fold defaultstate="collapsed" desc=" Generated Dependencies ">
288     /**
289      * Gets the {@code <BoundMultitons>} dependency.
290      * <p>
291      *   This method returns any available object of the {@code <JOMC :: RI :: Tests :: Test Multiton Specification>} specification at specification level 1.3.
292      *   That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.
293      * </p>
294      * <dl>
295      *   <dt><b>Final:</b></dt><dd>No</dd>
296      * </dl>
297      * @return The {@code <BoundMultitons>} dependency.
298      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
299      */
300     @SuppressWarnings("unused")
301     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
302     private org.jomc.ri.test.support.TestSpecification[] getBoundMultitons()
303     {
304         final org.jomc.ri.test.support.TestSpecification[] _d = (org.jomc.ri.test.support.TestSpecification[]) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "BoundMultitons" );
305         assert _d != null : "'BoundMultitons' dependency not found.";
306         return _d;
307     }
308     /**
309      * Gets the {@code <BoundSingletons>} dependency.
310      * <p>
311      *   This method returns any available object of the {@code <JOMC :: RI :: Tests :: Test Singleton Specification>} specification at specification level 1.3.
312      *   That specification applies to {@code <Singleton>} scope. The singleton object is returned whenever requested and bound to this instance.
313      * </p>
314      * <dl>
315      *   <dt><b>Final:</b></dt><dd>No</dd>
316      * </dl>
317      * @return The {@code <BoundSingletons>} dependency.
318      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
319      */
320     @SuppressWarnings("unused")
321     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
322     private org.jomc.ri.test.support.TestSpecification[] getBoundSingletons()
323     {
324         final org.jomc.ri.test.support.TestSpecification[] _d = (org.jomc.ri.test.support.TestSpecification[]) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "BoundSingletons" );
325         assert _d != null : "'BoundSingletons' dependency not found.";
326         return _d;
327     }
328     /**
329      * Gets the {@code <InvokerTestSpecification>} dependency.
330      * <p>
331      *   This method returns the {@code <JOMC :: RI :: Tests :: Invoker Test Implementation>} object of the {@code <JOMC :: RI :: Tests :: Invoker Test Specification>} specification at specification level 1.3.
332      *   That specification applies to {@code <Singleton>} scope. The singleton object is returned whenever requested and bound to this instance.
333      * </p>
334      * <dl>
335      *   <dt><b>Final:</b></dt><dd>No</dd>
336      * </dl>
337      * @return The {@code <InvokerTestSpecification>} dependency.
338      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
339      */
340     @SuppressWarnings("unused")
341     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
342     private org.jomc.ri.test.support.InvokerTestSpecification getInvokerTestSpecification()
343     {
344         final org.jomc.ri.test.support.InvokerTestSpecification _d = (org.jomc.ri.test.support.InvokerTestSpecification) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "InvokerTestSpecification" );
345         assert _d != null : "'InvokerTestSpecification' dependency not found.";
346         return _d;
347     }
348     /**
349      * Gets the {@code <OptionalLocale>} dependency.
350      * <p>
351      *   This method returns the {@code <DOES NOT EXIST>} object of the {@code <java.util.Locale>} specification at specification level 1.1.
352      *   That specification does not apply to any scope. A new object is returned whenever requested.
353      * </p>
354      * <dl>
355      *   <dt><b>Final:</b></dt><dd>No</dd>
356      * </dl>
357      * @return The {@code <OptionalLocale>} dependency.
358      * {@code null} if no object is available.
359      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
360      */
361     @SuppressWarnings("unused")
362     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
363     private java.util.Locale getOptionalLocale()
364     {
365         return (java.util.Locale) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "OptionalLocale" );
366     }
367     /**
368      * Gets the {@code <SelectedBoundMultiton>} dependency.
369      * <p>
370      *   This method returns the {@code <JOMC :: RI :: Tests :: Implementation Test>} object of the {@code <JOMC :: RI :: Tests :: Test Multiton Specification>} specification at specification level 1.3.
371      *   That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.
372      * </p>
373      * <dl>
374      *   <dt><b>Final:</b></dt><dd>No</dd>
375      * </dl>
376      * @return The {@code <SelectedBoundMultiton>} dependency.
377      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
378      */
379     @SuppressWarnings("unused")
380     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
381     private org.jomc.ri.test.support.TestSpecification getSelectedBoundMultiton()
382     {
383         final org.jomc.ri.test.support.TestSpecification _d = (org.jomc.ri.test.support.TestSpecification) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectedBoundMultiton" );
384         assert _d != null : "'SelectedBoundMultiton' dependency not found.";
385         return _d;
386     }
387     /**
388      * Gets the {@code <SelectedBoundSingleton>} dependency.
389      * <p>
390      *   This method returns the {@code <JOMC :: RI :: Tests :: Implementation Test>} object of the {@code <JOMC :: RI :: Tests :: Test Singleton Specification>} specification at specification level 1.3.
391      *   That specification applies to {@code <Singleton>} scope. The singleton object is returned whenever requested and bound to this instance.
392      * </p>
393      * <dl>
394      *   <dt><b>Final:</b></dt><dd>No</dd>
395      * </dl>
396      * @return The {@code <SelectedBoundSingleton>} dependency.
397      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
398      */
399     @SuppressWarnings("unused")
400     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
401     private org.jomc.ri.test.support.TestSpecification getSelectedBoundSingleton()
402     {
403         final org.jomc.ri.test.support.TestSpecification _d = (org.jomc.ri.test.support.TestSpecification) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectedBoundSingleton" );
404         assert _d != null : "'SelectedBoundSingleton' dependency not found.";
405         return _d;
406     }
407     /**
408      * Gets the {@code <SelectedUnboundMultiton>} dependency.
409      * <p>
410      *   This method returns the {@code <JOMC :: RI :: Tests :: Implementation Test>} object of the {@code <JOMC :: RI :: Tests :: Test Multiton Specification>} specification at specification level 1.3.
411      *   That specification does not apply to any scope. A new object is returned whenever requested.
412      * </p>
413      * <dl>
414      *   <dt><b>Final:</b></dt><dd>No</dd>
415      * </dl>
416      * @return The {@code <SelectedUnboundMultiton>} dependency.
417      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
418      */
419     @SuppressWarnings("unused")
420     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
421     private org.jomc.ri.test.support.TestSpecification getSelectedUnboundMultiton()
422     {
423         final org.jomc.ri.test.support.TestSpecification _d = (org.jomc.ri.test.support.TestSpecification) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectedUnboundMultiton" );
424         assert _d != null : "'SelectedUnboundMultiton' dependency not found.";
425         return _d;
426     }
427     /**
428      * Gets the {@code <SelectedUnboundSingleton>} dependency.
429      * <p>
430      *   This method returns the {@code <JOMC :: RI :: Tests :: Implementation Test>} object of the {@code <JOMC :: RI :: Tests :: Test Singleton Specification>} specification at specification level 1.3.
431      *   That specification applies to {@code <Singleton>} scope. The singleton object is returned whenever requested.
432      * </p>
433      * <dl>
434      *   <dt><b>Final:</b></dt><dd>No</dd>
435      * </dl>
436      * @return The {@code <SelectedUnboundSingleton>} dependency.
437      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
438      */
439     @SuppressWarnings("unused")
440     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
441     private org.jomc.ri.test.support.TestSpecification getSelectedUnboundSingleton()
442     {
443         final org.jomc.ri.test.support.TestSpecification _d = (org.jomc.ri.test.support.TestSpecification) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "SelectedUnboundSingleton" );
444         assert _d != null : "'SelectedUnboundSingleton' dependency not found.";
445         return _d;
446     }
447     /**
448      * Gets the {@code <UnboundMultitons>} dependency.
449      * <p>
450      *   This method returns any available object of the {@code <JOMC :: RI :: Tests :: Test Multiton Specification>} specification at specification level 1.3.
451      *   That specification does not apply to any scope. A new object is returned whenever requested.
452      * </p>
453      * <dl>
454      *   <dt><b>Final:</b></dt><dd>No</dd>
455      * </dl>
456      * @return The {@code <UnboundMultitons>} dependency.
457      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
458      */
459     @SuppressWarnings("unused")
460     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
461     private org.jomc.ri.test.support.TestSpecification[] getUnboundMultitons()
462     {
463         final org.jomc.ri.test.support.TestSpecification[] _d = (org.jomc.ri.test.support.TestSpecification[]) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "UnboundMultitons" );
464         assert _d != null : "'UnboundMultitons' dependency not found.";
465         return _d;
466     }
467     /**
468      * Gets the {@code <UnboundSingletons>} dependency.
469      * <p>
470      *   This method returns any available object of the {@code <JOMC :: RI :: Tests :: Test Singleton Specification>} specification at specification level 1.3.
471      *   That specification applies to {@code <Singleton>} scope. The singleton object is returned whenever requested.
472      * </p>
473      * <dl>
474      *   <dt><b>Final:</b></dt><dd>No</dd>
475      * </dl>
476      * @return The {@code <UnboundSingletons>} dependency.
477      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
478      */
479     @SuppressWarnings("unused")
480     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
481     private org.jomc.ri.test.support.TestSpecification[] getUnboundSingletons()
482     {
483         final org.jomc.ri.test.support.TestSpecification[] _d = (org.jomc.ri.test.support.TestSpecification[]) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "UnboundSingletons" );
484         assert _d != null : "'UnboundSingletons' dependency not found.";
485         return _d;
486     }
487     // </editor-fold>
488     // SECTION-END
489     // SECTION-START[Properties]
490     // <editor-fold defaultstate="collapsed" desc=" Generated Properties ">
491     /**
492      * Gets the value of the {@code <testProperty>} property.
493      * <p><dl>
494      *   <dt><b>Final:</b></dt><dd>No</dd>
495      * </dl></p>
496      * @return The value of the {@code <testProperty>} property.
497      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
498      */
499     @SuppressWarnings("unused")
500     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
501     private java.lang.String getTestProperty()
502     {
503         final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "testProperty" );
504         assert _p != null : "'testProperty' property not found.";
505         return _p;
506     }
507     // </editor-fold>
508     // SECTION-END
509     // SECTION-START[Messages]
510     // <editor-fold defaultstate="collapsed" desc=" Generated Messages ">
511     /**
512      * Gets the text of the {@code <testMessage>} message.
513      * <p><dl>
514      *   <dt><b>Languages:</b></dt>
515      *     <dd>English (default)</dd>
516      *   <dt><b>Final:</b></dt><dd>No</dd>
517      * </dl></p>
518      * @param locale The locale of the message to return.
519      * @param testArgument Format argument.
520      * @return The text of the {@code <testMessage>} message for {@code locale}.
521      * @throws org.jomc.ObjectManagementException if getting the message instance fails.
522      */
523     @SuppressWarnings("unused")
524     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.3", comments = "See http://jomc.sourceforge.net/jomc/1.3/jomc-tools-1.3" )
525     private String getTestMessage( final java.util.Locale locale, final java.lang.String testArgument )
526     {
527         final String _m = org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getMessage( this, "testMessage", locale, testArgument );
528         assert _m != null : "'testMessage' message not found.";
529         return _m;
530     }
531     // </editor-fold>
532     // SECTION-END
533 }