/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.tools.workbench.test.utility.string; import java.util.ArrayList; import java.util.Collection; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.persistence.tools.workbench.utility.string.AffixStrippingPartialStringComparatorEngine; import org.eclipse.persistence.tools.workbench.utility.string.PartialStringComparatorEngine; import org.eclipse.persistence.tools.workbench.utility.string.SimpleStringHolder; import org.eclipse.persistence.tools.workbench.utility.string.StringHolder; public class SuffixStrippingPartialStringComparatorEngineTests extends TestCase { public static Test suite() { return new TestSuite(SuffixStrippingPartialStringComparatorEngineTests.class); } public SuffixStrippingPartialStringComparatorEngineTests(String name) { super(name); } public void testSuffixVariable1() { Collection holders1 = new ArrayList(100); holders1.addAll(this.buildSuffixStringHolders("xxx", 5)); holders1.addAll(this.buildSuffixStringHolders("yyy", 20)); holders1.addAll(this.buildSuffixStringHolders("zzz", 75)); Collection holders2 = new ArrayList(100); holders2.addAll(this.buildSuffixStringHolders("xxx", 5)); holders2.addAll(this.buildSuffixStringHolders("yyy", 20)); holders2.addAll(this.buildSuffixStringHolders("zzz", 75)); class LocalEngine implements PartialStringComparatorEngine { public StringHolderPair[] match(StringHolder[] stringHolders1, StringHolder[] stringHolders2) { SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("xxx", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("yyy", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzz", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("xxx", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("yyy", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzz", stringHolders2); return new StringHolderPair[0]; } } PartialStringComparatorEngine engine = this. buildFixedSuffixEngine(new LocalEngine(), 0.75f); engine.match((StringHolder[]) holders1.toArray(new StringHolder[holders1.size()]), (StringHolder[]) holders2.toArray(new StringHolder[holders2.size()])); } public void testSuffixVariable2() { Collection holders1 = new ArrayList(100); holders1.addAll(this.buildSuffixStringHolders("xxx", 5)); holders1.addAll(this.buildSuffixStringHolders("yyy", 20)); holders1.addAll(this.buildSuffixStringHolders("zzz", 75)); Collection holders2 = new ArrayList(100); holders2.addAll(this.buildSuffixStringHolders("xxx", 5)); holders2.addAll(this.buildSuffixStringHolders("yyy", 20)); holders2.addAll(this.buildSuffixStringHolders("zzz", 40)); holders2.addAll(this.buildSuffixStringHolders("aaazzz", 35)); class LocalEngine implements PartialStringComparatorEngine { public StringHolderPair[] match(StringHolder[] stringHolders1, StringHolder[] stringHolders2) { SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("xxx", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("yyy", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzz", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("xxx", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("yyy", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzz", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("aaa", stringHolders2); return new StringHolderPair[0]; } } PartialStringComparatorEngine engine = this. buildFixedSuffixEngine(new LocalEngine(), 0.50f); engine.match((StringHolder[]) holders1.toArray(new StringHolder[holders1.size()]), (StringHolder[]) holders2.toArray(new StringHolder[holders2.size()])); } public void testSuffixVariable3() { Collection holders1 = new ArrayList(100); holders1.addAll(this.buildSuffixStringHolders("xxx", 5)); holders1.addAll(this.buildSuffixStringHolders("yyy", 20)); holders1.addAll(this.buildSuffixStringHolders("zzz", 75)); Collection holders2 = new ArrayList(100); holders2.addAll(this.buildSuffixStringHolders("xxx", 5)); holders2.addAll(this.buildSuffixStringHolders("yyy", 20)); holders2.addAll(this.buildSuffixStringHolders("zzz", 40)); holders2.addAll(this.buildSuffixStringHolders("zzzaaa", 35)); holders2.add(new SimpleStringHolder("zzz")); // add a string that is ALL suffix! class LocalEngine implements PartialStringComparatorEngine { public StringHolderPair[] match(StringHolder[] stringHolders1, StringHolder[] stringHolders2) { SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("xxx", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("yyy", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzz", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("xxx", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("yyy", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzz", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzzaaa", stringHolders2); return new StringHolderPair[0]; } } PartialStringComparatorEngine engine = this. buildFixedSuffixEngine(new LocalEngine(), 0.25f); engine.match((StringHolder[]) holders1.toArray(new StringHolder[holders1.size()]), (StringHolder[]) holders2.toArray(new StringHolder[holders2.size()])); } public void testSuffixFixed() { Collection holders1 = new ArrayList(100); holders1.addAll(this.buildSuffixStringHolders("xxx", 5)); holders1.addAll(this.buildSuffixStringHolders("yyy", 20)); holders1.addAll(this.buildSuffixStringHolders("zzz", 75)); Collection holders2 = new ArrayList(100); holders2.addAll(this.buildSuffixStringHolders("xxx", 5)); holders2.addAll(this.buildSuffixStringHolders("yyy", 20)); holders2.addAll(this.buildSuffixStringHolders("zzz", 40)); holders2.addAll(this.buildSuffixStringHolders("zzzaaa", 35)); holders2.add(new SimpleStringHolder("zzz")); // add a string that is ALL suffix! class LocalEngine implements PartialStringComparatorEngine { public StringHolderPair[] match(StringHolder[] stringHolders1, StringHolder[] stringHolders2) { SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("xxx", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("yyy", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzz", stringHolders1); SuffixStrippingPartialStringComparatorEngineTests.this.assertSomeSuffixes("xxx", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("yyy", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzz", stringHolders2); SuffixStrippingPartialStringComparatorEngineTests.this.assertNoSuffixes("zzzaaa", stringHolders2); return new StringHolderPair[0]; } } PartialStringComparatorEngine engine = this. buildVariableSuffixEngine(new LocalEngine(), 20); engine.match((StringHolder[]) holders1.toArray(new StringHolder[holders1.size()]), (StringHolder[]) holders2.toArray(new StringHolder[holders2.size()])); } private Collection buildSuffixStringHolders(String suffix, int count) { Collection result = new ArrayList(count); for (int i = 1; i <= count; i++) { result.add(new SimpleStringHolder(i + suffix)); } return result; } void assertNoSuffixes(String suffix, StringHolder[] stringHolders) { for (int i = stringHolders.length; i-- > 0;) { if (stringHolders[i].getString().endsWith(suffix)) { fail("suffix should have been stripped: " + suffix); } } } void assertSomeSuffixes(String suffix, StringHolder[] stringHolders) { for (int i = stringHolders.length; i-- > 0;) { if (stringHolders[i].getString().endsWith(suffix)) { return; } } fail("suffix should NOT have been stripped: " + suffix); } private PartialStringComparatorEngine buildVariableSuffixEngine(PartialStringComparatorEngine engine, int threshold) { return AffixStrippingPartialStringComparatorEngine.forSuffixStripping(engine, threshold); } private PartialStringComparatorEngine buildFixedSuffixEngine(PartialStringComparatorEngine engine, float threshold) { return AffixStrippingPartialStringComparatorEngine.forSuffixStripping(engine, threshold); } }