Revision: 19222
http://sourceforge.net/p/gate/code/19222
Author: markagreenwood
Date: 2016-04-10 10:07:58 +0000 (Sun, 10 Apr 2016)
Log Message:
-----------
more pom.xml cleanup and more tests moved into plugins
Modified Paths:
--------------
gate/branches/sawdust2/plugins/ANNIE/pom.xml
gate/branches/sawdust2/plugins/Tools/pom.xml
Added Paths:
-----------
gate/branches/sawdust2/plugins/ANNIE/src/test/java/gate/creole/TestPR.java
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/OrthoMatcherTest.txt
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/ft/
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/ft-bt-03-aug-2001.html
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/gu/
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/gu-Am-Brit-4-aug-2001.html
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/in/
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/in-outlook-09-aug-2001.html
gate/branches/sawdust2/plugins/Tools/src/test/resources/creole.properties
gate/branches/sawdust2/plugins/Tools/src/test/resources/tests/doc0.html
Removed Paths:
-------------
gate/branches/sawdust2/src/test/gate/creole/TestPR.java
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/OrthoMatcherTest.txt
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/ft/
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/ft-bt-03-aug-2001.html
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/gu/
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/gu-Am-Brit-4-aug-2001.html
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/in/
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/in-outlook-09-aug-2001.html
Modified: gate/branches/sawdust2/plugins/ANNIE/pom.xml
===================================================================
--- gate/branches/sawdust2/plugins/ANNIE/pom.xml 2016-04-10 07:46:01 UTC
(rev 19221)
+++ gate/branches/sawdust2/plugins/ANNIE/pom.xml 2016-04-10 10:07:58 UTC
(rev 19222)
@@ -29,20 +29,24 @@
<scope>provided</scope>
</dependency>
- <!-- add any other libraries you depend on -->
+ <!-- this dependency is optional but includes some useful
classes for testing
+ GATE plugins, should only ever be used in the test
scope -->
+ <dependency>
+ <groupId>uk.ac.gate</groupId>
+ <artifactId>test-utils</artifactId>
+ <version>9.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- add any other libraries your plugin depends on. Any other
GATE plugins
+ you depend on at compile time should use the provided
scope -->
+
<dependency>
<groupId>uk.ac.gate</groupId>
<artifactId>gate-compiler-jdt</artifactId>
<version>4.3.2-P20140317-1600</version>
</dependency>
- <dependency>
- <groupId>uk.ac.gate</groupId>
- <artifactId>test-utils</artifactId>
- <version>9.0-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
</dependencies>
<!-- In theory you shouldn't need to change anything below here -->
@@ -63,11 +67,27 @@
<build>
<testResources>
+ <!-- this adds the maven coordinates into the test
resource file creole.properties
+ which is used to help load this plugin for
testing -->
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
+ <includes>
+ <include>creole.properties</include>
+ </includes>
</testResource>
+
+ <!-- copy all the other resources without altering them
so we don't accidentally
+ corrupt datastores or other binary formats -->
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>false</filtering>
+ <excludes>
+ <exclude>creole.properties</exclude>
+ </excludes>
+ </testResource>
</testResources>
+
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
@@ -124,7 +144,6 @@
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.3</version>
<configuration>
-
<xmlOutput>true</xmlOutput>
<effort>Max</effort>
<threshold>Low</threshold>
@@ -134,6 +153,14 @@
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
+ <configuration>
+ <excludes>
+ <!-- this excludes known GUI
code from the code coverage results as
+ we know we aren't
testing them so will likely have a 0% coverage -->
+ <exclude>gate/gui/**/*</exclude>
+
<exclude>gate/swing/**/*</exclude>
+ </excludes>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Copied:
gate/branches/sawdust2/plugins/ANNIE/src/test/java/gate/creole/TestPR.java
(from rev 19218, gate/branches/sawdust2/src/test/gate/creole/TestPR.java)
===================================================================
--- gate/branches/sawdust2/plugins/ANNIE/src/test/java/gate/creole/TestPR.java
(rev 0)
+++ gate/branches/sawdust2/plugins/ANNIE/src/test/java/gate/creole/TestPR.java
2016-04-10 10:07:58 UTC (rev 19222)
@@ -0,0 +1,714 @@
+/*
+ * TestPR.java
+ *
+ * Copyright (c) 1995-2012, The University of Sheffield. See the file
+ * COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
+ *
+ * This file is part of GATE (see http://gate.ac.uk/), and is free
+ * software, licenced under the GNU Library General Public License,
+ * Version 2, June 1991 (in the distribution as file licence.html,
+ * and also available at http://gate.ac.uk/gate/licence.html).
+ *
+ * Oana Hamza,
+ *
+ * $Id$
+ */
+
+package gate.creole;
+
+import gate.Annotation;
+import gate.AnnotationSet;
+import gate.DataStore;
+import gate.Document;
+import gate.Factory;
+import gate.FeatureMap;
+import gate.creole.gazetteer.DefaultGazetteer;
+import gate.creole.orthomatcher.OrthoMatcher;
+import gate.creole.splitter.SentenceSplitter;
+import gate.creole.tokeniser.DefaultTokeniser;
+import gate.jape.JapeException;
+import gate.jape.JapeFactory;
+import gate.jape.constraint.AbstractConstraintPredicate;
+import gate.jape.constraint.AnnotationAccessor;
+import gate.jape.constraint.ConstraintPredicate;
+import gate.jape.constraint.MetaPropertyAccessor;
+import gate.test.GATEPluginTestCase;
+import gate.util.AnnotationDiffer;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.junit.FixMethodOrder;
+import org.junit.runners.MethodSorters;
+
+/** Test the PRs on three documents */
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class TestPR extends GATEPluginTestCase
+{
+ protected static Document doc1;
+ protected static Document doc2;
+ protected static Document doc3;
+ protected static Document doc4;
+
+ protected static List<String> annotationTypes = new ArrayList<String>(10);
+
+ static{
+ annotationTypes.add(ANNIEConstants.SENTENCE_ANNOTATION_TYPE);
+ annotationTypes.add(ANNIEConstants.ORGANIZATION_ANNOTATION_TYPE);
+ annotationTypes.add(ANNIEConstants.LOCATION_ANNOTATION_TYPE);
+ annotationTypes.add(ANNIEConstants.PERSON_ANNOTATION_TYPE);
+ annotationTypes.add(ANNIEConstants.DATE_ANNOTATION_TYPE);
+ annotationTypes.add(ANNIEConstants.MONEY_ANNOTATION_TYPE);
+ annotationTypes.add(ANNIEConstants.LOOKUP_ANNOTATION_TYPE);
+ annotationTypes.add(ANNIEConstants.TOKEN_ANNOTATION_TYPE);
+ try{
+ //get 4 documents
+ if (doc1 == null)
+ doc1 = Factory.newDocument(
+
TestPR.class.getResource("/tests/ft-bt-03-aug-2001.html"),
+ "ISO-8859-1"
+ );
+
+ if (doc2 == null)
+ doc2 = Factory.newDocument(
+
TestPR.class.getResource("/tests/gu-Am-Brit-4-aug-2001.html"),
+ "ISO-8859-1"
+ );
+
+ if (doc3 == null)
+ doc3 = Factory.newDocument(
+
TestPR.class.getResource("/tests/in-outlook-09-aug-2001.html"),
+ "ISO-8859-1"
+ );
+ if (doc4 == null)
+ doc4 = Factory.newDocument(
+ TestPR.class.getResource("/tests/OrthoMatcherTest.txt"),
+ "UTF-8"
+ );
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+
+ /** Put things back as they should be after running tests.
+ */
+ @Override
+ public void tearDown() throws Exception {
+ } // tearDown
+
+ public void test001Tokenizer() throws Exception {
+ FeatureMap params = Factory.newFeatureMap();
+ DefaultTokeniser tokeniser = (DefaultTokeniser) Factory.createResource(
+ "gate.creole.tokeniser.DefaultTokeniser", params);
+
+
+ //run the tokeniser for doc1
+ tokeniser.setDocument(doc1);
+ tokeniser.execute();
+
+ //run the tokeniser for doc2
+ tokeniser.setDocument(doc2);
+ tokeniser.execute();
+
+ //run the tokeniser for doc3
+ tokeniser.setDocument(doc3);
+ tokeniser.execute();
+
+ tokeniser.setDocument(doc4);
+ tokeniser.execute();
+
+ Factory.deleteResource(tokeniser);
+
+ // assertions for doc 1
+ assertTrue("Found in "+doc1.getSourceUrl().getFile()+ " "+
+ doc1.getAnnotations().size() +
+ " Token annotations, instead of the expected 1279.",
+ doc1.getAnnotations().size()== 1279);
+
+ // assertions for doc 2
+ assertTrue("Found in "+ doc2.getSourceUrl().getFile()+ " "+
+ doc2.getAnnotations().size() +
+ " Token annotations, instead of the expected 2134.",
+ doc2.getAnnotations().size()== 2134);
+
+ // assertions for doc 3
+ assertTrue("Found in "+ doc3.getSourceUrl().getFile()+ " "+
+ doc3.getAnnotations().size() +
+ " Token annotations, instead of the expected 2807.",
+ doc3.getAnnotations().size()== 2807);
+
+ }// testTokenizer
+
+ public void test002Gazetteer() throws Exception {
+ FeatureMap params = Factory.newFeatureMap();
+ DefaultGazetteer gaz = (DefaultGazetteer) Factory.createResource(
+ "gate.creole.gazetteer.DefaultGazetteer", params);
+
+ //run gazetteer for doc1
+ gaz.setDocument(doc1);
+ gaz.execute();
+
+ //run gazetteer for doc2
+ gaz.setDocument(doc2);
+ gaz.execute();
+
+ //run gazetteer for doc3
+ gaz.setDocument(doc3);
+ gaz.execute();
+
+ //run gazetteer for doc3
+ gaz.setDocument(doc4);
+ gaz.execute();
+
+
+ Factory.deleteResource(gaz);
+
+// assertTrue("Found in "+ doc1.getSourceUrl().getFile()+ " "+
+//
doc1.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size() +
+// " Lookup annotations, instead of the expected 60.",
+//
doc1.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size()== 60);
+ assertEquals("Wrong number of annotations produced in " +
+ doc1.getSourceUrl().getFile(),
+ 133,
+
doc1.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size());
+
+// assertTrue("Found in "+ doc2.getSourceUrl().getFile()+ " "+
+//
doc2.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size() +
+// " Lookup annotations, instead of the expected 134.",
+//
doc2.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size()== 134);
+ assertEquals("Wrong number of annotations produced in " +
+ doc2.getSourceUrl().getFile(),
+ 232,
+
doc2.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size());
+
+// assertTrue("Found in "+ doc3.getSourceUrl().getFile()+ " "+
+//
doc3.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size() +
+// " Lookup annotations, instead of the expected 144.",
+//
doc3.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size()== 144);
+ assertEquals("Wrong number of annotations produced in " +
+ doc3.getSourceUrl().getFile(),
+ 282,
+
doc3.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size());
+ }//testGazetteer
+
+ public void test003Splitter() throws Exception {
+ FeatureMap params = Factory.newFeatureMap();
+ SentenceSplitter splitter = (SentenceSplitter) Factory.createResource(
+ "gate.creole.splitter.SentenceSplitter", params);
+
+ //run splitter for doc1
+ splitter.setDocument(doc1);
+ splitter.execute();
+
+ //run splitter for doc2
+ splitter.setDocument(doc2);
+ splitter.execute();
+
+ //run splitter for doc3
+ splitter.setDocument(doc3);
+ splitter.execute();
+
+ //run splitter for doc3
+ splitter.setDocument(doc4);
+ splitter.execute();
+
+
+ Factory.deleteResource(splitter);
+
+ // assertions for doc 1
+ assertTrue("Found in "+ doc1.getSourceUrl().getFile()+ " "+
+
doc1.getAnnotations().get(ANNIEConstants.SENTENCE_ANNOTATION_TYPE).size() +
+ " Sentence annotations, instead of the expected 25.",
+
doc1.getAnnotations().get(ANNIEConstants.SENTENCE_ANNOTATION_TYPE).size()== 25);
+
+ assertTrue("Found in "+ doc1.getSourceUrl().getFile()+ " "+
+ doc1.getAnnotations().get("Split").size() +
+ " Split annotations, instead of the expected 66.",
+ doc1.getAnnotations().get("Split").size()== 66);
+
+ // assertions for doc 2
+ assertTrue("Found in "+ doc2.getSourceUrl().getFile()+ " "+
+
doc2.getAnnotations().get(ANNIEConstants.SENTENCE_ANNOTATION_TYPE).size() +
+ " Sentence annotations, instead of the expected 57.",
+
doc2.getAnnotations().get(ANNIEConstants.SENTENCE_ANNOTATION_TYPE).size()== 57);
+
+ assertTrue("Found in "+ doc2.getSourceUrl().getFile()+ " "+
+ doc2.getAnnotations().get("Split").size() +
+ " Split annotations, instead of the expected 110.",
+ doc2.getAnnotations().get("Split").size()== 110);
+
+ // assertions for doc 3
+ assertTrue("Found in "+ doc3.getSourceUrl().getFile()+ " "+
+
doc3.getAnnotations().get(ANNIEConstants.SENTENCE_ANNOTATION_TYPE).size() +
+ " Sentence annotations, instead of the expected 75.",
+
doc3.getAnnotations().get(ANNIEConstants.SENTENCE_ANNOTATION_TYPE).size()== 75);
+
+ assertTrue("Found in "+ doc3.getSourceUrl().getFile()+ " "+
+ doc3.getAnnotations().get("Split").size() +
+ " Split annotations, instead of the expected 122.",
+ doc3.getAnnotations().get("Split").size()== 122);
+ }//testSplitter
+
+ public void test004Tagger() throws Exception {
+ FeatureMap params = Factory.newFeatureMap();
+ POSTagger tagger = (POSTagger) Factory.createResource(
+ "gate.creole.POSTagger", params);
+
+
+ //run the tagger for doc1
+ tagger.setDocument(doc1);
+ tagger.execute();
+
+ //run the tagger for doc2
+ tagger.setDocument(doc2);
+ tagger.execute();
+
+ //run the tagger for doc3
+ tagger.setDocument(doc3);
+ tagger.execute();
+
+ //run the tagger for doc3
+ tagger.setDocument(doc4);
+ tagger.execute();
+
+ Factory.deleteResource(tagger);
+
+ HashSet<String> fType = new HashSet<String>();
+ fType.add(ANNIEConstants.TOKEN_CATEGORY_FEATURE_NAME);
+
+ // assertions for doc 1
+ AnnotationSet annots =
+ doc1.getAnnotations().get(ANNIEConstants.TOKEN_ANNOTATION_TYPE, fType);
+
+ assertTrue("Found in "+ doc1.getSourceUrl().getFile()+ " "+ annots.size() +
+ " Token annotations with category feature, instead of the expected 675.",
+ annots.size() == 675);
+
+ // assertions for doc 2
+ annots = doc2.getAnnotations().get(ANNIEConstants.TOKEN_ANNOTATION_TYPE,
fType);
+ assertTrue("Found in "+ doc2.getSourceUrl().getFile()+ " "+annots.size() +
+ " Token annotations with category feature, instead of the expected
1131.",
+ annots.size() == 1131);
+
+ // assertions for doc 3
+ annots = doc3.getAnnotations().get(ANNIEConstants.TOKEN_ANNOTATION_TYPE,
fType);
+ assertTrue("Found in "+ doc3.getSourceUrl().getFile()+ " "+ annots.size() +
+ " Token annotations with category feature, instead of the expected
1447.",
+ annots.size() == 1447);
+ }//testTagger()
+
+ public void test005Transducer() throws Exception {
+ FeatureMap params = Factory.newFeatureMap();
+ ANNIETransducer transducer = (ANNIETransducer) Factory.createResource(
+ "gate.creole.ANNIETransducer", params);
+
+ //run the transducer for doc1
+ transducer.setDocument(doc1);
+ transducer.execute();
+
+ //run the transducer for doc2
+ transducer.setDocument(doc2);
+ transducer.execute();
+
+ //run the transducer for doc3
+ transducer.setDocument(doc3);
+ transducer.execute();
+
+ //run the transducer for doc3
+ transducer.setDocument(doc4);
+ transducer.execute();
+
+ Factory.deleteResource(transducer);
+
+ // assertions for doc 1
+ assertTrue("Found in "+ doc1.getSourceUrl().getFile()+ " "+
+
doc1.getAnnotations().get(ANNIEConstants.ORGANIZATION_ANNOTATION_TYPE).size() +
+ " Organization annotations, instead of the expected 28",
+
doc1.getAnnotations().get(ANNIEConstants.ORGANIZATION_ANNOTATION_TYPE).size()==
27);
+ assertTrue("Found in "+doc1.getSourceUrl().getFile()+ " "+
+
doc1.getAnnotations().get(ANNIEConstants.LOCATION_ANNOTATION_TYPE).size() +
+ " Location annotations, instead of the expected 2",
+
doc1.getAnnotations().get(ANNIEConstants.LOCATION_ANNOTATION_TYPE).size()== 2);
+ assertTrue("Found in "+doc1.getSourceUrl().getFile()+ " "+
+ doc1.getAnnotations().get(ANNIEConstants.PERSON_ANNOTATION_TYPE).size() +
+ " Person annotations, instead of the expected 2",
+
doc1.getAnnotations().get(ANNIEConstants.PERSON_ANNOTATION_TYPE).size()== 2);
+ assertTrue("Found in "+doc1.getSourceUrl().getFile()+ " "+
+ doc1.getAnnotations().get(ANNIEConstants.DATE_ANNOTATION_TYPE).size() +
+ " Date annotations, instead of the expected 7",
+ doc1.getAnnotations().get(ANNIEConstants.DATE_ANNOTATION_TYPE).size()==
7);
+ assertTrue("Found in "+doc1.getSourceUrl().getFile()+ " "+
+ doc1.getAnnotations().get(ANNIEConstants.MONEY_ANNOTATION_TYPE).size() +
+ " Money annotations, instead of the expected 1",
+ doc1.getAnnotations().get(ANNIEConstants.MONEY_ANNOTATION_TYPE).size()==
1);
+
+ // assertions for doc 2
+ assertTrue("Found in "+doc2.getSourceUrl().getFile()+ " "+
+
doc2.getAnnotations().get(ANNIEConstants.ORGANIZATION_ANNOTATION_TYPE).size() +
+ " Organization annotations, instead of the expected 25",
+
doc2.getAnnotations().get(ANNIEConstants.ORGANIZATION_ANNOTATION_TYPE).size()==
25);
+ assertTrue("Found in "+doc2.getSourceUrl().getFile()+ " "+
+
doc2.getAnnotations().get(ANNIEConstants.LOCATION_ANNOTATION_TYPE).size() +
+ " Location annotations, instead of the expected 10",
+
doc2.getAnnotations().get(ANNIEConstants.LOCATION_ANNOTATION_TYPE).size()== 10);
+ assertTrue("Found in "+doc2.getSourceUrl().getFile()+ " "+
+ doc2.getAnnotations().get(ANNIEConstants.PERSON_ANNOTATION_TYPE).size() +
+ " Person annotations, instead of the expected 2",
+
doc2.getAnnotations().get(ANNIEConstants.PERSON_ANNOTATION_TYPE).size()== 2);
+ assertTrue("Found in "+doc2.getSourceUrl().getFile()+ " "+
+ doc2.getAnnotations().get(ANNIEConstants.DATE_ANNOTATION_TYPE).size() +
+ " Date annotations, instead of the expected 8",
+ doc2.getAnnotations().get(ANNIEConstants.DATE_ANNOTATION_TYPE).size()==
8);
+ assertTrue("Found in "+doc2.getSourceUrl().getFile()+ " "+
+ doc2.getAnnotations().get(ANNIEConstants.MONEY_ANNOTATION_TYPE).size() +
+ " Money annotations, instead of the expected 3",
+ doc2.getAnnotations().get(ANNIEConstants.MONEY_ANNOTATION_TYPE).size()==
3);
+
+ // assertions for doc 3
+ assertEquals("Found in "+doc3.getSourceUrl().getFile()+ " "+
+ " wrong number of Organization annotations",29,
+
doc3.getAnnotations().get(ANNIEConstants.ORGANIZATION_ANNOTATION_TYPE).size());
+ assertTrue("Found in "+doc3.getSourceUrl().getFile()+ " "+
+
doc3.getAnnotations().get(ANNIEConstants.LOCATION_ANNOTATION_TYPE).size() +
+ " Location annotations, instead of the expected 11",
+
doc3.getAnnotations().get(ANNIEConstants.LOCATION_ANNOTATION_TYPE).size()== 11);
+ assertTrue("Found in "+doc3.getSourceUrl().getFile()+ " "+
+ doc3.getAnnotations().get(ANNIEConstants.PERSON_ANNOTATION_TYPE).size() +
+ " Person annotations, instead of the expected 8",
+
doc3.getAnnotations().get(ANNIEConstants.PERSON_ANNOTATION_TYPE).size()== 8);
+ assertTrue("Found in "+doc3.getSourceUrl().getFile()+ " "+
+ doc3.getAnnotations().get(ANNIEConstants.DATE_ANNOTATION_TYPE).size() +
+ " Date annotations, instead of the expected 7",
+ doc3.getAnnotations().get(ANNIEConstants.DATE_ANNOTATION_TYPE).size()==
7);
+ assertTrue("Found in "+doc3.getSourceUrl().getFile()+ " "+
+ doc3.getAnnotations().get(ANNIEConstants.MONEY_ANNOTATION_TYPE).size() +
+ " Money annotations, instead of the expected 4",
+ doc3.getAnnotations().get(ANNIEConstants.MONEY_ANNOTATION_TYPE).size()==
4);
+
+ assertEquals("Wrong number of Person annotations in OrthoMatcher test
document",22,
+
doc4.getAnnotations().get(ANNIEConstants.PERSON_ANNOTATION_TYPE).size());
+ }//testTransducer
+
+ public void test006CustomConstraintDefs() throws Exception {
+ FeatureMap params = Factory.newFeatureMap();
+
+ List<String> operators = new ArrayList<String>();
+ params.put("operators", operators);
+ ConstraintPredicate testPred = new TestConstraintPredicate();
+ operators.add(testPred.getClass().getName());
+
+ List<String> accessors = new ArrayList<String>();
+ params.put("annotationAccessors", accessors);
+ AnnotationAccessor testAccessor = new TestAnnotationAccessor();
+ accessors.add(testAccessor.getClass().getName());
+
+ ANNIETransducer transducer = (ANNIETransducer) Factory.createResource(
+ "gate.creole.ANNIETransducer", params);
+
+ assertEquals(accessors, transducer.getAnnotationAccessors());
+ assertEquals(operators, transducer.getOperators());
+
+ ConstraintPredicate returnedPred =
JapeFactory.getConstraintFactory().createPredicate("fooOp", testAccessor,
"fooValue");
+ assertNotNull(returnedPred);
+ assertEquals("Operator not set", testPred.getClass(),
returnedPred.getClass());
+
+ AnnotationAccessor returnAccessor =
JapeFactory.getConstraintFactory().createMetaPropertyAccessor("fooProp");
+ assertNotNull(returnAccessor);
+ assertEquals("Accessor not set", testAccessor.getClass(),
returnAccessor.getClass());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void test007Orthomatcher() throws Exception {
+ FeatureMap params = Factory.newFeatureMap();
+
+ OrthoMatcher orthomatcher = (OrthoMatcher) Factory.createResource(
+ "gate.creole.orthomatcher.OrthoMatcher", params);
+
+
+ // run the orthomatcher for doc1
+ orthomatcher.setDocument(doc1);
+ orthomatcher.execute();
+
+ //run the orthomatcher for doc2
+ orthomatcher.setDocument(doc2);
+ orthomatcher.execute();
+
+ //run the orthomatcher for doc3
+ orthomatcher.setDocument(doc3);
+ orthomatcher.execute();
+
+ //run the orthomatcher for doc3
+ orthomatcher.setDocument(doc4);
+ orthomatcher.execute();
+
+ Factory.deleteResource(orthomatcher);
+
+ HashSet<String> fType = new HashSet<String>();
+ fType.add(ANNIEConstants.ANNOTATION_COREF_FEATURE_NAME);
+
+ //TODO why do we get these annotation sets out without actually checking
the sizes?
+
+ @SuppressWarnings("unused")
+ AnnotationSet annots =
+ doc1.getAnnotations().get(null,fType);
+
+// assertEquals("Wrong number of annotations with matches feature",
+// 17, annots.size());
+
+ annots = doc2.getAnnotations().get(null,fType);
+// assertEquals("Wrong number of annotations with matches feature",
+// 31, annots.size());
+
+ annots = doc3.getAnnotations().get(null,fType);
+// assertTrue("Found in "+doc3.getSourceUrl().getFile()+ " "+ annots.size()
+
+// " annotations with matches feature, instead of the expected 39.",
+// annots.size() == 39);
+
+ AnnotationSet personAnnots = doc4.getAnnotations().get("Person");
+ Annotation sarahAnnot = personAnnots.get(new Long(806), new
Long(811)).iterator().next();
+ assertEquals("Wrong number of matches for second Sarah in document", 2,
+ ((List<Integer>) sarahAnnot.getFeatures().get("matches")).size());
+
+ Annotation robertQJones = personAnnots.get(new Long(300), new
Long(315)).iterator().next();
+ assertEquals("Wrong number of matches for Robert Q Jones in document", 3,
+ ((List<Integer>)
robertQJones.getFeatures().get("matches")).size());
+
+ Annotation robertCJones = personAnnots.get(new Long(0), new
Long(15)).iterator().next();
+ assertEquals("Wrong number of matches for Robert C Jones in document", 3,
+ ((List<Integer>)
robertCJones.getFeatures().get("matches")).size());
+
+ Annotation robertAnderson = personAnnots.get(new Long(1188), new
Long(1203)).iterator().next();
+ assertEquals("Found a match for Robert Anderson, but he should not have
been matched.", false,
+ robertAnderson.getFeatures().containsKey("matches"));
+
+
+
+ }//testOrthomatcher
+
+ /** A test for comparing the annotation sets*/
+ public void test008AllPR() throws Exception {
+
+ // verify if the saved data store is the same with the just processed file
+ // first document
+
+ //URL urlBase = new URL(TestDocument.getTestServerName());
+
+ URL storageDir = null;
+ storageDir = this.getClass().getResource("/tests/ft");
+
+ //open the data store
+ DataStore ds = Factory.openDataStore
+ ("gate.persist.SerialDataStore",
+ storageDir.toExternalForm());
+
+ //get LR id
+ String lrId = ds.getLrIds("gate.corpora.DocumentImpl").get(0);
+
+
+ // get the document from data store
+ FeatureMap features = Factory.newFeatureMap();
+ features.put(DataStore.DATASTORE_FEATURE_NAME, ds);
+ features.put(DataStore.LR_ID_FEATURE_NAME, lrId);
+ Document document = (Document) Factory.createResource(
+ "gate.corpora.DocumentImpl",
+ features);
+ compareAnnots(document, doc1);
+
+ // second document
+ storageDir = null;
+ storageDir = this.getClass().getResource("/tests/gu");
+
+ //open the data store
+ ds = Factory.openDataStore("gate.persist.SerialDataStore",
+ storageDir.toExternalForm());
+ //get LR id
+ lrId = ds.getLrIds("gate.corpora.DocumentImpl").get(0);
+ // get the document from data store
+ features = Factory.newFeatureMap();
+ features.put(DataStore.DATASTORE_FEATURE_NAME, ds);
+ features.put(DataStore.LR_ID_FEATURE_NAME, lrId);
+ document = (Document) Factory.createResource(
+ "gate.corpora.DocumentImpl",
+ features);
+ compareAnnots(document,doc2);
+
+ // third document
+ storageDir = null;
+ storageDir = this.getClass().getResource("/tests/in");
+
+ //open the data store
+ ds = Factory.openDataStore("gate.persist.SerialDataStore",
+ storageDir.toExternalForm());
+ //get LR id
+ lrId = ds.getLrIds("gate.corpora.DocumentImpl").get(0);
+ // get the document from data store
+ features = Factory.newFeatureMap();
+ features.put(DataStore.DATASTORE_FEATURE_NAME, ds);
+ features.put(DataStore.LR_ID_FEATURE_NAME, lrId);
+ document = (Document) Factory.createResource(
+ "gate.corpora.DocumentImpl",
+ features);
+ compareAnnots(document,doc3);
+ } // testAllPR()
+
+// public void compareAnnots1(Document keyDocument, Document responseDocument)
+// throws Exception{
+// // organization type
+// Iterator iteratorTypes = annotationTypes.iterator();
+// while (iteratorTypes.hasNext()){
+// // get the type of annotation
+// String annotType = (String)iteratorTypes.next();
+// // create annotation schema
+// AnnotationSchema annotationSchema = new AnnotationSchema();
+//
+// annotationSchema.setAnnotationName(annotType);
+//
+// // create an annotation diff
+// AnnotationDiff annotDiff = new AnnotationDiff();
+// annotDiff.setKeyDocument(keyDocument);
+// annotDiff.setResponseDocument(responseDocument);
+// annotDiff.setAnnotationSchema(annotationSchema);
+// annotDiff.setKeyAnnotationSetName(null);
+// annotDiff.setResponseAnnotationSetName(null);
+//
+// Set significantFeatures = new HashSet(Arrays.asList(
+// new String[]{"NMRule", "kind", "orgType", "rule",
+// "rule1", "rule2", "locType", "gender",
+// "majorType", "minorType", "category",
+// "length", "orth", "string", "subkind",
+// "symbolkind"}));
+// annotDiff.setKeyFeatureNamesSet(significantFeatures);
+// annotDiff.setTextMode(new Boolean(true));
+//
+// annotDiff.init();
+//
+// if (DEBUG){
+// if (annotDiff.getFMeasureAverage() != 1.0) {
+// assertTrue("missing annotations " +
+// annotDiff.getAnnotationsOfType(AnnotationDiff.MISSING_TYPE)
+// + " spurious annotations " +
+// annotDiff.getAnnotationsOfType(AnnotationDiff.SPURIOUS_TYPE)
+// + " partially-correct annotations " +
+// annotDiff.getAnnotationsOfType(
+// AnnotationDiff.PARTIALLY_CORRECT_TYPE),false);
+// }
+// }//if
+//
+// assertTrue(annotType+ " precision average in "+
+// responseDocument.getSourceUrl().getFile()+
+// " is "+ annotDiff.getPrecisionAverage()+ " instead of 1.0 ",
+// annotDiff.getPrecisionAverage()== 1.0);
+// assertTrue(annotType+" recall average in "
+// +responseDocument.getSourceUrl().getFile()+
+// " is " + annotDiff.getRecallAverage()+ " instead of 1.0 ",
+// annotDiff.getRecallAverage()== 1.0);
+// assertTrue(annotType+" f-measure average in "
+// +responseDocument.getSourceUrl().getFile()+
+// " is "+ annotDiff.getFMeasureAverage()+ " instead of 1.0 ",
+// annotDiff.getFMeasureAverage()== 1.0);
+// }//while
+// }// public void compareAnnots
+//
+ public void compareAnnots(Document keyDocument, Document responseDocument)
+ throws Exception{
+ // organization type
+ //DocumentStaxUtils.writeDocument(responseDocument, new
File("/home/mark/"+responseDocument.getName()+".xml"));
+ Iterator<String> iteratorTypes = annotationTypes.iterator();
+ while (iteratorTypes.hasNext()){
+ // get the type of annotation
+ String annotType = iteratorTypes.next();
+
+ // create an annotation diff
+ AnnotationDiffer annotDiffer = new AnnotationDiffer();
+ Set<String> significantFeatures = new HashSet<String>(Arrays.asList(
+ new String[]{"NMRule", "kind", "orgType", "rule",
+ "rule1", "rule2", "locType", "gender",
+ "majorType", "minorType", "category",
+ "length", "orth", "string", "subkind",
+ "symbolkind"}));
+ annotDiffer.setSignificantFeaturesSet(significantFeatures);
+ annotDiffer.calculateDiff(keyDocument.getAnnotations().get(annotType),
+
responseDocument.getAnnotations().get(annotType));
+
+ annotDiffer.printMissmatches();
+
+ assertTrue(annotType+ " precision strict in "+
+ responseDocument.getSourceUrl().getFile()+
+ " is "+ annotDiffer.getPrecisionStrict()+ " instead of 1.0 ",
+ annotDiffer.getPrecisionStrict()== 1.0);
+
+ assertTrue(annotType+" recall strict in "
+ +responseDocument.getSourceUrl().getFile()+
+ " is " + annotDiffer.getRecallStrict()+ " instead of 1.0 ",
+ annotDiffer.getRecallStrict()== 1.0);
+
+ assertTrue(annotType+" f-measure strict in "
+ +responseDocument.getSourceUrl().getFile()+
+ " is "+ annotDiffer.getFMeasureStrict(0.5)+ " instead of 1.0 ",
+ annotDiffer.getFMeasureStrict(0.5)== 1.0);
+ }//while
+ }// public void compareAnnots
+
+ public static class TestConstraintPredicate extends
AbstractConstraintPredicate {
+
+ private static final long serialVersionUID = -8980180587795897947L;
+
+ @Override
+ protected boolean doMatch(Object value, AnnotationSet context)
+ throws JapeException {
+ return false;
+ }
+
+ @Override
+ public String getOperator() {
+ return "fooOp";
+ }
+ };
+
+ public static class TestAnnotationAccessor extends MetaPropertyAccessor {
+
+ private static final long serialVersionUID = 6967907751030807600L;
+
+ @Override
+ public Object getValue(Annotation annot, AnnotationSet context) {
+ return "foo";
+ }
+
+ @Override
+ public Object getKey() {
+ return "fooProp";
+ }
+ };
+
+ /** Test suite routine for the test runner */
+ public static Test suite() {
+ return new TestSuite(TestPR.class);
+ } // suite
+
+ /*public static void main(String[] args) {
+ try{
+ Gate.init();
+ TestPR testPR = new TestPR("");
+ testPR.setUp();
+ testPR.testTokenizer();
+ testPR.testGazetteer();
+ testPR.testSplitter();
+ testPR.testTagger();
+ testPR.testTransducer();
+ testPR.testOrthomatcher();
+ testPR.testAllPR();
+ testPR.tearDown();
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }*/ // main
+} // class TestPR
Copied:
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/OrthoMatcherTest.txt
(from rev 19218,
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/OrthoMatcherTest.txt)
===================================================================
---
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/OrthoMatcherTest.txt
(rev 0)
+++
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/OrthoMatcherTest.txt
2016-04-10 10:07:58 UTC (rev 19222)
@@ -0,0 +1,17 @@
+Robert C. Jones is vice-president of manufacturing at BT Cellnet Ltd. Mr.
Jones works on manufacturing issues for BT Cellnet. He has pioneered many
recent successes in this area. His leadership has been wonderful. We are very
indebted to him. Bob lives with his wife and children in Sheffield.
+
+Robert Q. Jones works at BT. Mr. Jones is a brilliant scientist. Robert is
also a wonderful guy.
+
+Robert Johnson is Director of Fiber Optics Research at ACME Research, Inc. He
is very skilled in optics. Robert has invented many things that are crucial to
Fiber Optics Research.
+
+Sarah Richardson is Chief Financial Officer at XYZ Corporation. Her
wide-ranging contributions are important to the firm. Sarah lives in
Manchester with her husband and three dogs.
+
+Sarah Michaels is Treasurer of IBM. Sarah lives in Boston, where she has
lived since joining Big Blue in 1963. She is married and has a child with her
husband, Fred Michaels. Mr. Michaels is President of SuperStuff, Inc.
+
+Sarah Jones is Senior Vice President of Applied Research at ABC Corporation.
She has worked in many capacities for ABC. Sarah lives in Birmingham, where
she enjoys tennis, golf, and hiking.
+
+Robert Anderson is a wonderful man. He and Mrs. Anderson live in Kent, where
they enjoy cricket and polo.
+
+Frederick Anderson is the Director of the National Aeronautics and Space
Administration. Anderson has been with NASA since he began his career in
1963. His first job in that year was as an astronaut.
+
+Dave Simmons. David C. Simmons is our Director of Government Affairs.
\ No newline at end of file
Copied:
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/ft-bt-03-aug-2001.html
(from rev 19218,
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/ft-bt-03-aug-2001.html)
===================================================================
---
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/ft-bt-03-aug-2001.html
(rev 0)
+++
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/ft-bt-03-aug-2001.html
2016-04-10 10:07:58 UTC (rev 19222)
@@ -0,0 +1,278 @@
+<!-- Vignette V/5 Mon Aug 06 07:50:01 2001 -->
+<SCRIPT LANGUAGE="javascript">
+ <!-- hide from old browsers
+ function goUrl(Selected) {
+ /* change page location to option selected from navigation
drop-down */
+ var newURL = Selected.options[Selected.selectedIndex].value ;
+ if (newURL!=" ") {
+ document.location.href = newURL;
+ }
+ }
+ // End of javascript -->
+</SCRIPT>
+<HTML>
+<HEAD>
+ <TITLE>Guardian Unlimited | Archive Search</TITLE>
+</HEAD>
+
+
+<BODY BGCOLOR="#FFFFFF" TOPMARGIN="8" LEFTMARGIN="0" LINK="#003366"
VLINK="#003366" ALINK="#FF0000">
+
+<!-- Vignette V/5 Sun Aug 05 10:18:02 2001 -->
+
+<CENTER>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="608">
+<!-- Row 1 - Logo + advertising -->
+<TR VALIGN="TOP">
+ <TD WIDTH="140" ALIGN=LEFT HEIGHT="68">
+ <!-- GU logo box and second box -->
+ <!-- Vignette V/5 Sun Aug 05 10:18:02 2001 -->
+<!-- logo box--><A HREF="/0,6961,,00.html"><IMG
SRC="http://www.pixunlimited.co.uk/sys-images/Guardian/Pix/site_furniture/2000/04/13/gulogo.gif"
ALT="Guardian Unlimited" HEIGHT="60" WIDTH="120" BORDER="0"></A></TD>
+ <TD WIDTH="468" ALIGN="RIGHT">
+
+
+<A
HREF="http://ads.guardianunlimited.co.uk/click.ng/site=Guardian&rand=2235220">
+<IMG
SRC="http://ads.guardianunlimited.co.uk/image.ng/site=Guardian&rand=2235220"
height=60 width=468 BORDER=0></A></TD>
+</TR>
+</TABLE>
+</CENTER>
+<!-- Table for Guardian Stamp and Advert Banner -->
+
+<CENTER>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="608"><TR VALIGN="TOP">
+ <TD WIDTH="100" VALIGN="TOP" HEIGHT=30><!--stamp here--><!-- Vignette
V/5 Sun Aug 05 10:18:03 2001 -->
+<!--Guardian Stamp for furniture table--><IMG
SRC="http://www.pixunlimited.co.uk/guardian/site/Guardian_Observer_logo.gif"
WIDTH="80" HEIGHT="25" ALT="The Guardian" BORDER=0></TD>
+ <TD ALIGN="RIGHT" VALIGN="TOP" HEIGHT=30>
+
+ <!-- Vignette V/5 Sat Aug 04 18:50:22 2001 -->
+
+<FORM NAME="network" METHOD="POST"
ACTION="/redirect/1,1437,,00.html"><NOBR><FONT FACE="Geneva,Arial,sans-serif"
SIZE="2"><B>Go to:</B> </FONT><SELECT NAME="Url" onChange="goUrl(this)">
+ <OPTION VALUE="/0,6961,,00.html">Guardian Unlimited home
+ <OPTION VALUE="/Politics/0,9215,,00.html">Politics
+ <OPTION VALUE="/Books/0,5917,,00.html">Books
+ <OPTION VALUE="/Education/0,5429,,00.html">EducationGuardian.co.uk
+ <OPTION VALUE="/clearing/0,10052,,00.html">Clearing
+ <OPTION VALUE="/Film/0,3968,,00.html">Film
+ <OPTION VALUE="/Sport/0,10065,,00.html">Sport
+ <OPTION VALUE="/Football/0,1327,,00.html">Football
+ <OPTION VALUE="/Jobs/0,5424,,00.html">Jobs
+ <OPTION VALUE="/Media/0,7502,,00.html">MediaGuardian.co.uk
+ <OPTION VALUE="/Society/0,7954,,00.html">SocietyGuardian.co.uk
+ <OPTION VALUE="/Money/0,6448,,00.html">Money
+ <OPTION VALUE="/Shopping/0,5800,,00.html">Shopping
+ <OPTION VALUE="/Travel/0,7448,,00.html">Travel
+ <OPTION VALUE="/Observer/0,6903,,00.html">The Observer
+ <OPTION VALUE="/Work/0,1735,,00.html">Work
+ <OPTION VALUE="/Archive/0,4271,,00.html">Search the archive
+ <OPTION VALUE=" ">----------------------
+ <OPTION VALUE="/0,6961,,00.html">News
+ <OPTION VALUE="/audio/0,8137,,00.html">Audio
+ <OPTION VALUE="/internetnews/0,7368,,00.html">Net news
+ <OPTION VALUE="/Documentaries/0,2479,,00.html">Special reports
+ <OPTION VALUE="/guardian/0,2844,,00.html">The Guardian
+ <OPTION VALUE="/uklatest/0,7721,,00.html">UK latest
+ <OPTION VALUE="/weblog/0,6798,,00.html">The weblog
+ <OPTION VALUE="/newslist/0,9750,,00.html">The newslist
+ <OPTION VALUE="/thewrap/1,6280,,00.html">The wrap
+ <OPTION VALUE="/worldlatest/0,7722,,00.html">World latest
+ <OPTION VALUE="/artslatest/0,10079,,00.html">Arts latest
+ <OPTION VALUE=" ">----------------------
+ <OPTION VALUE="/crossword/0,4406,,00.html">Crossword
+ <OPTION VALUE="/distribution/0,5391,,00.html">Content distribution
+ <OPTION VALUE="/eventsandoffers/0,5993,,00.html">Events / offers
+ <OPTION VALUE="/gu_contacts/0,5816,180767,00.html">Help / contacts
+ <OPTION VALUE="/information/0,5816,,00.html">Information
+ <OPTION VALUE="/Lifeonline/0,6488,,00.html">Life online
+ <OPTION VALUE="/notesandqueries/0,5753,,00.html">Notes & Queries
+ <OPTION VALUE="/styleguide/0,5817,,00.html">Style guide
+ <OPTION VALUE="/eventsandoffers/travel2/0,6589,,00.html">Travel offers
+ <OPTION VALUE="/TV/0,4658,,00.html">TV listings
+ <OPTION VALUE="/Weather/0,4469,,00.html">Weather
+ <OPTION VALUE="/index/webguides/0,3109,,00.html">Web guides
+ <OPTION VALUE=" ">----------------------
+ <OPTION VALUE="/GWeekly/front/0,3936,,00.html">Guardian Weekly
+ <OPTION VALUE="/Money_Observer/0,5488,,00.html">Money Observer
+</SELECT> <INPUT TYPE="submit" VALUE="Go"
onClick="goUrl(this.form.Url);return false;"></NOBR></FORM></TD>
+</TR>
+</TABLE>
+</CENTER>
+
+
+
+
+
+
+
+<CENTER>
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=608>
+
+<TR>
+ <TD WIDTH=204> </TD>
+ <TD WIDTH=220 align="right" HEIGHT=22 valign=bottom><A
HREF="/0,6961,,00.html"><IMG
SRC="http://www.pixunlimited.co.uk/network/site/headers/guardian_unlim.gif"
WIDTH="132" HEIGHT="17" ALT="Guardian Unlimited" BORDER=0></TD>
+ <TD valign=bottom width=184 align="center" HEIGHT=22 valign=bottom><A
HREF="/Archive/0,4271,,00.html"><IMG
SRC="http://www.pixunlimited.co.uk/network/site/archive/archive_crumb.gif"
WIDTH="120" HEIGHT="22" ALT="Archive" BORDER=0></A></TD>
+</TR>
+<TR>
+<TD width="608" height="22" COLSPAN="3"> </TD>
+</TR>
+<TR>
+ <TD WIDTH="608" COLSPAN="3"><!-- Vignette V/5 Sun Aug 05 13:27:36 2001
-->
+<!-- start Generic Textual Localnav -->
+
+
+
+ <STYLE>
+ <!--
+ A.GULOCALNAV0 { font-family: Arial,sans-serif; font-weight: bold;
text-decoration: none; color: #999999; font-size: 14px; }
+
+ A.GULOCALHOV0 { font-family: Arial,sans-serif; font-weight: bold;
text-decoration: none; color: #000000; font-size: 14px; }
+
+
+
+
+ A.GUHOMELINK { font-family: Arial,sans-serif; font-weight: bold;
text-decoration: none; color: #000000; font-size: 14px; }
+
+
+ // -->
+ </STYLE>
+
+
+
+
+ <SCRIPT LANGUAGE="JavaScript">
+ <!--
+
+ /* Localnav: 2727. Subnavs: */
+
+
+ var _Lwhat = 0;
+ var _Lthing;
+ var _Ldivobj = document.layers['gudropdown'];
+ var _Lcrnobj = document.layers['gucorner'];
+ var _Lready = false;
+
+ function rolloff() {
+ if (_Lready) {
+
+ if (_Lwhat != 0) {
+ _Lwhat.document.open();
+ _Lwhat.document.write(_Lthing);
+ _Lwhat.document.close();
+ _Lwhat = 0;
+ }
+ }
+ return true;
+ }
+
+
+ function roll(what, href, linktext) {
+ if (_Lready) {
+ var text = '<NOBR><A HREF="' + href + '" CLASS="GULOCALHOV0">'
+ + linktext + '</A></NOBR>';
+
+ rolloff();
+
+ _Lthing = '<NOBR><A HREF="' + href + '"
CLASS="GULOCALNAV0">'
+ + linktext + '</A></NOBR>';
+
+ _Lwhat = what;
+
+ what.document.open();
+ what.document.write(text);
+ what.document.close();
+ }
+
+ return true;
+ }
+
+ function ddroll(what, href, linktext, colour) {
+ if (_Lready) {
+ var text = '<NOBR> <A HREF="' + href + '"
CLASS="GUDROPDOWN">';
+
+ text += (colour == '' ? linktext : '<FONT COLOR="' +
colour + '">' + linktext + '</FONT>');
+ text += '</A> </NOBR>';
+
+ what.document.open();
+ what.document.write(text);
+ what.document.close();
+ }
+
+ return true;
+ }
+ _Lready = true;
+
+ // -->
+ </SCRIPT>
+
+
+ <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return rolloff()"><A
HREF="http://www.guardian.co.uk" CLASS="GUHOMELINK"><NOBR>Network
home</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/uk_news','UK news')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/uk_news"
CLASS="GULOCALNAV0"><NOBR>UK news</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/worldlatest','World latest')"
onMouseOut="return rolloff()"><A HREF="http://www.guardian.co.uk/worldlatest"
CLASS="GULOCALNAV0"><NOBR>World latest</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/books','Books')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/books"
CLASS="GULOCALNAV0"><NOBR>Books</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/money','Money')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/money"
CLASS="GULOCALNAV0"><NOBR>Money</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/film','Film')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/film"
CLASS="GULOCALNAV0"><NOBR>Film</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/society','Society')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/society"
CLASS="GULOCALNAV0"><NOBR>Society</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/Observer','The Observer')"
onMouseOut="return rolloff()"><A HREF="http://www.guardian.co.uk/Observer"
CLASS="GULOCALNAV0"><NOBR>The Observer</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+</TR><TR><TD COLSPAN="39" HEIGHT="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1"
HEIGHT="1"></TD></TR><TR><TD ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/politics','Politics')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/politics"
CLASS="GULOCALNAV0"><NOBR>Politics</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/education','Education')"
onMouseOut="return rolloff()"><A HREF="http://www.guardian.co.uk/education"
CLASS="GULOCALNAV0"><NOBR>Education</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/shopping','Shopping')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/shopping"
CLASS="GULOCALNAV0"><NOBR>Shopping</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/work','Work')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/work"
CLASS="GULOCALNAV0"><NOBR>Work</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/football','Football')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/football"
CLASS="GULOCALNAV0"><NOBR>Football</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/jobs','Jobs')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/jobs"
CLASS="GULOCALNAV0"><NOBR>Jobs</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/media','Media')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/media"
CLASS="GULOCALNAV0"><NOBR>Media</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/Archive','Search')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/Archive"
CLASS="GULOCALNAV0"><NOBR>Search</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+</TR></TABLE>
+<!-- end Generic Textual Localnav w--></TD>
+</TR>
+
+</TABLE>
+</CENTER>
+
+
+<CENTER>
+<TABLE WIDTH="544" BORDER="0" CELLPADDING="0" CELLSPACING="0">
+ <TR>
+ <TD WIDTH=32 HEIGHT=25><IMG
SRC="http://www.pixunlimited.co.uk/global/grid/vspacer32.gif" WIDTH=32
HEIGHT=1></TD>
+ <TD VALIGN=TOP WIDTH=140 HEIGHT=25> </TD>
+ <TD VALIGN=TOP WIDTH=372 HEIGHT=25> </TD>
+ </TR>
+
+ <TR>
+ <TD WIDTH=32 HEIGHT=1><IMG
SRC="http://www.pixunlimited.co.uk/global/grid/vspacer32.gif" WIDTH=32
HEIGHT=1></TD>
+ <TD VALIGN=TOP WIDTH=140><img
src="http://www.pixunlimited.co.uk/network/site/archive/archive_block.gif"
height="64" width="128" alt="Archive" BORDER=0><p><A
HREF="/Archive/0,4271,,00.html"><img
src="http://www.pixunlimited.co.uk/network/site/archive/search_again_1.gif"
height="20" width="128" alt="Archive" BORDER=0></A> </TD>
+ <TD VALIGN=TOP WIDTH=372>
+ <FONT FACE="Arial,Helvetica,sans-serif" SIZE=4><B>Earth Lease
steps up BT campaign</B></FONT>
+
+ <FONT FACE="Arial,Helvetica,sans-serif" SIZE=3><p></FONT>
+
+ <FONT FACE="Geneva,Arial,sans-serif" SIZE=2><B>Richard
Wray</B></FONT><BR>
+
+ <FONT FACE="Geneva,Arial,sans-serif"
SIZE=2><B>Guardian</B></FONT><P>
+ <FONT FACE="Geneva,Arial,sans-serif" SIZE=2><B>Friday August 3,
2001</B></FONT><P><P>
+ <FONT FACE="Geneva,Arial,sans-serif" SIZE=2>Pressure was mounting on
British Telecom last night to reopen negotiations with Earth Lease after the
investment consortium met telecoms regulator Oftel to outline its plan to buy
BT's network of local phone lines. <P>Earth Lease is also understood to have
called for a meeting with government officials within the next 10 days to
explain how its sale and leaseback plan could be used to speed up the
introduction of broadband services. <P>The consortium, headed by financiers
Babcock & Brown, is attempting to build credibility with officials as a way
of forcing BT to reconsider its initial dismissal of an £8bn bid for the
country's 28m local copper lines. <P>It has already received indications of
support from some of BT's largest customers who use the "local loop" to provide
services such as video-on-demand. <P>Earth Lease is expected to call a further
meeting with Oftel later this month. However, the consortium has ruled out a di
rect appeal to shareholders, believing that for any bid to work it must have
the cooperation of BT's management and engineers. <P>To bring this about,
Earth Lease is willing to discuss the conditions that BT would need to place on
any deal handing over control of the local network. Such conditions would
include the ability of BT engineers to enter prem ises in order to upgrade
equipment. <P>The Earth Lease bid comes at a time when BT is lobbying Oftel to
end the controls which have capped the price it can levy in the UK market since
privatisation in the 1980s. The local network plays a crucial role in the
regulator's review. <P>Spinning off BT's local network would make the
regulator's job easier, as it would bring about the effective split of BT's
wholesale operation from its retail arm, which could then be treated just as
any other telecom provider. <P>BT has been the subject of intense criticism
from rival operators over the past year for its handling of the introduction of
competition into the local loop. <P>Yesterday the European commission stepped
up its drive for competition in the local loop - a process that was supposed to
have started throughout the region at the beginning of last month. <P>The
commission is asking new entrants to the telecoms market to provide any
information about incumbent operators who limit access to local copper networks
as it tries to revitalise competition. <P>The commission intends to report on
the state of the industry by the end of the year and will take action against
any operators it believes are guilty of anti-competitive behaviour.
<P>Analysts said that it appears to be willing to take a more rigorous approach
to telecoms competition. </FONT>
+</TD>
+ </TR>
+
+ <TR>
+ <TD WIDTH=32 HEIGHT=80> </TD>
+ <TD VALIGN=TOP WIDTH=140 HEIGHT=80> </TD>
+ <TD VALIGN=TOP WIDTH=372 HEIGHT=80 VALIGN=MIDDLE> <P><A
HREF="#top"><IMG
SRC="http://www.pixunlimited.co.uk/football/site/Triangle_up.gif" WIDTH=12
HEIGHT=11 ALT="UP" BORDER="0"></A></TD>
+ </TR>
+
+</TABLE>
+</CENTER>
+
+<CENTER>
+<TABLE BORDER=0 width=544 CELLPADDING="0" CELLSPACING="0">
+
+ <TR>
+ <TD WIDTH=32 HEIGHT=1><A
HREF="http://www.guardianunlimited.co.uk/credits.html"><IMG
SRC="http://www.pixunlimited.co.uk/global/grid/spacer32.gif" WIDTH=32 HEIGHT=1
BORDER=0></A></TD>
+ <TD width=512 colspan=4 valign=TOP><CENTER>
+<FONT FACE="Geneva,Arial,sans-serif" SIZE=1>Guardian Unlimited © Guardian
Newspapers Limited 2001</FONT>
+</CENTER></TD>
+ </TR>
+</TABLE>
+</CENTER>
+
+
+</BODY>
+</HTML>
\ No newline at end of file
Copied:
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/gu-Am-Brit-4-aug-2001.html
(from rev 19218,
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/gu-Am-Brit-4-aug-2001.html)
===================================================================
---
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/gu-Am-Brit-4-aug-2001.html
(rev 0)
+++
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/gu-Am-Brit-4-aug-2001.html
2016-04-10 10:07:58 UTC (rev 19222)
@@ -0,0 +1,278 @@
+<!-- Vignette V/5 Tue Aug 07 05:27:59 2001 -->
+<SCRIPT LANGUAGE="javascript">
+ <!-- hide from old browsers
+ function goUrl(Selected) {
+ /* change page location to option selected from navigation
drop-down */
+ var newURL = Selected.options[Selected.selectedIndex].value ;
+ if (newURL!=" ") {
+ document.location.href = newURL;
+ }
+ }
+ // End of javascript -->
+</SCRIPT>
+<HTML>
+<HEAD>
+ <TITLE>Guardian Unlimited | Archive Search</TITLE>
+</HEAD>
+
+
+<BODY BGCOLOR="#FFFFFF" TOPMARGIN="8" LEFTMARGIN="0" LINK="#003366"
VLINK="#003366" ALINK="#FF0000">
+
+<!-- Vignette V/5 Sun Aug 05 10:18:02 2001 -->
+
+<CENTER>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="608">
+<!-- Row 1 - Logo + advertising -->
+<TR VALIGN="TOP">
+ <TD WIDTH="140" ALIGN=LEFT HEIGHT="68">
+ <!-- GU logo box and second box -->
+ <!-- Vignette V/5 Sun Aug 05 10:18:02 2001 -->
+<!-- logo box--><A HREF="/0,6961,,00.html"><IMG
SRC="http://www.pixunlimited.co.uk/sys-images/Guardian/Pix/site_furniture/2000/04/13/gulogo.gif"
ALT="Guardian Unlimited" HEIGHT="60" WIDTH="120" BORDER="0"></A></TD>
+ <TD WIDTH="468" ALIGN="RIGHT">
+
+
+<A
HREF="http://ads.guardianunlimited.co.uk/click.ng/site=Guardian&rand=4111220">
+<IMG
SRC="http://ads.guardianunlimited.co.uk/image.ng/site=Guardian&rand=4111220"
height=60 width=468 BORDER=0></A></TD>
+</TR>
+</TABLE>
+</CENTER>
+<!-- Table for Guardian Stamp and Advert Banner -->
+
+<CENTER>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="608"><TR VALIGN="TOP">
+ <TD WIDTH="100" VALIGN="TOP" HEIGHT=30><!--stamp here--><!-- Vignette
V/5 Sun Aug 05 10:18:03 2001 -->
+<!--Guardian Stamp for furniture table--><IMG
SRC="http://www.pixunlimited.co.uk/guardian/site/Guardian_Observer_logo.gif"
WIDTH="80" HEIGHT="25" ALT="The Guardian" BORDER=0></TD>
+ <TD ALIGN="RIGHT" VALIGN="TOP" HEIGHT=30>
+
+ <!-- Vignette V/5 Sat Aug 04 18:50:22 2001 -->
+
+<FORM NAME="network" METHOD="POST"
ACTION="/redirect/1,1437,,00.html"><NOBR><FONT FACE="Geneva,Arial,sans-serif"
SIZE="2"><B>Go to:</B> </FONT><SELECT NAME="Url" onChange="goUrl(this)">
+ <OPTION VALUE="/0,6961,,00.html">Guardian Unlimited home
+ <OPTION VALUE="/Politics/0,9215,,00.html">Politics
+ <OPTION VALUE="/Books/0,5917,,00.html">Books
+ <OPTION VALUE="/Education/0,5429,,00.html">EducationGuardian.co.uk
+ <OPTION VALUE="/clearing/0,10052,,00.html">Clearing
+ <OPTION VALUE="/Film/0,3968,,00.html">Film
+ <OPTION VALUE="/Sport/0,10065,,00.html">Sport
+ <OPTION VALUE="/Football/0,1327,,00.html">Football
+ <OPTION VALUE="/Jobs/0,5424,,00.html">Jobs
+ <OPTION VALUE="/Media/0,7502,,00.html">MediaGuardian.co.uk
+ <OPTION VALUE="/Society/0,7954,,00.html">SocietyGuardian.co.uk
+ <OPTION VALUE="/Money/0,6448,,00.html">Money
+ <OPTION VALUE="/Shopping/0,5800,,00.html">Shopping
+ <OPTION VALUE="/Travel/0,7448,,00.html">Travel
+ <OPTION VALUE="/Observer/0,6903,,00.html">The Observer
+ <OPTION VALUE="/Work/0,1735,,00.html">Work
+ <OPTION VALUE="/Archive/0,4271,,00.html">Search the archive
+ <OPTION VALUE=" ">----------------------
+ <OPTION VALUE="/0,6961,,00.html">News
+ <OPTION VALUE="/audio/0,8137,,00.html">Audio
+ <OPTION VALUE="/internetnews/0,7368,,00.html">Net news
+ <OPTION VALUE="/Documentaries/0,2479,,00.html">Special reports
+ <OPTION VALUE="/guardian/0,2844,,00.html">The Guardian
+ <OPTION VALUE="/uklatest/0,7721,,00.html">UK latest
+ <OPTION VALUE="/weblog/0,6798,,00.html">The weblog
+ <OPTION VALUE="/newslist/0,9750,,00.html">The newslist
+ <OPTION VALUE="/thewrap/1,6280,,00.html">The wrap
+ <OPTION VALUE="/worldlatest/0,7722,,00.html">World latest
+ <OPTION VALUE="/artslatest/0,10079,,00.html">Arts latest
+ <OPTION VALUE=" ">----------------------
+ <OPTION VALUE="/crossword/0,4406,,00.html">Crossword
+ <OPTION VALUE="/distribution/0,5391,,00.html">Content distribution
+ <OPTION VALUE="/eventsandoffers/0,5993,,00.html">Events / offers
+ <OPTION VALUE="/gu_contacts/0,5816,180767,00.html">Help / contacts
+ <OPTION VALUE="/information/0,5816,,00.html">Information
+ <OPTION VALUE="/Lifeonline/0,6488,,00.html">Life online
+ <OPTION VALUE="/notesandqueries/0,5753,,00.html">Notes & Queries
+ <OPTION VALUE="/styleguide/0,5817,,00.html">Style guide
+ <OPTION VALUE="/eventsandoffers/travel2/0,6589,,00.html">Travel offers
+ <OPTION VALUE="/TV/0,4658,,00.html">TV listings
+ <OPTION VALUE="/Weather/0,4469,,00.html">Weather
+ <OPTION VALUE="/index/webguides/0,3109,,00.html">Web guides
+ <OPTION VALUE=" ">----------------------
+ <OPTION VALUE="/GWeekly/front/0,3936,,00.html">Guardian Weekly
+ <OPTION VALUE="/Money_Observer/0,5488,,00.html">Money Observer
+</SELECT> <INPUT TYPE="submit" VALUE="Go"
onClick="goUrl(this.form.Url);return false;"></NOBR></FORM></TD>
+</TR>
+</TABLE>
+</CENTER>
+
+
+
+
+
+
+
+<CENTER>
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=608>
+
+<TR>
+ <TD WIDTH=204> </TD>
+ <TD WIDTH=220 align="right" HEIGHT=22 valign=bottom><A
HREF="/0,6961,,00.html"><IMG
SRC="http://www.pixunlimited.co.uk/network/site/headers/guardian_unlim.gif"
WIDTH="132" HEIGHT="17" ALT="Guardian Unlimited" BORDER=0></TD>
+ <TD valign=bottom width=184 align="center" HEIGHT=22 valign=bottom><A
HREF="/Archive/0,4271,,00.html"><IMG
SRC="http://www.pixunlimited.co.uk/network/site/archive/archive_crumb.gif"
WIDTH="120" HEIGHT="22" ALT="Archive" BORDER=0></A></TD>
+</TR>
+<TR>
+<TD width="608" height="22" COLSPAN="3"> </TD>
+</TR>
+<TR>
+ <TD WIDTH="608" COLSPAN="3"><!-- Vignette V/5 Sun Aug 05 13:27:36 2001
-->
+<!-- start Generic Textual Localnav -->
+
+
+
+ <STYLE>
+ <!--
+ A.GULOCALNAV0 { font-family: Arial,sans-serif; font-weight: bold;
text-decoration: none; color: #999999; font-size: 14px; }
+
+ A.GULOCALHOV0 { font-family: Arial,sans-serif; font-weight: bold;
text-decoration: none; color: #000000; font-size: 14px; }
+
+
+
+
+ A.GUHOMELINK { font-family: Arial,sans-serif; font-weight: bold;
text-decoration: none; color: #000000; font-size: 14px; }
+
+
+ // -->
+ </STYLE>
+
+
+
+
+ <SCRIPT LANGUAGE="JavaScript">
+ <!--
+
+ /* Localnav: 2727. Subnavs: */
+
+
+ var _Lwhat = 0;
+ var _Lthing;
+ var _Ldivobj = document.layers['gudropdown'];
+ var _Lcrnobj = document.layers['gucorner'];
+ var _Lready = false;
+
+ function rolloff() {
+ if (_Lready) {
+
+ if (_Lwhat != 0) {
+ _Lwhat.document.open();
+ _Lwhat.document.write(_Lthing);
+ _Lwhat.document.close();
+ _Lwhat = 0;
+ }
+ }
+ return true;
+ }
+
+
+ function roll(what, href, linktext) {
+ if (_Lready) {
+ var text = '<NOBR><A HREF="' + href + '" CLASS="GULOCALHOV0">'
+ + linktext + '</A></NOBR>';
+
+ rolloff();
+
+ _Lthing = '<NOBR><A HREF="' + href + '"
CLASS="GULOCALNAV0">'
+ + linktext + '</A></NOBR>';
+
+ _Lwhat = what;
+
+ what.document.open();
+ what.document.write(text);
+ what.document.close();
+ }
+
+ return true;
+ }
+
+ function ddroll(what, href, linktext, colour) {
+ if (_Lready) {
+ var text = '<NOBR> <A HREF="' + href + '"
CLASS="GUDROPDOWN">';
+
+ text += (colour == '' ? linktext : '<FONT COLOR="' +
colour + '">' + linktext + '</FONT>');
+ text += '</A> </NOBR>';
+
+ what.document.open();
+ what.document.write(text);
+ what.document.close();
+ }
+
+ return true;
+ }
+ _Lready = true;
+
+ // -->
+ </SCRIPT>
+
+
+ <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return rolloff()"><A
HREF="http://www.guardian.co.uk" CLASS="GUHOMELINK"><NOBR>Network
home</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/uk_news','UK news')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/uk_news"
CLASS="GULOCALNAV0"><NOBR>UK news</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/worldlatest','World latest')"
onMouseOut="return rolloff()"><A HREF="http://www.guardian.co.uk/worldlatest"
CLASS="GULOCALNAV0"><NOBR>World latest</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/books','Books')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/books"
CLASS="GULOCALNAV0"><NOBR>Books</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/money','Money')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/money"
CLASS="GULOCALNAV0"><NOBR>Money</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/film','Film')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/film"
CLASS="GULOCALNAV0"><NOBR>Film</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/society','Society')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/society"
CLASS="GULOCALNAV0"><NOBR>Society</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/Observer','The Observer')"
onMouseOut="return rolloff()"><A HREF="http://www.guardian.co.uk/Observer"
CLASS="GULOCALNAV0"><NOBR>The Observer</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+</TR><TR><TD COLSPAN="39" HEIGHT="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1"
HEIGHT="1"></TD></TR><TR><TD ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/politics','Politics')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/politics"
CLASS="GULOCALNAV0"><NOBR>Politics</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/education','Education')"
onMouseOut="return rolloff()"><A HREF="http://www.guardian.co.uk/education"
CLASS="GULOCALNAV0"><NOBR>Education</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/shopping','Shopping')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/shopping"
CLASS="GULOCALNAV0"><NOBR>Shopping</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/work','Work')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/work"
CLASS="GULOCALNAV0"><NOBR>Work</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/football','Football')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/football"
CLASS="GULOCALNAV0"><NOBR>Football</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/jobs','Jobs')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/jobs"
CLASS="GULOCALNAV0"><NOBR>Jobs</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/media','Media')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/media"
CLASS="GULOCALNAV0"><NOBR>Media</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+<TD><IMG SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4"
HEIGHT="8"></TD><TD WIDTH="1" BGCOLOR="#999999"><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="1" HEIGHT="1"></TD><TD><IMG
SRC="http://www.pixunlimited.co.uk/sp.gif" WIDTH="4" HEIGHT="10"></TD><TD
ALIGN="top"><ILAYER><LAYER onMouseOver="return
roll(this,'http://www.guardian.co.uk/Archive','Search')" onMouseOut="return
rolloff()"><A HREF="http://www.guardian.co.uk/Archive"
CLASS="GULOCALNAV0"><NOBR>Search</NOBR></A></LAYER></ILAYER></TD><TD></TD>
+</TR></TABLE>
+<!-- end Generic Textual Localnav w--></TD>
+</TR>
+
+</TABLE>
+</CENTER>
+
+
+<CENTER>
+<TABLE WIDTH="544" BORDER="0" CELLPADDING="0" CELLSPACING="0">
+ <TR>
+ <TD WIDTH=32 HEIGHT=25><IMG
SRC="http://www.pixunlimited.co.uk/global/grid/vspacer32.gif" WIDTH=32
HEIGHT=1></TD>
+ <TD VALIGN=TOP WIDTH=140 HEIGHT=25> </TD>
+ <TD VALIGN=TOP WIDTH=372 HEIGHT=25> </TD>
+ </TR>
+
+ <TR>
+ <TD WIDTH=32 HEIGHT=1><IMG
SRC="http://www.pixunlimited.co.uk/global/grid/vspacer32.gif" WIDTH=32
HEIGHT=1></TD>
+ <TD VALIGN=TOP WIDTH=140><img
src="http://www.pixunlimited.co.uk/network/site/archive/archive_block.gif"
height="64" width="128" alt="Archive" BORDER=0><p><A
HREF="/Archive/0,4271,,00.html"><img
src="http://www.pixunlimited.co.uk/network/site/archive/search_again_1.gif"
height="20" width="128" alt="Archive" BORDER=0></A> </TD>
+ <TD VALIGN=TOP WIDTH=372>
+
+ <FONT FACE="Geneva,Arial,sans-serif" SIZE=2>Notebook</FONT><p>
+ <FONT FACE="Arial,Helvetica,sans-serif" SIZE=4><B>Am-Brit Airways
might just manage to fly</B></FONT>
+
+ <FONT FACE="Arial,Helvetica,sans-serif" SIZE=3><p>Green light
likely for joint venture</FONT><p>
+
+ <FONT FACE="Geneva,Arial,sans-serif"
SIZE=2><B>Guardian</B></FONT><P>
+ <FONT FACE="Geneva,Arial,sans-serif" SIZE=2><B>Saturday August 4,
2001</B></FONT><P><P>
+ <FONT FACE="Geneva,Arial,sans-serif" SIZE=2>It is five years since
British Airways first attempted to cook up a cooperation deal with American
Airlines. That approach came to nought when the rock of the competition
authorites met the hard place of British Airways' refusal to give up enough
valuable slots at Heathrow to get the deal through. <P>The negotiations were
seemingly interminable, cost a fortune, distracted management and eventually
contributed to the demise of BA's then chief executive, Bob Ayling. <P>But
yesterday the two parties announced they were trying again, and this time the
deal is different. Last time it was all about selling tickets on one another's
planes. This time it is a "profit-sharing" joint venture, which will allow them
to put one big, economical plane on a route instead of two smaller, less
efficient ones. <P>They are planning to work together on just nine routes,
instead of the 22 they had aimed for last time. <P>Since the last deal was
mooted, compe
tition has altered on the transatlantic routes, with British Midland joining
the Star Alliance headed by Lufthansa and United Airlines. The savings for BA
from the new deal would be enormous - yesterday one analyst hastily calculated
they could be 15% on each route. <P>The sticking point will again be slots at
Heathrow. Last time the EU wanted the airlines to surrender 267 a week. This
time, with the changes in competition, it could be half that and BA may be
allowed to sell them rather than give them away. The two airlines would not
have come back with a new plan without some inkling from the competition
watchdogs that their flight path might now be cleared for take-off. This time,
it might just fly. <P><B> First, dig a hole </B><BR> <P>Who cares about
the imbalances, go for growth. That seems to be the message on both sides of
the Atlantic these days. In Britain, the Bank of England has sent a clear
signal that if the only way to prop up the economy is a consumer and housing
market boom, then so be it. <P>In the US, policymakers are even less subtle.
The Internal Revenue Service website offers some handy tips for households
wondering what to do with the $300 tax rebate cheques they received this week:
"Let's see" it says. "New barbecue, early holiday shopping . . ." <P>There are
two schools of thought on whether the consumer can rescue the world economy
from the mess it seems to have got itself into. One advocates throwing caution
to the wind, with interest rate cuts and fiscal boosts. <P>The other worries
that the imbalances in US and British economies will have to be corrected, and
they may have a point. Both are running large current account deficits and
their personal sectors are increasingly dipping into the red. At some stage the
rest of the world will decide it no longer wants to finance the British or US
consumption habit. <P>On this occasion, though, we find ourselves in sympathy
with the "shop till you drop" approach. <P>It seems like go
od Keynesian common sense. With growth faltering, both economies need an
old-fashioned boost to demand. The Fed and the Bank have both responded with
lower borrowing costs. The boost to public spending in Britain together with
tax rebates in the US should add some more momentum. <P>If there were any
signs of inflationary pressures, the Bank and the Fed are capable of reacting
quickly. In the meantime, it is time to indulge in a little retail therapy for
the sake of the economy - and prove we can spend our way out of recession.
<P><B> Unileveraged </B><BR> <P>Looming recession did not prevent Unilever
from sticking to its forecasts of double-digit earnings growth for this year.
The food and personal care group is in the throes of a vast restructuring -
which goes by the title of "Path to Growth". <P>The plan, revealed with much
hullabaloo last year, is to focus Unilever's considerable resources behind only
power brands, so it is axing or selling 1,200 of the 1,600 brands it ow
ned this time last year. <P>Out have gone dowdy old products like Batchelors
dried peas, to allow Unilever to put more oomph behind winners like Dove soap
and Magnum ice creams. At the same time it has been buying labels it can
leverage worldwide - like Hellmans mayonnaise, the French Amora mustard
business, diet product Slimfast and Ben & Jerry's right-on ice cream
parlor. <P>The fallout from this overhaul is 125 redundant factories and a
30,000 cut in its payroll. So far it all seems to be going according to plan -
700 brands have gone so far. In a year the shares have climbed from 340p to
more than 600p. If recession should bite, Unilever will be better placed than
many to ride it out - its core food, personal care and cleaning products will
be the last to feel the impact of any prudent consumer belt-tightening. The
shares are a firm hold. </FONT>
+</TD>
+ </TR>
+
+ <TR>
+ <TD WIDTH=32 HEIGHT=80> </TD>
+ <TD VALIGN=TOP WIDTH=140 HEIGHT=80> </TD>
+ <TD VALIGN=TOP WIDTH=372 HEIGHT=80 VALIGN=MIDDLE> <P><A
HREF="#top"><IMG
SRC="http://www.pixunlimited.co.uk/football/site/Triangle_up.gif" WIDTH=12
HEIGHT=11 ALT="UP" BORDER="0"></A></TD>
+ </TR>
+
+</TABLE>
+</CENTER>
+
+<CENTER>
+<TABLE BORDER=0 width=544 CELLPADDING="0" CELLSPACING="0">
+
+ <TR>
+ <TD WIDTH=32 HEIGHT=1><A
HREF="http://www.guardianunlimited.co.uk/credits.html"><IMG
SRC="http://www.pixunlimited.co.uk/global/grid/spacer32.gif" WIDTH=32 HEIGHT=1
BORDER=0></A></TD>
+ <TD width=512 colspan=4 valign=TOP><CENTER>
+<FONT FACE="Geneva,Arial,sans-serif" SIZE=1>Guardian Unlimited © Guardian
Newspapers Limited 2001</FONT>
+</CENTER></TD>
+ </TR>
+</TABLE>
+</CENTER>
+
+
+</BODY>
+</HTML>
\ No newline at end of file
Copied:
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/in-outlook-09-aug-2001.html
(from rev 19218,
gate/branches/sawdust2/src/test/gate/resources/gate.ac.uk/tests/in-outlook-09-aug-2001.html)
===================================================================
---
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/in-outlook-09-aug-2001.html
(rev 0)
+++
gate/branches/sawdust2/plugins/ANNIE/src/test/resources/tests/in-outlook-09-aug-2001.html
2016-04-10 10:07:58 UTC (rev 19222)
@@ -0,0 +1,286 @@
+
+
+
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
+
+<html>
+
+<head>
+
+
+
+
+
+
+
+ <title>Independent News</title>
+
+</head>
+
+<body bgcolor="#ffffff" text="#000000">
+
+
+
+<!-- AdLink banner -->
+
+
+
+<center>
+
+<iframe
src="http://west.adlink.de/hserver/UKCATEGORY=ECOMMERCE/SITE=UK_IDUK_UK/AREA=NEWS.BUSINESS.OUTLOOK/AAMSZ=468X60/ACC_RANDOM=576873786"
width="468" height="60" marginwidth="0" marginheight="0" frameborder="0"
scrolling="no">
+
+<a
href="http://west.adlink.de/adserver/accipiter/adclick.exe/UKCATEGORY=ECOMMERCE/SITE=UK_IDUK_UK/AREA=NEWS.BUSINESS.OUTLOOK/AAMSZ=468X60/ADTYPE=GIF/ACC_RANDOM=576873786"
target="_blank">
+
+<img
src="http://west.adlink.de/adserver/accipiter/adserver.exe/UKCATEGORY=ECOMMERCE/SITE=UK_IDUK_UK/AREA=NEWS.BUSINESS.OUTLOOK/AAMSZ=468X60/ADTYPE=GIF/ACC_RANDOM=576873786"
border="0" width="468" height="60" alt="Click here!"></a>
+
+</iframe>
+
+</center>
+
+
+
+<!-- navigation -->
+
+
+
+
+
+<p align="right">
+
+ <a href="http://news.independent.co.uk/">News</a> |
+
+ <a href="http://money.independent.co.uk/">Money</a> |
+
+ <a href="http://travel.independent.co.uk/">Travel</a> |
+
+ <a href="http://argument.independent.co.uk/">Argument</a> |
+
+ <a
href="http://advancement.independent.co.uk/">Advancement</a> |
+
+ <a href="http://enjoyment.independent.co.uk/">Enjoyment</a>
+
+</p>
+
+
+
+
+
+
+
+
+
+<!-- location bar -->
+
+<p>
+
+
+
+<a href="http://www.independent.co.uk/"
class="tool">Independent</a> >
+
+
+
+<a href="/" class="tool">News</a>
+
+
+
+ > <a href="/business/">Business</a>
+
+
+
+ > <a href="/business/outlook/">Outlook</a>
+
+
+
+</p>
+
+
+
+
+
+<!--
+
+Template: low_story.jsp
+
+-->
+
+
+
+<!-- story -->
+
+
+
+<!--
+
+Story ID: 87816
+
+-->
+
+
+
+
+
+
+
+<h1>The windfall that would reap a bitter harvest</h1>
+
+<h2>Fuel tax; Pensions poser; Sir Stanley's fury</h2>
+
+
+
+<h4>09 August 2001</h4>
+
+<!-- LINKS -->
+
+
+
+<div class="floatbox"><div class="linkbox">
+
+
+
+<!-- INTERNAL LINKS -->
+
+
+
+<p class="linkindent">
+
+<b class="red">Internal links</b></p>
+
+
+
+<p class="linkindent">
+
+<a
href="http://argument.independent.co.uk/leading_articles/story.jsp?story=87767">Today's
young must not become the poverty-struck pensioners of tomorrow
+
+</a></p>
+
+
+
+<p class="linkindent">
+
+<a
href="http://money.independent.co.uk/personal_finance/pensions/story.jsp?story=87757">New
Labour think-tank warns Blair that pensions strategy in danger of 'unravelling'
+
+</a></p>
+
+
+
+<!-- /INTERNAL LINKS -->
+
+
+
+</div></div>
+
+
+
+<!-- /LINKS -->
+
+ <p> It does not suit the tabloid agenda to say so, but there is already a
windfall tax on petrol and it is called duty and VAT. For every £1 the
motorist spends filling up at the pumps, 76p goes straight into the pocket of
Gordon Brown. It is for this reason, and no other, that the UK has the highest
fuel prices in Europe. The motoring lobby, however, prefers to believe it is
all the fault of profiteering oil companies and is baying for Shell and BP to
be penalised for the "obscene" profits they are making ­ £1.3m an
hour since you ask.</p>
+
+<p>What would happen to the windfall tax levied on these North Sea profits?
The subtext is that the Chancellor should recycle the money so we can enjoy
lower fuel prices. But that would make a mockery of the Government's
environmental credentials.</p>
+
+<p>Taxing away the meagre profits oil companies make at the pumps would have
almost no impact on the cost of a gallon. But imposing a super-tax on the
profits they make from oil exploration would have all sorts of harmful
repercussions.</p>
+
+<p>Oil companies are internationally mobile and if the tax regime in the UK
became harsher, they would vote with their feet and take their investment
elsewhere. Mondeo Man would not notice any difference when he filled up. But
the hundreds of firms and thousands of workers who rely on the North Sea for a
living most certainly would.</p>
+
+<p>BP makes only 17 per cent of its profits in the UK, and virtually nothing
from petrol retailing, which has been turned into even more of a cut-throat
business since the supermarkets decided to turn it into a loss leader. Taxing
those profits more heavily would be a supremely irrational act. It is profits
which keep workers in jobs and pay the dividends which fund everyone's private
pension. And what would the Government then do when the oil price falls and the
likes of BP find themselves making barely enough money to cover their cost of
capital? Pay the money back?</p>
+
+<p>The changes to the North Sea taxation regime introduced over the last two
decades have been hugely beneficial. Investment has flowed in, production has
risen and although the direct tax take has fallen, the Exchequer benefits much
more from the corporation tax paid by businesses which would otherwise not
exist.</p>
+
+<p>Labour came into office in 1997 keen to tighten the screw on the oil
companies. But it backed off when the oil price fell and it realised that
higher taxes would be an electoral liability in Scotland. Three months into its
second term, renewed talk of a windfall tax is a silly season story which the
markets rightly ignored. If Labour did the unimaginable and imposed one, folly
would be a more apt description.</p>
+
+<p><b>Pensions poser</b></p>
+
+<p>If a windfall tax is a daft idea, then the stakeholder pension may not
prove to be very much better. Yesterday Tony Blair's favourite think-tank, the
Institute for Public Policy Research, took the Government's entire strategy
towards pensions and long-term care for the elderly to task, suggesting it
might be "unravelling".</p>
+
+<p>A spokeswoman for the Department for Work and Pensions bit her lip,
welcomed this "valuable contribution to the debate" and went away with a wet
towel around her head to analyse the IPPR's recommendations.</p>
+
+<p>Its central conclusion is one that many observers came to even before the
stakeholder pension was launched ­ that it is probably going to miss its
target group, who currently have only the basic state pension to look forward
to in retirement.</p>
+
+<p>These are people who cannot afford to pay into a private pension in the
first place. They are unlikely to make the extra effort simply because charges
are capped at 1 per cent. But the cap on commissions is one more reason why
stakeholders are so attractive to well-heeled grandparents looking a
tax-efficient way to pass capital on to their grandchildren.</p>
+
+<p>The IPPR does not stop at stakeholders, however. It goes on to criticise
the Government's enormously complicated approach to tackling pensioner poverty
through a battery of pension credits, minimum income guarantees and second
state pensions.</p>
+
+<p>The pot is only so big and a generous increase in universal state provision
after the public relations disaster of the 75p pension increase, can only come
at the expense of providing incentives to save.</p>
+
+<p>Pension provision is only one side of the coin. The other is long-term
health care for the elderly. The present system penalises those who save for
retirement by making them pay for their care. This is a subject successive
governments have shied away from tackling. The IPPR report at least comes up
with some options ­ such as allowing the financial services industry to
use pensions as a vehicle for providing long-term care.</p>
+
+<p>There is a trade off. Enabling the elderly to live off a bigger income in
retirement may be one way of extending their independence and delaying the day
when they become reliant on formal long-term care and a drain on the public
purse. That, however, would require joined-up thinking from a joined-up
government.</p>
+
+<p><b>Sir Stanley's fury</b></p>
+
+<p>No one could ever accuse Sir Stanley Kalms of being backward in coming
forward and, sure enough, the ebullient Dixons chairman is on the offensive
again. As a rabid Tory supporter and ferocious anti-euro campaigner his targets
are familiar. In the firing line once more is increasing red tape at home and
Brussels bureaucracy abroad.</p>
+
+<p>His latest attack is contained in Dixons' annual report and given the
strength of his views perhaps the only surprise is that he managed to restrict
himself to a single paragraph on the subject. Even so he managed to pack in
enough punches, saying Dixons was battling against "the most severe and costly
regulation the market economy has experienced both from Brussels and our own
Government". The demands are often "absurd" and "unworkable", he says, and
serve only "to add costs which are eventually borne by the consumer". Phew.
Just as well the management got a 10 per cent pay rise and all those lovely
share options to compensate for the extra demands on them.</p>
+
+<p>Sir Stanley doesn't mention specific examples but Dixons was only too happy
to provide some yesterday. Its chief target is a draft EU directive on waste
from electrical equipment that will be put to the Council of Ministers next
month. Its aim is to encourage greater recycling of old electrical products by
making electrical retailers take back defunct goods in their shops. Dixons says
this will mean expensive warehousing and training for its staff, not to mention
clapped-out TVs being dumped on the floor at the local Dixons, which will
hardly be good for trade. The claim is that the proposed directive will cost
Dixons millions and affect 120,000 UK businesses from department stores and
supermarkets to thousands of small specialist operators.</p>
+
+<p>Sir Stanley's great fear is that this piece of red tape from a bunch of
Euro-suits will eat into his profits. You can almost see him throwing a brick
through the telly in his fury.</p>
+
+<p><a
href="mailto:[email protected]">[email protected]</a> </p>
+
+
+
+
+
+
+
+
+
+<!-- mini index -->
+
+
+
+<h3 class="Newscolor">Also in Outlook</h3>
+
+
+
+<a href="story.jsp?story=87994">No end in sight yet to the tech stock
meltdown</a><br>
+
+
+
+<a href="story.jsp?story=87816">The windfall that would reap a bitter
harvest</a><br>
+
+
+
+<a href="story.jsp?story=87624">The Equitable solution to a pensions
nightmare</a><br>
+
+
+
+<a href="story.jsp?story=87456">Chill wind starts to blow towards service
sector</a><br>
+
+
+
+<a href="story.jsp?story=86954">BA and AA fasten their seat belts for a bumpy
ride</a><br>
+
+
+
+
+
+
+
+ <br>
+
+ <hr width="100%" size="1" noshade>
+
+ <center>
+
+ <a href="http://www.independent.co.uk/legal">Legal</a> |
+
+<a href="http://www.independent.co.uk/story.jsp?story=55123">Contact
us</a> |
+
+<a href="http://www.independent.co.uk/legal/story.jsp?story=72172">Using our
Content</a> |
+
+c 2001 Independent Digital (UK) Ltd
+
+ </center>
+
+</body>
+
+</html>
+
+
+
+
+
+
+
Modified: gate/branches/sawdust2/plugins/Tools/pom.xml
===================================================================
--- gate/branches/sawdust2/plugins/Tools/pom.xml 2016-04-10 07:46:01 UTC
(rev 19221)
+++ gate/branches/sawdust2/plugins/Tools/pom.xml 2016-04-10 10:07:58 UTC
(rev 19222)
@@ -29,8 +29,18 @@
<scope>provided</scope>
</dependency>
- <!-- add any other libraries you depend on -->
+ <!-- this dependency is optional but includes some useful
classes for testing
+ GATE plugins, should only ever be used in the test
scope -->
+ <dependency>
+ <groupId>uk.ac.gate</groupId>
+ <artifactId>test-utils</artifactId>
+ <version>9.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- add any other libraries your plugin depends on. Any other
GATE plugins
+ you depend on at compile time should use the provided
scope -->
+
<dependency>
<groupId>uk.ac.gate.plugins</groupId>
<artifactId>annie</artifactId>
@@ -38,12 +48,6 @@
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>uk.ac.gate</groupId>
- <artifactId>test-utils</artifactId>
- <version>9.0-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
</dependencies>
<!-- In theory you shouldn't need to change anything below here -->
@@ -64,11 +68,27 @@
<build>
<testResources>
+ <!-- this adds the maven coordinates into the test
resource file creole.properties
+ which is used to help load this plugin for
testing -->
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
+ <includes>
+ <include>creole.properties</include>
+ </includes>
</testResource>
+
+ <!-- copy all the other resources without altering them
so we don't accidentally
+ corrupt datastores or other binary formats -->
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>false</filtering>
+ <excludes>
+ <exclude>creole.properties</exclude>
+ </excludes>
+ </testResource>
</testResources>
+
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
@@ -125,7 +145,6 @@
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.3</version>
<configuration>
-
<xmlOutput>true</xmlOutput>
<effort>Max</effort>
<threshold>Low</threshold>
@@ -135,6 +154,14 @@
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
+ <configuration>
+ <excludes>
+ <!-- this excludes known GUI
code from the code coverage results as
+ we know we aren't
testing them so will likely have a 0% coverage -->
+ <exclude>gate/gui/**/*</exclude>
+
<exclude>gate/swing/**/*</exclude>
+ </excludes>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Added: gate/branches/sawdust2/plugins/Tools/src/test/resources/creole.properties
===================================================================
--- gate/branches/sawdust2/plugins/Tools/src/test/resources/creole.properties
(rev 0)
+++ gate/branches/sawdust2/plugins/Tools/src/test/resources/creole.properties
2016-04-10 10:07:58 UTC (rev 19222)
@@ -0,0 +1,3 @@
+groupId=${project.groupId}
+artifactId=${project.artifactId}
+version=${project.version}
Added: gate/branches/sawdust2/plugins/Tools/src/test/resources/tests/doc0.html
===================================================================
--- gate/branches/sawdust2/plugins/Tools/src/test/resources/tests/doc0.html
(rev 0)
+++ gate/branches/sawdust2/plugins/Tools/src/test/resources/tests/doc0.html
2016-04-10 10:07:58 UTC (rev 19222)
@@ -0,0 +1,46 @@
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <TITLE>The original GATE test document</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF">
+<PRE>
+
+<DOC>
+<DOCID> wsj93_062.0057 </DOCID>
+<DOCNO> 930119-0125. </DOCNO>
+<HL> Diller Is Named Chairman,
+@ Chief Executive of QVC </HL>
+<DD> 01/19/93 </DD>
+<SO> WALL STREET JOURNAL (J), PAGE C25 </SO>
+<CO> QVCN </CO>
+<IN> LIMITED PRODUCT SPECIALTY RETAILERS (OTS),
+ ALL SPECIALTY RETAILERS (RTS) </IN>
+<DATELINE> WEST CHESTER, Pa. </DATELINE>
+<TXT>
+<p>
+ QVC Network Inc., as expected, named Barry
+Diller its chairman and chief executive officer.
+</p>
+<p>
+ Mr. Diller, 50 years old, succeeds Joseph M. Segel, who has been
+named to the post of chairman emeritus. Mr. Diller previously was
+chairman and chief executive of Fox Inc. and Twentieth Century Fox
+Film Corp., both units of News Corp. He also served for 10 years as
+chairman and chief executive of Paramount Pictures Corp., a unit of
+Paramount Communications Inc.
+</p>
+<p>
+ Arrow Investments Inc., a corporation controlled by Mr. Diller,
+in December agreed to purchase $25 million of QVC stock in a
+privately negotiated transaction. At that time, it was announced
+that Diller was in talks with the company on becoming its chairman
+and chief executive upon Mr. Segel's scheduled retirement this
+month.
+</p>
+</TXT>
+</DOC>
+
+</PRE>
+</BODY>
+</HTML>
Deleted: gate/branches/sawdust2/src/test/gate/creole/TestPR.java
===================================================================
--- gate/branches/sawdust2/src/test/gate/creole/TestPR.java 2016-04-10
07:46:01 UTC (rev 19221)
+++ gate/branches/sawdust2/src/test/gate/creole/TestPR.java 2016-04-10
10:07:58 UTC (rev 19222)
@@ -1,725 +0,0 @@
-/*
- * TestPR.java
- *
- * Copyright (c) 1995-2012, The University of Sheffield. See the file
- * COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
- *
- * This file is part of GATE (see http://gate.ac.uk/), and is free
- * software, licenced under the GNU Library General Public License,
- * Version 2, June 1991 (in the distribution as file licence.html,
- * and also available at http://gate.ac.uk/gate/licence.html).
- *
- * Oana Hamza,
- *
- * $Id$
- */
-
-package gate.creole;
-
-import gate.Annotation;
-import gate.AnnotationSet;
-import gate.DataStore;
-import gate.Document;
-import gate.Factory;
-import gate.FeatureMap;
-import gate.corpora.TestDocument;
-import gate.creole.gazetteer.DefaultGazetteer;
-import gate.creole.orthomatcher.OrthoMatcher;
-import gate.creole.splitter.SentenceSplitter;
-import gate.creole.tokeniser.DefaultTokeniser;
-import gate.jape.JapeException;
-import gate.jape.constraint.AbstractConstraintPredicate;
-import gate.jape.constraint.AnnotationAccessor;
-import gate.jape.constraint.ConstraintPredicate;
-import gate.jape.constraint.MetaPropertyAccessor;
-import gate.util.AnnotationDiffer;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.junit.FixMethodOrder;
-import org.junit.runners.MethodSorters;
-
-/** Test the PRs on three documents */
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class TestPR extends TestCase
-{
- protected static Document doc1;
- protected static Document doc2;
- protected static Document doc3;
- protected static Document doc4;
-
- protected static List<String> annotationTypes = new ArrayList<String>(10);
-
- static{
- annotationTypes.add(ANNIEConstants.SENTENCE_ANNOTATION_TYPE);
- annotationTypes.add(ANNIEConstants.ORGANIZATION_ANNOTATION_TYPE);
- annotationTypes.add(ANNIEConstants.LOCATION_ANNOTATION_TYPE);
- annotationTypes.add(ANNIEConstants.PERSON_ANNOTATION_TYPE);
- annotationTypes.add(ANNIEConstants.DATE_ANNOTATION_TYPE);
- annotationTypes.add(ANNIEConstants.MONEY_ANNOTATION_TYPE);
- annotationTypes.add(ANNIEConstants.LOOKUP_ANNOTATION_TYPE);
- annotationTypes.add(ANNIEConstants.TOKEN_ANNOTATION_TYPE);
- try{
- //get 4 documents
- if (doc1 == null)
- doc1 = Factory.newDocument(
- new URL(TestDocument.getTestServerName() +
- "tests/ft-bt-03-aug-2001.html"),
- "ISO-8859-1"
- );
-
- if (doc2 == null)
- doc2 = Factory.newDocument(
- new URL(TestDocument.getTestServerName() +
- "tests/gu-Am-Brit-4-aug-2001.html"),
- "ISO-8859-1"
- );
-
- if (doc3 == null)
- doc3 = Factory.newDocument(
- new URL(TestDocument.getTestServerName() +
- "tests/in-outlook-09-aug-2001.html"),
- "ISO-8859-1"
- );
- if (doc4 == null)
- doc4 = Factory.newDocument(
- new URL(TestDocument.getTestServerName() +
- "tests/OrthoMatcherTest.txt"),
- "UTF-8"
- );
- }catch(Exception e){
- e.printStackTrace();
- }
- }
-
- /** Construction */
- public TestPR(String name) { super(name); }
-
- /** Fixture set up */
- @Override
- public void setUp() throws Exception {
- } // setUp
-
- /** Put things back as they should be after running tests.
- */
- @Override
- public void tearDown() throws Exception {
- } // tearDown
-
- public void test001Tokenizer() throws Exception {
- FeatureMap params = Factory.newFeatureMap();
- DefaultTokeniser tokeniser = (DefaultTokeniser) Factory.createResource(
- "gate.creole.tokeniser.DefaultTokeniser", params);
-
-
- //run the tokeniser for doc1
- tokeniser.setDocument(doc1);
- tokeniser.execute();
-
- //run the tokeniser for doc2
- tokeniser.setDocument(doc2);
- tokeniser.execute();
-
- //run the tokeniser for doc3
- tokeniser.setDocument(doc3);
- tokeniser.execute();
-
- tokeniser.setDocument(doc4);
- tokeniser.execute();
-
- Factory.deleteResource(tokeniser);
-
- // assertions for doc 1
- assertTrue("Found in "+doc1.getSourceUrl().getFile()+ " "+
- doc1.getAnnotations().size() +
- " Token annotations, instead of the expected 1279.",
- doc1.getAnnotations().size()== 1279);
-
- // assertions for doc 2
- assertTrue("Found in "+ doc2.getSourceUrl().getFile()+ " "+
- doc2.getAnnotations().size() +
- " Token annotations, instead of the expected 2134.",
- doc2.getAnnotations().size()== 2134);
-
- // assertions for doc 3
- assertTrue("Found in "+ doc3.getSourceUrl().getFile()+ " "+
- doc3.getAnnotations().size() +
- " Token annotations, instead of the expected 2807.",
- doc3.getAnnotations().size()== 2807);
-
- }// testTokenizer
-
- public void test002Gazetteer() throws Exception {
- FeatureMap params = Factory.newFeatureMap();
- DefaultGazetteer gaz = (DefaultGazetteer) Factory.createResource(
- "gate.creole.gazetteer.DefaultGazetteer", params);
-
- //run gazetteer for doc1
- gaz.setDocument(doc1);
- gaz.execute();
-
- //run gazetteer for doc2
- gaz.setDocument(doc2);
- gaz.execute();
-
- //run gazetteer for doc3
- gaz.setDocument(doc3);
- gaz.execute();
-
- //run gazetteer for doc3
- gaz.setDocument(doc4);
- gaz.execute();
-
-
- Factory.deleteResource(gaz);
-
-// assertTrue("Found in "+ doc1.getSourceUrl().getFile()+ " "+
-//
doc1.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size() +
-// " Lookup annotations, instead of the expected 60.",
-//
doc1.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size()== 60);
- assertEquals("Wrong number of annotations produced in " +
- doc1.getSourceUrl().getFile(),
- 133,
-
doc1.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size());
-
-// assertTrue("Found in "+ doc2.getSourceUrl().getFile()+ " "+
-//
doc2.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size() +
-// " Lookup annotations, instead of the expected 134.",
-//
doc2.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size()== 134);
- assertEquals("Wrong number of annotations produced in " +
- doc2.getSourceUrl().getFile(),
- 232,
-
doc2.getAnnotations().get(ANNIEConstants.LOOKUP_ANNOTATION_TYPE).size());
-
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial! http://pubads.g.doubleclick.net/
gampad/clk?id=1444514301&iu=/ca-pub-7940484522588532
_______________________________________________
GATE-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gate-cvs