1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.bean.openapi3;
18
19 import static org.apache.juneau.TestUtils.*;
20 import static org.apache.juneau.bean.openapi3.OpenApiBuilder.*;
21 import static org.junit.jupiter.api.Assertions.*;
22
23 import java.net.*;
24
25 import org.apache.juneau.*;
26 import org.junit.jupiter.api.*;
27
28
29
30
31 class Info_Test extends TestBase {
32
33 @Nested class A_basicTests extends TestBase {
34
35 private static final BeanTester<Info> TESTER =
36 testBean(
37 bean()
38 .setContact(contact().setEmail("a1").setName("a2").setUrl(URI.create("a3")))
39 .setDescription("b")
40 .setLicense(license().setName("c1").setUrl(URI.create("c2")))
41 .setTermsOfService("d")
42 .setTitle("e")
43 .setVersion("f")
44 )
45 .props("contact{email,name,url},description,license{name,url},termsOfService,title,version")
46 .vals("{a1,a2,a3},b,{c1,c2},d,e,f")
47 .json("{contact:{email:'a1',name:'a2',url:'a3'},description:'b',license:{name:'c1',url:'c2'},termsOfService:'d',title:'e',version:'f'}")
48 .string("{'contact':{'email':'a1','name':'a2','url':'a3'},'description':'b','license':{'name':'c1','url':'c2'},'termsOfService':'d','title':'e','version':'f'}".replace('\'','"'))
49 ;
50
51 @Test void a01_gettersAndSetters() {
52 TESTER.assertGettersAndSetters();
53 }
54
55 @Test void a02_copy() {
56 TESTER.assertCopy();
57 }
58
59 @Test void a03_toJson() {
60 TESTER.assertToJson();
61 }
62
63 @Test void a04_fromJson() {
64 TESTER.assertFromJson();
65 }
66
67 @Test void a05_roundTrip() {
68 TESTER.assertRoundTrip();
69 }
70
71 @Test void a06_toString() {
72 TESTER.assertToString();
73 }
74
75 @Test void a07_keySet() {
76 assertList(TESTER.bean().keySet(), "contact", "description", "license", "termsOfService", "title", "version");
77 }
78
79 @Test void a08_nullParameters() {
80 var x = bean();
81 assertThrows(IllegalArgumentException.class, () -> x.get(null, String.class));
82 assertThrows(IllegalArgumentException.class, () -> x.set(null, "value"));
83 }
84
85 @Test void a09_asMap() {
86 assertBean(
87 bean()
88 .setTitle("a")
89 .set("x1", "x1a")
90 .asMap(),
91 "title,x1",
92 "a,x1a"
93 );
94 }
95
96 @Test void a10_extraKeys() {
97 var x = bean().set("x1", "x1a").set("x2", "x2a");
98 assertList(x.extraKeys(), "x1", "x2");
99 assertEmpty(bean().extraKeys());
100 }
101
102 @Test void a11_strictMode() {
103 assertThrows(RuntimeException.class, () -> bean().strict().set("foo", "bar"));
104 assertDoesNotThrow(() -> bean().set("foo", "bar"));
105
106 assertFalse(bean().isStrict());
107 assertTrue(bean().strict().isStrict());
108 assertFalse(bean().strict(false).isStrict());
109 }
110 }
111
112 @Nested class B_emptyTests extends TestBase {
113
114 private static final BeanTester<Info> TESTER =
115 testBean(bean())
116 .props("title,version,description,termsOfService,contact,license")
117 .vals("<null>,<null>,<null>,<null>,<null>,<null>")
118 .json("{}")
119 .string("{}")
120 ;
121
122 @Test void b01_gettersAndSetters() {
123 TESTER.assertGettersAndSetters();
124 }
125
126 @Test void b02_copy() {
127 TESTER.assertCopy();
128 }
129
130 @Test void b03_toJson() {
131 TESTER.assertToJson();
132 }
133
134 @Test void b04_fromJson() {
135 TESTER.assertFromJson();
136 }
137
138 @Test void b05_roundTrip() {
139 TESTER.assertRoundTrip();
140 }
141
142 @Test void b06_toString() {
143 TESTER.assertToString();
144 }
145
146 @Test void b07_keySet() {
147 assertEmpty(TESTER.bean().keySet());
148 }
149 }
150
151 @Nested class C_extraProperties extends TestBase {
152 private static final BeanTester<Info> TESTER =
153 testBean(
154 bean()
155 .set("contact", contact().setName("a"))
156 .set("description", "b")
157 .set("license", license().setName("c"))
158 .set("termsOfService", "d")
159 .set("title", "e")
160 .set("version", "f")
161 .set("x1", "x1a")
162 .set("x2", null)
163 )
164 .props("contact{name},description,license{name},termsOfService,title,version,x1,x2")
165 .vals("{a},b,{c},d,e,f,x1a,<null>")
166 .json("{contact:{name:'a'},description:'b',license:{name:'c'},termsOfService:'d',title:'e',version:'f',x1:'x1a'}")
167 .string("{'contact':{'name':'a'},'description':'b','license':{'name':'c'},'termsOfService':'d','title':'e','version':'f','x1':'x1a'}".replace('\'', '"'))
168 ;
169
170 @Test void c01_gettersAndSetters() {
171 TESTER.assertGettersAndSetters();
172 }
173
174 @Test void c02_copy() {
175 TESTER.assertCopy();
176 }
177
178 @Test void c03_toJson() {
179 TESTER.assertToJson();
180 }
181
182 @Test void c04_fromJson() {
183 TESTER.assertFromJson();
184 }
185
186 @Test void c05_roundTrip() {
187 TESTER.assertRoundTrip();
188 }
189
190 @Test void c06_toString() {
191 TESTER.assertToString();
192 }
193
194 @Test void c07_keySet() {
195 assertList(TESTER.bean().keySet(), "contact", "description", "license", "termsOfService", "title", "version", "x1", "x2");
196 }
197
198 @Test void c08_get() {
199 assertMapped(
200 TESTER.bean(), (obj,prop) -> obj.get(prop, Object.class),
201 "contact{name},description,license{name},termsOfService,title,version,x1,x2",
202 "{a},b,{c},d,e,f,x1a,<null>"
203 );
204 }
205
206 @Test void c09_getTypes() {
207 assertMapped(
208 TESTER.bean(), (obj,prop) -> simpleClassNameOf(obj.get(prop, Object.class)),
209 "contact,description,license,termsOfService,title,version,x1,x2",
210 "Contact,String,License,String,String,String,String,<null>"
211 );
212 }
213
214 @Test void c10_nullPropertyValue() {
215 assertThrows(IllegalArgumentException.class, ()->bean().get(null));
216 assertThrows(IllegalArgumentException.class, ()->bean().get(null, String.class));
217 assertThrows(IllegalArgumentException.class, ()->bean().set(null, "a"));
218 }
219 }
220
221
222
223
224
225 private static Info bean() {
226 return info();
227 }
228 }