/**
* This file is part of Rydia.
*
* Rydia is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rydia is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Rydia. If not, see <http://www.gnu.org/licenses/>.
**/
package org.rydia.server;
import static org.junit.Assert.*;
import org.junit.Test;
import org.rydia.client.PageLinkParser;
/**
* <u><b><font color="red">FOR INTERNAL USE ONLY.</font></b></u>
*
* Note: This test is in the server package but the class it tests is actually
* in the client package. This may cause errors, see if we can extend GWTTestCase later
*
* Copyright (c)2007, Daniel Kaplan
*
* @author Daniel Kaplan
* @since 7.11.6
*/
public class PageLinkParserTest {
private static final String ONLY_PAGE = "<a href=\"page://3\">blah</a>";
private static final String ONLY_PAGE_SPACE = " <a href=\"page://3\" >blah</a > ";
private static final String FAKE_PAGE = "href=\"page://2\"<a href=\"page://3\">blah</a>href=\"page://2\"";
private static final String QUOTE_PAGE = "<a href='page://3'>blah</a>";
private static final String DOUBLE_QUOTE_FAKE_PAGE = "\"<a href='page://3'>blah</a>\"";
private static final String SINGLE_QUOTE_FAKE_PAGE = "href=\"page://2\"'<a href='page://3'>blah</a>'";
private static final String UNCLOSED_DOUBLE_QUOTE = "blah blah \" blah blah";
private static final String UNCLOSED_TAG = "blah blah \" blah\" blah<a ";
private static final String UNOPENED_TAG = "blah blah \" blah\" blah> ";
private static final String OTHER_TAGS = "blah <b/> <p>hi</p> <div> how are you? </div>";
private static final String FAKE_ATTRIBUTE = "<a href=\"http://blah\" alt=\"<a href='page://3'>blah</a>\">this alt is fake</a>";
private static final String FAKE_ATTRIBUTE_SINGLE_QUOTE = "<a href=\"http://blah\" alt='<a href=\"page://3\">blah</a>'>this alt is fake</a>";
private static final String NORMAL_LINK = "<a href=\"http://blah\">normal link</a>";
private static final String MULTIPLE_LINKS = " <a href = \"page://3\" > hi </a> <a href=\"http://blah\">normal link</a> <a href = \"page://5\" > bye </a>";
@Test
public void getTagsOnly() {
assertEquals("<a href=\"page://3\"> </a>", new PageLinkParser(ONLY_PAGE, null).getTagsOnly());
assertEquals(" <a href=\"page://3\" > </a > ", new PageLinkParser(ONLY_PAGE_SPACE, null).getTagsOnly());
assertEquals(" <a href=\"page://3\"> </a> ", new PageLinkParser(FAKE_PAGE, null).getTagsOnly());
assertEquals("<a href='page://3'> </a>", new PageLinkParser(QUOTE_PAGE, null).getTagsOnly());
assertEquals(" ", new PageLinkParser(DOUBLE_QUOTE_FAKE_PAGE, null).getTagsOnly());
assertEquals(" ", new PageLinkParser(SINGLE_QUOTE_FAKE_PAGE, null).getTagsOnly());
assertEquals(" ", new PageLinkParser(UNCLOSED_DOUBLE_QUOTE, null).getTagsOnly());
assertEquals(" <a ", new PageLinkParser(UNCLOSED_TAG, null).getTagsOnly());
assertEquals(" ", new PageLinkParser(UNOPENED_TAG, null).getTagsOnly());
assertEquals(" <b/> <p> </p> <div> </div>", new PageLinkParser(OTHER_TAGS, null).getTagsOnly());
assertEquals("<a href=\"http://blah\" alt=\" a href='page://3' blah /a \"> </a>", new PageLinkParser(FAKE_ATTRIBUTE, null).getTagsOnly());
assertEquals("<a href=\"http://blah\" alt=' a href=\"page://3\" blah /a '> </a>", new PageLinkParser(FAKE_ATTRIBUTE_SINGLE_QUOTE, null).getTagsOnly());
assertEquals("<a href=\"http://blah\"> </a>", new PageLinkParser(NORMAL_LINK, null).getTagsOnly());
assertEquals(" <a href = \"page://3\" > </a> <a href=\"http://blah\"> </a> <a href = \"page://5\" > </a>", new PageLinkParser(MULTIPLE_LINKS, null).getTagsOnly());
}
@Test
public void getPageLinksAsDollars() {
assertEquals("$$$$$$$$$$$$$$$$$$$$$$$$$$$", new PageLinkParser(ONLY_PAGE, null).getPageLinksAsDollars());
assertEquals(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ", new PageLinkParser(ONLY_PAGE_SPACE, null).getPageLinksAsDollars());
assertEquals(" $$$$$$$$$$$$$$$$$$$$$$$$$$$ ", new PageLinkParser(FAKE_PAGE, null).getPageLinksAsDollars());
assertEquals("$$$$$$$$$$$$$$$$$$$$$$$$$$$", new PageLinkParser(QUOTE_PAGE, null).getPageLinksAsDollars());
assertEquals(" ", new PageLinkParser(SINGLE_QUOTE_FAKE_PAGE, null).getPageLinksAsDollars());
assertEquals(" ", new PageLinkParser(DOUBLE_QUOTE_FAKE_PAGE, null).getPageLinksAsDollars());
assertEquals(" ", new PageLinkParser(UNCLOSED_DOUBLE_QUOTE, null).getPageLinksAsDollars());
assertEquals(" <a ", new PageLinkParser(UNCLOSED_TAG, null).getPageLinksAsDollars());
assertEquals(" ", new PageLinkParser(UNOPENED_TAG, null).getPageLinksAsDollars());
assertEquals(" <b/> <p> </p> <div> </div>", new PageLinkParser(OTHER_TAGS, null).getPageLinksAsDollars());
assertEquals("<a href=\"http://blah\" alt=\" a href='page://3' blah /a \"> </a>", new PageLinkParser(FAKE_ATTRIBUTE, null).getPageLinksAsDollars());
assertEquals("<a href=\"http://blah\" alt=' a href=\"page://3\" blah /a '> </a>", new PageLinkParser(FAKE_ATTRIBUTE_SINGLE_QUOTE, null).getPageLinksAsDollars());
assertEquals("<a href=\"http://blah\"> </a>", new PageLinkParser(NORMAL_LINK, null).getPageLinksAsDollars());
assertEquals(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ <a href=\"http://blah\"> </a> $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", new PageLinkParser(MULTIPLE_LINKS, null).getPageLinksAsDollars());
}
@Test
public void getPageToJumpTo() {
assertEquals(3, new PageLinkParser(ONLY_PAGE, null).getPageToJumpTo(0));
assertEquals(3, new PageLinkParser(ONLY_PAGE_SPACE, null).getPageToJumpTo(1));
assertEquals(3, new PageLinkParser(FAKE_PAGE, null).getPageToJumpTo(15));
assertEquals(3, new PageLinkParser(QUOTE_PAGE, null).getPageToJumpTo(0));
assertEquals(3, new PageLinkParser(MULTIPLE_LINKS, null).getPageToJumpTo(1));
assertEquals(5, new PageLinkParser(MULTIPLE_LINKS, null).getPageToJumpTo(75));
}
@Test
public void getPageLinkLabel() {
assertEquals("blah", new PageLinkParser(ONLY_PAGE, null).getPageLinkLabel(0, 27));
assertEquals("blah", new PageLinkParser(ONLY_PAGE_SPACE, null).getPageLinkLabel(0, 36));
assertEquals("blah", new PageLinkParser(FAKE_PAGE, null).getPageLinkLabel(15, 44));
assertEquals("blah", new PageLinkParser(QUOTE_PAGE, null).getPageLinkLabel(0, 27));
assertEquals(" hi ", new PageLinkParser(MULTIPLE_LINKS, null).getPageLinkLabel(1, 33));
assertEquals(" bye ", new PageLinkParser(MULTIPLE_LINKS, null).getPageLinkLabel(73, 106));
}
}