package test.org.kalisen.classpathdoctor; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertSame; import mockit.Mockit; import org.kalisen.classpathdoctor.AbstractVariableResolver; import org.kalisen.classpathdoctor.Environment; import org.testng.annotations.AfterTest; import org.testng.annotations.Test; @Test public abstract class AbstractTestVariableResolver { private static final String VAR_NAME = "MY_VARIABLE"; protected static final String VAR_VALUE = "MY_VALUE"; @Test public void aVariableValueCanContainFileSeparator() { AbstractVariableResolver r = getTestedVariableResolver(); MockEnvironment mock = new MockEnvironment(); mock.varValue = getVariableValueWithSeparator(); Mockit.redefineMethods(Environment.class, mock); String value = r.resolve(getVariableReference()); assertEquals(value, getVariableValueWithSeparator()); } protected abstract String getVariableValueWithSeparator(); @Test public void resolveNonExistingVariable() { AbstractVariableResolver r = getTestedVariableResolver(); Mockit.redefineMethods(Environment.class, MockEnvironment.class); String nonExistingVariableRef = getNonExistingVariableReference(); String value = r.resolve(nonExistingVariableRef); assertEquals(value, nonExistingVariableRef); } @Test public void resolveVariable() { AbstractVariableResolver r = getTestedVariableResolver(); Mockit.redefineMethods(Environment.class, MockEnvironment.class); String value = r.resolve(getVariableReference()); assertEquals(value, VAR_VALUE); } @Test public void resolveVariableWithinAPath() { AbstractVariableResolver r = getTestedVariableResolver(); Mockit.redefineMethods(Environment.class, MockEnvironment.class); String path = "some_path" + getPathSeparator() + getVariableReference() + getPathSeparator() + "some more path" + getPathSeparator(); String expectedPath = "some_path" + getPathSeparator() + VAR_VALUE + getPathSeparator() + "some more path" + getPathSeparator(); String result = r.resolve(path); assertEquals(result, expectedPath); } @Test public void testEnvironmentSetterAndGetter() { AbstractVariableResolver r = getTestedVariableResolver(); Environment env = new Environment(); r.setEnvironment(env); assertSame(r.getEnvironment(), env); } @Test(expectedExceptions = IllegalArgumentException.class) public void passingNullToSetEnvironmentShouldThrowAnInvalidArgumentException() { AbstractVariableResolver r = getTestedVariableResolver(); r.setEnvironment(null); } @AfterTest public void tearDown() { Mockit.assertExpectations(); Mockit.tearDownMocks(); } protected abstract String getVariableReference(); protected abstract String getNonExistingVariableReference(); protected abstract String getPathSeparator(); public static class MockEnvironment { public String varValue = null; public MockEnvironment() { this.varValue = AbstractTestVariableResolver.VAR_VALUE; } public String getValue(String variable) { if (VAR_NAME.equals(variable)) { return this.varValue; } return null; } } protected abstract AbstractVariableResolver getTestedVariableResolver(); }