/** * FormatTranslationTest.java * * Copyright (C) 2010, Volker Boerchers * * Translator.java is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Translator.java is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ package org.freeplane.ant; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import org.apache.tools.ant.Project; import org.junit.Test; public class FormatTranslationTest { private static final String TRANSLATIONS_SOURCE_DIR = System.getProperty("TRANSLATIONS_SOURCE_DIR"); private static String unix = "\n"; private static String mac = "\r"; private static String win = "\r\n"; @Test public void testComparator() { String[] strings = { "a.b = z", "a.b.c= y", "a.b= x", "a.b = x" }; Arrays.sort(strings, FormatTranslation.KEY_COMPARATOR); assertEquals("stable sort, only by key", "a.b = z", strings[0]); assertEquals("stable sort, only by key", "a.b= x", strings[1]); assertEquals("stable sort, only by key", "a.b = x", strings[2]); assertEquals("stable sort, only by key", "a.b.c= y", strings[3]); } @Test public void testCheckForEmptyValues() { final String regex = "\\s*(\\[auto\\]|\\[translate me\\])*\\s*"; assertTrue(" [auto]\r".matches(regex)); assertTrue("[translate me]\r".matches(regex)); assertTrue("\r".matches(regex)); assertTrue("".matches(regex)); assertFalse(" [nix]\r".matches(regex)); } @Test public void testMatchEolStyle() { assertTrue(TaskUtils.matchEolStyle("", unix)); assertTrue(TaskUtils.matchEolStyle("\n", unix)); assertTrue(TaskUtils.matchEolStyle("\n\n", unix)); assertFalse(TaskUtils.matchEolStyle("\r", unix)); assertFalse(TaskUtils.matchEolStyle("\r\n", unix)); // assertTrue(TaskUtils.matchEolStyle("", win)); assertTrue(TaskUtils.matchEolStyle("\r\n", win)); assertTrue(TaskUtils.matchEolStyle("\r\n\r\n", win)); assertFalse(TaskUtils.matchEolStyle("\r", win)); assertFalse(TaskUtils.matchEolStyle("\n\r", win)); assertFalse(TaskUtils.matchEolStyle("\n", win)); } @Test public void testCheckEolStyleAndReadLines() throws Exception { final String input = "one\r\ntwo\n\rthree\\\nthree.one\n\nfour"; ArrayList<String> resultList = new ArrayList<String>(); assertFalse("not unique unix", TaskUtils.checkEolStyleAndReadLines(input, resultList, unix)); assertEquals("a trailing backslash escapes a new line", 6, resultList.size()); assertFalse("not unique mac", TaskUtils.checkEolStyleAndReadLines(input, resultList, mac)); assertEquals(6, resultList.size()); assertFalse("not unique win", TaskUtils.checkEolStyleAndReadLines(input, resultList, win)); assertEquals(6, resultList.size()); // String unixInput = input.replaceAll("\r\n|\n|\r", unix); System.out.println("unixInput='" + f(unixInput) + "'"); assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, unix)); assertFalse("not mac", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, mac)); assertFalse("not win", TaskUtils.checkEolStyleAndReadLines(unixInput, resultList, win)); assertEquals("a trailing backslash escapes a new line", 6, resultList.size()); // String macInput = input.replaceAll("\r\n|\n|\r", mac); System.out.println("macInput='" + f(macInput) + "'"); assertTrue("unique mac", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, mac)); assertFalse("not unix", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, unix)); assertFalse("not win", TaskUtils.checkEolStyleAndReadLines(macInput, resultList, win)); assertEquals("a trailing backslash escapes a new line", 6, resultList.size()); // String winInput = input.replaceAll("\r\n|\n|\r", win); System.out.println("winInput='" + f(winInput) + "'"); assertTrue("unique win", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, win)); assertFalse("not unix", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, unix)); assertFalse("not mac", TaskUtils.checkEolStyleAndReadLines(winInput, resultList, mac)); assertEquals("a trailing backslash escapes a new line", 6, resultList.size()); // String resource = TaskUtils.readFile(new File(TRANSLATIONS_SOURCE_DIR, "Resources_de.properties")); assertTrue("not unix", TaskUtils.checkEolStyleAndReadLines(resource, resultList, unix)); } @Test public void testRemoveEmptyLines() throws Exception { final String msgConserved = "empty lines should be conserved"; final String msgRemoved = "empty lines should be removed"; final FormatTranslation formatTranslation = new FormatTranslation(); String input; ArrayList<String> lines = new ArrayList<String>(); // input = "\n \nx=y\n\n"; assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix)); assertEquals(msgConserved, 4, lines.size()); assertEquals(msgRemoved, 1, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size()); // input = "\n"; assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix)); assertEquals(msgConserved, 1, lines.size()); assertEquals(msgRemoved, 0, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size()); // input = " \n"; assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix)); assertEquals(msgConserved, 1, lines.size()); assertEquals(msgRemoved, 0, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size()); // input = "x=y"; assertTrue("unique unix", TaskUtils.checkEolStyleAndReadLines(input, lines, unix)); assertEquals(msgConserved, 1, lines.size()); assertEquals(msgRemoved, 1, formatTranslation.processLines("a_file", new ArrayList<String>(lines)).size()); // } private String f(String input) { return input.replace("\n", "\\n").replace("\r", "\\r"); } @Test public void testPlaceholderCheck() throws Exception { final FormatTranslation formatTranslation = new FormatTranslation(); String input; ArrayList<String> lines = new ArrayList<String>(); // input = "x = a {1} without a 0\n" // + "y = a $1 instead of a {0}"; // no actual test as long as those tests are not treated as failures TaskUtils.checkEolStyleAndReadLines(input, lines, unix); formatTranslation.processLines("a_file", new ArrayList<String>(lines)); } @Test public void testFormatTranslation() { final FormatTranslation formatTranslation = new FormatTranslation(); final Project project = TaskUtils.createProject(formatTranslation); formatTranslation.setTaskName("format-translation"); formatTranslation.setProject(project); formatTranslation.setEolStyle("unix"); assertNotNull("system property TRANSLATIONS_SOURCE_DIR not set", TRANSLATIONS_SOURCE_DIR); formatTranslation.setDir(TRANSLATIONS_SOURCE_DIR); formatTranslation.setIncludes("Resources_*.properties"); formatTranslation.execute(); System.out.println("done"); } }