1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 package org.eclipse.jgit.nls;
45
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.assertSame;
48
49 import java.util.Locale;
50 import java.util.concurrent.Callable;
51 import java.util.concurrent.CyclicBarrier;
52 import java.util.concurrent.ExecutionException;
53 import java.util.concurrent.ExecutorService;
54 import java.util.concurrent.Executors;
55 import java.util.concurrent.Future;
56 import java.util.concurrent.TimeUnit;
57
58 import org.junit.Test;
59
60 public class NLSTest {
61
62 @Test
63 public void testNLSLocale() {
64 NLS.setLocale(NLS.ROOT_LOCALE);
65 GermanTranslatedBundle bundle = GermanTranslatedBundle.get();
66 assertEquals(NLS.ROOT_LOCALE, bundle.effectiveLocale());
67
68 NLS.setLocale(Locale.GERMAN);
69 bundle = GermanTranslatedBundle.get();
70 assertEquals(Locale.GERMAN, bundle.effectiveLocale());
71 }
72
73 @Test
74 public void testJVMDefaultLocale() {
75 Locale.setDefault(NLS.ROOT_LOCALE);
76 NLS.useJVMDefaultLocale();
77 GermanTranslatedBundle bundle = GermanTranslatedBundle.get();
78 assertEquals(NLS.ROOT_LOCALE, bundle.effectiveLocale());
79
80 Locale.setDefault(Locale.GERMAN);
81 NLS.useJVMDefaultLocale();
82 bundle = GermanTranslatedBundle.get();
83 assertEquals(Locale.GERMAN, bundle.effectiveLocale());
84 }
85
86 @Test
87 public void testThreadTranslationBundleInheritance() throws InterruptedException {
88
89 class T extends Thread {
90 GermanTranslatedBundle bundle;
91 @Override
92 public void run() {
93 bundle = GermanTranslatedBundle.get();
94 }
95 }
96
97 NLS.setLocale(NLS.ROOT_LOCALE);
98 GermanTranslatedBundle mainThreadsBundle = GermanTranslatedBundle.get();
99 T t = new T();
100 t.start();
101 t.join();
102 assertSame(mainThreadsBundle, t.bundle);
103
104 NLS.setLocale(Locale.GERMAN);
105 mainThreadsBundle = GermanTranslatedBundle.get();
106 t = new T();
107 t.start();
108 t.join();
109 assertSame(mainThreadsBundle, t.bundle);
110 }
111
112 @Test
113 public void testParallelThreadsWithDifferentLocales()
114 throws InterruptedException, ExecutionException {
115
116 final CyclicBarrier barrier = new CyclicBarrier(2);
117
118 class GetBundle implements Callable<TranslationBundle> {
119
120 private Locale locale;
121
122 GetBundle(Locale locale) {
123 this.locale = locale;
124 }
125
126 public TranslationBundle call() throws Exception {
127 NLS.setLocale(locale);
128 barrier.await();
129 return GermanTranslatedBundle.get();
130 }
131 }
132
133 ExecutorService pool = Executors.newFixedThreadPool(2);
134 try {
135 Future<TranslationBundle> root = pool.submit(new GetBundle(
136 NLS.ROOT_LOCALE));
137 Future<TranslationBundle> german = pool.submit(new GetBundle(
138 Locale.GERMAN));
139 assertEquals(NLS.ROOT_LOCALE, root.get().effectiveLocale());
140 assertEquals(Locale.GERMAN, german.get().effectiveLocale());
141 } finally {
142 pool.shutdown();
143 pool.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
144 }
145 }
146 }