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.cp;
18  
19  import static java.util.Locale.*;
20  import static org.apache.juneau.TestUtils.*;
21  import static org.junit.jupiter.api.Assertions.*;
22  
23  import java.util.*;
24  
25  import org.apache.juneau.*;
26  import org.apache.juneau.cp.test3.*;
27  import org.apache.juneau.cp.test4.*;
28  import org.junit.jupiter.api.*;
29  
30  class Messages_Test extends TestBase {
31  
32  	@Test void a01_sameDirectory() {
33  		var x1 = Messages.of(MessageBundleTest1.class);
34  		assertEquals("MessageBundleTest1.properties", x1.getString("file"));
35  		assertEquals("MessageBundleTest1_ja.properties", x1.forLocale(JAPANESE).getString("file"));
36  		assertEquals("MessageBundleTest1_ja_JP.properties", x1.forLocale(JAPAN).getString("file"));
37  		assertEquals("MessageBundleTest1.properties", x1.forLocale(CHINA).getString("file"));
38  		assertEquals("MessageBundleTest1.properties", x1.forLocale((Locale)null).getString("file"));
39  	}
40  
41  	@Test void a02_customName() {
42  		var x1 = Messages.of(MessageBundleTest1.class, "files/Test1");
43  		assertEquals("files/Test1.properties", x1.getString("file"));
44  		assertEquals("files/Test1_ja.properties", x1.forLocale(JAPANESE).getString("file"));
45  		assertEquals("files/Test1_ja_JP.properties", x1.forLocale(JAPAN).getString("file"));
46  		assertEquals("files/Test1.properties", x1.forLocale(CHINA).getString("file"));
47  		assertEquals("files/Test1.properties", x1.forLocale((Locale)null).getString("file"));
48  
49  		var x2 = Messages.create(MessageBundleTest1.class).name(null).build();
50  		assertEquals("MessageBundleTest1.properties", x2.getString("file"));
51  		assertEquals("MessageBundleTest1_ja.properties", x2.forLocale(JAPANESE).getString("file"));
52  		assertEquals("MessageBundleTest1_ja_JP.properties", x2.forLocale(JAPAN).getString("file"));
53  		assertEquals("MessageBundleTest1.properties", x2.forLocale(CHINA).getString("file"));
54  		assertEquals("MessageBundleTest1.properties", x2.forLocale((Locale)null).getString("file"));
55  	}
56  
57  	@Test void a03_customSearchPaths() {
58  		var x = Messages.create(MessageBundleTest1.class).name("Test1").baseNames("{package}.files.{name}").build();
59  		assertEquals("files/Test1.properties", x.getString("file"));
60  		assertEquals("files/Test1_ja.properties", x.forLocale(JAPANESE).getString("file"));
61  		assertEquals("files/Test1_ja_JP.properties", x.forLocale(JAPAN).getString("file"));
62  		assertEquals("files/Test1.properties", x.forLocale(CHINA).getString("file"));
63  		assertEquals("files/Test1.properties", x.forLocale((Locale)null).getString("file"));
64  
65  		var x2 = Messages.create(MessageBundleTest1.class).name("Test1").baseNames((String[])null).build();
66  		assertEquals("{!file}", x2.getString("file"));
67  	}
68  
69  	@Test void a04_customLocale() {
70  		var x1 = Messages.create(MessageBundleTest1.class).locale(Locale.JAPAN).build();
71  		assertEquals("MessageBundleTest1_ja_JP.properties", x1.getString("file"));
72  		assertEquals("MessageBundleTest1_ja.properties", x1.forLocale(JAPANESE).getString("file"));
73  		assertEquals("MessageBundleTest1_ja_JP.properties", x1.forLocale(JAPAN).getString("file"));
74  		assertEquals("MessageBundleTest1.properties", x1.forLocale(CHINA).getString("file"));
75  		assertEquals("MessageBundleTest1.properties", x1.forLocale((Locale)null).getString("file"));
76  
77  		var x2 = Messages.create(MessageBundleTest1.class).locale((Locale)null).build();
78  		assertEquals("MessageBundleTest1.properties", x2.getString("file"));
79  		assertEquals("MessageBundleTest1_ja.properties", x2.forLocale(JAPANESE).getString("file"));
80  		assertEquals("MessageBundleTest1_ja_JP.properties", x2.forLocale(JAPAN).getString("file"));
81  		assertEquals("MessageBundleTest1.properties", x2.forLocale(CHINA).getString("file"));
82  		assertEquals("MessageBundleTest1.properties", x2.forLocale((Locale)null).getString("file"));
83  	}
84  
85  	@Test void a05_nonExistentBundle() {
86  		var x1 = Messages.of(MessageBundleTest1.class, "Bad");
87  		assertEquals("{!file}", x1.getString("file"));
88  		assertEquals("{!file}", x1.forLocale(JAPANESE).getString("file"));
89  		assertEquals("{!file}", x1.forLocale(JAPAN).getString("file"));
90  		assertEquals("{!file}", x1.forLocale(CHINA).getString("file"));
91  		assertEquals("{!file}", x1.forLocale((Locale)null).getString("file"));
92  
93  		var x2 = x1.forLocale(JAPANESE);
94  		assertEquals("{!file}", x2.getString("file"));
95  	}
96  
97  	@Test void a06_parent() {
98  		var x1 = Messages.create(MessageBundleTest1.class).name("Bad").parent(Messages.of(Test2.class)).build();
99  		assertEquals("Test2.properties", x1.getString("file"));
100 		assertEquals("Test2_ja.properties", x1.forLocale(JAPANESE).getString("file"));
101 		assertEquals("Test2_ja_JP.properties", x1.forLocale(JAPAN).getString("file"));
102 		assertEquals("Test2.properties", x1.forLocale(CHINA).getString("file"));
103 		assertEquals("Test2.properties", x1.forLocale((Locale)null).getString("file"));
104 
105 		var x2 = Messages.create(MessageBundleTest1.class).parent(Messages.of(Test2.class)).build();
106 		assertEquals("MessageBundleTest1.properties", x2.getString("file"));
107 		assertEquals("bar", x2.getString("yyy"));
108 	}
109 
110 	@Test void a07_nonExistentMessage() {
111 		var x = Messages.create(MessageBundleTest1.class).name("Bad").parent(Messages.of(Test2.class)).build();
112 		assertEquals("{!bad}", x.getString("bad"));
113 	}
114 
115 	@Test void a08_nonExistentMessage() {
116 		var x = Messages.create(MessageBundleTest1.class).name("Bad").parent(Messages.of(Test2.class)).build();
117 		assertEquals("{!bad}", x.getString("bad"));
118 	}
119 
120 	@Test void a09_keySet_prefix() {
121 		var x = Messages.of(MessageBundleTest1.class);
122 		assertList(new TreeSet<>(x.keySet("xx")), "xx", "xx.", "xx.foo");
123 	}
124 
125 	@Test void a10_getString() {
126 		var x = Messages.of(MessageBundleTest1.class);
127 		assertEquals("foo bar", x.getString("foo","bar"));
128 		assertEquals("bar bar", x.getString("bar","bar"));
129 		assertEquals("{!baz}", x.getString("baz","bar"));
130 		assertEquals("fooja bar", x.forLocale(JAPAN).getString("foo","bar"));
131 		assertEquals("foo bar", x.forLocale(CHINA).getString("foo","bar"));
132 		assertEquals("foo bar", x.forLocale(null).getString("foo","bar"));
133 		assertEquals("baz", x.forLocale(JAPAN).getString("baz"));
134 		assertEquals("{!baz}", x.forLocale(CHINA).getString("baz"));
135 		assertEquals("{!baz}", x.forLocale(null).getString("baz"));
136 	}
137 
138 	@Test void a11_findFirstString() {
139 		var x = Messages.of(MessageBundleTest1.class);
140 		assertEquals("foo {0}", x.findFirstString("baz","foo"));
141 		assertNull(x.findFirstString("baz","baz"));
142 		assertEquals("baz", x.forLocale(JAPAN).findFirstString("baz","foo"));
143 		assertNull(x.forLocale(CHINA).findFirstString("baz","baz"));
144 		assertNull(x.forLocale(null).findFirstString("baz","baz"));
145 	}
146 
147 	@Test void a12_getKeys() {
148 		var x = Messages.of(Test2.class);
149 		assertList(x.getKeys(), "file", "yyy");
150 	}
151 
152 	@Test void a13_toString() {
153 		var x = Messages.of(Test2.class);
154 		assertString("{file:'Test2.properties',yyy:'bar'}", x);
155 	}
156 }