/*******************************************************************************
* 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 PrefixStrippingPartialStringComparatorEngineTests extends TestCase {
public static Test suite() {
return new TestSuite(PrefixStrippingPartialStringComparatorEngineTests.class);
}
public PrefixStrippingPartialStringComparatorEngineTests(String name) {
super(name);
}
public void testPrefixVariable1() {
Collection holders1 = new ArrayList(100);
holders1.addAll(this.buildPrefixStringHolders("xxx", 5));
holders1.addAll(this.buildPrefixStringHolders("yyy", 20));
holders1.addAll(this.buildPrefixStringHolders("zzz", 75));
Collection holders2 = new ArrayList(100);
holders2.addAll(this.buildPrefixStringHolders("xxx", 5));
holders2.addAll(this.buildPrefixStringHolders("yyy", 20));
holders2.addAll(this.buildPrefixStringHolders("zzz", 75));
class LocalEngine implements PartialStringComparatorEngine {
public StringHolderPair[] match(StringHolder[] stringHolders1, StringHolder[] stringHolders2) {
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("xxx", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("yyy", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzz", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("xxx", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("yyy", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzz", stringHolders2);
return new StringHolderPair[0];
}
}
PartialStringComparatorEngine engine = this. buildFixedPrefixEngine(new LocalEngine(), 0.75f);
engine.match((StringHolder[]) holders1.toArray(new StringHolder[holders1.size()]), (StringHolder[]) holders2.toArray(new StringHolder[holders2.size()]));
}
public void testPrefixVariable2() {
Collection holders1 = new ArrayList(100);
holders1.addAll(this.buildPrefixStringHolders("xxx", 5));
holders1.addAll(this.buildPrefixStringHolders("yyy", 20));
holders1.addAll(this.buildPrefixStringHolders("zzz", 75));
Collection holders2 = new ArrayList(100);
holders2.addAll(this.buildPrefixStringHolders("xxx", 5));
holders2.addAll(this.buildPrefixStringHolders("yyy", 20));
holders2.addAll(this.buildPrefixStringHolders("zzz", 40));
holders2.addAll(this.buildPrefixStringHolders("zzzaaa", 35));
class LocalEngine implements PartialStringComparatorEngine {
public StringHolderPair[] match(StringHolder[] stringHolders1, StringHolder[] stringHolders2) {
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("xxx", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("yyy", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzz", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("xxx", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("yyy", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzz", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("aaa", stringHolders2);
return new StringHolderPair[0];
}
}
PartialStringComparatorEngine engine = this. buildFixedPrefixEngine(new LocalEngine(), 0.50f);
engine.match((StringHolder[]) holders1.toArray(new StringHolder[holders1.size()]), (StringHolder[]) holders2.toArray(new StringHolder[holders2.size()]));
}
public void testPrefixVariable3() {
Collection holders1 = new ArrayList(100);
holders1.addAll(this.buildPrefixStringHolders("xxx", 5));
holders1.addAll(this.buildPrefixStringHolders("yyy", 20));
holders1.addAll(this.buildPrefixStringHolders("zzz", 75));
Collection holders2 = new ArrayList(100);
holders2.addAll(this.buildPrefixStringHolders("xxx", 5));
holders2.addAll(this.buildPrefixStringHolders("yyy", 20));
holders2.addAll(this.buildPrefixStringHolders("zzz", 40));
holders2.addAll(this.buildPrefixStringHolders("zzzaaa", 35));
holders2.add(new SimpleStringHolder("zzz")); // add a string that is ALL prefix!
class LocalEngine implements PartialStringComparatorEngine {
public StringHolderPair[] match(StringHolder[] stringHolders1, StringHolder[] stringHolders2) {
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("xxx", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("yyy", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzz", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("xxx", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("yyy", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzz", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzzaaa", stringHolders2);
return new StringHolderPair[0];
}
}
PartialStringComparatorEngine engine = this. buildFixedPrefixEngine(new LocalEngine(), 0.25f);
engine.match((StringHolder[]) holders1.toArray(new StringHolder[holders1.size()]), (StringHolder[]) holders2.toArray(new StringHolder[holders2.size()]));
}
public void testPrefixFixed() {
Collection holders1 = new ArrayList(100);
holders1.addAll(this.buildPrefixStringHolders("xxx", 5));
holders1.addAll(this.buildPrefixStringHolders("yyy", 20));
holders1.addAll(this.buildPrefixStringHolders("zzz", 75));
Collection holders2 = new ArrayList(100);
holders2.addAll(this.buildPrefixStringHolders("xxx", 5));
holders2.addAll(this.buildPrefixStringHolders("yyy", 20));
holders2.addAll(this.buildPrefixStringHolders("zzz", 40));
holders2.addAll(this.buildPrefixStringHolders("zzzaaa", 35));
holders2.add(new SimpleStringHolder("zzz")); // add a string that is ALL prefix!
class LocalEngine implements PartialStringComparatorEngine {
public StringHolderPair[] match(StringHolder[] stringHolders1, StringHolder[] stringHolders2) {
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("xxx", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("yyy", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzz", stringHolders1);
PrefixStrippingPartialStringComparatorEngineTests.this.assertSomePrefixes("xxx", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("yyy", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzz", stringHolders2);
PrefixStrippingPartialStringComparatorEngineTests.this.assertNoPrefixes("zzzaaa", stringHolders2);
return new StringHolderPair[0];
}
}
PartialStringComparatorEngine engine = this. buildVariablePrefixEngine(new LocalEngine(), 20);
engine.match((StringHolder[]) holders1.toArray(new StringHolder[holders1.size()]), (StringHolder[]) holders2.toArray(new StringHolder[holders2.size()]));
}
private Collection buildPrefixStringHolders(String prefix, int count) {
Collection result = new ArrayList(count);
for (int i = 1; i <= count; i++) {
result.add(new SimpleStringHolder(prefix + i));
}
return result;
}
void assertNoPrefixes(String prefix, StringHolder[] stringHolders) {
for (int i = stringHolders.length; i-- > 0;) {
if (stringHolders[i].getString().startsWith(prefix)) {
fail("prefix should have been stripped: " + prefix);
}
}
}
void assertSomePrefixes(String prefix, StringHolder[] stringHolders) {
for (int i = stringHolders.length; i-- > 0;) {
if (stringHolders[i].getString().startsWith(prefix)) {
return;
}
}
fail("prefix should NOT have been stripped: " + prefix);
}
private PartialStringComparatorEngine buildVariablePrefixEngine(PartialStringComparatorEngine engine, int threshold) {
return AffixStrippingPartialStringComparatorEngine.forPrefixStripping(engine, threshold);
}
private PartialStringComparatorEngine buildFixedPrefixEngine(PartialStringComparatorEngine engine, float threshold) {
return AffixStrippingPartialStringComparatorEngine.forPrefixStripping(engine, threshold);
}
}