1+ package com .flit .protoc .gen .server .undertow ;
2+
3+ import com .flit .protoc .Plugin ;
4+ import com .github .javaparser .JavaParser ;
5+ import com .github .javaparser .ast .CompilationUnit ;
6+ import com .github .javaparser .ast .body .ClassOrInterfaceDeclaration ;
7+ import com .github .javaparser .ast .body .MethodDeclaration ;
8+ import com .google .protobuf .compiler .PluginProtos ;
9+ import org .junit .Test ;
10+
11+ import java .util .Map ;
12+ import java .util .function .Function ;
13+ import java .util .stream .Collectors ;
14+
15+ import static org .junit .Assert .assertEquals ;
16+ import static org .junit .Assert .assertNotNull ;
17+ import static org .junit .Assert .assertTrue ;
18+
19+ public class UndertowGeneratorTest extends BaseGeneratorTest {
20+
21+ @ Test
22+ public void test_Generate () throws Exception {
23+ PluginProtos .CodeGeneratorRequest request = load ("helloworld.undertow.bin" );
24+
25+ Plugin plugin = new Plugin (request );
26+ PluginProtos .CodeGeneratorResponse response = plugin .process ();
27+
28+ assertNotNull (response );
29+ assertEquals (2 , response .getFileCount ());
30+
31+ Map <String , PluginProtos .CodeGeneratorResponse .File > files = response .getFileList ().stream ().collect (Collectors .toMap (
32+ PluginProtos .CodeGeneratorResponse .File ::getName ,
33+ Function .identity ()
34+ ));
35+
36+ assertTrue (files .containsKey ("com/example/helloworld/RpcHelloWorldService.java" ));
37+ assertTrue (files .containsKey ("com/example/helloworld/RpcHelloWorldHandler.java" ));
38+
39+ // ensure it's parseable java
40+ test_Service (files .get ("com/example/helloworld/RpcHelloWorldService.java" ));
41+ test_Handler (files .get ("com/example/helloworld/RpcHelloWorldHandler.java" ));
42+ }
43+
44+ private void test_Handler (PluginProtos .CodeGeneratorResponse .File file ) throws Exception {
45+ CompilationUnit cu = JavaParser .parse (file .getContent ());
46+ cu .getPackageDeclaration ().get ().getName ().asString ();
47+ assertEquals ("com.example.helloworld" , cu .getPackageDeclaration ().get ().getName ().asString ());
48+ assertEquals (1 , cu .getTypes ().size ());
49+
50+ assertTrue (cu .getType (0 ).isPublic ());
51+ assertEquals ("RpcHelloWorldHandler" , cu .getType (0 ).getNameAsString ());
52+ assertEquals ("HttpHandler" , ((ClassOrInterfaceDeclaration )cu .getType (0 )).getImplementedTypes (0 ).getNameAsString ());
53+
54+ Map <String , MethodDeclaration > methods = cu
55+ .findAll (MethodDeclaration .class )
56+ .stream ()
57+ .collect (Collectors .toMap (MethodDeclaration ::getNameAsString , Function .identity ()));
58+
59+ assertEquals (3 , methods .size ());
60+ assertTrue (methods .containsKey ("handleRequest" ));
61+ assertTrue (methods .containsKey ("handleHello" ));
62+ assertTrue (methods .containsKey ("handleHelloAgain" ));
63+
64+ MethodDeclaration handleRequest = methods .get ("handleRequest" );
65+ assertEquals (1 , handleRequest .getParameters ().size ());
66+
67+ assertEquals ("HttpServerExchange" , handleRequest .getParameterByName ("exchange" ).get ().getTypeAsString ());
68+ assertEquals ("void" , handleRequest .getTypeAsString ());
69+ assertEquals ("Exception" , handleRequest .getThrownException (0 ).asString ());
70+
71+ MethodDeclaration handleHello = methods .get ("handleHello" );
72+ assertEquals (1 , handleHello .getParameters ().size ());
73+
74+ assertEquals ("HttpServerExchange" , handleHello .getParameterByName ("exchange" ).get ().getTypeAsString ());
75+ assertEquals ("void" , handleHello .getTypeAsString ());
76+ assertEquals ("Exception" , handleHello .getThrownException (0 ).asString ());
77+
78+
79+ MethodDeclaration handleHelloAgain = methods .get ("handleHelloAgain" );
80+ assertEquals (1 , handleHelloAgain .getParameters ().size ());
81+
82+ assertEquals ("HttpServerExchange" , handleHelloAgain .getParameterByName ("exchange" ).get ().getTypeAsString ());
83+ assertEquals ("void" , handleHelloAgain .getTypeAsString ());
84+ assertEquals ("Exception" , handleHelloAgain .getThrownException (0 ).asString ());
85+
86+ }
87+
88+ private void test_Service (PluginProtos .CodeGeneratorResponse .File file ) throws Exception {
89+ CompilationUnit cu = JavaParser .parse (file .getContent ());
90+ cu .getPackageDeclaration ().get ().getName ().asString ();
91+ assertEquals ("com.example.helloworld" , cu .getPackageDeclaration ().get ().getName ().asString ());
92+ assertEquals (1 , cu .getTypes ().size ());
93+
94+ assertTrue (cu .getType (0 ).isPublic ());
95+ assertEquals ("RpcHelloWorldService" , cu .getType (0 ).getNameAsString ());
96+
97+ Map <String , MethodDeclaration > methods = cu
98+ .findAll (MethodDeclaration .class )
99+ .stream ()
100+ .collect (Collectors .toMap (MethodDeclaration ::getNameAsString , Function .identity ()));
101+
102+ assertEquals (2 , methods .size ());
103+ assertTrue (methods .containsKey ("handleHello" ));
104+ assertTrue (methods .containsKey ("handleHelloAgain" ));
105+
106+ MethodDeclaration handleHello = methods .get ("handleHello" );
107+ assertEquals (1 , handleHello .getParameters ().size ());
108+
109+ assertEquals ("Helloworld.HelloReq" , handleHello .getParameterByName ("in" ).get ().getTypeAsString ());
110+ assertEquals ("Helloworld.HelloResp" , handleHello .getTypeAsString ());
111+
112+ MethodDeclaration handleHelloAgain = methods .get ("handleHelloAgain" );
113+ assertEquals (1 , handleHelloAgain .getParameters ().size ());
114+
115+ assertEquals ("Helloworld.HelloReq" , handleHelloAgain .getParameterByName ("in" ).get ().getTypeAsString ());
116+ assertEquals ("Helloworld.HelloResp" , handleHelloAgain .getTypeAsString ());
117+ }
118+
119+ }
0 commit comments