1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (c) 2001-2003 World Wide Web Consortium, (Massachusetts Institute
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of Technology, Institut National de Recherche en Informatique et en
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Automatique, Keio University). All Rights Reserved. This program is
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the W3C's Software Intellectual Property License. This
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * program is distributed in the hope that it will be useful, but WITHOUT ANY
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * FOR A PARTICULAR PURPOSE. See W3C License
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.w3.org/Consortium/Legal/ for more details.
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.w3c.domts;
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File;
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Method;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.MalformedURLException;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URL;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.w3c.dom.DOMImplementation;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.w3c.dom.Document;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is an abstract base class for generated DOM tests
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class DOMTest /* wBM: implements EventListener */ {
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private DOMTestDocumentBuilderFactory factory;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private int mutationCount = 0;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  /**
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * This is the appropriate constructor for tests that make no requirements
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * on the parser configuration.
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   *
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * @param factory
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   *            must not be null
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   */
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public DOMTest(DOMTestDocumentBuilderFactory factory) {
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if (factory == null) {
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new NullPointerException("factory");
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    this.factory = factory;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  /**
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * This constructor is used by tests that must create a modified document
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * factory to meet requirements on the parser configuration. setFactory
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * should be called within the test's constructor.
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   */
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public DOMTest() {
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    factory = null;
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  /**
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * Should only be called in the constructor of a derived type.
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   */
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  protected void setFactory(DOMTestDocumentBuilderFactory factory) {
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    this.factory = factory;
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public boolean hasFeature(String feature, String version) {
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.hasFeature(feature, version);
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public boolean hasSetting(DocumentBuilderSetting setting) {
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return setting.hasSetting(factory);
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  protected DOMTestDocumentBuilderFactory getFactory() {
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory;
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public DOMImplementation getImplementation() {
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.getDOMImplementation();
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  private URL resolveURI(String baseURI) throws DOMTestLoadException {
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    String docURI = factory.addExtension(baseURI);
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    URL resolvedURI = null;
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    try {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      resolvedURI = new URL(docURI);
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      if (resolvedURI.getProtocol() != null) {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return resolvedURI;
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    catch (MalformedURLException ex) {
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      //        throw new DOMTestLoadException(ex);
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //   build a URL for a test file in the JAR
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    resolvedURI = getClass().getResource("/" + docURI);
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if (resolvedURI == null) {
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      //
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      //   see if it is an absolute URI
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      //
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      int firstSlash = docURI.indexOf('/');
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      try {
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (firstSlash == 0
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            || (firstSlash >= 1
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && docURI.charAt(firstSlash - 1) == ':')) {
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          resolvedURI = new URL(docURI);
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        else {
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //  try the files/level?/spec directory
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          String filename = getClass().getPackage().getName();
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          filename =
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project              "tests/"
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project              + filename.substring(14).replace('.', '/')
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project              + "/files/"
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project              + docURI;
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          resolvedURI = new java.io.File(filename).toURL();
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      catch (MalformedURLException ex) {
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new DOMTestLoadException(ex);
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if (resolvedURI == null) {
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new DOMTestLoadException(
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          new java.io.FileNotFoundException(docURI));
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return resolvedURI;
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public String getResourceURI(String href, String scheme, String contentType) throws
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      DOMTestLoadException {
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if (scheme == null) {
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new NullPointerException("scheme");
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if ("file".equals(scheme)) {
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return resolveURI(href).toString();
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if ("http".equals(scheme)) {
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      StringBuffer httpURL = new StringBuffer(
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          System.getProperty("org.w3c.domts.httpbase",
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                             "http://localhost:8080/webdav/"));
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      httpURL.append(href);
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      if ("application/pdf".equals(contentType)) {
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpURL.append(".pdf");
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      else {
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        httpURL.append(".xml");
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return httpURL.toString();
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    throw new DOMTestLoadException(new Exception("Unrecognized URI scheme " +
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                                 scheme));
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public String createTempURI(String scheme) throws DOMTestLoadException {
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if (scheme == null) {
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      throw new NullPointerException("scheme");
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if ("file".equals(scheme)) {
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      try {
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File tempFile = File.createTempFile("domts", ".xml");
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //   if available use JDK 1.4's File.toURI().toString()
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //
1686363e0f00cc7960545161fca809733f5ad64e8d3Elliott Hughes          Method method = File.class.getMethod("toURI", (Class<?>) null);
1696363e0f00cc7960545161fca809733f5ad64e8d3Elliott Hughes          Object uri = method.invoke(tempFile, (Class<?>) null);
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          return uri.toString();
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        catch (NoSuchMethodException ex) {
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //   File.toURL is not as robust
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          //
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          URL url = tempFile.toURL();
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          return url.toString();
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      catch (Exception ex) {
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new DOMTestLoadException(ex);
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if ("http".equals(scheme)) {
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      String httpBase = System.getProperty("org.w3c.domts.httpbase",
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                           "http://localhost:8080/webdav/");
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      java.lang.StringBuffer buf = new StringBuffer(httpBase);
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      if (!httpBase.endsWith("/")) {
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project          buf.append("/");
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      buf.append("tmp");
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      buf.append( (new java.util.Random()).nextInt(Integer.MAX_VALUE));
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      buf.append(".xml");
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      return buf.toString();
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    throw new DOMTestLoadException(new Exception("Unrecognized URI scheme " +
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                                 scheme));
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public Document load(String docURI, boolean willBeModified) throws
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      DOMTestLoadException {
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Document doc = factory.load(resolveURI(docURI));
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //   if will be modified is false and doc is an EventTarget
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * wBM: if (!willBeModified && doc instanceof EventTarget) {
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * ((EventTarget) doc).addEventListener("DOMSubtreeModified", this,
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * false); }
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return doc;
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public void preload(String contentType, String docURI, boolean willBeModified) throws
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      DOMTestIncompatibleException {
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if ("text/html".equals(contentType) ||
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        "application/xhtml+xml".equals(contentType)) {
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      if (docURI.startsWith("staff") || docURI.equals("datatype_normalization")) {
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw DOMTestIncompatibleException.incompatibleLoad(docURI, contentType);
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      }
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public Object createXPathEvaluator(Document doc) {
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.createXPathEvaluator(doc);
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public InputStream createStream(String bytes) throws DOMTestLoadException,
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      IOException {
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    int byteCount = bytes.length() / 2;
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    byte[] array = new byte[byteCount];
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    for (int i = 0; i < byteCount; i++) {
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project      array[i] = Byte.parseByte(bytes.substring(i * 2, i * 2 + 2), 16);
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return new java.io.ByteArrayInputStream(array);
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  abstract public String getTargetURI();
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final boolean isCoalescing() {
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.isCoalescing();
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final boolean isExpandEntityReferences() {
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.isExpandEntityReferences();
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final boolean isIgnoringElementContentWhitespace() {
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.isIgnoringElementContentWhitespace();
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final boolean isNamespaceAware() {
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.isNamespaceAware();
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final boolean isValidating() {
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.isValidating();
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final boolean isSigned() {
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return true;
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final boolean isHasNullString() {
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return true;
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final String getContentType() {
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return factory.getContentType();
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  /**
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * Implementation of EventListener.handleEvent
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   *
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * This method is called when a mutation is reported for a document that
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * was declared to not be modified during testing
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   *
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * @param evt
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   *            mutation event
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   */
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  /*
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   * wBM: public final void handleEvent(Event evt) { mutationCount++; }
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   */
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  public final int getMutationCount() {
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return mutationCount;
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  }
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
290