// HTMLParser Library $Name: v1_6 $ - A java-based parser for HTML
// http://sourceforge.org/projects/htmlparser
// Copyright (C) 2004 Somik Raha
//
// Revision Control Information
//
// $Source: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/tests/FunctionalTests.java,v $
// $Author: derrickoswald $
// $Date: 2006/05/27 14:02:28 $
// $Revision: 1.57 $
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
package org.htmlparser.tests;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Locale;
import junit.framework.TestSuite;
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.PrototypicalNodeFactory;
import org.htmlparser.lexer.Lexer;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.util.DefaultParserFeedback;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.ParserException;
public class FunctionalTests extends ParserTestCase {
static
{
System.setProperty ("org.htmlparser.tests.FunctionalTests", "FunctionalTests");
}
public FunctionalTests(String arg0) {
super(arg0);
}
/**
* Based on a suspected bug report by Annette Doyle,
* to check if the no of image tags are correctly
* identified by the parser
*/
public void testNumImageTagsInYahooWithoutRegisteringScanners() throws ParserException
{
boolean old_remark_handling = Lexer.STRICT_REMARKS;
try
{
// this page is full of bad comments like <!---resources--->
Lexer.STRICT_REMARKS = false;
// First count the image tags as is
int imgTagCount;
int parserImgTagCount = countImageTagsWithHTMLParser();
imgTagCount = findImageTagCount(getParser ());
assertEquals("Image Tag Count",imgTagCount,parserImgTagCount);
}
finally
{
Lexer.STRICT_REMARKS = old_remark_handling;
}
}
public int findImageTagCount(Parser parser) {
int imgTagCount = 0;
parser.reset ();
try
{
imgTagCount = countImageTagsWithoutHTMLParser(parser);
}
catch (IOException e)
{
System.err.println ("IO Exception occurred while counting tags");
}
return imgTagCount;
}
public int countImageTagsWithHTMLParser() throws ParserException {
Parser parser = new Parser("http://education.yahoo.com/",new DefaultParserFeedback());
parser.setNodeFactory (new PrototypicalNodeFactory (new ImageTag ()));
setParser (parser);
int parserImgTagCount = 0;
Node node;
for (NodeIterator e= parser.elements();e.hasMoreNodes();) {
node = e.nextNode();
if (node instanceof ImageTag) {
parserImgTagCount++;
}
}
return parserImgTagCount;
}
public int countImageTagsWithoutHTMLParser (Parser parser) throws IOException
{
BufferedReader lines;
String line;
int imgTagCount;
imgTagCount = 0;
lines = new BufferedReader (parser.getLexer ().getPage ().getSource ());
do {
line = lines.readLine();
if (line!=null) {
// Check the line for image tags
String newline = line.toUpperCase (Locale.ENGLISH);
int fromIndex = -1;
do {
fromIndex = newline.indexOf("<IMG",fromIndex+1);
if (fromIndex!=-1) {
imgTagCount++;
}
}
while (fromIndex!=-1);
}
}
while (line!=null);
return imgTagCount;
}
public static TestSuite suite() {
return new TestSuite(FunctionalTests.class);
}
}