| /******************************************************************************* |
| * Copyright (c) 2006, 2008 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| ******************************************************************************/ |
| |
| package org.eclipse.osgi.tests.util; |
| |
| import org.eclipse.osgi.util.TextProcessor; |
| |
| /** |
| * Tests for strings that use the TextProcessor and are run in a bidi locale. |
| * |
| * NOTE: Run these tests as a session test in order to have the correct |
| * locale set. Run class AllTests. |
| */ |
| public class BidiTextProcessorTestCase extends TextProcessorTestCase { |
| |
| // left to right marker |
| protected static final char LRM = '\u200e'; |
| // left to right embedding |
| protected static final char LRE = '\u202a'; |
| // pop directional format |
| protected static final char PDF = '\u202c'; |
| |
| private static String PATH_1_RESULT = LRE + PATH_1 + PDF; |
| private static String PATH_2_RESULT = LRE + PATH_2 + PDF; |
| private static String PATH_3_RESULT = LRE + PATH_3 + PDF; |
| private static String PATH_4_RESULT = LRE + PATH_4 + PDF; |
| private static String PATH_5_RESULT = LRE + "d" + ":" + "\\" + HEBREW_STRING_2 + " abcdef-" + HEBREW_STRING_3 + "\\" + "xyz" + "\\" + "abcdef" + "\\" + HEBREW_STRING_4 + LRM + "\\" + HEBREW_STRING_5 + "." + "java" + PDF; |
| private static String PATH_6_RESULT = LRE + "d" + ":" + "\\" + HEBREW_STRING_2 + " abcdef-" + HEBREW_STRING_3 + "\\" + "xyz" + "\\" + "abcdef" + "\\" + HEBREW_STRING_4 + LRM + "\\" + HEBREW_STRING_5 + LRM + "." + HEBREW_STRING_6 + PDF; |
| private static String PATH_7_RESULT = LRE + "d" + ":" + "\\" + HEBREW_STRING_2 + " abcdef-" + HEBREW_STRING_3 + "\\" + "xyz" + "\\" + "abcdef" + "\\" + HEBREW_STRING_4 + "\\" + "Test" + "." + "java" + PDF; |
| private static String PATH_8_RESULT = LRE + PATH_8 + PDF; |
| private static String PATH_9_RESULT = LRE + PATH_9 + PDF; |
| private static String PATH_10_RESULT = LRE + PATH_10 + PDF; |
| private static String PATH_11_RESULT = LRE + PATH_11 + PDF; |
| private static String PATH_12_RESULT = PATH_12; |
| private static String PATH_13_RESULT = LRE + PATH_13 + PDF; |
| |
| // additional strings |
| private static String STRING_1_RESULT = STRING_1; |
| private static String STRING_2_RESULT = STRING_2; |
| private static String STRING_3_RESULT = LRE + STRING_3 + PDF; |
| private static String STRING_4_RESULT = LRE + STRING_4 + PDF; |
| private static String STRING_5_RESULT = LRE + STRING_5 + PDF; |
| private static String STRING_6_RESULT = LRE + STRING_6 + PDF; |
| private static String STRING_7_RESULT = STRING_7; |
| private static String STRING_8_RESULT = LRE + STRING_8 + PDF; |
| private static String STRING_9_RESULT = LRE + "d:\\myFolder\\" + HEBREW_STRING_5 + LRM + "\\" + HEBREW_STRING_6 + ".java" + PDF; |
| private static String STRING_10_RESULT = LRE + "d:\\myFolder\\" + HEBREW_STRING_2 + LRM + "\\123/" + HEBREW_STRING_3 + ".java" + PDF; |
| private static String STRING_11_RESULT = LRE + "d:\\myFolder\\" + HEBREW_STRING_2 + LRM + "\\123/" + HEBREW_STRING_3 + LRM + "." + HEBREW_STRING_5 + PDF; |
| private static String STRING_12_RESULT = LRE + "d:\\myFolder\\" + HEBREW_STRING_2 + LRM + "\\123" + HEBREW_STRING_3 + LRM + "." + HEBREW_STRING_6 + PDF; |
| private static String STRING_13_RESULT = LRE + "d:\\myFolder\\" + HEBREW_STRING_2 + LRM + "\\123/myfile." + HEBREW_STRING_6 + PDF; |
| private static String STRING_14_RESULT = LRE + "d:\\myFolder\\" + HEBREW_STRING_2 + LRM + "\\123myfile." + HEBREW_STRING_6 + PDF; |
| private static String STRING_15_RESULT = LRE + "d:\\myFolder\\" + HEBREW_STRING_2 + "12-=" + LRM + "\\<>?34" + HEBREW_STRING_6 + ".java" + PDF; |
| private static String STRING_16_RESULT = LRE + HEBREW_STRING_2 + LRM + "/" + HEBREW_STRING_6 + LRM + "/" + HEBREW_STRING_4 + LRM + "." + HEBREW_STRING_5 + PDF; |
| private static String STRING_17_RESULT = LRE + HEBREW_STRING_7 + LRM + "/" + HEBREW_STRING_8 + LRM + "/" + HEBREW_STRING_9 + LRM + "/" + HEBREW_STRING_10 + LRM + "/" + HEBREW_STRING_11 + LRM + "/" + HEBREW_STRING_12 + LRM + "/" + HEBREW_STRING_13 + PDF; |
| private static String STRING_18_RESULT = LRE + "_" + HEBREW_STRING_2 + " mixed text starts and ends with neutral." + PDF; |
| private static String STRING_19_RESULT = LRE + "english and " + HEBREW_STRING_2 + " text starts with LTR ends with neutral _" + PDF; |
| |
| private static String OTHER_STRING_NO_DELIM = LRE + "\u05ea\u05e9\u05e8\u05e7\u05e6 abcdef-\u05e5\u05e4\u05e3" + PDF; |
| |
| private static String OTHER_STRING_1_RESULT = LRE + "*" + "." + "java" + PDF; |
| private static String OTHER_STRING_2_RESULT = LRE + "*" + "." + "\u05d0\u05d1\u05d2" + PDF; |
| private static String OTHER_STRING_3_RESULT = LRE + "\u05d0\u05d1\u05d2 " + LRM + "=" + " \u05ea\u05e9\u05e8\u05e7\u05e6" + PDF; |
| // result strings if null delimiter is passed |
| private static String OTHER_STRING_1_ND_RESULT = LRE + "*" + "." + "java" + PDF; |
| private static String OTHER_STRING_2_ND_RESULT = LRE + "*" + "." + "\u05d0\u05d1\u05d2" + PDF; |
| private static String OTHER_STRING_3_ND_RESULT = LRE + "\u05d0\u05d1\u05d2 " + "=" + " \u05ea\u05e9\u05e8\u05e7\u05e6" + PDF; |
| |
| private static String[] RESULT_DEFAULT_PATHS = {PATH_1_RESULT, PATH_2_RESULT, PATH_3_RESULT, PATH_4_RESULT, PATH_5_RESULT, PATH_6_RESULT, PATH_7_RESULT, PATH_8_RESULT, PATH_9_RESULT, PATH_10_RESULT, PATH_11_RESULT, PATH_12_RESULT, PATH_13_RESULT}; |
| |
| private static String[] RESULT_ADDITIONAL_STRINGS = {STRING_1_RESULT, STRING_2_RESULT, STRING_3_RESULT, STRING_4_RESULT, STRING_5_RESULT, STRING_6_RESULT, STRING_7_RESULT, STRING_8_RESULT, STRING_9_RESULT, STRING_10_RESULT, STRING_11_RESULT, STRING_12_RESULT, STRING_13_RESULT, STRING_14_RESULT, STRING_15_RESULT, STRING_16_RESULT, STRING_17_RESULT, STRING_18_RESULT, STRING_19_RESULT}; |
| |
| private static String[] RESULT_STAR_PATHS = {OTHER_STRING_1_RESULT, OTHER_STRING_2_RESULT}; |
| |
| private static String[] RESULT_EQUALS_PATHS = {OTHER_STRING_3_RESULT}; |
| |
| private static String[] RESULT_STAR_PATHS_ND = {OTHER_STRING_1_ND_RESULT, OTHER_STRING_2_ND_RESULT}; |
| |
| private static String[] RESULT_EQUALS_PATHS_ND = {OTHER_STRING_3_ND_RESULT}; |
| |
| // whether or not the current platform supports directional characters |
| private static boolean isSupportedPlatform = false; |
| static { |
| String osName = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$ |
| if (osName.startsWith("windows") || osName.startsWith("linux") || osName.startsWith("mac")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| |
| // Only consider platforms that can support control characters |
| isSupportedPlatform = true; |
| } |
| } |
| |
| protected static String defaultDelimiters = TextProcessor.getDefaultDelimiters(); |
| |
| /** |
| * Constructor. |
| * |
| * @param name test name |
| */ |
| public BidiTextProcessorTestCase(String name) { |
| super(name); |
| } |
| |
| /* |
| * Test TextProcessor for file paths. |
| */ |
| public void testBidiPaths() { |
| for (int i = 0; i < TEST_DEFAULT_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_DEFAULT_PATHS[i]); |
| if (isSupportedPlatform) |
| verifyBidiResult("Process path " + (i + 1), result, RESULT_DEFAULT_PATHS[i]); |
| else |
| verifyResult("Process path " + (i + 1), result, TEST_DEFAULT_PATHS[i]); |
| } |
| } |
| |
| public void testBidiPathsDeprocess() { |
| for (int i = 0; i < TEST_DEFAULT_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_DEFAULT_PATHS[i]); |
| String resultDP = TextProcessor.deprocess(result); |
| verifyBidiResult("Deprocess path " + (i + 1), resultDP, TEST_DEFAULT_PATHS[i]); |
| } |
| } |
| |
| public void testBidiPathsWithNullDelimiter() { |
| // should use default delimiters |
| for (int i = 0; i < TEST_DEFAULT_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_DEFAULT_PATHS[i], null); |
| if (isSupportedPlatform) |
| verifyBidiResult("Process path " + (i + 1), result, RESULT_DEFAULT_PATHS[i]); |
| else |
| verifyResult("Process path " + (i + 1), result, TEST_DEFAULT_PATHS[i]); |
| } |
| } |
| |
| public void testBidiStringWithNoDelimiters() { |
| String result = TextProcessor.process(OTHER_STRING_NO_DELIM); |
| assertEquals("Other string containing no delimiters not equivalent.", OTHER_STRING_NO_DELIM, result); |
| } |
| |
| /* |
| * Test other possible uses for TextProcessor, including file associations and |
| * variable assignment statements. |
| */ |
| public void testOtherStrings() { |
| int testNum = 1; |
| for (int i = 0; i < TEST_STAR_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_STAR_PATHS[i], "*."); |
| if (isSupportedPlatform) |
| verifyBidiResult("Other (star) string" + testNum, result, RESULT_STAR_PATHS[i]); |
| else |
| verifyResult("Other (star) string" + testNum, result, TEST_STAR_PATHS[i]); |
| testNum++; |
| } |
| |
| for (int i = 0; i < TEST_EQUALS_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_EQUALS_PATHS[i], "="); |
| if (isSupportedPlatform) |
| verifyBidiResult("Other (equals) string" + testNum, result, RESULT_EQUALS_PATHS[i]); |
| else |
| verifyResult("Other (equals) string" + testNum, result, TEST_EQUALS_PATHS[i]); |
| testNum++; |
| } |
| } |
| |
| public void testOtherStringsDeprocess() { |
| int testNum = 1; |
| for (int i = 0; i < TEST_STAR_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_STAR_PATHS[i], "*."); |
| String resultDP = TextProcessor.deprocess(result); |
| verifyBidiResult("Deprocess other (star) string" + testNum, resultDP, TEST_STAR_PATHS[i]); |
| testNum++; |
| } |
| |
| for (int i = 0; i < TEST_EQUALS_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_EQUALS_PATHS[i], "="); |
| String resultDP = TextProcessor.deprocess(result); |
| verifyBidiResult("Deprocess other (equals) string" + testNum, resultDP, TEST_EQUALS_PATHS[i]); |
| testNum++; |
| } |
| } |
| |
| public void testOtherStringsWithNullDelimiter() { |
| int testNum = 1; |
| for (int i = 0; i < TEST_STAR_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_STAR_PATHS[i], null); |
| if (isSupportedPlatform) |
| verifyBidiResult("Other (star) string" + testNum, result, RESULT_STAR_PATHS_ND[i]); |
| else |
| verifyResult("Other (star) string" + testNum, result, TEST_STAR_PATHS[i]); |
| testNum++; |
| } |
| |
| for (int i = 0; i < TEST_EQUALS_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_EQUALS_PATHS[i], null); |
| if (isSupportedPlatform) |
| verifyBidiResult("Other (equals) string" + testNum, result, RESULT_EQUALS_PATHS_ND[i]); |
| else { |
| verifyResult("Other (equals) string" + testNum, result, TEST_EQUALS_PATHS[i]); |
| } |
| testNum++; |
| } |
| } |
| |
| /* |
| * Test the result to ensure markers aren't added more than once if the |
| * string is processed multiple times. |
| */ |
| public void testDoubleProcessPaths() { |
| for (int i = 0; i < TEST_DEFAULT_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_DEFAULT_PATHS[i]); |
| result = TextProcessor.process(result); |
| if (isSupportedPlatform) |
| verifyBidiResult("Path " + (i + 1), result, RESULT_DEFAULT_PATHS[i]); |
| else |
| verifyResult("Path " + (i + 1), result, TEST_DEFAULT_PATHS[i]); |
| } |
| } |
| |
| /* |
| * Test the result to ensure markers aren't added more than once if the |
| * string is processed multiple times. |
| */ |
| public void testDoubleProcessOtherStrings() { |
| int testNum = 1; |
| for (int i = 0; i < TEST_STAR_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_STAR_PATHS[i], "*."); |
| result = TextProcessor.process(result, "*."); |
| if (isSupportedPlatform) |
| verifyBidiResult("Other (star) string " + testNum, result, RESULT_STAR_PATHS[i]); |
| else |
| verifyResult("Other (star) string " + testNum, result, TEST_STAR_PATHS[i]); |
| testNum++; |
| } |
| |
| for (int i = 0; i < TEST_EQUALS_PATHS.length; i++) { |
| String result = TextProcessor.process(TEST_EQUALS_PATHS[i], "="); |
| result = TextProcessor.process(result, "="); |
| if (isSupportedPlatform) |
| verifyBidiResult("Other (equals) string" + testNum, result, RESULT_EQUALS_PATHS[i]); |
| else |
| verifyResult("Other (equals) string" + testNum, result, TEST_EQUALS_PATHS[i]); |
| testNum++; |
| } |
| } |
| |
| public void testAdditionalStrings() { |
| for (int i = 0; i < TEST_ADDITIONAL_STRINGS.length; i++) { |
| String result = TextProcessor.process(TEST_ADDITIONAL_STRINGS[i]); |
| if (isSupportedPlatform) |
| verifyBidiResult("Additional string " + (i + 1), result, RESULT_ADDITIONAL_STRINGS[i]); |
| else |
| verifyResult("Additional string " + (i + 1), result, TEST_ADDITIONAL_STRINGS[i]); |
| } |
| } |
| |
| public void testAdditionalStringsDeprocess() { |
| for (int i = 0; i < TEST_ADDITIONAL_STRINGS.length; i++) { |
| String result = TextProcessor.process(TEST_ADDITIONAL_STRINGS[i]); |
| String resultDP = TextProcessor.deprocess(result); |
| verifyBidiResult("Additional string " + (i + 1), resultDP, TEST_ADDITIONAL_STRINGS[i]); |
| } |
| } |
| |
| public void testEmptyStringParams() { |
| verifyBidiResult("TextProcessor.process(String) for empty string ", TextProcessor.process(""), EMPTY_STRING); |
| verifyBidiResult("TextProcessor.process(String, String) for empty strings ", TextProcessor.process("", ""), EMPTY_STRING); |
| } |
| |
| public void testEmptyStringParamsDeprocess() { |
| verifyBidiResult("TextProcessor.deprocess(String) for empty string ", TextProcessor.deprocess(""), EMPTY_STRING); |
| } |
| |
| public void testNullParams() { |
| assertNull("TextProcessor.process(String) for null param ", TextProcessor.process(null)); |
| assertNull("TextProcessor.process(String, String) for params ", TextProcessor.process(null, null)); |
| } |
| |
| public void testNullParamsDeprocess() { |
| assertNull("TextProcessor.deprocess(String) for null param ", TextProcessor.deprocess(null)); |
| } |
| |
| private void verifyBidiResult(String testName, String result, String expected) { |
| boolean testResult = result.equals(expected); |
| assertTrue(testName + " result string is not the same as expected string.", testResult); |
| } |
| } |