/******************************************************************************* * Copyright (c) 2005, 2014 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.jdt.core.tests.compiler.regression; import org.eclipse.jdt.core.compiler.CharOperation; import junit.framework.Test; @SuppressWarnings({ "rawtypes" }) public class CharOperationTest extends AbstractRegressionTest { public CharOperationTest(String name) { super(name); } public static Test suite() { return buildAllCompliancesTestSuite(testClass()); } public static Class testClass() { return CharOperationTest.class; } public void test001() { char[] array = { 'a' , 'b', 'b', 'c', 'a', 'b', 'c', 'a' }; char[] toBeReplaced = { 'b', 'c' }; char replacementChar = 'a'; int start = 4; int end = 8; CharOperation.replace(array, toBeReplaced, replacementChar, start, end); char[] result = { 'a' , 'b', 'b', 'c', 'a', 'a', 'a', 'a' }; for (int i = 0, max = array.length; i < max; i++) { assertEquals("Wrong value at " + i, result[i], array[i]); } } public void test002() { char[] array = { 'a' , 'b', 'b', 'c', 'a', 'b', 'c', 'a' }; char[] toBeReplaced = { 'b', 'c' }; char replacementChar = 'a'; int start = 2; int end = 3; CharOperation.replace(array, toBeReplaced, replacementChar, start, end); char[] result = { 'a' , 'b', 'a', 'c', 'a', 'b', 'c', 'a' }; for (int i = 0, max = array.length; i < max; i++) { assertEquals("Wrong value at " + i, result[i], array[i]); } } public void test003() { char[] second = { 'a' , 'b', 'b', 'c', 'a', 'b', 'c', 'a' }; char[] first = { 'b', 'c', 'a' }; int start = 2; int end = 5; assertTrue(CharOperation.equals(first, second, start, end, true)); } public void test004() { char[] second = { 'A' }; char[] first = { 'a' }; int start = 0; int end = 1; assertTrue(CharOperation.equals(first, second, start, end, false)); } public void test005() { char[] array = { 'a' , 'b', 'b', 'c', 'a', 'b', 'c', 'a' }; char[] toBeReplaced = { 'b', 'c' }; char replacementChar = 'a'; CharOperation.replace(array, toBeReplaced, replacementChar); char[] result = { 'a' , 'a', 'a', 'a', 'a', 'a', 'a', 'a' }; for (int i = 0, max = array.length; i < max; i++) { assertEquals("Wrong value at " + i, result[i], array[i]); } } public void test006() { char[] array = { 'a' , 'a', 'a', 'a', 'a', 'b', 'c', 'a' }; char[] toBeReplaced = { 'a', 'a' }; char[] replacementChar = { 'a' }; char[] result = CharOperation.replace(array, toBeReplaced, replacementChar); char[] expectedValue = { 'a' , 'a', 'a', 'b', 'c', 'a' }; assertEquals("Wrong size", expectedValue.length, result.length); for (int i = 0, max = expectedValue.length; i < max; i++) { assertEquals("Wrong value at " + i, result[i], expectedValue[i]); } } // test compareTo(char[], char[]) public void test007() { char[] array = { 'a' , 'a', 'a', 'a', 'a', 'b', 'c', 'a' }; char[] array2 = { 'a', 'a' }; assertTrue(CharOperation.compareTo(array, array2) > 0); array2 = new char[] { 'a', 'a' }; array = new char[] { 'a' , 'a', 'a', 'a', 'a', 'b', 'c', 'a' }; assertTrue(CharOperation.compareTo(array2, array) < 0); array = new char[] { 'a' , 'a', 'a', 'a', 'a', 'b', 'c', 'a' }; array2 = new char[] { 'a' , 'a', 'a', 'a', 'a', 'b', 'c', 'a' }; assertTrue(CharOperation.compareTo(array, array2) == 0); assertTrue(CharOperation.compareTo(array2, array) == 0); array = new char[] { 'a' , 'b', 'c' }; array2 = new char[] { 'a' , 'b', 'c', 'a', 'a'}; assertTrue(CharOperation.compareTo(array, array2) < 0); array = new char[] { 'a' , 'b', 'c' }; array2 = new char[] { 'a' , 'b', 'd'}; assertTrue(CharOperation.compareTo(array, array2) < 0); } // test indexOf case sensitive public void test008() { char[] array = new char[] { 'a' , 'b', 'c' }; char[] array2 = new char[] { 'a' , 'b', 'c', 'a', 'a'}; assertTrue(CharOperation.indexOf(array, array2, true, -1) < 0); } // test indexOf case insensitive public void test009() { char[] array = new char[] { 'a' , 'b', 'c' }; char[] array2 = new char[] { 'a' , 'b', 'c', 'a', 'a'}; assertTrue(CharOperation.indexOf(array, array2, false, -1) < 0); } //test new API org.eclipse.jdt.core.compiler.CharOperation.prefixEquals(char[], char[], boolean, int) public void test010() { char[] name = new char[] { 'a' , 'b', 'c', 'a', 'a' }; char[] prefix = new char[] { 'c', 'a', 'a' }; assertTrue(CharOperation.prefixEquals(prefix, name, false, 2)); prefix = new char[] { 'c', 'a', 'a', 'a' }; assertFalse(CharOperation.prefixEquals(prefix, name, false, 2)); prefix = new char[] { 'c', 'a', 'A' }; assertFalse(CharOperation.prefixEquals(prefix, name, true, 2)); prefix = new char[] { 'b', 'c' }; assertFalse(CharOperation.prefixEquals(prefix, name, false, 2)); assertTrue(CharOperation.prefixEquals(prefix, name, false, 1)); } // test for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=324189 public void test011() { char[] pattern = new char[] { 'a' }; char[] name = "AnotherA".toCharArray(); assertFalse("Should not match", CharOperation.match( pattern, 0, 1, name, 0, 8, false)); } // test the javadoc examples public void test012() { assertTrue("Should match", CharOperation.match( new char[] { '?', 'b', '*' }, 1, 3, new char[] { 'a', 'b', 'c' , 'd' }, 1, 4, true)); assertFalse("Should not match", CharOperation.match( new char[] { '?', 'b', '*' }, 1, 2, new char[] { 'a', 'b', 'c' , 'd' }, 1, 4, true)); } }