package org.dcache.services.info.base;
import org.junit.Test;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import static org.junit.Assert.*;
public class IntegerStateValueTest extends InfoBaseTestHelper {
private static final int TEST_INTEGERS[] = {-2, -1, 0, 1, 2 };
private static final int TEST_DURATIONS[] = {-1, 0, 1, 2 };
/** An integer value never used when testing */
private static final int NOT_USED_INTEGER = -99;
@Test
public void testHashCode() {
Set<Integer> seenHashCodes = new TreeSet<>();
for( long testInt : TEST_INTEGERS) {
IntegerStateValue testValue = new IntegerStateValue( testInt);
assertFalse( "hashCode for " + testInt + " repeated",
hashAlreadySeen( seenHashCodes, testValue.hashCode()));
IntegerStateValue testValue2 = new IntegerStateValue( testInt);
assertTrue( "hashCode for " + testInt + " not found again",
hashAlreadySeen( seenHashCodes, testValue2.hashCode()));
}
}
@Test
public void testGetTypeName() {
for( int testInt : TEST_INTEGERS) {
IntegerStateValue testValue = new IntegerStateValue( testInt);
assertEquals( "unexpected value", "integer", testValue.getTypeName());
}
}
@Test
public void testAcceptVisitorStatePathStateVisitor() {
class TestIntegerVisitor implements StateVisitor {
boolean broken;
long foundValue = NOT_USED_INTEGER;
StatePath foundPath;
@Override
public void visitString( StatePath path, StringStateValue value) {
broken = true;
}
@Override
public void visitInteger( StatePath path, IntegerStateValue value) {
foundPath = path;
foundValue = value.getValue();
}
@Override
public void visitBoolean( StatePath path, BooleanStateValue value) {
broken = true;
}
@Override
public void visitFloatingPoint( StatePath path, FloatingPointStateValue value) {
broken = true;
}
@Override
public void visitCompositePreDescend( StatePath path, Map<String,String> metadata) {
broken = true;
}
@Override
public void visitCompositePostDescend( StatePath path, Map<String,String> metadata) {
broken = true;
}
@Override
public boolean isVisitable( StatePath path) {
return true;
}
}
StatePath path = new StatePath( "path");
for( long testInteger : TEST_INTEGERS) {
IntegerStateValue testValue = new IntegerStateValue( testInteger);
TestIntegerVisitor testVisitor = new TestIntegerVisitor();
testValue.acceptVisitor( path, testVisitor);
assertFalse( "visitor called back on a method it shouldn't have", testVisitor.broken);
assertTrue( "visitor failed to discover integer value", testVisitor.foundValue == testInteger);
assertEquals( "visitor failed to return equal StatePath", path, testVisitor.foundPath);
}
}
@Test
public void testEqualsObject() {
for( long firstInteger : TEST_INTEGERS) {
IntegerStateValue firstIsv = new IntegerStateValue( firstInteger);
for( long secondInteger : TEST_INTEGERS) {
IntegerStateValue secondIsv = new IntegerStateValue( secondInteger);
boolean shouldBeEqual;
shouldBeEqual = firstInteger == secondInteger;
if( shouldBeEqual) {
assertEquals( "two IntegerStateValues same creating long, first.equals(second)", firstIsv, secondIsv);
assertEquals( "two IntegerStateValues same creating long, second.equals(first)", secondIsv, firstIsv);
} else {
assertFalse( "two IntegerStateValues different creating long, first.equals(second)", firstIsv.equals( secondIsv));
assertFalse( "two IntegerStateValues different creating long, second.equals(first)", secondIsv.equals( firstIsv));
}
}
}
}
@Test
public void testIntegerStateValueLongLong() {
for( long intVal : TEST_INTEGERS) {
assertIsEphemeral("creating with integer: " + intVal, new IntegerStateValue(intVal));
}
}
@Test
public void testIntegerStateValueLongBoolean() {
for( long intVal : TEST_INTEGERS) {
assertIsEphemeral("creating with integer: " + intVal, new IntegerStateValue(intVal, false));
}
for( long intVal : TEST_INTEGERS) {
assertIsImmortal("creating with integer: " + intVal, new IntegerStateValue(intVal, true));
}
}
@Test
public void testIntegerStateValueLong() {
for( long intVal : TEST_INTEGERS) {
for( long duration : TEST_DURATIONS) {
IntegerStateValue testVal = new IntegerStateValue( intVal, duration);
assertIsMortal( "IntegerStateValue \"" + intVal + "\" + " + Long.toString(duration), testVal, duration < 0 ? 0 : duration);
}
}
}
@Test
public void testToString() {
for( long intVal : TEST_INTEGERS) {
IntegerStateValue testVal = new IntegerStateValue( intVal);
assertEquals( "toString() failed", Long.toString( intVal), testVal.toString());
}
}
@Test
public void testGetValue() {
for( long intVal : TEST_INTEGERS) {
IntegerStateValue testVal = new IntegerStateValue( intVal);
assertTrue( "getValue() returned wrong value", intVal == testVal.getValue());
}
}
}