1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
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
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
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 }