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.commons.reflect.Visibility.*;
20  import static org.junit.jupiter.api.Assertions.*;
21  
22  import org.apache.juneau.a.*;
23  import org.apache.juneau.commons.reflect.*;
24  import org.apache.juneau.json.*;
25  import org.junit.jupiter.api.*;
26  
27  class Visibility_Test extends TestBase {
28  
29  	//====================================================================================================
30  	// testVisibility
31  	//====================================================================================================
32  	@Test void a01_classDefault() throws Exception {
33  		var s1 = JsonSerializer.create().json5().sortProperties().disableBeansRequireSomeProperties();
34  		var s2 = JsonSerializer.create().json5().sortProperties().disableBeansRequireSomeProperties().beanClassVisibility(PROTECTED);
35  		var s3 = JsonSerializer.create().json5().sortProperties().disableBeansRequireSomeProperties().beanClassVisibility(Visibility.DEFAULT);
36  		var s4 = JsonSerializer.create().json5().sortProperties().disableBeansRequireSomeProperties().beanClassVisibility(PRIVATE);
37  
38  		var a1 = A1.create();
39  
40  		s1.beanFieldVisibility(NONE);
41  		s2.beanFieldVisibility(NONE);
42  		s3.beanFieldVisibility(NONE);
43  		s4.beanFieldVisibility(NONE);
44  
45  		var r = s1.build().serialize(a1);
46  		assertEquals("{f5:5}", r);
47  
48  		r = s2.build().serialize(a1);
49  		assertEquals("{f5:5}", r);
50  
51  		r = s3.build().serialize(a1);
52  		assertEquals("{f5:5}", r);
53  
54  		r = s4.build().serialize(a1);
55  		assertEquals("{f5:5}", r);
56  
57  		s1.beanFieldVisibility(PUBLIC);
58  		s2.beanFieldVisibility(PUBLIC);
59  		s3.beanFieldVisibility(PUBLIC);
60  		s4.beanFieldVisibility(PUBLIC);
61  
62  		r = s1.build().serialize(a1);
63  		assertEquals("{f1:1,f5:5,g2:{f1:1,f5:5},g3:'A3',g4:'A4',g5:'A5'}", r);
64  
65  		r = s2.build().serialize(a1);
66  		assertEquals("{f1:1,f5:5,g2:{f1:1,f5:5},g3:{f1:1,f5:5},g4:'A4',g5:'A5'}", r);
67  
68  		r = s3.build().serialize(a1);
69  		assertEquals("{f1:1,f5:5,g2:{f1:1,f5:5},g3:{f1:1,f5:5},g4:{f1:1,f5:5},g5:'A5'}", r);
70  
71  		r = s4.build().serialize(a1);
72  		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);
73  
74  		s1.beanFieldVisibility(PROTECTED);
75  		s2.beanFieldVisibility(PROTECTED);
76  		s3.beanFieldVisibility(PROTECTED);
77  		s4.beanFieldVisibility(PROTECTED);
78  
79  		r = s1.build().serialize(a1);
80  		assertEquals("{f1:1,f2:2,f5:5,g2:{f1:1,f2:2,f5:5},g3:'A3',g4:'A4',g5:'A5'}", r);
81  
82  		r = s2.build().serialize(a1);
83  		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);
84  
85  		r = s3.build().serialize(a1);
86  		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);
87  
88  		r = s4.build().serialize(a1);
89  		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);
90  
91  		s1.beanFieldVisibility(Visibility.DEFAULT);
92  		s2.beanFieldVisibility(Visibility.DEFAULT);
93  		s3.beanFieldVisibility(Visibility.DEFAULT);
94  		s4.beanFieldVisibility(Visibility.DEFAULT);
95  
96  		r = s1.build().serialize(a1);
97  		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);
98  
99  		r = s2.build().serialize(a1);
100 		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);
101 
102 		r = s3.build().serialize(a1);
103 		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);
104 
105 		r = s4.build().serialize(a1);
106 		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);
107 
108 		s1.beanFieldVisibility(PRIVATE);
109 		s2.beanFieldVisibility(PRIVATE);
110 		s3.beanFieldVisibility(PRIVATE);
111 		s4.beanFieldVisibility(PRIVATE);
112 
113 		r = s1.build().serialize(a1);
114 		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);
115 
116 		r = s2.build().serialize(a1);
117 		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);
118 
119 		r = s3.build().serialize(a1);
120 		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);
121 
122 		r = s4.build().serialize(a1);
123 		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);
124 
125 		s1.beanMethodVisibility(NONE);
126 		s2.beanMethodVisibility(NONE);
127 		s3.beanMethodVisibility(NONE);
128 		s4.beanMethodVisibility(NONE);
129 
130 		r = s1.build().serialize(a1);
131 		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);
132 
133 		r = s2.build().serialize(a1);
134 		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);
135 
136 		r = s3.build().serialize(a1);
137 		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);
138 
139 		r = s4.build().serialize(a1);
140 		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);
141 
142 		s1.beanMethodVisibility(PROTECTED);
143 		s2.beanMethodVisibility(PROTECTED);
144 		s3.beanMethodVisibility(PROTECTED);
145 		s4.beanMethodVisibility(PROTECTED);
146 
147 		r = s1.build().serialize(a1);
148 		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);
149 
150 		r = s2.build().serialize(a1);
151 		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);
152 
153 		r = s3.build().serialize(a1);
154 		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);
155 
156 		r = s4.build().serialize(a1);
157 		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);
158 
159 	}
160 
161 	static class A {
162 		public int f1;
163 		public A(){/* no-op */}
164 
165 		static A create() {
166 			var x = new A();
167 			x.f1 = 1;
168 			return x;
169 		}
170 	}
171 }