1 /*
2  * Copyright (c) 2016, 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 8143964
27  * @summary test queries to the JShell that return Streams
28  * @build KullaTesting
29  * @run testng JShellQueryTest
30  */
31 import jdk.jshell.Snippet;
32 import org.testng.annotations.Test;
33 
34 import jdk.jshell.ImportSnippet;
35 import jdk.jshell.MethodSnippet;
36 import jdk.jshell.TypeDeclSnippet;
37 import jdk.jshell.VarSnippet;
38 import static java.util.stream.Collectors.joining;
39 import static org.testng.Assert.assertEquals;
40 
41 @Test
42 public class JShellQueryTest extends KullaTesting {
43 
testSnippets()44     public void testSnippets() {
45         assertStreamMatch(getState().snippets());
46         VarSnippet sx = varKey(assertEval("int x = 5;"));
47         VarSnippet sfoo = varKey(assertEval("String foo;"));
48         MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
49         MethodSnippet svv = methodKey(assertEval("void vv() { }"));
50         assertStreamMatch(getState().snippets(), sx, sfoo, smm, svv);
51         TypeDeclSnippet sc = classKey(assertEval("class C { }"));
52         TypeDeclSnippet si = classKey(assertEval("interface I { }"));
53         ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
54         assertStreamMatch(getState().snippets(), sx, sfoo, smm, svv, sc, si, simp);
55     }
56 
testVars()57     public void testVars() {
58         assertStreamMatch(getState().variables());
59         VarSnippet sx = varKey(assertEval("int x = 5;"));
60         VarSnippet sfoo = varKey(assertEval("String foo;"));
61         MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
62         MethodSnippet svv = methodKey(assertEval("void vv() { }"));
63         assertStreamMatch(getState().variables(), sx, sfoo);
64         TypeDeclSnippet sc = classKey(assertEval("class C { }"));
65         TypeDeclSnippet si = classKey(assertEval("interface I { }"));
66         ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
67         assertStreamMatch(getState().variables(), sx, sfoo);
68     }
69 
testMethods()70     public void testMethods() {
71         assertStreamMatch(getState().methods());
72         VarSnippet sx = varKey(assertEval("int x = 5;"));
73         VarSnippet sfoo = varKey(assertEval("String foo;"));
74         MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
75         MethodSnippet svv = methodKey(assertEval("void vv() { }"));
76         TypeDeclSnippet sc = classKey(assertEval("class C { }"));
77         TypeDeclSnippet si = classKey(assertEval("interface I { }"));
78         ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
79         assertStreamMatch(getState().methods(), smm, svv);
80     }
81 
testTypes()82     public void testTypes() {
83         assertStreamMatch(getState().types());
84         VarSnippet sx = varKey(assertEval("int x = 5;"));
85         VarSnippet sfoo = varKey(assertEval("String foo;"));
86         MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
87         MethodSnippet svv = methodKey(assertEval("void vv() { }"));
88         TypeDeclSnippet sc = classKey(assertEval("class C { }"));
89         TypeDeclSnippet si = classKey(assertEval("interface I { }"));
90         ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
91         assertStreamMatch(getState().types(), sc, si);
92     }
93 
testImports()94     public void testImports() {
95         assertStreamMatch(getState().imports());
96         VarSnippet sx = varKey(assertEval("int x = 5;"));
97         VarSnippet sfoo = varKey(assertEval("String foo;"));
98         MethodSnippet smm = methodKey(assertEval("int mm() { return 6; }"));
99         MethodSnippet svv = methodKey(assertEval("void vv() { }"));
100         TypeDeclSnippet sc = classKey(assertEval("class C { }"));
101         TypeDeclSnippet si = classKey(assertEval("interface I { }"));
102         ImportSnippet simp = importKey(assertEval("import java.lang.reflect.*;"));
103         assertStreamMatch(getState().imports(), simp);
104     }
105 
testDiagnostics()106     public void testDiagnostics() {
107         Snippet sx = varKey(assertEval("int x = 5;"));
108         assertStreamMatch(getState().diagnostics(sx));
109         Snippet broken = methodKey(assertEvalFail("int m() { blah(); return \"hello\"; }"));
110         String res = getState().diagnostics(broken)
111                 .map(d -> d.getCode())
112                 .collect(joining("+"));
113         assertEquals(res, "compiler.err.cant.resolve.location.args+compiler.err.prob.found.req");
114     }
115 
testUnresolvedDependencies()116     public void testUnresolvedDependencies() {
117         VarSnippet sx = varKey(assertEval("int x = 5;"));
118         assertStreamMatch(getState().unresolvedDependencies(sx));
119         MethodSnippet unr = methodKey(getState().eval("void uu() { baz(); zips(); }"));
120         assertStreamMatch(getState().unresolvedDependencies(unr), "method zips()", "method baz()");
121     }
122 }
123