package org.vertexium.id;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class SimpleNameSubstitutionStrategyTest {
private static List<Pair<String, String>> templatePashingTest;
private SimpleNameSubstitutionStrategy testSubject;
private static final String KEY1 = "test";
private static final String KEY2 = "tint";
private static final String VALUE1 = "t";
private static final String VALUE2 = "p";
@BeforeClass
public static void beforeClass() {
templatePashingTest = Lists.newArrayList();
templatePashingTest.add(Pair.of(KEY1, VALUE1));
templatePashingTest.add(Pair.of(KEY2, VALUE2));
}
@Before
public void before() {
testSubject = new SimpleNameSubstitutionStrategy();
testSubject.setSubstitutionList(templatePashingTest);
}
@Test
public void testDeflate() {
String test = testSubject.deflate(KEY1);
assertThat(test, is(SimpleNameSubstitutionStrategy.wrap(VALUE1)));
}
@Test
public void testDeflateMultiple() {
String test = testSubject.deflate(KEY1 + KEY1);
assertThat(test, is(SimpleNameSubstitutionStrategy.wrap(VALUE1) + SimpleNameSubstitutionStrategy.wrap(VALUE1)));
}
@Test
public void testDeflateCache() {
assertEquals(0, testSubject.getDeflateCacheMisses());
assertEquals(0, testSubject.getDeflateCalls());
testSubject.deflate(KEY1);
assertEquals(1, testSubject.getDeflateCacheMisses());
assertEquals(1, testSubject.getDeflateCalls());
testSubject.deflate(KEY1);
assertEquals(1, testSubject.getDeflateCacheMisses());
assertEquals(2, testSubject.getDeflateCalls());
}
@Test
public void testInflate() {
String test = testSubject.inflate(SimpleNameSubstitutionStrategy.wrap(VALUE1));
assertThat(test, is(KEY1));
}
@Test
public void testInflateMultiple() {
String test = testSubject.inflate(SimpleNameSubstitutionStrategy.wrap(VALUE1) + SimpleNameSubstitutionStrategy.wrap(VALUE1));
assertThat(test, is(KEY1 + KEY1));
}
@Test
public void testInflateCache() {
assertEquals(0, testSubject.getInflateCacheMisses());
assertEquals(0, testSubject.getInflateCalls());
testSubject.inflate(SimpleNameSubstitutionStrategy.wrap(VALUE1));
assertEquals(1, testSubject.getInflateCacheMisses());
assertEquals(1, testSubject.getInflateCalls());
testSubject.inflate(SimpleNameSubstitutionStrategy.wrap(VALUE1));
assertEquals(1, testSubject.getInflateCacheMisses());
assertEquals(2, testSubject.getInflateCalls());
}
@Test
public void testSubstitutionIsInvertible() {
String test = testSubject.inflate(testSubject.deflate(KEY1));
assertThat(test, is(KEY1));
}
@Test
public void testNonSubstitutionReturnsOriginalInput() {
String test = testSubject.deflate("misspelled tets");
assertThat(test, is("misspelled tets"));
}
@Test
public void testNoSubstitutionsIsInvertable() {
String test = testSubject.inflate(testSubject.deflate("misspelled tets"));
assertThat(test, is("misspelled tets"));
}
@Test
public void testMultipleSubstitutionsGetSubstitutedMultipleTimes() {
String test = testSubject.deflate(KEY1 + KEY1);
assertThat(test, is(SimpleNameSubstitutionStrategy.wrap(VALUE1) + SimpleNameSubstitutionStrategy.wrap(VALUE1)));
}
@Test
public void testMultipleSameSubstitutionsAreCorrectlyReturned() {
String multipleSubstitutionString = KEY1 + KEY1;
String multipleSubstitutions = testSubject.inflate(testSubject.deflate(multipleSubstitutionString));
assertThat(multipleSubstitutions, is(multipleSubstitutionString));
}
@Test
public void testMultipleDifferentSubstitutionsAreCorrectlyReturned() {
String multipleSubstitutionString = KEY1 + KEY2;
String multipleSubstitutions = testSubject.inflate(testSubject.deflate(multipleSubstitutionString));
assertThat(multipleSubstitutions, is(multipleSubstitutionString));
}
@Test
public void testMultipleSubstitutionsWorkInOrder() {
String test = testSubject.deflate("testint");
assertThat(test, is(SimpleNameSubstitutionStrategy.wrap(VALUE1) + "int"));
}
@Test
public void testMultipleSubstitutionsWorkInOrder1() {
String test = testSubject.deflate("tintest");
assertThat(test, is("tin" + SimpleNameSubstitutionStrategy.wrap(VALUE1)));
}
}