Java tutorial
/** * This file is part of Jahia, next-generation open source CMS: * Jahia's next-generation, open source CMS stems from a widely acknowledged vision * of enterprise application convergence - web, search, document, social and portal - * unified by the simplicity of web content management. * * For more information, please visit http://www.jahia.com. * * Copyright (C) 2002-2012 Jahia Solutions Group SA. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * As a special exception to the terms and conditions of version 2.0 of * the GPL (or any later version), you may redistribute this Program in connection * with Free/Libre and Open Source Software ("FLOSS") applications as described * in Jahia's FLOSS exception. You should have received a copy of the text * describing the FLOSS exception, and it is also available here: * http://www.jahia.com/license * * Commercial and Supported Versions of the program (dual licensing): * alternatively, commercial and supported versions of the program may be used * in accordance with the terms and conditions contained in a separate * written agreement between you and Jahia Solutions Group SA. * * If you are unsure which license is appropriate for your use, * please contact the sales department at sales@jahia.com. */ package org.jahia.services.htmlvalidator; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import javax.xml.stream.util.StreamReaderDelegate; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import java.net.URL; import java.net.URLDecoder; import java.util.*; import java.util.jar.JarEntry; import java.util.jar.JarFile; import static org.junit.Assert.*; /** * Unit test to test the accessibility check methods implemented by Jahia's WAIValidator. * The test is done with HTML fragments located under the same package name as this class, * just appending the path "pass" and "fail", which should list failing and passing HTML scripts. */ public class WAIValidatorTest { @BeforeClass public static void oneTimeSetUp() throws Exception { } @AfterClass public static void oneTimeTearDown() throws Exception { } @Before public void setUp() { } @After public void tearDown() { } @Test public void testFailingFragments() throws Exception { findAndTestScripts(true); } @Test public void testPassingFragments() throws Exception { findAndTestScripts(false); } private void findAndTestScripts(boolean shouldFail) throws Exception { String[] res = getResourceListing(WAIValidatorTest.class, "org/jahia/services/htmlvalidator/" + (shouldFail ? "fail" : "pass")); WAIValidator validator = new WAIValidator(Locale.ENGLISH); for (String re : res) { String content = IOUtils.toString(WAIValidatorTest.class.getResourceAsStream("/" + re)); if (!StringUtils.isEmpty(content)) { ValidatorResults results = validator.validate(content); if (shouldFail) { assertFalse("WAI validation for file " + re + " should fail with errors or warnings", results.getErrors().isEmpty() && results.getWarnings().isEmpty()); } else { assertTrue("WAI validation for file " + re + " should pass without errors or warnings", results.getErrors().isEmpty() && results.getWarnings().isEmpty()); } } } } private String[] getResourceListing(Class clazz, String path) throws URISyntaxException, IOException { URL dirURL = clazz.getResource(path); if (dirURL != null && dirURL.getProtocol().equals("file")) { /* A file path: easy enough */ return new File(dirURL.toURI()).list(); } if (dirURL == null) { /* * In case of a jar file, we can't actually find a directory. * Have to assume the same jar as clazz. */ String me = clazz.getName().replace(".", "/") + ".class"; dirURL = clazz.getClassLoader().getResource(me); } if (dirURL.getProtocol().equals("jar")) { /* A JAR path */ String jarPath = dirURL.getPath().substring(5, dirURL.getPath().indexOf("!")); //strip out only the JAR file JarFile jar = new JarFile(URLDecoder.decode(jarPath, "UTF-8")); Enumeration<JarEntry> entries = jar.entries(); //gives ALL entries in jar Set<String> result = new HashSet<String>(); //avoid duplicates in case it is a subdirectory while (entries.hasMoreElements()) { String name = entries.nextElement().getName(); if (name.startsWith(path)) { //filter according to the path result.add(name); } } return result.toArray(new String[result.size()]); } throw new UnsupportedOperationException("Cannot list files for URL " + dirURL); } }