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.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
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
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
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 }