Bundle: some fixes + update tests
[nikiroo-utils.git] / src / be / nikiroo / utils / test / BundleTest.java
CommitLineData
80383c14
NR
1package be.nikiroo.utils.test;
2
3import java.io.File;
e9ca6bb8
NR
4import java.util.ArrayList;
5import java.util.List;
80383c14
NR
6
7import be.nikiroo.utils.IOUtils;
8import be.nikiroo.utils.resources.Bundle;
9import be.nikiroo.utils.resources.Bundles;
10import be.nikiroo.utils.resources.Meta;
11
32ae2079 12class BundleTest extends TestLauncher {
80383c14
NR
13 private File tmp;
14 private B b = new B();
15
80383c14
NR
16 public BundleTest(String[] args) {
17 this("Bundle test", args);
18 }
19
20 protected BundleTest(String name, String[] args) {
21 super(name, args);
22
e9ca6bb8
NR
23 for (TestCase test : getSimpleTests()) {
24 addTest(test);
25 }
80383c14 26
e9ca6bb8
NR
27 addSeries(new TestLauncher("After saving/reloading the resources", args) {
28 {
29 for (TestCase test : getSimpleTests()) {
30 addTest(test);
80383c14 31 }
e9ca6bb8 32 }
80383c14 33
e9ca6bb8
NR
34 @Override
35 protected void start() throws Exception {
36 tmp = File.createTempFile("nikiroo-utils", ".test");
37 tmp.delete();
38 tmp.mkdir();
39 b.updateFile(tmp.getAbsolutePath());
40 Bundles.setDirectory(tmp.getAbsolutePath());
41 b.reload(false);
42 }
43
44 @Override
45 protected void stop() {
46 IOUtils.deltree(tmp);
47 }
48 });
49
50 addSeries(new TestLauncher("Read/Write support", args) {
51 {
52 addTest(new TestCase("Reload") {
53 @Override
54 public void test() throws Exception {
e9ca6bb8 55 String def = b.getString(E.ONE);
487926f7
NR
56 String val = "Something";
57
58 b.setString(E.ONE, val);
59 b.updateFile();
60 b.reload(true);
61
62 assertEquals("We should have reset the bundle", def,
63 b.getString(E.ONE));
64
e9ca6bb8
NR
65 b.reload(false);
66
e9ca6bb8 67 assertEquals("We should have reloaded the same files",
487926f7 68 val, b.getString(E.ONE));
e9ca6bb8
NR
69
70 // reset values for next tests
487926f7
NR
71 b.reload(true);
72 b.updateFile();
e9ca6bb8
NR
73 }
74 });
75
76 addTest(new TestCase("Set/Get") {
77 @Override
78 public void test() throws Exception {
79 String val = "Newp";
80 b.setString(E.ONE, val);
81 String setGet = b.getString(E.ONE);
82
83 assertEquals(val, setGet);
84
85 // reset values for next tests
487926f7 86 b.restoreSnapshot(null);
e9ca6bb8
NR
87 }
88 });
89
90 addTest(new TestCase("Snapshots") {
91 @Override
92 public void test() throws Exception {
93 String val = "Newp";
94 String def = b.getString(E.ONE);
95
96 b.setString(E.ONE, val);
487926f7 97 Object snap = b.takeSnapshot();
e9ca6bb8 98
487926f7 99 b.restoreSnapshot(null);
e9ca6bb8
NR
100 assertEquals(
101 "restoreChanges(null) should clear the changes",
102 def, b.getString(E.ONE));
487926f7 103 b.restoreSnapshot(snap);
e9ca6bb8
NR
104 assertEquals(
105 "restoreChanges(snapshot) should restore the changes",
106 val, b.getString(E.ONE));
107
108 // reset values for next tests
487926f7 109 b.restoreSnapshot(null);
e9ca6bb8
NR
110 }
111 });
112
113 addTest(new TestCase("updateFile with changes") {
114 @Override
115 public void test() throws Exception {
116 String val = "Go to disk! (UTF-8 test: 日本語)";
117
118 String def = b.getString(E.ONE);
119 b.setString(E.ONE, val);
120 b.updateFile(tmp.getAbsolutePath());
121 b.reload(false);
122
123 assertEquals(val, b.getString(E.ONE));
124
125 // reset values for next tests
126 b.setString(E.ONE, def);
127 b.updateFile(tmp.getAbsolutePath());
128 b.reload(false);
129 }
130 });
131 }
132
133 @Override
134 protected void start() throws Exception {
135 tmp = File.createTempFile("nikiroo-utils", ".test");
136 tmp.delete();
137 tmp.mkdir();
138 b.updateFile(tmp.getAbsolutePath());
139 Bundles.setDirectory(tmp.getAbsolutePath());
140 b.reload(false);
141 }
142
143 @Override
144 protected void stop() {
145 IOUtils.deltree(tmp);
146 }
147 });
80383c14
NR
148 }
149
e9ca6bb8 150 private List<TestCase> getSimpleTests() {
80383c14
NR
151 String pre = "";
152
e9ca6bb8
NR
153 List<TestCase> list = new ArrayList<TestCase>();
154
155 list.add(new TestCase(pre + "getString simple") {
80383c14
NR
156 @Override
157 public void test() throws Exception {
158 assertEquals("un", b.getString(E.ONE));
159 }
160 });
161
e9ca6bb8 162 list.add(new TestCase(pre + "getStringX with null suffix") {
80383c14
NR
163 @Override
164 public void test() throws Exception {
165 assertEquals("un", b.getStringX(E.ONE, null));
166 }
167 });
168
e9ca6bb8 169 list.add(new TestCase(pre + "getStringX with empty suffix") {
80383c14
NR
170 @Override
171 public void test() throws Exception {
172 assertEquals(null, b.getStringX(E.ONE, ""));
173 }
174 });
175
e9ca6bb8 176 list.add(new TestCase(pre + "getStringX with existing suffix") {
80383c14
NR
177 @Override
178 public void test() throws Exception {
179 assertEquals("un + suffix", b.getStringX(E.ONE, "suffix"));
180 }
181 });
182
e9ca6bb8 183 list.add(new TestCase(pre + "getStringX with not existing suffix") {
80383c14
NR
184 @Override
185 public void test() throws Exception {
186 assertEquals(null, b.getStringX(E.ONE, "fake"));
187 }
188 });
189
e9ca6bb8 190 list.add(new TestCase(pre + "getString with UTF-8 content") {
80383c14
NR
191 @Override
192 public void test() throws Exception {
193 assertEquals("日本語 Nihongo", b.getString(E.JAPANESE));
194 }
195 });
e9ca6bb8
NR
196
197 return list;
80383c14
NR
198 }
199
200 /**
201 * {@link Bundle}.
202 *
203 * @author niki
204 */
205 private class B extends Bundle<E> {
206 protected B() {
207 super(E.class, N.bundle_test);
208 }
209
e9ca6bb8
NR
210 @Override
211 // ...and make it public
487926f7
NR
212 public Object takeSnapshot() {
213 return super.takeSnapshot();
e9ca6bb8
NR
214 }
215
216 @Override
217 // ...and make it public
487926f7
NR
218 public void restoreSnapshot(Object snap) {
219 super.restoreSnapshot(snap);
e9ca6bb8 220 }
80383c14
NR
221 }
222
223 /**
224 * Key enum for the {@link Bundle}.
225 *
226 * @author niki
227 */
228 private enum E {
229 @Meta(what = "", where = "", format = "", info = "")
230 ONE, //
231 @Meta(what = "", where = "", format = "", info = "")
232 ONE_SUFFIX, //
233 @Meta(what = "", where = "", format = "", info = "")
234 TWO, //
235 @Meta(what = "", where = "", format = "", info = "")
236 JAPANESE
237 }
238
239 /**
240 * Name enum for the {@link Bundle}.
241 *
242 * @author niki
243 */
244 private enum N {
245 bundle_test
246 }
247}