package org.apache.lucene.util;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.util.Locale;
import java.util.Set;
/**
* Base test class for Lucene test classes that test Locale-sensitive behavior.
* <p>
* This class will run tests under the default Locale, but then will also run
* tests under all available JVM locales. This is helpful to ensure tests will
* not fail under a different environment.
* </p>
*/
public abstract class LocalizedTestCase extends LuceneTestCase {
/**
* Before changing the default Locale, save the default Locale here so that it
* can be restored.
*/
private final Locale defaultLocale = Locale.getDefault();
/**
* The locale being used as the system default Locale
*/
private Locale locale;
/**
* An optional limited set of testcases that will run under different Locales.
*/
private final Set<String> testWithDifferentLocales;
public LocalizedTestCase() {
super();
testWithDifferentLocales = null;
}
public LocalizedTestCase(String name) {
super(name);
testWithDifferentLocales = null;
}
public LocalizedTestCase(Set<String> testWithDifferentLocales) {
super();
this.testWithDifferentLocales = testWithDifferentLocales;
}
public LocalizedTestCase(String name, Set<String> testWithDifferentLocales) {
super(name);
this.testWithDifferentLocales = testWithDifferentLocales;
}
@Override
protected void setUp() throws Exception {
super.setUp();
Locale.setDefault(locale);
}
@Override
protected void tearDown() throws Exception {
assertEquals("default locale unexpectedly changed:", locale, Locale
.getDefault());
Locale.setDefault(defaultLocale);
super.tearDown();
}
@Override
public void runBare() throws Throwable {
// Do the test with the default Locale (default)
try {
locale = defaultLocale;
super.runBare();
} catch (Throwable e) {
System.out.println("Test failure of '" + getName()
+ "' occurred with the default Locale " + locale);
throw e;
}
if (testWithDifferentLocales == null
|| testWithDifferentLocales.contains(getName())) {
// Do the test again under different Locales
Locale systemLocales[] = Locale.getAvailableLocales();
for (int i = 0; i < systemLocales.length; i++) {
try {
locale = systemLocales[i];
super.runBare();
} catch (Throwable e) {
System.out.println("Test failure of '" + getName()
+ "' occurred under a different Locale " + locale);
throw e;
}
}
}
}
}