package org.jibx.schema.codegen; import org.jibx.runtime.QName; import org.jibx.schema.SchemaTestBase; import org.jibx.schema.codegen.classes.UsageFinder; import org.jibx.schema.elements.SchemaElement; /** * Test usage visitor operation for counting references. */ public class UsageVisitorTest extends SchemaTestBase { public static final String REFERENCE_SCHEMA = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + ""; private void checkAttributeUsage(String name, ReferenceCountMap map, int count) { Object key = m_nameRegister.findAttribute(new QName("urn:anything", name)); assertEquals("Usage count error on attribute '" + name + '\'', count, map.getCount(key)); } private void checkElementUsage(String name, ReferenceCountMap map, int count) { Object key = m_nameRegister.findElement(new QName("urn:anything", name)); assertEquals("Usage count error on element '" + name + '\'', count, map.getCount(key)); } private void checkTypeUsage(String name, ReferenceCountMap map, int count) { Object key = m_nameRegister.findType(new QName("urn:anything", name)); assertEquals("Usage count error on type '" + name + '\'', count, map.getCount(key)); } public void testComplexReferenced() throws Exception { SchemaElement root = runNoErrors(REFERENCE_SCHEMA); if (!hasProblem(m_validationContext)) { UsageFinder usage = new UsageFinder(); usage.countSchemaTree(root); ReferenceCountMap map = usage.getUsageMap(); checkTypeUsage("simple1", map, 1); checkElementUsage("simple1", map, 1); checkTypeUsage("simple2", map, 0); checkTypeUsage("simple3", map, 0); checkTypeUsage("rating", map, 3); checkTypeUsage("mixedUnion", map, 1); } } }