1 /*
2  * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 /**
25  * @test
26  * @bug      8002157
27  * @author   sogoel
28  * @summary  Positive combo test for use of Inherited on baseAnno/containerAnno
29  * @build    Helper
30  * @compile  InheritedAnnoCombo.java
31  * @run main InheritedAnnoCombo
32  */
33 
34 import javax.tools.DiagnosticCollector;
35 import javax.tools.JavaFileObject;
36 
37 /*
38  * Generate valid test src for the use of @Inherited on container anno
39  * or on both base anno and container anno. Both test src should compile.
40  * Repeating annotations used only on class for these generated test src.
41  */
42 
43 public class InheritedAnnoCombo extends Helper {
44     static int errors = 0;
45     enum TestCases {
46         InheritedonBothAnno(true),
47         InheritedonBase(true);
48 
TestCases(boolean compile)49         TestCases(boolean compile) {
50             this.compile = compile;
51         }
52 
53         boolean compile;
shouldCompile()54         boolean shouldCompile() {
55             return compile;
56         }
57     }
58 
main(String[] args)59     public static void main(String[] args) throws Exception {
60         new InheritedAnnoCombo().runTest();
61     }
62 
runTest()63     public void runTest() throws Exception {
64         int testCtr = 0;
65         boolean ok = false;
66 
67         // Create test source content
68         for (TestCases className : TestCases.values()) {
69             testCtr++;
70             String contents = getContent(className.toString());
71 
72             // Compile the generated code
73             DiagnosticCollector<JavaFileObject> diagnostics =
74                     new DiagnosticCollector<JavaFileObject>();
75             ok = compileCode(className.toString(), contents, diagnostics);
76 
77             if (!ok) {
78                 error("Class="+ className +" did not compile as expected", contents);
79             } else {
80                 System.out.println("Test passed for className: " + className);
81             }
82         }
83 
84         System.out.println("Total number of tests run: " + testCtr);
85         System.out.println("Total number of errors: " + errors);
86 
87         if (errors > 0)
88             throw new Exception(errors + " errors found");
89     }
90 
getContent(String className)91     private String getContent(String className) {
92 
93         StringBuilder annoData = new StringBuilder();
94         switch(className) {
95         case "InheritedonBothAnno":
96             annoData.append(Helper.ContentVars.INHERITED.getVal())
97             .append(Helper.ContentVars.CONTAINER.getVal())
98             .append(Helper.ContentVars.INHERITED.getVal())
99             .append(Helper.ContentVars.REPEATABLE.getVal())
100             .append(Helper.ContentVars.BASE.getVal());
101             break;
102         case "InheritedonBase":
103             annoData.append(Helper.ContentVars.INHERITED.getVal())
104             .append(Helper.ContentVars.CONTAINER.getVal())
105             .append(Helper.ContentVars.REPEATABLE.getVal())
106             .append(Helper.ContentVars.BASE.getVal());
107             break;
108         }
109 
110         String contents = Helper.ContentVars.IMPORTCONTAINERSTMTS.getVal()
111                           + Helper.ContentVars.IMPORTINHERITED.getVal()
112                           + annoData
113                           + Helper.ContentVars.REPEATABLEANNO.getVal()
114                           + "\nclass "+ className + "{}";
115         return contents;
116     }
117 
error(String msg, String... contents)118     private void error(String msg, String... contents) {
119         System.out.println("error: " + msg);
120         errors++;
121         if (contents.length == 1) {
122             System.out.println("Contents = " + contents[0]);
123         }
124     }
125 }
126 
127