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.junit.bct.BctAssertions.*;
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  	public static class SA1 extends JsonSerializer {
56  		public SA1(JsonSerializer.Builder builder) {
57  			super(builder.accept("text/foo+*,text/foo_a+*"));
58  		}
59  	}
60  
61  	public static class SA2 extends JsonSerializer {
62  		public SA2(JsonSerializer.Builder builder) {
63  			super(builder.accept("text/foo+bar+*,text/foo+bar_a+*"));
64  		}
65  	}
66  
67  	public static class SA3 extends JsonSerializer {
68  		public SA3(JsonSerializer.Builder builder) {
69  			super(builder.accept("text/baz+*,text/baz_a+*"));
70  		}
71  	}
72  
73  	//====================================================================================================
74  	// Test inheritence
75  	//====================================================================================================
76  	@Test void a02_inheritence() {
77  		var gb = SerializerSet.create().add(SB1.class, SB2.class);
78  		var g = gb.build();
79  		assertList(g.getSupportedMediaTypes(), "text/1", "text/2", "text/2a");
80  
81  		gb = SerializerSet.create().add(SB1.class, SB2.class).add(SB3.class, SB4.class);
82  		g = gb.build();
83  		assertList(g.getSupportedMediaTypes(), "text/3", "text/4", "text/4a", "text/1", "text/2", "text/2a");
84  
85  		gb = SerializerSet.create().add(SB1.class, SB2.class).add(SB3.class, SB4.class).add(SB5.class);
86  		g = gb.build();
87  		assertList(g.getSupportedMediaTypes(), "text/5", "text/3", "text/4", "text/4a", "text/1", "text/2", "text/2a");
88  	}
89  
90  	public static class SB1 extends JsonSerializer {
91  		public SB1(JsonSerializer.Builder builder) {
92  			super(builder.accept("text/1"));
93  		}
94  	}
95  
96  	public static class SB2 extends JsonSerializer {
97  		public SB2(JsonSerializer.Builder builder) {
98  			super(builder.accept("text/2,text/2a"));
99  		}
100 	}
101 
102 	public static class SB3 extends JsonSerializer {
103 		public SB3(JsonSerializer.Builder builder) {
104 			super(builder.accept("text/3"));
105 		}
106 	}
107 
108 	public static class SB4 extends JsonSerializer {
109 		public SB4(JsonSerializer.Builder builder) {
110 			super(builder.accept("text/4,text/4a"));
111 		}
112 	}
113 
114 	public static class SB5 extends JsonSerializer {
115 		public SB5(JsonSerializer.Builder builder) {
116 			super(builder.accept("text/5"));
117 		}
118 	}
119 
120 	//====================================================================================================
121 	// Test media type with meta-characters
122 	//====================================================================================================
123 	@Test void a03_mediaTypesWithMetaCharacters() {
124 		var gb = SerializerSet.create().add(SC1.class, SC2.class, SC3.class);
125 		var g = gb.build();
126 		assertInstanceOf(SC1.class, g.getSerializer("text/foo"));
127 		assertInstanceOf(SC2.class, g.getSerializer("foo/json"));
128 		assertInstanceOf(SC3.class, g.getSerializer("foo/foo"));
129 	}
130 
131 	public static class SC1 extends JsonSerializer {
132 		public SC1(JsonSerializer.Builder builder) {
133 			super(builder.accept("text/*"));
134 		}
135 	}
136 
137 	public static class SC2 extends JsonSerializer {
138 		public SC2(JsonSerializer.Builder builder) {
139 			super(builder.accept("*/json"));
140 		}
141 	}
142 
143 	public static class SC3 extends JsonSerializer {
144 		public SC3(JsonSerializer.Builder builder) {
145 			super(builder.accept("*/*"));
146 		}
147 	}
148 }