Make bundle R/W: improvement + unit 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 {
55 String now = b.getString(E.ONE);
56 b.reload(true);
57 String def = b.getString(E.ONE);
58 b.reload(false);
59
60 assertEquals("We should not have a bundle to load",
61 null, def);
62 assertEquals("We should have reloaded the same files",
63 now, b.getString(E.ONE));
64
65 // reset values for next tests
66 b.reload(false);
67 }
68 });
69
70 addTest(new TestCase("Set/Get") {
71 @Override
72 public void test() throws Exception {
73 String val = "Newp";
74 b.setString(E.ONE, val);
75 String setGet = b.getString(E.ONE);
76
77 assertEquals(val, setGet);
78
79 // reset values for next tests
80 b.restoreChanges(null);
81 }
82 });
83
84 addTest(new TestCase("Snapshots") {
85 @Override
86 public void test() throws Exception {
87 String val = "Newp";
88 String def = b.getString(E.ONE);
89
90 b.setString(E.ONE, val);
91 Object snap = b.takeChangesSnapshot();
92
93 b.restoreChanges(null);
94 assertEquals(
95 "restoreChanges(null) should clear the changes",
96 def, b.getString(E.ONE));
97 b.restoreChanges(snap);
98 assertEquals(
99 "restoreChanges(snapshot) should restore the changes",
100 val, b.getString(E.ONE));
101
102 // reset values for next tests
103 b.restoreChanges(null);
104 }
105 });
106
107 addTest(new TestCase("updateFile with changes") {
108 @Override
109 public void test() throws Exception {
110 String val = "Go to disk! (UTF-8 test: 日本語)";
111
112 String def = b.getString(E.ONE);
113 b.setString(E.ONE, val);
114 b.updateFile(tmp.getAbsolutePath());
115 b.reload(false);
116
117 assertEquals(val, b.getString(E.ONE));
118
119 // reset values for next tests
120 b.setString(E.ONE, def);
121 b.updateFile(tmp.getAbsolutePath());
122 b.reload(false);
123 }
124 });
125 }
126
127 @Override
128 protected void start() throws Exception {
129 tmp = File.createTempFile("nikiroo-utils", ".test");
130 tmp.delete();
131 tmp.mkdir();
132 b.updateFile(tmp.getAbsolutePath());
133 Bundles.setDirectory(tmp.getAbsolutePath());
134 b.reload(false);
135 }
136
137 @Override
138 protected void stop() {
139 IOUtils.deltree(tmp);
140 }
141 });
80383c14
NR
142 }
143
e9ca6bb8 144 private List<TestCase> getSimpleTests() {
80383c14
NR
145 String pre = "";
146
e9ca6bb8
NR
147 List<TestCase> list = new ArrayList<TestCase>();
148
149 list.add(new TestCase(pre + "getString simple") {
80383c14
NR
150 @Override
151 public void test() throws Exception {
152 assertEquals("un", b.getString(E.ONE));
153 }
154 });
155
e9ca6bb8 156 list.add(new TestCase(pre + "getStringX with null suffix") {
80383c14
NR
157 @Override
158 public void test() throws Exception {
159 assertEquals("un", b.getStringX(E.ONE, null));
160 }
161 });
162
e9ca6bb8 163 list.add(new TestCase(pre + "getStringX with empty suffix") {
80383c14
NR
164 @Override
165 public void test() throws Exception {
166 assertEquals(null, b.getStringX(E.ONE, ""));
167 }
168 });
169
e9ca6bb8 170 list.add(new TestCase(pre + "getStringX with existing suffix") {
80383c14
NR
171 @Override
172 public void test() throws Exception {
173 assertEquals("un + suffix", b.getStringX(E.ONE, "suffix"));
174 }
175 });
176
e9ca6bb8 177 list.add(new TestCase(pre + "getStringX with not existing suffix") {
80383c14
NR
178 @Override
179 public void test() throws Exception {
180 assertEquals(null, b.getStringX(E.ONE, "fake"));
181 }
182 });
183
e9ca6bb8 184 list.add(new TestCase(pre + "getString with UTF-8 content") {
80383c14
NR
185 @Override
186 public void test() throws Exception {
187 assertEquals("日本語 Nihongo", b.getString(E.JAPANESE));
188 }
189 });
e9ca6bb8
NR
190
191 return list;
80383c14
NR
192 }
193
194 /**
195 * {@link Bundle}.
196 *
197 * @author niki
198 */
199 private class B extends Bundle<E> {
200 protected B() {
201 super(E.class, N.bundle_test);
202 }
203
e9ca6bb8
NR
204 @Override
205 // ...and make it public
206 public Object takeChangesSnapshot() {
207 return super.takeChangesSnapshot();
208 }
209
210 @Override
211 // ...and make it public
212 public void restoreChanges(Object snap) {
213 super.restoreChanges(snap);
214 }
80383c14
NR
215 }
216
217 /**
218 * Key enum for the {@link Bundle}.
219 *
220 * @author niki
221 */
222 private enum E {
223 @Meta(what = "", where = "", format = "", info = "")
224 ONE, //
225 @Meta(what = "", where = "", format = "", info = "")
226 ONE_SUFFIX, //
227 @Meta(what = "", where = "", format = "", info = "")
228 TWO, //
229 @Meta(what = "", where = "", format = "", info = "")
230 JAPANESE
231 }
232
233 /**
234 * Name enum for the {@link Bundle}.
235 *
236 * @author niki
237 */
238 private enum N {
239 bundle_test
240 }
241}