All Downloads are FREE. Search and download functionalities are using the official Maven repository.

msv.generator.test.batch.generator.TestBuilderImpl Maven / Gradle / Ivy

/*
 * @(#)$Id: TestBuilderImpl.java 1478 2002-12-23 23:17:33Z kk122374 $
 *
 * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * This software is the proprietary information of Sun Microsystems, Inc.  
 * Use is subject to license terms.
 * 
 */
package batch.generator;

import java.io.File;
import java.util.Iterator;
import java.util.Vector;

import javax.xml.parsers.SAXParserFactory;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.xml.sax.XMLReader;

import batch.model.ISchema;
import batch.model.IValidator;
import batch.model.TestBuilder;

import com.sun.msv.generator.Driver;
import com.sun.msv.generator.ExampleReader;

class TestBuilderImpl implements TestBuilder
{
    protected TestBuilderImpl( IValidator _validator, SAXParserFactory factory ) throws Exception {
        this.validator = _validator;
        this.reader = factory.newSAXParser().getXMLReader();
    }
    
    private final IValidator validator;
    private final XMLReader reader;
    
    public Test createIncorrectSchemaTest( File schema ) {
        return emptyTest();
    }
    
    public Test createCorrectSchemaTest( File schema ) {
        if(schema.getName().indexOf(".nogen.")!=-1)
            // we will not test this schema
            return emptyTest();
        
        current = new SchemaTestCase(schema);
        return current;
    }
    
    private SchemaTestCase current;
    protected class SchemaTestCase extends TestCase {
        
        protected SchemaTestCase( File schema ) {
            super(schema.getName());
            this.schemaFile = schema;
        }
        
        private final File schemaFile;
        private final Vector examples =new Vector();
        
        public void addExample( File example ) {
            examples.add(example);
        }
        
	    /**
	     * A test consists of
	     * 
	     * 1. converts a grammar into the target format
	     * 2. tests the instance documents.
	     */
		public void runTest() throws Exception {

            System.out.println(schemaFile.getPath());
            
			Driver driver = new Driver();	// generator instance.
				
			// parse parameters
			driver.parseArguments(new String[]{"-seed","0", "-n","30", "-quiet"});
				
			// parse example documents
            Iterator itr = examples.iterator();
			while( itr.hasNext() ) {
				File example = (File)itr.next();
                
                reader.setContentHandler( new ExampleReader(driver.exampleTokens) );
                reader.parse( com.sun.msv.util.Util.getInputSource(example.getAbsolutePath()) );
			}
				
			// set the grammar
			ISchema schema = validator.parseSchema(schemaFile);
			assertNotNull( "failed to parse the schema", schema );
			driver.grammar = schema.asGrammar();
			driver.outputName = "NUL";
				
			// run the test
			assertEquals( "generator for "+schemaFile.getName(), driver.run(System.out), 0 );
				
				
			// parse additional parameter
			// generally, calling the parseArguments method more than once
			// is not supported. So this is a hack.
			driver.parseArguments(new String[]{"-error","10/100"});

			assertEquals( "generator for "+schemaFile.getName(), driver.run(System.out), 0 );
		}
	}
    
    public Test createValidDocumentTest( File document ) {
        current.addExample(document);
        return emptyTest();
    }
    
    public Test createInvalidDocumentTest( File document ) {
        return emptyTest();
    }
    
    /** Returns a test that does nothing. */
    private Test emptyTest() {
        return new TestSuite();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy