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.serializer;
18  
19  import static org.apache.juneau.TestUtils.*;
20  import static org.junit.jupiter.api.Assertions.*;
21  
22  import org.apache.juneau.*;
23  import org.apache.juneau.json.*;
24  import org.junit.jupiter.api.*;
25  
26  class SerializerSet_Test extends TestBase {
27  
28  	//====================================================================================================
29  	// Trim nulls from beans
30  	//====================================================================================================
31  	@Test void a01_serializerGroupMatching() {
32  
33  		var sg = SerializerSet.create().add(SA1.class, SA2.class, SA3.class).build();
34  		assertInstanceOf(SA1.class, sg.getSerializer("text/foo"));
35  		assertInstanceOf(SA1.class, sg.getSerializer("text/foo_a"));
36  		assertInstanceOf(SA1.class, sg.getSerializer("text/xxx+foo_a"));
37  		assertInstanceOf(SA1.class, sg.getSerializer("text/foo_a+xxx"));
38  		assertInstanceOf(SA2.class, sg.getSerializer("text/foo+bar"));
39  		assertInstanceOf(SA2.class, sg.getSerializer("text/foo+bar_a"));
40  		assertInstanceOf(SA2.class, sg.getSerializer("text/bar+foo"));
41  		assertInstanceOf(SA2.class, sg.getSerializer("text/bar_a+foo"));
42  		assertInstanceOf(SA2.class, sg.getSerializer("text/bar+foo+xxx"));
43  		assertInstanceOf(SA2.class, sg.getSerializer("text/bar_a+foo+xxx"));
44  		assertInstanceOf(SA3.class, sg.getSerializer("text/baz"));
45  		assertInstanceOf(SA3.class, sg.getSerializer("text/baz_a"));
46  		assertInstanceOf(SA3.class, sg.getSerializer("text/baz+yyy"));
47  		assertInstanceOf(SA3.class, sg.getSerializer("text/baz_a+yyy"));
48  		assertInstanceOf(SA3.class, sg.getSerializer("text/yyy+baz"));
49  		assertInstanceOf(SA3.class, sg.getSerializer("text/yyy+baz_a"));
50  
51  		assertInstanceOf(SA1.class, sg.getSerializer("text/foo;q=0.9,text/foo+bar;q=0.8"));
52  		assertInstanceOf(SA2.class, sg.getSerializer("text/foo;q=0.8,text/foo+bar;q=0.9"));
53  	}
54  
55  
56  	public static class SA1 extends JsonSerializer {
57  		public SA1(JsonSerializer.Builder builder) {
58  			super(builder.accept("text/foo+*,text/foo_a+*"));
59  		}
60  	}
61  
62  	public static class SA2 extends JsonSerializer {
63  		public SA2(JsonSerializer.Builder builder) {
64  			super(builder.accept("text/foo+bar+*,text/foo+bar_a+*"));
65  		}
66  	}
67  
68  	public static class SA3 extends JsonSerializer {
69  		public SA3(JsonSerializer.Builder builder) {
70  			super(builder.accept("text/baz+*,text/baz_a+*"));
71  		}
72  	}
73  
74  	//====================================================================================================
75  	// Test inheritence
76  	//====================================================================================================
77  	@Test void a02_inheritence() {
78  		var gb = SerializerSet.create().add(SB1.class, SB2.class);
79  		var g = gb.build();
80  		assertList(g.getSupportedMediaTypes(), "text/1", "text/2", "text/2a");
81  
82  		gb = SerializerSet.create().add(SB1.class, SB2.class).add(SB3.class, SB4.class);
83  		g = gb.build();
84  		assertList(g.getSupportedMediaTypes(), "text/3", "text/4", "text/4a", "text/1", "text/2", "text/2a");
85  
86  		gb = SerializerSet.create().add(SB1.class, SB2.class).add(SB3.class, SB4.class).add(SB5.class);
87  		g = gb.build();
88  		assertList(g.getSupportedMediaTypes(), "text/5", "text/3", "text/4", "text/4a", "text/1", "text/2", "text/2a");
89  	}
90  
91  	public static class SB1 extends JsonSerializer {
92  		public SB1(JsonSerializer.Builder builder) {
93  			super(builder.accept("text/1"));
94  		}
95  	}
96  
97  	public static class SB2 extends JsonSerializer {
98  		public SB2(JsonSerializer.Builder builder) {
99  			super(builder.accept("text/2,text/2a"));
100 		}
101 	}
102 
103 	public static class SB3 extends JsonSerializer {
104 		public SB3(JsonSerializer.Builder builder) {
105 			super(builder.accept("text/3"));
106 		}
107 	}
108 
109 	public static class SB4 extends JsonSerializer {
110 		public SB4(JsonSerializer.Builder builder) {
111 			super(builder.accept("text/4,text/4a"));
112 		}
113 	}
114 
115 	public static class SB5 extends JsonSerializer {
116 		public SB5(JsonSerializer.Builder builder) {
117 			super(builder.accept("text/5"));
118 		}
119 	}
120 
121 	//====================================================================================================
122 	// Test media type with meta-characters
123 	//====================================================================================================
124 	@Test void a03_mediaTypesWithMetaCharacters() {
125 		var gb = SerializerSet.create().add(SC1.class, SC2.class, SC3.class);
126 		var g = gb.build();
127 		assertInstanceOf(SC1.class, g.getSerializer("text/foo"));
128 		assertInstanceOf(SC2.class, g.getSerializer("foo/json"));
129 		assertInstanceOf(SC3.class, g.getSerializer("foo/foo"));
130 	}
131 
132 	public static class SC1 extends JsonSerializer {
133 		public SC1(JsonSerializer.Builder builder) {
134 			super(builder.accept("text/*"));
135 		}
136 	}
137 
138 	public static class SC2 extends JsonSerializer {
139 		public SC2(JsonSerializer.Builder builder) {
140 			super(builder.accept("*/json"));
141 		}
142 	}
143 
144 	public static class SC3 extends JsonSerializer {
145 		public SC3(JsonSerializer.Builder builder) {
146 			super(builder.accept("*/*"));
147 		}
148 	}
149 }