Removing unnecessary translation tests

pull/467/head
Alex Baker 9 years ago
parent 67a2fd987e
commit 4dbed209ee

@ -8,11 +8,12 @@ package com.todoroo.andlib.test;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.support.test.runner.AndroidJUnit4;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith;
import org.tasks.R; import org.tasks.R;
import org.tasks.time.DateTime;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
@ -23,7 +24,6 @@ import static android.support.test.InstrumentationRegistry.getTargetContext;
import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.assertTrue;
import static org.tasks.date.DateTimeUtils.newDateTime;
/** /**
* Tests translations for consistency with the default values. You must * Tests translations for consistency with the default values. You must
@ -33,26 +33,8 @@ import static org.tasks.date.DateTimeUtils.newDateTime;
* @author Tim Su <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
*/ */
abstract public class TranslationTests { @RunWith(AndroidJUnit4.class)
public class TranslationTests {
// --- abstract methods
/**
* @return R.string.class
*/
public abstract Class<?> getStringResources();
/**
* @return R.array.class
*/
public abstract Class<?> getArrayResources();
/**
* @return array of fields that are parsed by SimpleDateFormat
*/
public abstract int[] getDateFormatStrings();
// --- tests
/** /**
* Sets locale * Sets locale
@ -68,7 +50,7 @@ abstract public class TranslationTests {
/** /**
* Loop through each locale and call runnable * Loop through each locale and call runnable
*/ */
protected void forEachLocale(Runnable r) { private void forEachLocale(Runnable r) {
Locale[] locales = Locale.getAvailableLocales(); Locale[] locales = Locale.getAvailableLocales();
for(Locale locale : locales) { for(Locale locale : locales) {
setLocale(locale); setLocale(locale);
@ -176,7 +158,7 @@ abstract public class TranslationTests {
@Test @Test
public void testFormatStringsMatch() throws Exception { public void testFormatStringsMatch() throws Exception {
final Resources r = getTargetContext().getResources(); final Resources r = getTargetContext().getResources();
final int[] strings = getResourceIds(getStringResources()); final int[] strings = getResourceIds(R.string.class);
final FormatStringData[] formatStrings = new FormatStringData[strings.length]; final FormatStringData[] formatStrings = new FormatStringData[strings.length];
final StringBuilder failures = new StringBuilder(); final StringBuilder failures = new StringBuilder();
@ -192,7 +174,6 @@ abstract public class TranslationTests {
} }
} }
forEachLocale(() -> { forEachLocale(() -> {
Locale locale = r.getConfiguration().locale; Locale locale = r.getConfiguration().locale;
for(int i = 0; i < strings.length; i++) { for(int i = 0; i < strings.length; i++) {
@ -220,88 +201,36 @@ abstract public class TranslationTests {
} }
/** /**
* Test that date formatters parse correctly * check if string contains contains substrings
*/ */
@Test private void contains(Resources r, int resource, StringBuilder failures, String... contains) {
public void testDateFormats() throws Exception { String string = r.getString(resource);
final Resources r = getTargetContext().getResources(); for(String contain : contains)
if(!string.contains(contain)) {
final StringBuilder failures = new StringBuilder(); Locale locale = r.getConfiguration().locale;
final int[] dateStrings = getDateFormatStrings(); String name = r.getResourceName(resource);
final DateTime date = newDateTime(); failures.append(String.format("%s: %s did not contain: %s\n",
locale.toString(), name, contain));
forEachLocale(() -> {
Locale locale = r.getConfiguration().locale;
for (int dateString : dateStrings) {
try {
String string = r.getString(dateString);
try {
date.toString(string);
} catch (Exception e) {
String name = r.getResourceName(dateString);
failures.append(String.format("%s: invalid format string '%s': %s\n",
locale.toString(), name, e.getMessage()));
}
} catch (Exception e) {
String name = r.getResourceName(dateString);
failures.append(String.format("%s: error opening %s: %s\n",
locale.toString(), name, e.getMessage()));
}
} }
});
assertEquals(failures.toString(), 0, errorCount(failures));
} }
/** /**
* Test that there are the same number of array entries in each locale * Test dollar sign resources
*/ */
@Test @Test
public void testArraySizesMatch() throws Exception { public void testSpecialStringsMatch() throws Exception {
final Resources r = getTargetContext().getResources(); final Resources r = getTargetContext().getResources();
final int[] arrays = getResourceIds(getArrayResources());
final int[] sizes = new int[arrays.length];
final StringBuilder failures = new StringBuilder(); final StringBuilder failures = new StringBuilder();
for(int i = 0; i < arrays.length; i++) {
try {
sizes[i] = r.getStringArray(arrays[i]).length;
} catch (Resources.NotFoundException e) {
String name = r.getResourceName(arrays[i]);
failures.append(String.format("error opening %s: %s\n",
name, e.getMessage()));
sizes[i] = -1;
}
}
forEachLocale(() -> { forEachLocale(() -> {
for(int i = 0; i < arrays.length; i++) { contains(r, R.string.CFC_tag_text, failures, "?");
if(sizes[i] == -1) contains(r, R.string.CFC_title_contains_text, failures, "?");
continue; contains(r, R.string.CFC_dueBefore_text, failures, "?");
int size;
try {
size = r.getStringArray(arrays[i]).length;
} catch (Resources.NotFoundException e) {
String name = r.getResourceName(arrays[i]);
Locale locale = r.getConfiguration().locale;
failures.append(String.format("%s: error opening %s: %s\n",
locale, name, e.getMessage()));
continue;
}
if(size != sizes[i]) {
String name = r.getResourceName(arrays[i]);
Locale locale = r.getConfiguration().locale;
failures.append(String.format("%s (%s): size %d != %d\n",
name, locale.toString(), size, sizes[i]));
}
}
}); });
assertEquals(failures.toString(), 0, errorCount(failures));
}
// --- helper methods assertEquals(failures.toString(), 0,
failures.toString().replaceAll("[^\n]", "").length());
}
/** /**
* Count newlines * Count newlines
@ -320,7 +249,7 @@ abstract public class TranslationTests {
/** /**
* @return an array of all string resource id's * @return an array of all string resource id's
*/ */
public int[] getResourceIds(Class<?> resources) { private int[] getResourceIds(Class<?> resources) {
Field[] fields = resources.getDeclaredFields(); Field[] fields = resources.getDeclaredFields();
List<Integer> ids = new ArrayList<>(fields.length); List<Integer> ids = new ArrayList<>(fields.length);
for (Field field : fields) { for (Field field : fields) {
@ -335,5 +264,4 @@ abstract public class TranslationTests {
idsAsIntArray[i] = ids.get(i); idsAsIntArray[i] = ids.get(i);
return idsAsIntArray; return idsAsIntArray;
} }
} }

@ -1,73 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.test;
import android.content.res.Resources;
import android.support.test.runner.AndroidJUnit4;
import com.todoroo.andlib.test.TranslationTests;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.tasks.R;
import java.util.Locale;
import static android.support.test.InstrumentationRegistry.getTargetContext;
import static junit.framework.Assert.assertEquals;
@RunWith(AndroidJUnit4.class)
public class AstridTranslationTest extends TranslationTests {
@Override
public Class<?> getArrayResources() {
return R.array.class;
}
@Override
public Class<?> getStringResources() {
return R.string.class;
}
@Override
public int[] getDateFormatStrings() {
return new int[] {
//
};
}
/**
* check if string contains contains substrings
*/
public void contains(Resources r, int resource, StringBuilder failures, String... contains) {
String string = r.getString(resource);
for(String contain : contains)
if(!string.contains(contain)) {
Locale locale = r.getConfiguration().locale;
String name = r.getResourceName(resource);
failures.append(String.format("%s: %s did not contain: %s\n",
locale.toString(), name, contain));
}
}
/**
* Test dollar sign resources
*/
@Test
public void testSpecialStringsMatch() throws Exception {
final Resources r = getTargetContext().getResources();
final StringBuilder failures = new StringBuilder();
forEachLocale(() -> {
contains(r, R.string.CFC_tag_text, failures, "?");
contains(r, R.string.CFC_title_contains_text, failures, "?");
contains(r, R.string.CFC_dueBefore_text, failures, "?");
});
assertEquals(failures.toString(), 0,
failures.toString().replaceAll("[^\n]", "").length());
}
}
Loading…
Cancel
Save