You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ecs-dev@jakarta.apache.org by rd...@apache.org on 2001/07/26 01:06:58 UTC
cvs commit: jakarta-ecs/test/java/org/apache/ecs BasicECSComparitor.java ECSFlatteningWalker.java HTMLToken.java HTMLTokenizer.java InternationalCharTest.java icechar.txt
rdonkin 01/07/25 16:06:58
Modified: build build-ecs.xml
docs/apidocs .cvsignore
Added: build ant-1.3.1.jar testcases.xml
lib jakarta-ant-1.3-optional.jar junit-3.2.jar
test/java/org/apache/ecs BasicECSComparitor.java
ECSFlatteningWalker.java HTMLToken.java
HTMLTokenizer.java InternationalCharTest.java
icechar.txt
Removed: build ant-1.2.jar
Log:
added junit testing framework and test for international character bug
Revision Changes Path
1.19 +5 -0 jakarta-ecs/build/build-ecs.xml
Index: build-ecs.xml
===================================================================
RCS file: /home/cvs/jakarta-ecs/build/build-ecs.xml,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- build-ecs.xml 2001/01/09 17:51:50 1.18
+++ build-ecs.xml 2001/07/25 23:06:58 1.19
@@ -217,4 +217,9 @@
</copy>
</target>
+ <target name="test-ecs" depends="jar">
+ <ant antfile="testcases.xml" target="everything">
+ <property name="ecs.jar" value="${build.dir}/${final.name}.jar"/>
+ </ant>
+ </target>
</project>
1.1 jakarta-ecs/build/ant-1.3.1.jar
<<Binary file>>
1.1 jakarta-ecs/build/testcases.xml
Index: testcases.xml
===================================================================
<?xml version="1.0"?>
<!-- Testcases for ECS -->
<!-- The basic ecs-build does not build test classes -->
<!-- So we must build these before running our tests -->
<project name="test-ecs" default="everything">
<!-- Calling scripts should overide this -->
<property name="ecs.jar" value="ecs.jar"/>
<!-- Calling scripts might like to overide -->
<property name="build.compiler" value="classic"/>
<property name="build.dir" value="../bin"/>
<property name="debug" value="off"/>
<property name="optimize" value="on"/>
<property name="deprecation" value="off"/>
<!-- Calling script probably shouldn't be overriding these -->
<property name="test.base" value="../test/java"/>
<property name="test.build.dir" value="${build.dir}/test"/>
<property name="test.build.jar" value="${build.dir}/ecs-test.jar"/>
<property name="test.build.src" value="${test.build.dir}/src" />
<property name="test.build.dest" value="${test.build.dir}/classes" />
<path id="classpath">
<fileset dir="../lib">
<include name="**/*.jar"/>
</fileset>
<pathelement location="${test.build.jar}"/>
<pathelement location="${ecs.jar}"/>
</path>
<!-- Copy java files over -->
<target name="copy-test">
<mkdir dir="${test.build.src}"/>
<mkdir dir="${test.build.dest}"/>
<copy toDir="${test.build.src}">
<fileset dir="${test.base}"/>
</copy>
</target >
<!-- Compile test classes -->
<target name="compile-test" depends="copy-test">
<javac srcdir="${test.build.src}"
destdir="${test.build.dest}"
excludes="**/package.html"
debug="${debug}"
deprecation="${deprecation}"
optimize="${optimize}">
<classpath refid="classpath"/>
</javac>
<copy todir="${test.build.dest}/org" filtering="yes">
<fileset dir="${test.build.src}/org">
<include name="**/*.txt"/>
</fileset>
</copy>
</target>
<!-- Create ecs-test jar -->
<target name="jar-test" depends="compile-test">
<jar jarfile="${test.build.jar}"
basedir="${test.build.dest}"
excludes="**/package.html"
/>
</target>
<target name="test-int-chars" depends="jar-test">
<echo message="testing international characters"/>
<junit printsummary="no" haltonfailure="yes" fork="false">
<classpath refid="classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.ecs.InternationalCharTest" />
</junit>
</target>
<target name="test-all" depends="
jar-test,
test-int-chars">
<echo message="Completed tests"/>
</target>
<target name="everything" depends="test-all"/>
</project>
1.3 +1 -0 jakarta-ecs/docs/apidocs/.cvsignore
Index: .cvsignore
===================================================================
RCS file: /home/cvs/jakarta-ecs/docs/apidocs/.cvsignore,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- .cvsignore 2001/03/19 23:00:22 1.2
+++ .cvsignore 2001/07/25 23:06:58 1.3
@@ -0,0 +1 @@
+*
1.1 jakarta-ecs/lib/jakarta-ant-1.3-optional.jar
<<Binary file>>
1.1 jakarta-ecs/lib/junit-3.2.jar
<<Binary file>>
1.1 jakarta-ecs/test/java/org/apache/ecs/BasicECSComparitor.java
Index: BasicECSComparitor.java
===================================================================
/*
* Copyright (c) 1999 The Java Apache Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* 4. The names "Java Apache Element Construction Set", "Java Apache ECS" and
* "Java Apache Project" must not be used to endorse or promote products
* derived from this software without prior written permission.
*
* 5. Products derived from this software may not be called
* "Java Apache Element Construction Set" nor "Java Apache ECS" appear
* in their names without prior written permission of the
* Java Apache Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Java Apache Project. For more information
* on the Java Apache Project please see <http://java.apache.org/>.
*
*/
package org.apache.ecs;
import java.util.*;
import org.apache.ecs.html.*;
/**
* <p> Compares an ecs element to a string.
*
* <p> The HTMLTokenizer is used to tokenize the string.
* A walker then walks the ECS tree comparing the element type
* of each element to the tokens produced by the tokenizer.
*
* <p> This makes only the most basic check ie. that the flattened order of the element
* is equivalent. The flattened order ignores the tree structure.
* For example, the following are equivalent according to flattened order:
* <pre><code>
* <ul><li>Item. <strong>This is a line.</strong></li></ul>
* <ul><li>Item. </li></ul><strong>This is a line.</strong>
* </code></pre>
*/
public class BasicECSComparitor
{
public static void main(String [] args)
{
Document doc=new Document();
doc.setDoctype(new Doctype.Html40Strict());
doc.setTitle(new Title("The Title"));
doc.appendBody(new Comment("This is a comment"));
doc.appendBody(new HR());
doc.appendBody("This is the body");
doc.appendBody(new HR());
String test="<?xml version=\"1.0\"?><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"><html><head><title>The Title</title></head><body><!--This is a comment--><hr/>This is the body<hr/></body></html>";
BasicECSComparitor comp=new BasicECSComparitor();
System.out.println();
System.out.println("EQUIVALENT? " + comp.compare(doc.getHtml(),test));
}
private boolean silent=true;
public BasicECSComparitor() {}
public BasicECSComparitor(boolean isSilent)
{}
public boolean isSilent()
{
return silent;
}
public void isSilent(boolean silent)
{
this.silent=silent;
}
public boolean compare(Element e,String s)
{
ECSFlatteningWalker walker=new ECSFlatteningWalker(e);
HTMLTokenizer tokens=new HTMLTokenizer(s);
int atECS=0;
int atTokens=0;
while (atECS<walker.getElementList().size())
{
if (!silent)
{
System.out.println(
atTokens + "(" + tokens.getTokens().size() + ")" + ":" +
atECS + "(" + walker.getElementList().size() + ")");
}
if (atTokens>=tokens.getTokens().size())
{
System.out.println("[DIFFERENCE] Too few tokens.");
return false;
}
HTMLToken token=(HTMLToken)tokens.getTokens().get(atTokens++);
if (!silent)
{
System.out.println("[TOKEN]" + token);
}
if (token.isProcessingInstruction() || token.isDeclaration())
{
if (!silent)
{
System.out.println("Ignoring " + token);
}
} else if (token.isEndTag() && !token.isStartTag()) {
if (!silent)
{
System.out.println("End tag " + token);
}
} else {
ConcreteElement element=(ConcreteElement)walker.getElementList().get(atECS++);
if (!silent)
{
System.out.println("[ELEMENT]" + element.getClass());
}
if (element instanceof Comment)
{
if (!token.isComment())
{
System.out.println("[DIFFERENCE] Missing Comment");
return false;
}
if (walker.getElementList().get(atECS) instanceof StringElement)
atECS++;
} else if (element instanceof StringElement)
{
if (!token.isText())
{
System.out.println("[DIFFERENCE] Missing Text");
return false;
}
} else {
if (!element.getElementType().equalsIgnoreCase(token.getTokenName()))
{
System.out.println("[DIFFERENCE] Element type mismatch.");
return false;
}
}
}
}
// All remaining tokens must be simple end tags
for (int i=atTokens;i<tokens.getTokens().size();i++)
{
HTMLToken token=(HTMLToken)tokens.getTokens().get(i);
if (!token.isEndTag())
{
System.out.println("[DIFFERENCE] Too many tokens.");
return false;
}
if (token.isStartTag())
{
System.out.println("[DIFFERENCE] Too many tokens.");
return false;
}
}
return true;
}
}
1.1 jakarta-ecs/test/java/org/apache/ecs/ECSFlatteningWalker.java
Index: ECSFlatteningWalker.java
===================================================================
/*
* Copyright (c) 1999 The Java Apache Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* 4. The names "Java Apache Element Construction Set", "Java Apache ECS" and
* "Java Apache Project" must not be used to endorse or promote products
* derived from this software without prior written permission.
*
* 5. Products derived from this software may not be called
* "Java Apache Element Construction Set" nor "Java Apache ECS" appear
* in their names without prior written permission of the
* Java Apache Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Java Apache Project. For more information
* on the Java Apache Project please see <http://java.apache.org/>.
*
*/
package org.apache.ecs;
import java.util.*;
import org.apache.ecs.html.*;
public class ECSFlatteningWalker
{
public static void main(String args[])
{
Document doc=new Document();
doc.setDoctype(new Doctype.Html40Strict());
doc.setTitle(new Title("The Title"));
doc.appendBody(new Comment("This is a comment"));
doc.appendBody(new HR());
doc.appendBody("This is the body");
doc.appendBody(new HR());
ECSFlatteningWalker walker= new ECSFlatteningWalker(doc.getHtml());
walker.printTest();
}
private List elements;
public ECSFlatteningWalker() {}
public ECSFlatteningWalker(Element e)
{
flatten(e);
}
public List getElementList()
{
return elements;
}
public void clearElementList()
{
elements=new ArrayList();
}
public void flatten(Element e)
{
clearElementList();
add(e);
}
protected void add(Element e)
{
elements.add(e);
if (e instanceof ConcreteElement)
{
ConcreteElement ce=(ConcreteElement)e;
for (Enumeration en=ce.keys();en.hasMoreElements();)
{
add(ce.getElement((String)en.nextElement()));
}
}
}
public void printTest()
{
System.out.println();
System.out.println();
for (Iterator it=elements.iterator();it.hasNext();)
{
Object n=it.next();
System.out.println(n.getClass());
System.out.println(n);
System.out.println(((ConcreteElement)n).getElementType());
}
}
}
1.1 jakarta-ecs/test/java/org/apache/ecs/HTMLToken.java
Index: HTMLToken.java
===================================================================
/*
* Copyright (c) 1999 The Java Apache Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* 4. The names "Java Apache Element Construction Set", "Java Apache ECS" and
* "Java Apache Project" must not be used to endorse or promote products
* derived from this software without prior written permission.
*
* 5. Products derived from this software may not be called
* "Java Apache Element Construction Set" nor "Java Apache ECS" appear
* in their names without prior written permission of the
* Java Apache Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Java Apache Project. For more information
* on the Java Apache Project please see <http://java.apache.org/>.
*
*/
package org.apache.ecs;
/**
* <p> Tokenizer - not a parser! - for HTML
*
* <p> This is a tokenizer not a parser.
*/
public class HTMLToken
{
private String content;
private String tokenName;
private boolean text=false;
private boolean endTag=false;
private boolean startTag=false;
private boolean comment=false;
/** is processing instruction */
private boolean pi=false;
/** is declaration */
private boolean decl=false;
public HTMLToken(String content)
{
setTokenContent(content);
}
protected void setTokenContent(String tokenContent)
{
if (tokenContent.startsWith(">"))
{
this.content=tokenContent.substring(1);
text=true;
endTag=false;
startTag=false;
} else if (tokenContent.startsWith("</"))
{
this.content=tokenContent.substring(2).trim();
text=false;
endTag=true;
startTag=false;
tokenName=content;
} else if (tokenContent.startsWith("<?"))
{
this.content=tokenContent.substring(2,tokenContent.length()-1).trim();
pi=true;
tokenName=getFirstWord(content);
} else if (tokenContent.startsWith("<!--"))
{
this.content=tokenContent.substring(4,tokenContent.length()-2).trim();
comment=true;
} else if (tokenContent.startsWith("<!"))
{
this.content=tokenContent.substring(2).trim();
decl=true;
tokenName=getFirstWord(content);
} else if (tokenContent.startsWith("<"))
{
if (tokenContent.endsWith("/"))
{
this.content=tokenContent.substring(1,tokenContent.length()-1).trim();
text=false;
endTag=true;
startTag=true;
} else {
this.content=tokenContent.substring(1).trim();
text=false;
endTag=false;
startTag=true;
}
tokenName=getFirstWord(content);
} else {
System.out.println("Bad token!");
this.content=tokenContent;
}
}
private String getFirstWord(String phrase)
{
int at=content.indexOf(' ');
if (at==-1)
{
return phrase;
} else
{
return phrase.substring(0,at);
}
}
public String getTokenContent()
{
return content;
}
public String getTokenName()
{
return tokenName;
}
public boolean isDeclaration()
{
return decl;
}
public boolean isProcessingInstruction()
{
return pi;
}
public boolean isText()
{
return text;
}
public boolean isEndTag()
{
return endTag;
}
public boolean isStartTag()
{
return startTag;
}
public boolean isComment()
{
return comment;
}
public String toString()
{
String tokType="[UNK]";
if (isComment())
{
tokType="[COMMENT]";
} else if (isProcessingInstruction())
{
tokType="[PI]";
} else if (isDeclaration())
{
tokType="[DECL]";
} else if (isStartTag())
{
if (isEndTag())
{
tokType="[START-END]";
} else {
tokType="[START]";
}
} else if (isEndTag())
{
tokType="[END]";
} else if (isText())
{
tokType="[TEXT]";
}
if (tokenName!=null)
{
tokType=tokType+"(" + tokenName + ")";
}
return tokType + getTokenContent();
}
}
1.1 jakarta-ecs/test/java/org/apache/ecs/HTMLTokenizer.java
Index: HTMLTokenizer.java
===================================================================
/*
* Copyright (c) 1999 The Java Apache Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* 4. The names "Java Apache Element Construction Set", "Java Apache ECS" and
* "Java Apache Project" must not be used to endorse or promote products
* derived from this software without prior written permission.
*
* 5. Products derived from this software may not be called
* "Java Apache Element Construction Set" nor "Java Apache ECS" appear
* in their names without prior written permission of the
* Java Apache Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Java Apache Project. For more information
* on the Java Apache Project please see <http://java.apache.org/>.
*
*/
package org.apache.ecs;
import java.util.*;
/**
* <p> Tokenizer - not a parser! - for HTML
*
* <p> This is a tokenizer not a parser.
*/
public class HTMLTokenizer
{
public static void main(String [] args)
{
String test="<?xml version=\"1.0\"?><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"><html><head><title>The Title</title></head><body><!--This is a comment--><hr/>This is the body<hr/></body></html>";
System.out.println(test);
HTMLTokenizer ht=new HTMLTokenizer(test);
}
private List tokens;
public HTMLTokenizer() {}
public HTMLTokenizer(String html)
{
tokenize(html);
}
public void clearTokens()
{
tokens=new ArrayList();
}
public void tokenize(String html)
{
clearTokens();
StringTokenizer tokenizer=new StringTokenizer(html);
boolean leftTag=false;
boolean more=true;
while (more)
{
try {
String tok=null;
if (leftTag)
{
tok=tokenizer.nextToken("<");
} else
{
tok=tokenizer.nextToken(">");
}
leftTag=!leftTag;
addToken(tok);
} catch (NoSuchElementException ex) {
more=false;
}
}
}
public List getTokens()
{
return tokens;
}
public void addToken(String token)
{
if (!token.equals(">"))
{
tokens.add(new HTMLToken(token));
}
}
}
1.1 jakarta-ecs/test/java/org/apache/ecs/InternationalCharTest.java
Index: InternationalCharTest.java
===================================================================
/*
* Copyright (c) 1999 The Java Apache Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* 4. The names "Java Apache Element Construction Set", "Java Apache ECS" and
* "Java Apache Project" must not be used to endorse or promote products
* derived from this software without prior written permission.
*
* 5. Products derived from this software may not be called
* "Java Apache Element Construction Set" nor "Java Apache ECS" appear
* in their names without prior written permission of the
* Java Apache Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the Java Apache
* Project. <http://java.apache.org/>"
*
* THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "AS IS" AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JAVA APACHE PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Java Apache Project. For more information
* on the Java Apache Project please see <http://java.apache.org/>.
*
*/
package org.apache.ecs;
import java.io.*;
import java.util.StringTokenizer;
import org.apache.ecs.*;
import org.apache.ecs.html.*;
import junit.framework.TestCase;
import junit.framework.Test;
/**
* <p> Test application for a problem in 1.4.1 concerning international characters.
* <p> This creates two files representing the same document
* using the <code>output</code> and the <code>toString</code> methods.
* These should be identical.
*
* @author Magn�s ޗr Torfason
* @author Robert Burrell Donkin
*/
public class InternationalCharTest extends TestCase
{
/**
* Application tests internation character by generation two files on the basis of
* a resource file containing international characters.
*/
public static void main(String[] args)
throws Exception
{
InternationalCharTest charTest=new InternationalCharTest();
System.out.println("Passes test? " + charTest.resourcePassesTest("org/apache/ecs/icechar.txt"));
}
public static junit.framework.Test suite()
{
return new InternationalCharTest();
}
public InternationalCharTest()
{
super("InternationalCharacterTestCase");
}
public void runTest()
{
runResourceEncodingTest();
}
public void runResourceEncodingTest()
{
try
{
assert(resourcePassesTest("org/apache/ecs/icechar.txt"));
} catch (IOException ex)
{
fail(ex.toString());
}
}
/**
*
*/
protected boolean resourcePassesTest(String named) throws IOException
{
// load file as resource
InputStream is=this.getClass().getClassLoader().getResourceAsStream(named);
if (is!=null)
{
// read from the stream and us it to generate html.
InputStreamReader isr=new InputStreamReader(is);
StringWriter sw = new StringWriter();
int cnt;
char[] buf = new char[1024];
while ( (cnt = isr.read(buf)) != -1 )
{
sw.write(buf,0,cnt);
}
String str = sw.toString();
StringTokenizer st = new StringTokenizer(str,";\n");
int count = st.countTokens()/2;
Option[] options = new Option[count+1];
options[0] = new Option("NoPerson","NoPerson")
.addElement("NoPersonSelected");
for (int i = 0; i < count; i++ )
{
String value = st.nextToken();
String description = st.nextToken();
options[i+1] = new Option( description,value)
.addElement(description);
}
Select select = new Select("val",options);
org.apache.ecs.Document doc=wrap(select);
return toStringPassesTest(doc);
} else {
System.err.println("Cannot load required resource.");
return false;
}
}
/**
* Utility method wraps an <code>Element<code> in a html document.
*/
protected org.apache.ecs.Document wrap(org.apache.ecs.Element e)
{
return new org.apache.ecs.Document().appendTitle("Test").appendBody(e);
}
/**
* <p> Output document two ways to two different files.
*
* <p> Outputs using the <code>toString</code> method to the <code>toString</code> file.
* Outputs using the <code>output</code> method to the <code>toString</code> file.
* These two files should be identical.
*/
protected boolean toStringPassesTest(org.apache.ecs.Document doc)
{
BasicECSComparitor compare=new BasicECSComparitor();
boolean result=compare.compare(doc.getHtml(),doc.toString());
return result;
}
}
1.1 jakarta-ecs/test/java/org/apache/ecs/icechar.txt
Index: icechar.txt
===================================================================
123123-1239;Pr�funargaur
0902773-3919;Da�i �rnason
111176-9999;Magn�s Torfason
222276-8889;Dav�� Gudj�nsson
---------------------------------------------------------------------
To unsubscribe, e-mail: ecs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: ecs-dev-help@jakarta.apache.org