View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.juneau;
18  
19  import static org.apache.juneau.Visibility.*;
20  import static org.junit.jupiter.api.Assertions.*;
21  
22  import org.apache.juneau.a.*;
23  import org.apache.juneau.json.*;
24  import org.junit.jupiter.api.*;
25  
26  class Visibility_Test extends TestBase {
27  
28  	//====================================================================================================
29  	// testVisibility
30  	//====================================================================================================
31  	@Test void a01_classDefault() throws Exception {
32  		var s1 = JsonSerializer.create().json5().sortProperties().disableBeansRequireSomeProperties();
33  		var s2 = JsonSerializer.create().json5().sortProperties().disableBeansRequireSomeProperties().beanClassVisibility(PROTECTED);
34  		var s3 = JsonSerializer.create().json5().sortProperties().disableBeansRequireSomeProperties().beanClassVisibility(Visibility.DEFAULT);
35  		var s4 = JsonSerializer.create().json5().sortProperties().disableBeansRequireSomeProperties().beanClassVisibility(PRIVATE);
36  
37  		var a1 = A1.create();
38  
39  		s1.beanFieldVisibility(NONE);
40  		s2.beanFieldVisibility(NONE);
41  		s3.beanFieldVisibility(NONE);
42  		s4.beanFieldVisibility(NONE);
43  
44  		var r = s1.build().serialize(a1);
45  		assertEquals("{f5:5}", r);
46  
47  		r = s2.build().serialize(a1);
48  		assertEquals("{f5:5}", r);
49  
50  		r = s3.build().serialize(a1);
51  		assertEquals("{f5:5}", r);
52  
53  		r = s4.build().serialize(a1);
54  		assertEquals("{f5:5}", r);
55  
56  		s1.beanFieldVisibility(PUBLIC);
57  		s2.beanFieldVisibility(PUBLIC);
58  		s3.beanFieldVisibility(PUBLIC);
59  		s4.beanFieldVisibility(PUBLIC);
60  
61  		r = s1.build().serialize(a1);
62  		assertEquals("{f1:1,f5:5,g2:{f1:1,f5:5},g3:'A3',g4:'A4',g5:'A5'}", r);
63  
64  		r = s2.build().serialize(a1);
65  		assertEquals("{f1:1,f5:5,g2:{f1:1,f5:5},g3:{f1:1,f5:5},g4:'A4',g5:'A5'}", r);
66  
67  		r = s3.build().serialize(a1);
68  		assertEquals("{f1:1,f5:5,g2:{f1:1,f5:5},g3:{f1:1,f5:5},g4:{f1:1,f5:5},g5:'A5'}", r);
69  
70  		r = s4.build().serialize(a1);
71  		assertEquals("{f1:1,f5:5,g2:{f1:1,f5:5},g3:{f1:1,f5:5},g4:{f1:1,f5:5},g5:{f1:1,f5:5}}", r);
72  
73  		s1.beanFieldVisibility(PROTECTED);
74  		s2.beanFieldVisibility(PROTECTED);
75  		s3.beanFieldVisibility(PROTECTED);
76  		s4.beanFieldVisibility(PROTECTED);
77  
78  		r = s1.build().serialize(a1);
79  		assertEquals("{f1:1,f2:2,f5:5,g2:{f1:1,f2:2,f5:5},g3:'A3',g4:'A4',g5:'A5'}", r);
80  
81  		r = s2.build().serialize(a1);
82  		assertEquals("{f1:1,f2:2,f5:5,g2:{f1:1,f2:2,f5:5},g3:{f1:1,f2:2,f5:5},g4:'A4',g5:'A5'}", r);
83  
84  		r = s3.build().serialize(a1);
85  		assertEquals("{f1:1,f2:2,f5:5,g2:{f1:1,f2:2,f5:5},g3:{f1:1,f2:2,f5:5},g4:{f1:1,f2:2,f5:5},g5:'A5'}", r);
86  
87  		r = s4.build().serialize(a1);
88  		assertEquals("{f1:1,f2:2,f5:5,g2:{f1:1,f2:2,f5:5},g3:{f1:1,f2:2,f5:5},g4:{f1:1,f2:2,f5:5},g5:{f1:1,f2:2,f5:5}}", r);
89  
90  		s1.beanFieldVisibility(Visibility.DEFAULT);
91  		s2.beanFieldVisibility(Visibility.DEFAULT);
92  		s3.beanFieldVisibility(Visibility.DEFAULT);
93  		s4.beanFieldVisibility(Visibility.DEFAULT);
94  
95  		r = s1.build().serialize(a1);
96  		assertEquals("{f1:1,f2:2,f3:3,f5:5,g2:{f1:1,f2:2,f3:3,f5:5},g3:'A3',g4:'A4',g5:'A5'}", r);
97  
98  		r = s2.build().serialize(a1);
99  		assertEquals("{f1:1,f2:2,f3:3,f5:5,g2:{f1:1,f2:2,f3:3,f5:5},g3:{f1:1,f2:2,f3:3,f5:5},g4:'A4',g5:'A5'}", r);
100 
101 		r = s3.build().serialize(a1);
102 		assertEquals("{f1:1,f2:2,f3:3,f5:5,g2:{f1:1,f2:2,f3:3,f5:5},g3:{f1:1,f2:2,f3:3,f5:5},g4:{f1:1,f2:2,f3:3,f5:5},g5:'A5'}", r);
103 
104 		r = s4.build().serialize(a1);
105 		assertEquals("{f1:1,f2:2,f3:3,f5:5,g2:{f1:1,f2:2,f3:3,f5:5},g3:{f1:1,f2:2,f3:3,f5:5},g4:{f1:1,f2:2,f3:3,f5:5},g5:{f1:1,f2:2,f3:3,f5:5}}", r);
106 
107 		s1.beanFieldVisibility(PRIVATE);
108 		s2.beanFieldVisibility(PRIVATE);
109 		s3.beanFieldVisibility(PRIVATE);
110 		s4.beanFieldVisibility(PRIVATE);
111 
112 		r = s1.build().serialize(a1);
113 		assertEquals("{f1:1,f2:2,f3:3,f4:4,f5:5,g2:{f1:1,f2:2,f3:3,f4:4,f5:5},g3:'A3',g4:'A4',g5:'A5'}", r);
114 
115 		r = s2.build().serialize(a1);
116 		assertEquals("{f1:1,f2:2,f3:3,f4:4,f5:5,g2:{f1:1,f2:2,f3:3,f4:4,f5:5},g3:{f1:1,f2:2,f3:3,f4:4,f5:5},g4:'A4',g5:'A5'}", r);
117 
118 		r = s3.build().serialize(a1);
119 		assertEquals("{f1:1,f2:2,f3:3,f4:4,f5:5,g2:{f1:1,f2:2,f3:3,f4:4,f5:5},g3:{f1:1,f2:2,f3:3,f4:4,f5:5},g4:{f1:1,f2:2,f3:3,f4:4,f5:5},g5:'A5'}", r);
120 
121 		r = s4.build().serialize(a1);
122 		assertEquals("{f1:1,f2:2,f3:3,f4:4,f5:5,g2:{f1:1,f2:2,f3:3,f4:4,f5:5},g3:{f1:1,f2:2,f3:3,f4:4,f5:5},g4:{f1:1,f2:2,f3:3,f4:4,f5:5},g5:{f1:1,f2:2,f3:3,f4:4,f5:5}}", r);
123 
124 		s1.beanMethodVisibility(NONE);
125 		s2.beanMethodVisibility(NONE);
126 		s3.beanMethodVisibility(NONE);
127 		s4.beanMethodVisibility(NONE);
128 
129 		r = s1.build().serialize(a1);
130 		assertEquals("{f1:1,f2:2,f3:3,f4:4,g2:{f1:1,f2:2,f3:3,f4:4},g3:'A3',g4:'A4',g5:'A5'}", r);
131 
132 		r = s2.build().serialize(a1);
133 		assertEquals("{f1:1,f2:2,f3:3,f4:4,g2:{f1:1,f2:2,f3:3,f4:4},g3:{f1:1,f2:2,f3:3,f4:4},g4:'A4',g5:'A5'}", r);
134 
135 		r = s3.build().serialize(a1);
136 		assertEquals("{f1:1,f2:2,f3:3,f4:4,g2:{f1:1,f2:2,f3:3,f4:4},g3:{f1:1,f2:2,f3:3,f4:4},g4:{f1:1,f2:2,f3:3,f4:4},g5:'A5'}", r);
137 
138 		r = s4.build().serialize(a1);
139 		assertEquals("{f1:1,f2:2,f3:3,f4:4,g2:{f1:1,f2:2,f3:3,f4:4},g3:{f1:1,f2:2,f3:3,f4:4},g4:{f1:1,f2:2,f3:3,f4:4},g5:{f1:1,f2:2,f3:3,f4:4}}", r);
140 
141 		s1.beanMethodVisibility(PROTECTED);
142 		s2.beanMethodVisibility(PROTECTED);
143 		s3.beanMethodVisibility(PROTECTED);
144 		s4.beanMethodVisibility(PROTECTED);
145 
146 		r = s1.build().serialize(a1);
147 		assertEquals("{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6,g2:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g3:'A3',g4:'A4',g5:'A5'}", r);
148 
149 		r = s2.build().serialize(a1);
150 		assertEquals("{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6,g2:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g3:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g4:'A4',g5:'A5'}", r);
151 
152 		r = s3.build().serialize(a1);
153 		assertEquals("{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6,g2:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g3:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g4:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g5:'A5'}", r);
154 
155 		r = s4.build().serialize(a1);
156 		assertEquals("{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6,g2:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g3:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g4:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6},g5:{f1:1,f2:2,f3:3,f4:4,f5:5,f6:6}}", r);
157 
158 	}
159 
160 	static class A {
161 		public int f1;
162 		public A(){/* no-op */}
163 
164 		static A create() {
165 			var x = new A();
166 			x.f1 = 1;
167 			return x;
168 		}
169 	}
170 }