package ecologylab.bigsemantics.metadata;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import org.junit.Before;
import org.junit.Test;
import ecologylab.bigsemantics.generated.library.RepositoryMetadataTypesScope;
import ecologylab.bigsemantics.metadata.builtins.declarations.MetadataDeclaration;
import ecologylab.bigsemantics.metadata.scalar.MetadataString;
import ecologylab.bigsemantics.metadata.scalar.types.MetadataStringScalarType;
import ecologylab.bigsemantics.metadata.scalar.types.SemanticsTypes;
import ecologylab.serialization.ClassDescriptor;
import ecologylab.serialization.FieldDescriptor;
import ecologylab.serialization.FieldType;
import ecologylab.serialization.SimplTypesScope;
import ecologylab.serialization.XMLTools;
import ecologylab.serialization.annotations.simpl_scalar;
import ecologylab.serialization.types.ScalarType;
import ecologylab.serialization.types.TypeRegistry;
public class TestBuiltinDescription {
@Before
public void ResetSTSBeforeExecution()
{
SimplTypesScope.ResetAllTypesScopes();
}
@Test
public void testThatMetadataStringsAreDescribedAsScalars()
{
new SemanticsTypes(); // this registers all metadata scalar types.
final class myMetadataStringScalar
{
@simpl_scalar
private MetadataString myString;
}
ClassDescriptor cd = ClassDescriptor.getClassDescriptor(myMetadataStringScalar.class);
assertEquals(1, cd.allFieldDescriptors().size());
FieldDescriptor theField = (FieldDescriptor)cd.allFieldDescriptors().get(0);
ScalarType<MetadataString> scalarType = TypeRegistry.getScalarType(MetadataString.class);
assertEquals(MetadataStringScalarType.class, scalarType.getClass());
assertFalse("This is a scalar value, not a composite as scalar", XMLTools.isCompositeAsScalarvalue(theField.getField()));
assertEquals("This should be a scalar field.", FieldType.SCALAR, theField.getType());
assertEquals(MetadataStringScalarType.class, theField.getScalarType().getClass());
}
@Test
public void testThatMetadataCanBeDescribed()
{
ClassDescriptor cd = ClassDescriptor.getClassDescriptor(Metadata.class);
}
@Test
public void testThatTheRepositoryScopeExists()
{
SimplTypesScope defaultGet = RepositoryMetadataTypesScope.get();
assertNotNull(defaultGet);
SimplTypesScope sts = SimplTypesScope.get("repository_metadata");
assertNotNull(sts);
}
public void invalidClassDescriptionWillThrowException() {
//SimplTypesScope defaultGet = RepositoryMetadataTranslationScope.get();
ClassDescriptor<?> cd = ClassDescriptor.getClassDescriptor(MetadataDeclaration.class);
}
}