blob: 26d031e37bd42d43a49f806a491d2e29f00d745a [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Eclipse Public License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.eclipse.org/org/documents/epl-v10.php
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.sdklib.repository;
import org.w3c.dom.ls.LSInput;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import junit.framework.TestCase;
abstract class ValidateTestCase extends TestCase {
/**
* Validates an XSD stream against the w3.org XSD schema.
*/
protected void validateXsd(InputStream repoXsdStream) throws SAXException, IOException {
final Class<? extends ValidateTestCase> clazz = this.getClass();
InputStream xsdXsdStream = clazz.getResourceAsStream(
"/com/android/sdklib/testdata/www.w3.org/2001/XMLSchema.xsd");
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
factory.setResourceResolver(new LSResourceResolver() {
@Override
public LSInput resolveResource(
String type,
String namespaceURI,
final String publicId,
final String systemId,
final String baseURI) {
if (systemId != null) {
String resName = "/com/android/sdklib/testdata/www.w3.org/2001/";
int pos = systemId.lastIndexOf('/');
if (pos < 0) {
resName += systemId;
} else {
resName += systemId.substring(pos + 1);
}
final InputStream stream = clazz.getResourceAsStream(resName);
if (stream == null) {
fail("XSD validation requires missing file: " + resName);
}
return new LSInput() {
@SuppressWarnings("hiding")
@Override
public void setSystemId(String systemId) {}
@Override
public void setStringData(String stringData) {}
@SuppressWarnings("hiding")
@Override
public void setPublicId(String publicId) {}
@Override
public void setEncoding(String encoding) {}
@Override
public void setCharacterStream(Reader characterStream) {}
@Override
public void setCertifiedText(boolean certifiedText) {}
@Override
public void setByteStream(InputStream byteStream) {}
@SuppressWarnings("hiding")
@Override
public void setBaseURI(String baseURI) {}
@Override
public String getSystemId() {
return systemId;
}
@Override
public String getStringData() {
return null;
}
@Override
public String getPublicId() {
return publicId;
}
@Override
public String getEncoding() {
return null;
}
@Override
public Reader getCharacterStream() {
return null;
}
@Override
public boolean getCertifiedText() {
return false;
}
@Override
public InputStream getByteStream() {
return stream;
}
@Override
public String getBaseURI() {
return baseURI;
}
};
}
return null;
}
});
Schema schema = factory.newSchema(new StreamSource(xsdXsdStream));
Validator validator = schema.newValidator();
CaptureErrorHandler handler = new CaptureErrorHandler();
validator.setErrorHandler(handler);
validator.validate(new StreamSource(repoXsdStream));
handler.verify();
}
/** An helper that validates a string against an expected regexp. */
protected void assertRegex(String expectedRegexp, String actualString) {
assertNotNull(actualString);
assertTrue(
String.format("Regexp Assertion Failed:\nExpected: %s\nActual: %s\n",
expectedRegexp, actualString),
actualString.matches(expectedRegexp));
}
}