/* Copyright (c) 2005 Ricebridge. All Rights Reserved.
 *
 * This file is available under the terms and conditions of the
 * Ricebridge "Open Source API" policy; Ricebridge grants use of this
 * copyrighted work under the terms of a BSD-style license only. See
 * http://www.opensource.org/licenses/bsd-license.php for more
 * information.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 *  - Redistributions of source code must retain the above copyright
 *  notice, this list of conditions and the following disclaimer.
 *
 *  - Redistributions in binary form must reproduce the above
 *  copyright notice, this list of conditions and the following
 *  disclaimer in the documentation and/or other materials provided
 *  with the distribution.
 *
 *  - Neither the name of the Ricebridge nor the names of its
 *  contributors may be used to endorse or promote products derived
 *  from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.  
 */

package com.ricebridge.xmlman.in.test;

import com.ricebridge.xmlman.*;
import com.ricebridge.xmlman.in.*;

import junit.framework.*;

import org.jostraca.util.*;

import java.util.regex.*;
import java.util.*;
import java.io.*;

/** Test utilities.
 *    <p>The <b><a href="TestUtil.java.html">Source Code</a></b> of this Java class 
 *    is available under a <a href="http://www.opensource.org/licenses/bsd-license.php">BSD-style license</a>.</p>
 */
public class TestUtil {

  static Pattern regex_wcw = Pattern.compile("\\s*,\\s*");    

  
  /** For print debugging - disabled for release. */
  public static final void print( String pMsg ) {
    // System.out.println( pMsg );
  }



  public static String dataToString( List pData ) {
    return dataToString( pData, false );
  }

  public static String dataToString( List pData, boolean pTrim ) {
    StringBuffer sb = new StringBuffer();
    for( Iterator rI = pData.iterator(); rI.hasNext(); ) {
      String[] row = (String[]) rI.next();
      String rowstr = Arrays.asList( row ).toString();
      if( pTrim ) {
        Matcher m = regex_wcw.matcher( rowstr );
        rowstr = m.replaceAll( ", " );
      }
      sb.append( rowstr + "\n" );
    }
    return sb.toString();
  }



  public static String formatPathList( List pPaths ) {
    StringBuffer sb = new StringBuffer();
    for( Iterator pI = pPaths.iterator(); pI.hasNext(); ) {
      sb.append( pI.next()+"\n" );
    }
    return sb.toString();
  }



  public static void testRecords( String pRelativeXmlFilePath, 
                                  ArrayList pRecordSpecList, ArrayList pRecordDataList, 
                                  TestCase pTestCase ) throws Exception 
  {
    XmlSpec xs = null;
    testRecords( pRelativeXmlFilePath, xs, pRecordSpecList, pRecordDataList, pTestCase );
  }


  public static void testRecords( String pRelativeXmlFilePath, XmlSpec pXmlSpec,
                                  ArrayList pRecordSpecList, ArrayList pRecordDataList, 
                                  TestCase pTestCase ) 
    throws Exception 
  {
    ArrayList xsl = new ArrayList();
    for( int sI = 0; sI < pRecordDataList.size(); sI++ ) {
      xsl.add( pXmlSpec );
    }
    testRecords( pRelativeXmlFilePath, xsl, pRecordSpecList, pRecordDataList, pTestCase );
  }

  public static void testRecords( String pRelativeXmlFilePath, ArrayList pXmlSpecList,
                                  ArrayList pRecordSpecList, ArrayList pRecordDataList, 
                                  TestCase pTestCase ) 
    throws Exception 
  {
    XmlSpec  defaultxs = new XmlSpec();
    for( int rsI = 0; rsI < pRecordSpecList.size(); rsI++ ) {
      XmlInputHandler  xmlh = new XmlInputHandler();
      RecordSpec rs = (RecordSpec) pRecordSpecList.get(rsI);
      System.out.println( rs );

      XmlSpec xs = (XmlSpec) pXmlSpecList.get(rsI);
      if( null != xs ) {
        xmlh.setXmlSpec( xs );
      }
      else {
        xmlh.setXmlSpec( defaultxs );
      }

      StringArrayRecordListener rl = new StringArrayRecordListener();
      xmlh.prepare( rs );
      xmlh.setRecordListener( rl );

      File xmlfile = findFile( pRelativeXmlFilePath );
      xmlh.loadSaxFile(xmlfile );

      List recs = rl.getRecords();
      System.out.println( "RECS:\n"+dataToString(recs) );

      pTestCase.assertEquals( rs+dataToString((List)pRecordDataList.get(rsI)), rs+dataToString(recs) );
    }

  }


  public static void testRecordSpec( RecordSpec pRecordSpec ) {
    StringArrayRecordListener rl   = new StringArrayRecordListener();
    XmlInputHandler                xmlh = new XmlInputHandler();
    xmlh.prepare( pRecordSpec );
    xmlh.setRecordListener( rl );
  }


  public static String toString( List pTargetPathList ) {
    StringBuffer sb = new StringBuffer();
    for( Iterator tpI = pTargetPathList.iterator(); tpI.hasNext(); ) {
      sb.append( ((TargetPath)tpI.next()).toString(false)+", " );
    }
    return sb.toString();
  }


  public static String makeURI( File pFile ) {
    String uri = pFile.getAbsolutePath();
    if( !uri.startsWith("/") ) { uri = "/"+uri; }
    uri = "file://"+uri;
    uri = uri.replace('\\','/');
    return uri;
  }

  public static ExprWalker makeExprWalker() {
    return new ExprWalker( new HashMap(), new HashMap(), CoreDef.RICEBRIDGE_NAMESPACE_PREFIX, true );
  }

  public static NameInfo makeNameInfo() {
    return new NameInfo("","","",true);
  }

  public static NameInfo makeNameInfo( String pLocalName ) {
    return new NameInfo( pLocalName, pLocalName, "", true );
  }

  public static NameInfo makeNameInfo( String pLocalName, String pNamespaceURI ) {
    return new NameInfo( pLocalName, "", pNamespaceURI, true );
  }  


  public static File findFile( String pName ) throws Exception {
    File file = null;
    try {
      file = FileUtil.findFile( pName );
    }

    // FIX: this makes ant system-test work
    catch( Exception e ) {
      file = new File( "/ricebridge/dev/xmlman/trunk/src", pName );
    }
    return file;
  }


}





Syntax Highlighting created using the com.Ostermiller.Syntax package.
Thursday, February 23 2006 at 16:47