Package tests.jibx

Source Code of tests.jibx.ParseBufferTest

package tests.jibx;

import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;

//import org.hansel.CoverageDecorator;

import junit.framework.*;

import com.sosnoski.site.HTMLParseBuffer;

public class ParseBufferTest extends TestCase
{
  private static final String TEST_TEXT =
    "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Frameset//EN\"" +
    "\"http://www.w3.org/TR/REC-html40/frameset.dtd\"><!--NewPage-->" +
    "<HTML><HEAD><!-- Generated by javadoc on Fri Mar 16 00:22:04 PST " +
    "2001 --><TITLE>Type-safe Collections Library: Class  CharBuffer" +
    "</TITLE><LINK REL =\"stylesheet\" TYPE=\"text/css\" " +
    "HREF=\"../../../stylesheet.css\" TITLE=\"Style\"></HEAD>" +
    "<BODY BGCOLOR=white FGCOLOR=\"black\"><H2><FONT SIZE=\"-1\">com.sosnoski.util" +
    "</FONT><BR>Class  CharBuffer</H2><PRE>\njava.lang.Object\n  |\n" +
    "  +--<A HREF=\"../../../com/sosnoski/util/GrowableBase.html\">" +
    "com.sosnoski.util.GrowableBase</A>\n        |\n" +
    "        +--<A HREF=\"../../../com/sosnoski/util/array/" +
    "ArrayBase.html\">com.sosnoski.util.array.ArrayBase</A>\n" +
    "              |\n              +--<A HREF=\"../../../com/sosnoski" +
    "/util/array/CharArray.html\">com.sosnoski.util.array.CharArray</A>\n" +
    "                    |\n                    +--<B>com.sosnoski." +
    "util.CharBuffer</B>\n</PRE><HR><DL><DT>public class <B>CharBuffer" +
    "</B><DT>extends <A HREF=\"../../../com/sosnoski/util/array/" +
    "CharArray.html\">CharArray</A></DL><P>Growable <code>char</code> " +
    "array with added <code>StringBuffer</code>-like functionality. This " +
    "implementation differs from <code>StringBuffer</code> in that it is " +
    "unsynchronized so as to provide the best possible performance for " +
    "typical usage scenarios. Explicit synchronization must be " +
    "implemented by a wrapper class or directly by the application in " +
    "cases where instances are modified in a multithreaded environment. " +
    "See the base classes for other details of the implementation.<p>" +
    "This class defines a number of convenience methods for working with " +
    "character data (including simple arrays and <code>String</code>s). " +
    "Besides allowing character data to be appended/inserted/replaced in " +
    "the growable array, other methods support comparisons between the " +
    "several forms of character sequences and calculations of hash codes " +
    "independent of the form of the sequence.<P></BODY></HTML>";
  public static final int TEXT_LENGTH = TEST_TEXT.length();
 
  private HTMLParseBuffer m_buffer;
 
  public ParseBufferTest(String name) {
    super(name);
  }
 
  public void setUp() {
    StringReader reader = new StringReader(TEST_TEXT);
    m_buffer = new HTMLParseBuffer(reader, 100);
  }
 
  public void tearDown() {
    m_buffer = null;
  }
 
  public void testRead() throws IOException {
    assertEquals("Basic character read error", TEST_TEXT.charAt(0),
      m_buffer.read());
    assertEquals("Basic character read error", TEST_TEXT.charAt(1),
      m_buffer.read());
    assertEquals("String read position error", TEST_TEXT.substring(2, 102),
      m_buffer.read(100));
    char[] data = new char[100];
    m_buffer.read(data, 10, 40);
    String text = new String(data, 10, 40);
    assertEquals("Data read to array offset mismatch", text,
      TEST_TEXT.substring(102, 142));
    m_buffer.read(data, 0, 100);
    assertEquals("Data read to array mismatch", new String(data),
      TEST_TEXT.substring(142, 242));
  }
 
