// Modified or written by Object Mentor, Inc. for inclusion with FitNesse. // Copyright (c) 2002 Cunningham & Cunningham, Inc. // Released under the terms of the GNU General Public License version 2 or later. package fit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import fit.exception.FitParseException; import org.junit.Test; public class ParseTest { @Test public void testParsing() throws Exception { Parse p = new Parse("leader<Table foo=2>body</table>trailer", new String[]{"table"}); assertEquals("leader", p.leader); assertEquals("<Table foo=2>", p.tag); assertEquals("body", p.body); assertEquals("trailer", p.trailer); } @Test public void testRecursing() throws Exception { Parse p = new Parse("leader<table><TR><Td>body</tD></TR></table>trailer"); assertEquals(null, p.body); assertEquals(null, p.parts.body); assertEquals("body", p.parts.parts.body); } @Test public void testIterating() throws Exception { Parse p = new Parse("leader<table><tr><td>one</td><td>two</td><td>three</td></tr></table>trailer"); assertEquals("one", p.parts.parts.body); assertEquals("two", p.parts.parts.more.body); assertEquals("three", p.parts.parts.more.more.body); } @Test public void testIndexing() throws Exception { Parse p = new Parse("leader<table><tr><td>one</td><td>two</td><td>three</td></tr><tr><td>four</td></tr></table>trailer"); assertEquals("one", p.at(0, 0, 0).body); assertEquals("two", p.at(0, 0, 1).body); assertEquals("three", p.at(0, 0, 2).body); assertEquals("three", p.at(0, 0, 3).body); assertEquals("three", p.at(0, 0, 4).body); assertEquals("four", p.at(0, 1, 0).body); assertEquals("four", p.at(0, 1, 1).body); assertEquals("four", p.at(0, 2, 0).body); assertEquals(1, p.size()); assertEquals(2, p.parts.size()); assertEquals(3, p.parts.parts.size()); assertEquals("one", p.leaf().body); assertEquals("four", p.parts.last().leaf().body); } @Test public void testParseException() { try { new Parse("leader<table><tr><th>one</th><th>two</th><th>three</th></tr><tr><td>four</td></tr></table>trailer"); } catch (FitParseException e) { assertEquals(17, e.getErrorOffset()); assertEquals("Can't find tag: td", e.getMessage()); return; } fail("exptected exception not thrown"); } @Test public void testText() throws Exception { String tags[] = {"td"}; Parse p = new Parse("<td>a<b</td>", tags); assertEquals("a<b", p.body); assertEquals("a<b", p.text()); p = new Parse("<td>\ta>b & b>c && </td>", tags); assertEquals("a>b & b>c &&", p.text()); p = new Parse("<td>\ta>b & b>c & </td>", tags); assertEquals("a>b & b>c &", p.text()); p = new Parse("<TD><P><FONT FACE=\"Arial\" SIZE=2>GroupTestFixture</FONT></TD>", tags); assertEquals("GroupTestFixture", p.text()); } @Test public void testUnescape() { assertEquals("a<b", Parse.unescape("a<b")); assertEquals("a>b & b>c &&", Parse.unescape("a>b & b>c &&")); assertEquals("&&", Parse.unescape("&amp;&amp;")); assertEquals("a>b & b>c &&", Parse.unescape("a>b & b>c &&")); } @Test public void testUnformat() { assertEquals("ab", Parse.unformat("<font size=+1>a</font>b")); assertEquals("ab", Parse.unformat("a<font size=+1>b</font>")); assertEquals("a<b", Parse.unformat("a<b")); } @Test public void testFindNestedEnd() throws FitParseException { assertEquals(0, Parse.findMatchingEndTag("</t>", 0, "t", 0)); assertEquals(7, Parse.findMatchingEndTag("<t></t></t>", 0, "t", 0)); assertEquals(14, Parse.findMatchingEndTag("<t></t><t></t></t>", 0, "t", 0)); } @Test public void testNestedTables() throws Exception { String nestedTable = "<table><tr><td>embedded</td></tr></table>"; Parse p = new Parse("<table><tr><td>" + nestedTable + "</td></tr>" + "<tr><td>two</td></tr><tr><td>three</td></tr></table>trailer"); Parse sub = p.at(0, 0, 0).parts; assertEquals(1, p.size()); assertEquals(3, p.parts.size()); assertEquals(1, sub.at(0, 0, 0).size()); assertEquals("embedded", sub.at(0, 0, 0).body); assertEquals(1, sub.size()); assertEquals(1, sub.parts.size()); assertEquals(1, sub.parts.parts.size()); assertEquals("two", p.at(0, 1, 0).body); assertEquals("three", p.at(0, 2, 0).body); assertEquals(1, p.at(0, 1, 0).size()); assertEquals(1, p.at(0, 2, 0).size()); } @Test public void testNestedTables2() throws Exception { String nestedTable = "<table><tr><td>embedded</td></tr></table>"; String nestedTable2 = "<table><tr><td>" + nestedTable + "</td></tr><tr><td>two</td></tr></table>"; Parse p = new Parse("<table><tr><td>one</td></tr><tr><td>" + nestedTable2 + "</td></tr>" + "<tr><td>three</td></tr></table>trailer"); assertEquals(1, p.size()); assertEquals(3, p.parts.size()); assertEquals("one", p.at(0, 0, 0).body); assertEquals("three", p.at(0, 2, 0).body); assertEquals(1, p.at(0, 0, 0).size()); assertEquals(1, p.at(0, 2, 0).size()); Parse sub = p.at(0, 1, 0).parts; assertEquals(2, sub.parts.size()); assertEquals(1, sub.at(0, 0, 0).size()); Parse subSub = sub.at(0, 0, 0).parts; assertEquals("embedded", subSub.at(0, 0, 0).body); assertEquals(1, subSub.at(0, 0, 0).size()); assertEquals("two", sub.at(0, 1, 0).body); assertEquals(1, sub.at(0, 1, 0).size()); } }