diff --git a/src/androidTest/java/com/todoroo/andlib/test/TranslationTests.java b/src/androidTest/java/com/todoroo/andlib/test/TranslationTests.java index 181b5453b..9c7140621 100644 --- a/src/androidTest/java/com/todoroo/andlib/test/TranslationTests.java +++ b/src/androidTest/java/com/todoroo/andlib/test/TranslationTests.java @@ -8,11 +8,12 @@ package com.todoroo.andlib.test; import android.content.res.Configuration; import android.content.res.Resources; +import android.support.test.runner.AndroidJUnit4; import android.util.DisplayMetrics; import org.junit.Test; +import org.junit.runner.RunWith; import org.tasks.R; -import org.tasks.time.DateTime; import java.lang.reflect.Field; 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.assertFalse; import static junit.framework.Assert.assertTrue; -import static org.tasks.date.DateTimeUtils.newDateTime; /** * Tests translations for consistency with the default values. You must @@ -33,26 +33,8 @@ import static org.tasks.date.DateTimeUtils.newDateTime; * @author Tim Su * */ -abstract 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 +@RunWith(AndroidJUnit4.class) +public class TranslationTests { /** * Sets locale @@ -68,7 +50,7 @@ abstract public class TranslationTests { /** * Loop through each locale and call runnable */ - protected void forEachLocale(Runnable r) { + private void forEachLocale(Runnable r) { Locale[] locales = Locale.getAvailableLocales(); for(Locale locale : locales) { setLocale(locale); @@ -176,7 +158,7 @@ abstract public class TranslationTests { @Test public void testFormatStringsMatch() throws Exception { 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 StringBuilder failures = new StringBuilder(); @@ -192,7 +174,6 @@ abstract public class TranslationTests { } } - forEachLocale(() -> { Locale locale = r.getConfiguration().locale; 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 - public void testDateFormats() throws Exception { - final Resources r = getTargetContext().getResources(); - - final StringBuilder failures = new StringBuilder(); - final int[] dateStrings = getDateFormatStrings(); - final DateTime date = newDateTime(); - - 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())); - } + private 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)); } - }); - - assertEquals(failures.toString(), 0, errorCount(failures)); - } /** - * Test that there are the same number of array entries in each locale + * Test dollar sign resources */ @Test - public void testArraySizesMatch() throws Exception { + public void testSpecialStringsMatch() throws Exception { final Resources r = getTargetContext().getResources(); - final int[] arrays = getResourceIds(getArrayResources()); - final int[] sizes = new int[arrays.length]; 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(() -> { - for(int i = 0; i < arrays.length; i++) { - if(sizes[i] == -1) - continue; - 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])); - } - } + 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, errorCount(failures)); - } - // --- helper methods + assertEquals(failures.toString(), 0, + failures.toString().replaceAll("[^\n]", "").length()); + } /** * Count newlines @@ -320,7 +249,7 @@ abstract public class TranslationTests { /** * @return an array of all string resource id's */ - public int[] getResourceIds(Class resources) { + private int[] getResourceIds(Class resources) { Field[] fields = resources.getDeclaredFields(); List ids = new ArrayList<>(fields.length); for (Field field : fields) { @@ -335,5 +264,4 @@ abstract public class TranslationTests { idsAsIntArray[i] = ids.get(i); return idsAsIntArray; } - } diff --git a/src/androidTest/java/com/todoroo/astrid/test/AstridTranslationTest.java b/src/androidTest/java/com/todoroo/astrid/test/AstridTranslationTest.java deleted file mode 100644 index d7b80b5c9..000000000 --- a/src/androidTest/java/com/todoroo/astrid/test/AstridTranslationTest.java +++ /dev/null @@ -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()); - } -}