  public void testPosition() throws IOException {
    assertEquals("Initial position error", 0, m_buffer.position());
    m_buffer.skip(100);
    assertEquals("Position after skip forward error", 100,
      m_buffer.position());
    m_buffer.skip(-100);
    assertEquals("Position after skip backward to start error", 0,
      m_buffer.position());
    boolean except = false;
    try {
      m_buffer.skip(-1);
    } catch (IllegalArgumentException ex) {
      except = true;
    }
    assertTrue("Exception not thrown on skip before start of file", except);
    m_buffer.skip(100);
    assertEquals("Read after skip forward error", TEST_TEXT.charAt(100),
      m_buffer.read());
    assertEquals("Position after read error", 101, m_buffer.position());
    m_buffer.setPosition(150);
    assertEquals("Position after set error", 150, m_buffer.position());
    // depends on buffer size of 100
    m_buffer.skip(-20);
    assertEquals("Position after skip backward error", 130,
      m_buffer.position());
    assertEquals("Read after skip backward error",
      TEST_TEXT.substring(130, 150), m_buffer.read(20));
    m_buffer.skip(-50);
    except = false;
    try {
      m_buffer.skip(-1);
    } catch (IllegalArgumentException ex) {
      except = true;
    }
    assertTrue("Exception not thrown on skip before start of data", except);
    m_buffer.setPosition(TEXT_LENGTH - 10);
    assertEquals("Read near end", TEST_TEXT.substring(TEXT_LENGTH-10),
      m_buffer.read(10));
    assertTrue("Not at end after reading to end", m_buffer.isEnd());
    except = false;
    try {
      m_buffer.read(1);
    } catch (IOException ex) {
      except = true;
    }
    assertTrue("Exception not thrown on read past end", except);
  }
 
  public void testMark() throws IOException {
    boolean except = false;
    try {
      m_buffer.pushMark(-10);
    } catch (IllegalArgumentException ex) {
      except = true;
    }
    assertTrue("Exception not thrown on mark before start", except);
    m_buffer.skip(100);
    m_buffer.pushMark();
    except = false;
    try {
      m_buffer.pushMark(-10);
    } catch (IllegalArgumentException ex) {
      except = true;
    }
    assertTrue("Exception not thrown on mark before prior mark", except);
    assertEquals("Read after mark", TEST_TEXT.substring(100, 110),
      m_buffer.read(10));
    m_buffer.popMark();
    assertEquals("Read after pop mark", TEST_TEXT.substring(100, 110),
      m_buffer.read(10));
    int chr = m_buffer.read();
    m_buffer.pushMark(-1);
    m_buffer.popMark();
    assertEquals("Mark -1 for last character error", chr, m_buffer.read());
    m_buffer.skip(-11);
    m_buffer.pushMark();
    m_buffer.pushMark(10);
    assertEquals("Wrong data after pushing mark error",
      TEST_TEXT.substring(100, 105), m_buffer.read(5));
    assertEquals("Wrong position after mark and read", 105,
      m_buffer.position());
    assertEquals("Wrong position popped", 5, m_buffer.popMark());
    assertEquals(110, m_buffer.position());
    m_buffer.skip(10);
    m_buffer.pushMark(-10);
    assertEquals(TEST_TEXT.substring(120, 130), m_buffer.read(10));
    assertEquals(-20, m_buffer.clearMark());
    assertEquals(TEST_TEXT.substring(130, 140), m_buffer.read(10));
    assertEquals(-40, m_buffer.popMark());
    assertEquals(TEST_TEXT.substring(100, 110), m_buffer.read(10));
    except = false;
    try {
      m_buffer.clearMark();
    } catch (IllegalStateException ex) {
      except = true;
    }
    assertTrue("Exception not thrown on no mark to clear", except);
    m_buffer.setPosition(TEST_TEXT.length());
    m_buffer.pushMark();
  }
 
