ensure bounds are promoted on derived type otherwise bounds from super could appear...
[idea/community.git] / java / java-tests / testSrc / com / intellij / codeInsight / daemon / lambda / GenericsHighlighting8Test.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.codeInsight.daemon.lambda;
17
18 import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase;
19 import com.intellij.codeInspection.LocalInspectionTool;
20 import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection;
21 import com.intellij.codeInspection.uncheckedWarnings.UncheckedWarningLocalInspection;
22 import com.intellij.codeInspection.unusedImport.UnusedImportLocalInspection;
23 import com.intellij.openapi.projectRoots.JavaSdkVersion;
24 import com.intellij.openapi.roots.LanguageLevelProjectExtension;
25 import com.intellij.pom.java.LanguageLevel;
26 import com.intellij.testFramework.IdeaTestUtil;
27 import org.jetbrains.annotations.NonNls;
28 import org.jetbrains.annotations.NotNull;
29
30 //javac option to dump bounds: -XDdumpInferenceGraphsTo=
31 public class GenericsHighlighting8Test extends LightDaemonAnalyzerTestCase {
32   @NonNls private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/genericsHighlighting8";
33
34   @Override
35   protected void setUp() throws Exception {
36     super.setUp();
37     enableInspectionTool(new UnusedDeclarationInspection());
38   }
39
40   @NotNull
41   @Override
42   protected LocalInspectionTool[] configureLocalInspectionTools() {
43     return new LocalInspectionTool[]{new UncheckedWarningLocalInspection(), new UnusedImportLocalInspection()};
44   }
45
46   public void testReferenceTypeParams() {
47     doTest();
48   }
49   public void testTypeParameterBoundsList() {
50     doTest();
51   }
52   public void testClassInheritance() {
53     doTest();
54   }
55   public void testTypeInference() {
56     doTest();
57   }
58   public void testRaw() {
59     doTest(true);
60   }
61   public void testExceptions() {
62     doTest();
63   }
64   public void testExplicitMethodParameters() {
65     doTest();
66   }
67   public void testInferenceWithBounds() {
68     doTest();
69   }
70   public void testInferenceWithSuperBounds() {
71     doTest();
72   }
73   public void testInferenceWithUpperBoundPromotion() {
74     doTest();
75   }
76   public void testVariance() {
77     doTest();
78   }
79   public void testForeachTypes() {
80     doTest();
81   }
82   public void testRawOverridingMethods() {
83     doTest();
84   }    
85   public void testAutoboxing() {
86     doTest();
87   }                
88   public void testAutoboxingMethods() {
89     doTest();
90   }                                             
91   public void testAutoboxingConstructors() {
92     doTest();
93   }                                      
94   public void testEnumWithAbstractMethods() {
95     doTest();
96   }                                   
97   public void testEnum() { doTest(); }
98   public void testEnum56239() {
99     doTest();
100   }
101   public void testSameErasure() {
102     doTest();
103   }          
104   public void testMethods() {
105     doTest();
106   }            
107   public void testFields() {
108     doTest();
109   }           
110   public void testStaticImports() {
111     doTest(true);
112   }   
113   public void testUncheckedCasts() {
114     doTest(true);
115   }
116   public void testUncheckedOverriding() {
117     doTest(true);
118   }
119   public void testWildcardTypes() {
120     doTest(true);
121   }
122   public void testConvertibleTypes() {
123     doTest(true);
124   }
125   public void testIntersectionTypes() {
126     doTest(true);
127   }
128   public void testVarargs() {
129     doTest(true);
130   }
131   public void testTypeArgsOnRaw() {
132     doTest();
133   }          
134   public void testConditionalExpression() {
135     doTest();
136   }  
137   public void testUnused() {
138     doTest(true);
139   }            
140   public void testIDEADEV7337() {
141     doTest(true);
142   }      
143   public void testIDEADEV10459() {
144     doTest(true);
145   }     
146   public void testIDEADEV12951() {
147     doTest(true);
148   }     
149   public void testIDEADEV13011() {
150     doTest(true);
151   }     
152   public void testIDEADEV14006() {
153     doTest(true);
154   }     
155   public void testIDEADEV14103() {
156     doTest(true);
157   }        
158   public void testIDEADEV15534() {
159     doTest(true);
160   }      
161   public void testIDEADEV23157() {
162     doTest(true);
163   }    
164   public void testIDEADEV24166() {
165     doTest(true);
166   }  
167   public void testIDEADEV57343() {
168     doTest();
169   }
170   public void testSOE() {
171     doTest(true);
172   }        
173   public void testGenericExtendException() {
174     doTest();
175   }  
176   public void testSameErasureDifferentReturnTypes() {
177     doTest();
178   }
179   public void testDeepConflictingReturnTypes() {
180     doTest();
181   }  
182   public void testInheritFromTypeParameter() {
183     doTest();
184   }     
185   public void testAnnotationsAsPartOfModifierList() {
186     doTest();
187   } 
188   public void testImplementAnnotation() {
189     doTest();
190   }      
191   public void testOverrideAtLanguageLevel6() {
192     doTest();
193   }    
194   public void testSuperMethodCallWithErasure() {
195     doTest();
196   } 
197   public void testWildcardCastConversion() {
198     doTest();
199   }    
200   public void testTypeWithinItsWildcardBound() {
201     doTest();
202   } 
203   public void testMethodSignatureEquality() {
204     doTest();
205   }    
206   public void testInnerClassRef() {
207     doTest();
208   }             
209   public void testPrivateInnerClassRef() {
210     doTest();
211   }      
212   public void testWideningCastToTypeParam() {
213     doTest();
214   }     
215   public void testCapturedWildcardAssignments() {
216     doTest();
217   }        
218   public void testTypeParameterBoundVisibility() {
219     doTest();
220   }
221   public void testUncheckedWarningsLevel6() {
222     doTest(true);
223   }
224   public void testIDEA77991() {
225     doTest();
226   }                
227   public void testIDEA80386() {
228     doTest();
229   }               
230   public void testIDEA66311() {
231     doTest();
232   }  
233   public void testIDEA67672() {
234     doTest();
235   }  
236   public void testIDEA88895() {
237     doTest();
238   }  
239   public void testIDEA67667() {
240     doTest();
241   }  
242   public void testIDEA66311_16() {
243     doTest();
244   }
245   public void testIDEA76283() {
246     doTest();
247   }
248   public void testIDEA74899() {
249     doTest();
250   }  
251   public void testIDEA63291() {
252     doTest();
253   }  
254   public void testIDEA72912() {
255     doTest();
256   }         
257   public void testIllegalGenericTypeInInstanceof() {
258     doTest();
259   } 
260   public void testIDEA57339() {
261     doTest();
262   } 
263   public void testIDEA57340() {
264     doTest();
265   }
266   public void testIDEA89771() {
267     doTest();
268   }
269   public void testIDEA89801() {
270     doTest();
271   }
272   public void testIDEA67681() {
273     doTest();
274   }
275   public void testIDEA67599() {
276     doTest();
277   }
278   public void testIDEA57668() {
279     doTest();
280   }
281   public void testIDEA57667() {
282     doTest();
283   }
284   public void testIDEA57650() {
285     doTest();
286   }
287   public void testIDEA57378() {
288     doTest();
289   }
290   public void testIDEA57557() {
291     doTest();
292   }
293   public void testIDEA57563() {
294     doTest();
295   }
296   public void testIDEA57275() {
297     doTest();
298   }
299   public void testIDEA57533() {
300     doTest();
301   }
302   public void testIDEA57509() {
303     doTest();
304   }
305   public void testIDEA57410() {
306     doTest();
307   }
308   public void testIDEA57411() {
309     doTest();
310   }
311   public void testIDEA57484() {
312     doTest();
313   }
314   public void testIDEA57485() {
315     doTest();
316   }
317   public void testIDEA57486() {
318     doTest();
319   }
320
321   //compiles with java 6
322   public void _testIDEA57492() {
323     doTest();
324   }
325   
326   //compiles with java 6
327   public void _testIDEA57493() {
328     doTest();
329   }
330   public void testIDEA57495() {
331     doTest();
332   }
333   public void testIDEA57494() {
334     doTest();
335   }
336   public void testIDEA57496() {
337     doTest();
338   }
339   public void testIDEA57264() {
340     doTest();
341   }
342   public void testIDEA57315() {
343     doTest();
344   }
345   public void testIDEA57346() {
346     doTest();
347   }
348   public void testIDEA57284() {
349     doTest();
350   }
351   public void testIDEA57286() {
352     doTest();
353   }
354   public void testIDEA57307() {
355     doTest(true);
356   }
357   public void testIDEA57308() {
358     doTest();
359   }
360   public void testIDEA57310() {
361     doTest();
362   }
363   public void testIDEA57311() {
364     doTest();
365   }
366   public void testIDEA57309() {
367     doTest();
368   }
369   public void testIDEA90802() {
370     doTest();
371   }
372   public void testIDEA70370() {
373     doTest(true);
374   }
375   public void testInaccessibleThroughWildcard() {
376     doTest();
377   }
378   public void testInconvertibleTypes() {
379     doTest();
380   }
381   public void testIncompatibleReturnType() {
382     doTest();
383   }
384   public void testContinueInferenceAfterFirstRawResult() {
385     doTest();
386   }
387   public void testDoNotAcceptLowerBoundIfRaw() {
388     doTest();
389   }
390   public void testStaticOverride() {
391     doTest();
392   }
393   public void testTypeArgumentsGivenOnRawType() {
394     doTest();
395   }
396   public void testSelectFromTypeParameter() {
397     doTest();
398   }
399   public void testTypeArgumentsGivenOnAnonymousClassCreation() {
400     doTest();
401   }
402
403   public void testIDEA94011() {
404     doTest();
405   }
406   public void testDifferentTypeParamsInOverloadedMethods() {
407     doTest(true);
408   }
409
410   public void testIDEA91626() {
411     doTest(true);
412   }
413   public void testIDEA92022() {
414     doTest();
415   }
416   public void testRawOnParameterized() {
417     doTest();
418   }
419   public void testFailedInferenceWithBoxing() {
420     doTest();
421   }
422   public void testFixedFailedInferenceWithBoxing() {
423     doTest();
424   }
425   public void testInferenceWithBoxingCovariant() {
426     doTest();
427   }
428   public void testSuperWildcardIsNotWithinItsBound() {
429     doTest();
430   }
431   public void testSpecificReturnType() {
432     doTest();
433   }
434   public void testParameterizedParameterBound() {
435     doTest();
436   }
437   public void testInstanceClassInStaticContextAccess() {
438     doTest();
439   }
440   public void testFlattenIntersectionType() {
441     doTest();
442   }
443   public void testIDEA97276() {
444     doTest();
445   }
446   public void testWildcardsBoundsIntersection() {
447     doTest();
448   }
449   public void testOverrideWithMoreSpecificReturn() {
450     doTest();
451   }
452   public void testIDEA97888() {
453     doTest();
454   }
455   public void testMethodCallParamsOnRawType() {
456     doTest();
457   }
458   public void testIDEA98421() {
459     doTest();
460   }
461   public void testErasureTypeParameterBound() {
462     doTest();
463   }
464   public void testThisAsAccessObject() {
465     doTest();
466   }
467   public void testIDEA67861() {
468     doTest();
469   }
470   public void testIDEA67597() {
471     doTest();
472   }
473   public void testIDEA57539() {
474     doTest();
475   }
476   public void testIDEA67570() {
477     doTest();
478   }
479   public void testIDEA99061() {
480     doTest();
481   }
482   public void testIDEA99347() {
483     doTest();
484   }
485   public void testIDEA86875() {
486     doTest();
487   }
488   public void testIDEA103760(){
489     doTest();
490   }
491   public void testIDEA105846(){
492     doTest();
493   }
494   public void testIDEA105695(){
495     doTest();
496   }
497   public void testIDEA104992(){
498     doTest();
499   }
500   public void testIDEA57446(){
501     doTest();
502   }
503   public void testIDEA67677(){
504     doTest();
505   }
506   public void testIDEA67798(){
507     doTest();
508   }
509   public void testIDEA57534(){
510     doTest();
511   }
512   public void testIDEA57482(){
513     doTest();
514   }
515   public void testIDEA67577(){
516     doTest();
517   }
518   public void testIDEA57413(){
519     doTest();
520   }
521   public void testIDEA57265(){
522     doTest();
523   }
524   public void testIDEA57271(){
525     doTest();
526   }
527   public void testIDEA57272(){
528     doTest();
529   }
530   public void testIDEA57285(){
531     doTest();
532   }
533   public void testIDEA65066(){
534     doTest();
535   }
536   public void testIDEA67998(){
537     doTest();
538   }
539   public void testIDEA18425(){
540     doTest();
541   }
542   public void testIDEA27080(){
543     doTest();
544   }
545   public void testIDEA22079(){
546     doTest();
547   }
548   public void testIDEA21602(){
549     doTest();
550   }
551   public void testIDEA21602_7(){
552     doTest();
553   }
554
555   public void testIDEA21597() throws Exception {
556     doTest();
557   }
558   public void testIDEA20573() throws Exception {
559     doTest();
560   }
561   public void testIDEA20244() throws Exception {
562     doTest();
563   }
564   public void testIDEA22005() throws Exception {
565     doTest();
566   }
567   public void testIDEA57259() throws Exception {
568     doTest();
569   }
570   public void testIDEA107957() throws Exception {
571     doTest();
572   }
573   public void testIDEA109875() throws Exception {
574     doTest();
575   }
576   public void testIDEA106964() throws Exception {
577     doTest();
578   }
579   public void testIDEA107782() throws Exception {
580     doTest();
581   }
582   public void testInheritedWithDifferentArgsInTypeParams() throws Exception {
583     doTest();
584   }
585   public void testIllegalForwardReferenceInTypeParameterDefinition() throws Exception {
586     doTest();
587   }
588
589   public void testIDEA57877() throws Exception {
590     doTest();
591   }
592   public void testIDEA110568() throws Exception {
593     doTest();
594   }
595   public void testSelfRef() throws Exception {
596     doTest();
597   }
598   public void testTypeParamsCyclicInference() throws Exception {
599     doTest();
600   }
601   public void testCaptureTopLevelWildcardsForConditionalExpression() throws Exception {
602     doTest();
603   }
604   public void testGenericsOverrideMethodInRawInheritor() throws Exception {
605     doTest();
606   }
607
608   public void testIDEA107654() throws Exception {
609     doTest();
610   }
611
612   public void testIDEA55510() throws Exception {
613     doTest();
614   }
615
616   public void testIDEA27185(){
617     doTest();
618   }
619   public void testIDEA67571(){
620     doTest();
621   }
622   public void testTypeArgumentsOnRawType(){
623     doTest();
624   }
625
626   public void testTypeArgumentsOnRawType17(){
627     doTest();
628   }
629
630   public void testWildcardsOnRawTypes() {
631     doTest();
632   }
633   public void testDisableWithinBoundsCheckForSuperWildcards() {
634     doTest();
635   }
636
637   public void testIDEA108287() throws Exception {
638     doTest();
639   }
640
641   public void testIDEA77128() throws Exception {
642     doTest();
643   }
644
645   public void testDisableCastingToNestedWildcards() throws Exception {
646     doTest();
647   }
648
649   public void testBooleanInferenceFromIfCondition() throws Exception {
650     doTest();
651   }
652
653   public void testMethodCallOnRawTypesExtended() throws Exception {
654     doTest();
655   }
656
657   public void testIDEA104100() {
658     doTest();
659   }
660   public void testIDEA104160() {
661     doTest();
662   }
663   public void testSOEInLeastUpperClass() {
664     doTest();
665   }
666
667   public void testIDEA57334() {
668     doTest();
669   }
670
671   public void testIDEA57325() {
672     doTest();
673   }
674   public void testIDEA67835() {
675     doTest();
676   }
677   public void testIDEA67744() {
678     doTest();
679   }
680   public void testIDEA67682() {
681     doTest();
682   }
683   public void testIDEA57391() {
684     doTest();
685   }
686   public void testIDEA110869() {
687     doTest();
688   }
689   public void testIDEA110947() { doTest(false); }
690   public void testIDEA112122() {
691     doTest();
692   }
693   public void testNoInferenceFromTypeCast() {
694     doTest();
695   }
696   public void testCaptureWildcardsInTypeCasts() {
697     doTest();
698   }
699   public void testIDEA111085() {
700     doTest();
701   }
702   public void testIDEA109556() {
703     doTest();
704   }
705   public void testIDEA107440() {
706     doTest();
707   }
708   public void testIDEA57289() {
709     doTest();
710   }
711   public void testIDEA57439() {
712     doTest();
713   }
714   public void testIDEA57312() {
715     doTest();
716   }
717   public void testIDEA67865() {
718     doTest();
719   }
720   public void testBoxingSpecific() {
721     doTest();
722   }
723   public void testIDEA67843() {    //fixme need to change test
724     doTest();
725   }
726   public void testAmbiguousTypeParamVsConcrete() {
727     doTest();
728   }
729   public void testRawAssignments() throws Exception {
730     doTest();
731   }
732   public void testIDEA87860() throws Exception {
733     doTest();
734   }
735
736   public void testIDEA114797() throws Exception {
737     doTest();
738   }
739
740   public void testCastToIntersectionType() throws Exception {
741     doTest();
742   }
743
744   public void testCastToIntersection() throws Exception {
745     doTest();
746   }
747
748   public void testIDEA122401() throws Exception {
749     doTest();
750   }
751
752   public void testCaptureInsideNestedCalls() throws Exception {
753     doTest();
754   }
755
756   public void testSuperWildcardWithBoundPromotion() { doTest();}
757
758   public void testErasure() throws Exception { doTest(); }
759
760   public void testWildcardBoundsCombination() throws Exception {
761     doTest();
762   }
763
764   public void testIDEA128333() throws Exception {
765     doTest();
766   }
767
768   public void testIDEA78402() { doTest(); }
769
770   public void testUncheckedWarningInsideLambdaReturnStatement() throws Exception {
771     doTest(true);
772   }
773
774   public void testInferredParameterInBoundsInRecursiveGenerics() {
775     doTest(false);
776   }
777
778   public void testSuperWildcardCapturedSuperExtendsWildcardCapturedExtends() throws Exception {
779     doTest(false);
780   }
781
782   public void testRejectContradictingEqualsBounds() throws Exception {
783     doTest(false);
784   }
785
786   public void testRejectEqualsBoundsContradictingLowerBound() throws Exception {
787     doTest(false);
788   }
789
790   public void testSuperInterfaceMethodCalledByMatterOfInterface() throws Exception {
791     doTest(false);
792   }
793
794   private void doTest() {
795     doTest(false);
796   }
797
798    private void doTest(boolean warnings) {
799      LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_8);
800      IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_8, getModule(), getTestRootDisposable());
801      doTest(BASE_PATH + "/" + getTestName(false) + ".java", warnings, false);
802    }
803
804
805   public void testIDEA67584() throws Exception {
806     doTest();
807   }
808   public void testIDEA113225() throws Exception {
809     doTest();
810   }
811
812   public void testIDEA139069() throws Exception {
813     doTest();
814   }
815
816   public void testIDEA67745() throws Exception {
817     doTest();
818   }
819
820   public void testIDEA57313() throws Exception {
821     doTest();
822   }
823
824   public void testIDEA57387() throws Exception {
825     doTest();
826   }
827
828   public void testIDEA57314() throws Exception {
829     doTest();
830   }
831
832   public void testIDEA57322() throws Exception {
833     doTest();
834   }
835
836   public void testIDEA57362() throws Exception {
837     doTest();
838   }
839
840   public void testIDEA57320() throws Exception {
841     doTest();
842   }
843
844   public void testIDEA139090() throws Exception {
845     doTest();
846   }
847
848   public void testIDEA57502() throws Exception {
849     doTest();
850   }
851
852   public void testIDEA67746() throws Exception {
853     doTest();
854   }
855
856   public void testIDEA67592() throws Exception {
857     doTest();
858   }
859
860   public void testIDEA93713() throws Exception {
861     doTest();
862   }
863
864   public void testIDEA107713() throws Exception {
865     doTest();
866   }
867
868   public void testExceptionCollectionWithLambda() throws Exception {
869     doTest();
870   }
871
872   public void testUncheckedWarningsWhenInferredTypeLeadsToRawRoGenericAssignment() throws Exception {
873     doTest(true);
874   }
875
876   public void testExpectedTypeBasedOnArrayCreationWithoutExplicitType() throws Exception {
877     doTest();
878   }
879
880   public void testIDEA148348() throws Exception {
881     doTest();
882   }
883
884   public void testIDEA148361() throws Exception {
885     doTest();
886   }
887
888   public void testIDEA134059() throws Exception {
889     doTest();
890   }
891
892   public void testIDEA139222() throws Exception {
893     doTest();
894   }
895
896   public void testIDEA139156() throws Exception {
897     doTest();
898   }
899
900   public void testIDEA139169() throws Exception {
901     doTest();
902   }
903
904   public void testIDEA131686() throws Exception {
905     doTest();
906   }
907
908   public void testIDEA56754() throws Exception {
909     doTest();
910   }
911
912   public void testAccessClassForWildcardCaptureType() throws Exception {
913     doTest();
914   }
915
916   public void testDistinguishTypeArgs() throws Exception {
917     doTest();
918   }
919
920   public void testRecursiveCapturedWildcardTypes() throws Exception {
921     doTest();
922   }
923
924   public void testRecursiveCapturedWildcardTypesIDEA139167() throws Exception {
925     doTest();
926   }
927   
928   public void testRecursiveCapturedWildcardTypesIDEA139157() throws Exception {
929     doTest();
930   }
931
932   public void testIDEA146897() throws Exception {
933     doTest();
934   }
935
936   public void testIDEA139096() throws Exception {
937     doTest();
938   }
939
940   public void testCastingCapturedWildcardToPrimitive() throws Exception {
941     doTest();
942   }
943
944   public void testCastingCapturedWildcardToArray() throws Exception {
945     doTest();
946   }
947
948   public void testCheckUncheckedAssignmentDuringVariablesResaolution() throws Exception {
949     doTest(true);
950   }
951
952   public void testRetrieveInferenceErrorsFromContainingCallsIfCurrentDoesNotProvideAny() throws Exception {
953     doTest();
954   }
955
956   public void testForeachOverCapturedWildcardWithCollectionUpperBound() throws Exception {
957     doTest();
958   }
959
960   public void testCapturedWildcardWithPrimitiveTypesChecks() throws Exception {
961     doTest();
962   }
963
964   public void testCapturedWildcardPackageLocalAccess() throws Exception {
965     doTest();
966   }
967
968   public void testCapturedWildcardPassedThroughMethodCallChain() throws Exception {
969     doTest();
970   }
971
972   public void testIDEA152179() throws Exception {
973     doTest();
974   }
975
976   public void testLooseInvocationContextForProperPrimitiveTypes() throws Exception {
977     doTest();
978   }
979
980   public void testUncheckedWarningsInsideIncorporationPhase() throws Exception {
981     doTest();
982   }
983
984   public void testUnifiedSubstitutorUpInTheHierarchy() throws Exception {
985     doTest();
986   }
987
988   public void testNestedCaptures() throws Exception {
989     doTest();
990   }
991
992   public void testErasureOfReturnTypeOfNonGenericMethod() throws Exception {
993     doTest();
994   }
995
996   public void testUncheckedCastWithCapturedWildcards() throws Exception {
997     doTest(true);
998   }
999
1000   public void testReifiableCapturedWildcards() throws Exception {
1001     doTest(true);
1002   }
1003
1004   public void testMembersContainedInCapturedWildcardType() throws Exception {
1005     doTest();
1006   }
1007
1008   public void testTypeParameterBoundsWithSubstitutionWhenMethodHierarchyIsChecked() throws Exception {
1009     doTest();
1010   }
1011
1012   public void testBoundsPromotionForDerivedType() throws Exception {
1013     doTest();
1014   }
1015 }