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&amp;rand=2235220";>
+<IMG 
SRC="http://ads.guardianunlimited.co.uk/image.ng/site=Guardian&amp;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>&nbsp;</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>&nbsp;<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>&nbsp;</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">&nbsp;</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>&nbsp;<A HREF="' + href + '" 
CLASS="GUDROPDOWN">';
+                       
+                       text += (colour == '' ? linktext : '<FONT COLOR="' + 
colour + '">' + linktext + '</FONT>'); 
+                       text += '</A>&nbsp;</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>&nbsp;</TD> 
+               <TD VALIGN=TOP WIDTH=372 HEIGHT=25>&nbsp;</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>&nbsp;</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 &amp; Brown, is attempting to build credibility with officials as a way 
of forcing BT to reconsider its initial dismissal of an &#163;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>&nbsp;</TD>
+               <TD VALIGN=TOP WIDTH=140 HEIGHT=80>&nbsp;</TD> 
+               <TD VALIGN=TOP WIDTH=372 HEIGHT=80 VALIGN=MIDDLE>&nbsp;<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 &#169 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&amp;rand=4111220";>
+<IMG 
SRC="http://ads.guardianunlimited.co.uk/image.ng/site=Guardian&amp;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>&nbsp;</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>&nbsp;<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>&nbsp;</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">&nbsp;</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>&nbsp;<A HREF="' + href + '" 
CLASS="GUDROPDOWN">';
+                       
+                       text += (colour == '' ? linktext : '<FONT COLOR="' + 
colour + '">' + linktext + '</FONT>'); 
+                       text += '</A>&nbsp;</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>&nbsp;</TD> 
+               <TD VALIGN=TOP WIDTH=372 HEIGHT=25>&nbsp;</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>&nbsp;</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 &amp; 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>&nbsp;</TD>
+               <TD VALIGN=TOP WIDTH=140 HEIGHT=80>&nbsp;</TD> 
+               <TD VALIGN=TOP WIDTH=372 HEIGHT=80 VALIGN=MIDDLE>&nbsp;<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 &#169 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>&nbsp;|&nbsp;
+
+       <a href="http://money.independent.co.uk/";>Money</a>&nbsp;|&nbsp;
+
+       <a href="http://travel.independent.co.uk/";>Travel</a>&nbsp;|&nbsp;
+
+       <a href="http://argument.independent.co.uk/";>Argument</a>&nbsp;|&nbsp;
+
+       <a 
href="http://advancement.independent.co.uk/";>Advancement</a>&nbsp;|&nbsp;
+
+       <a href="http://enjoyment.independent.co.uk/";>Enjoyment</a>
+
+</p>
+
+
+
+
+
+
+
+
+
+<!-- location bar -->
+
+<p>
+
+
+
+<a href="http://www.independent.co.uk/"; 
class="tool">Independent</a>&nbsp;>&nbsp;
+
+
+
+<a href="/" class="tool">News</a>
+
+
+
+&nbsp;>&nbsp;<a href="/business/">Business</a>
+
+
+
+&nbsp;>&nbsp;<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 &#163;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 &#173; &#163;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 &#173; 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 &#173; 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>&nbsp;|&nbsp;
+
+<a href="http://www.independent.co.uk/story.jsp?story=55123";>Contact 
us</a>&nbsp;|&nbsp;
+
+<a href="http://www.independent.co.uk/legal/story.jsp?story=72172";>Using our 
Content</a>&nbsp;|&nbsp;
+
+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

Reply via email to