  public void testSkips() throws IOException {
    m_buffer.pushMark();
    m_buffer.skipPastChar('<');
    assertEquals('!', m_buffer.read());
    assertTrue(m_buffer.skipToWhitespace());
    assertTrue(m_buffer.skipWhitespace());
    m_buffer.skipPastChar('<');
    m_buffer.skipPastChar('<');
    assertTrue(m_buffer.matchString("HTML"));
    m_buffer.skipPastChar('<');
    assertTrue(!m_buffer.matchString("HTML"));
    assertTrue(m_buffer.matchString("HEAD"));
    m_buffer.skipPastString("LINK");
    assertTrue(HTMLParseBuffer.isWhitespaceChar(m_buffer.read()));
    assertTrue(m_buffer.skipPastName());
    assertTrue(HTMLParseBuffer.isWhitespaceChar(m_buffer.read()));
    m_buffer.skipPastCharQuotes('/');
    assertTrue(m_buffer.matchString("HEAD"));
    m_buffer.skipToWhitespace();
    assertEquals(' ', m_buffer.read());
    assertTrue(m_buffer.matchString("BGCOLOR="));
    m_buffer.popMark();
    m_buffer.skipPastString("PUBLIC ");
    assertTrue(m_buffer.skipToWhitespaceQuotes());
    assertEquals(' ', m_buffer.read());
    assertTrue(m_buffer.matchString("Generated"));
  }
 
  public void testHTML() throws IOException {
    assertEquals("Tag mismatch", "html", m_buffer.nextTag(true));
    assertEquals("Tag mismatch", "head", m_buffer.nextTag(true));
    assertEquals("Tag mismatch", "title", m_buffer.nextTag(true));
    assertEquals("Tag mismatch", "/title", m_buffer.nextTag(true));
    assertEquals("Tag mismatch", "link", m_buffer.nextTag(true));
    assertEquals("Tag mismatch", "/head", m_buffer.nextTag(true));
    assertEquals("Tag mismatch", "body", m_buffer.nextTag(false));
        HashMap attrs = m_buffer.attributes();
        assertEquals("Attribute mismatch", "white", attrs.get("bgcolor"));
        assertEquals("Attribute mismatch", "black", attrs.get("fgcolor"));
    assertEquals("Tag mismatch", "h2", m_buffer.nextTag(false));
        attrs = m_buffer.attributes();
        assertEquals("Attribute count", 0, attrs.size());
    assertEquals("Tag mismatch", "font", m_buffer.nextTag(false));
        m_buffer.dropTag();
    m_buffer.pushMark();
    m_buffer.skipToCloseTag("font");
    assertEquals("Skip to close mismatch", "com.sosnoski.util",
      m_buffer.read(-m_buffer.popMark()));
    assertEquals("Tag mismatch", "/font", m_buffer.nextTag(true));
    assertEquals("Tag mismatch", "br", m_buffer.nextTag(true));
    m_buffer.skipPastCharQuotes('G');
    assertEquals("Skip past char quotes", "rowableBase<",
      m_buffer.read(12));
    m_buffer.skipToWhitespace();
    assertEquals("Skip to whitespace", '\n', m_buffer.read());
    m_buffer.skipWhitespace();
    assertEquals("Skip whitespace", '|', m_buffer.read());
    assertEquals("Tag mismatch", "a", m_buffer.nextTag(true));
    m_buffer.skipToCloseTag("pre");
    assertEquals("Skip to close mismatch", "</PRE>", m_buffer.read(6));
  }
 
/*  public static Test suite() {
        return new CoverageDecorator(ParseBufferTest.class,
            new Class[] { HTMLParseBuffer.class });
  }    */
 
  public static void main(String[] args) {
    String[] names = { ParseBufferTest.class.getName() };
    junit.textui.TestRunner.main(names);
  }
}
TOP

Related Classes of tests.jibx.ParseBufferTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.