| /* |
| * 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)); |
| } |
| } |