package org.dcache.services.info.base;
import org.junit.Test;
import java.util.Map;
import static org.junit.Assert.*;
public class BooleanStateValueTests extends InfoBaseTestHelper {
/**
* A simple visitor to test that acceptVisitor works as expected.
*/
class TestBooleanVisitor implements StateVisitor {
boolean _visitCalledWrongMethod;
BooleanStateValue _value;
StatePath _visitPath;
// Visit a BooleanStateValue: we assert that this hasn't happened before.
@Override
public void visitBoolean( StatePath path, BooleanStateValue value) {
assertNull( "Stored _value not null", _value);
_value = value;
assertNull( "Stored _visitPath not null", _visitPath);
_visitPath = path;
}
@Override
public void visitString( StatePath path, StringStateValue value) {
_visitCalledWrongMethod = true;
}
@Override
public void visitInteger( StatePath path, IntegerStateValue value) {
_visitCalledWrongMethod = true;
}
@Override
public void visitFloatingPoint( StatePath path, FloatingPointStateValue value) {
_visitCalledWrongMethod = true;
}
@Override
public void visitCompositePreDescend( StatePath path, Map<String,String> metadata) {
_visitCalledWrongMethod = true;
}
@Override
public void visitCompositePostDescend( StatePath path, Map<String,String> metadata) {
_visitCalledWrongMethod = true;
}
@Override
public boolean isVisitable( StatePath path) {
return true;
}
}
@Test
public void testHashCode() {
int trueHash = new BooleanStateValue( true).hashCode();
int falseHash = new BooleanStateValue( false).hashCode();
assertTrue( "Two hash values are identical", trueHash != falseHash);
}
@Test
public void testGetTypeName() {
String typeName = new BooleanStateValue( true).getTypeName();
assertEquals( "Boolean typeName", "boolean", typeName);
}
@Test
public void testAcceptVisitorStatePathStateVisitor() {
BooleanStateValue booleanStateValue = new BooleanStateValue( true);
TestBooleanVisitor visitor = new TestBooleanVisitor();
StatePath myPath = StatePath.parsePath("first.second");
booleanStateValue.acceptVisitor( myPath, visitor);
assertFalse( "visitor called wrong methods", visitor._visitCalledWrongMethod);
assertEquals( "visit path not the same", visitor._visitPath, myPath);
assertEquals( "visit value not the same", visitor._value, booleanStateValue);
}
@Test
public void testBooleanStateValueBoolean() {
assertIsEphemeral( "Not as expected", new BooleanStateValue( false));
assertIsEphemeral( "Not as expected", new BooleanStateValue( true));
}
@Test
public void testBooleanStateValueBooleanBoolean() {
assertIsEphemeral( "Not as expected", new BooleanStateValue( false, false));
assertIsEphemeral( "Not as expected", new BooleanStateValue( true, false));
assertIsImmortal( "Not as expected", new BooleanStateValue( false, true));
assertIsImmortal( "Not as expected", new BooleanStateValue( true, true));
}
@Test
public void testBooleanStateValueBooleanLong() {
for( long duration = -1; duration < 3; duration++) {
assertIsMortal( "boolean: false + " + Long.toString(duration), new BooleanStateValue( false, duration), duration < 0 ? 0 : duration);
assertIsMortal( "boolean: true + " + Long.toString(duration), new BooleanStateValue( true, duration), duration < 0 ? 0 : duration);
}
}
}