package it.unimi.dsi.parser;
import it.unimi.dsi.lang.MutableString;
import it.unimi.dsi.parser.BulletParser;
import it.unimi.dsi.parser.Element;
import it.unimi.dsi.parser.callback.Callback;
import it.unimi.dsi.parser.callback.DefaultCallback;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import junit.framework.TestCase;
import org.apache.commons.io.IOUtils;
public class BulletParserTest extends TestCase {
public void testParser() throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, FileNotFoundException, IOException {
char[] text = IOUtils.toCharArray( this.getClass().getResourceAsStream( "test.html" ), "UTF-8" );
final Callback mockCallback = (Callback)Proxy.getProxyClass( Callback.class.getClassLoader(), Callback.class ).getConstructor( InvocationHandler.class )
.newInstance( new Object[] { new InvocationHandler() {
int call = 0;
String[] methods = { "configure", "startDocument", "endDocument" };
public Object invoke( final Object proxy, final Method method, final Object[] args ) throws Throwable {
if ( call < methods.length )
assertEquals( method.getName(), methods[ call++ ] );
return Boolean.TRUE;
}
} } );
new BulletParser().setCallback( mockCallback ).parse( text, 0, text.length );
}
private final class VisibleBulletParser extends BulletParser {
@Override
public int scanEntity( char[] a, int offset, int length, boolean loose, MutableString entity ) {
return super.scanEntity( a, offset, length, loose, entity );
}
}
public void testScanEntityAtEndOfArray() {
VisibleBulletParser parser = new VisibleBulletParser();
char[] test = "&test".toCharArray();
assertEquals( -1, parser.scanEntity( test, 0, test.length, false, new MutableString() ) );
assertEquals( -1, parser.scanEntity( test, 0, test.length, true, new MutableString() ) );
test = "&apos".toCharArray();
assertEquals( -1, parser.scanEntity( test, 0, test.length, false, new MutableString() ) );
assertEquals( 5, parser.scanEntity( test, 0, test.length, true, new MutableString() ) );
}
public void testCdata() {
final BulletParser parser = new BulletParser();
final Callback callback = new DefaultCallback() {
@Override
public boolean cdata( Element element, char[] text, int offset, int length) {
assertEquals( "Test > 0", new String( text, offset, length ) );
return true;
}
};
parser.setCallback( callback );
parser.parseCDATA( true );
parser.parse( "<tag><![CDATA[Test > 0]]></tag>".toCharArray() );
parser.parse( "<tag><![CDATA[Test > 0".toCharArray() );
}
}