⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tagtokenizertest.java

📁 OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件
💻 JAVA
字号:
package com.opensymphony.module.sitemesh.html.tokenizer;import com.opensymphony.module.sitemesh.html.Tag;import com.opensymphony.module.sitemesh.html.Text;import junit.framework.TestCase;public class TagTokenizerTest extends TestCase {    private MockTokenHandler handler;    protected void setUp() throws Exception {        super.setUp();        handler = new MockTokenHandler();    }    public void testSplitsTagsFromText() {        // expectations        handler.expectTag(Tag.OPEN, "hello");        handler.expectText("cruel");        handler.expectTag(Tag.OPEN, "world");        handler.expectTag(Tag.OPEN, "and");        handler.expectText("some stuff");        // execute        TagTokenizer tokenizer = new TagTokenizer("<hello>cruel<world><and>some stuff");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testDistinguishesBetweenOpenCloseAndEmptyTags() {        // expectations        handler.expectTag(Tag.OPEN, "open");        handler.expectTag(Tag.CLOSE, "close");        handler.expectTag(Tag.EMPTY, "empty");        // execute        TagTokenizer tokenizer = new TagTokenizer("<open></close><empty/>");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testTreatsCommentsAsText() {        // expectations        handler.expectText("hello world ");        handler.expectText("<!-- how are<we> \n -doing? -->");        handler.expectText("<!-- -->");        handler.expectText("<!---->");        handler.expectText("good\n bye.");        handler.expectTag(Tag.OPEN, "br");        // execute        TagTokenizer tokenizer = new TagTokenizer("hello world <!-- how are<we> \n -doing? --><!-- --><!---->good\n bye.<br>");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testExtractsUnquotedAttributesFromTag() {        // expectations        handler.expectTag(Tag.OPEN, "hello", new String[]{"name", "world", "foo", "boo"});        // execute        TagTokenizer tokenizer = new TagTokenizer("<hello name=world foo=boo>");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testExtractsQuotedAttributesFromTag() {        // expectations        handler.expectTag(Tag.OPEN, "hello", new String[]{"name", "the world", "foo", "boo"});        // execute        TagTokenizer tokenizer = new TagTokenizer("<hello name=\"the world\" foo=\"boo\">");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testHandlesMixedQuoteTypesInAttributes() {        // expectations        handler.expectTag(Tag.OPEN, "hello", new String[]{"name", "it's good", "foo", "say \"boo\""});        // execute        TagTokenizer tokenizer = new TagTokenizer("<hello name=\"it's good\" foo=\'say \"boo\"'>");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testHandlesHtmlStyleEmptyAttributes() {        // expectations        handler.expectTag(Tag.OPEN, "hello", new String[]{"isgood", null, "and", null, "stuff", null});        // execute        TagTokenizer tokenizer = new TagTokenizer("<hello isgood and stuff>");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testSupportsWhitespaceInElements() {        // expectations        handler.expectTag(Tag.OPEN, "hello", new String[]{"somestuff", "good", "foo", null, "x", "long\n string"});        handler.expectTag(Tag.EMPTY, "empty");        handler.expectTag(Tag.OPEN, "HTML", new String[]{"notonnewline", "yo", "newline", "hello", "anotherline", "bye"});        // execute        TagTokenizer tokenizer = new TagTokenizer(""                + "<hello \n somestuff = \ngood \n   foo \nx=\"long\n string\"   >"                + "<empty      />"                + "<HTML notonnewline=yo newline=\n"                + "hello anotherline=\n"                + "\"bye\">");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testExposesOriginalTagToHandler() {        // Should really use a mock library for this expectation, but I'd rather not        // add a new dependency for the sake of a single test.        final String originalTag = "<hello \n somestuff = \ngood \n   foo \nx=\"long\n string\"   >";        TagTokenizer tokenizer = new TagTokenizer("some text" + originalTag + "more text");        final boolean[] called = {false}; // has to be final array so anonymous inner class can change the value.        tokenizer.start(new TokenHandler() {            public boolean shouldProcessTag(String name) {                return true;            }            public void tag(Tag tag) {                assertEquals(originalTag, tag.getContents());                called[0] = true;            }            public void text(Text text) {                // ignoring text for this test            }            public void warning(String message, int line, int column) {                fail("Encountered error " + message);            }        });        assertTrue("tag() never called", called[0]);    }    public void testAllowsSlashInUnquotedAttribute() {        // expectations        handler.expectTag(Tag.OPEN, "something", new String[]{"type", "text/html"});        // execute        TagTokenizer tokenizer = new TagTokenizer("<something type=text/html>");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testAllowsTrailingQuoteOnAttribute() {        // expectations        handler.expectTag(Tag.OPEN, "something", new String[]{"type", "bl'ah\""});        // execute        TagTokenizer tokenizer = new TagTokenizer("<something type=bl'ah\">");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testAllowsAwkwardCharsInElementAndAttribute() {        // expectations        handler.expectTag(Tag.OPEN, "name:space", new String[]{"foo:bar", "x:y%"});        handler.expectTag(Tag.EMPTY, "a_b-c$d", new String[]{"b_b-c$d", "c_b=c$d"});        handler.expectTag(Tag.OPEN, "a", new String[]{"href", "/exec/obidos/flex-sign-in/ref=pd_nfy_gw_si/026-2634699-7306802?opt=a&page=misc/login/flex-sign-in-secure.html&response=tg/new-for-you/new-for-you/-/main"});        // execute        TagTokenizer tokenizer = new TagTokenizer(""                + "<name:space foo:bar=x:y%>"                + "<a_b-c$d b_b-c$d=c_b=c$d />"                + "<a href=/exec/obidos/flex-sign-in/ref=pd_nfy_gw_si/026-2634699-7306802?opt=a&page=misc/login/flex-sign-in-secure.html&response=tg/new-for-you/new-for-you/-/main>");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testTreatsXmpCdataScriptAndProcessingInstructionsAsText() {        // expectations        handler.expectText("<script language=jscript> if (a < b & > c)\n alert(); </script>");        handler.expectText("<xmp><evil \n<stuff<</xmp>");        handler.expectText("<?some stuff ?>");        handler.expectText("<![CDATA[ evil<>> <\n    ]]>");        handler.expectText("<SCRIPT>stuff</SCRIPT>");        handler.expectText("<!DOCTYPE html PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\">");        // execute        TagTokenizer tokenizer = new TagTokenizer(""                + "<script language=jscript> if (a < b & > c)\n alert(); </script>"                + "<xmp><evil \n<stuff<</xmp>"                + "<?some stuff ?>"                + "<![CDATA[ evil<>> <\n    ]]>"                + "<SCRIPT>stuff</SCRIPT>"                + "<!DOCTYPE html PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\">");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testTreatsUnterminatedTagAtEofAsText() {        // expectations        handler.expectText("hello");        handler.expectText("<world");        // execute        TagTokenizer tokenizer = new TagTokenizer("hello<world");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testTreatsLtAtEofAsText() {        // expectations        handler.expectText("hello");        handler.expectText("<");        // execute        TagTokenizer tokenizer = new TagTokenizer("hello<");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testTreatsUnterminatedAttributeNameAtEofAsText() {        // expectations        handler.expectText("hello");        handler.expectText("<world x");        // execute        TagTokenizer tokenizer = new TagTokenizer("hello<world x");        tokenizer.start(handler);        // verify        handler.verify();    }    /* TODO    public void testTreatsUnterminatedQuotedAttributeValueAtEofAsText() {        // expectations        handler.expectText("hello");        handler.expectText("<world x=\"fff");        // execute        TagTokenizer tokenizer = new TagTokenizer("hello<world x=\"fff");        tokenizer.start(handler);        // verify        handler.verify();    }    */    public void testTreatsUnterminatedAttributeAtEofAsText() {        // expectations        handler.expectText("hello");        handler.expectText("<world x=");        // execute        TagTokenizer tokenizer = new TagTokenizer("hello<world x=");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testTreatsUnterminatedUnquotedAttributeValueAtEofAsText() {        // expectations        handler.expectText("hello");        handler.expectText("<world x=fff");        // execute        TagTokenizer tokenizer = new TagTokenizer("hello<world x=fff");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testTreatsUnterminatedClosingTagAtEofAsText() {        // expectations        handler.expectText("hello");        handler.expectText("<world /");        // execute        TagTokenizer tokenizer = new TagTokenizer("hello<world /");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testIgnoresEvilMalformedPairOfAngleBrackets() {        // expectations        handler.expectTag(Tag.OPEN, "good");        // execute        TagTokenizer tokenizer = new TagTokenizer("<>< ><good><>");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testDoesNotTryToParseTagsUnlessTheHandlerCares() {        // setup        handler = new MockTokenHandler() {            public boolean shouldProcessTag(String name) {                return name.equals("good");            }        };        // expectations        handler.expectTag(Tag.OPEN, "good");        handler.expectText("<bad>");        handler.expectTag(Tag.CLOSE, "good");        handler.expectText("<![bad]-->");        handler.expectText("<unfinished");        // execute        TagTokenizer tokenizer = new TagTokenizer("<good><bad></good><![bad]--><unfinished");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testParsesMagicCommentBlocks() {        // expectations        handler.expectTag(Tag.OPEN_MAGIC_COMMENT, "if", new String[] {"gte", null, "mso", null, "9", null});        handler.expectTag(Tag.OPEN, "stuff");        handler.expectTag(Tag.CLOSE_MAGIC_COMMENT, "endif");        // execute        TagTokenizer tokenizer = new TagTokenizer("<!--[if gte mso 9]><stuff><![endif]-->");        tokenizer.start(handler);        // verify        handler.verify();    }    public void testToleratesExtraQuoteClosingAttributeValue() {        // expectations        handler = new MockTokenHandler() {            public void warning(String message, int line, int column) {                // warning ok!            }        };        handler.expectTag(Tag.OPEN, "a", new String[] {"href", "something-with-a-naughty-quote"});        // execute        TagTokenizer tokenizer = new TagTokenizer("<a href=\"something-with-a-naughty-quote\"\">");        tokenizer.start(handler);        // verify        handler.verify();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -