jaroslav@425: /** jaroslav@425: * Back 2 Browser Bytecode Translator jaroslav@425: * Copyright (C) 2012 Jaroslav Tulach jaroslav@425: * jaroslav@425: * This program is free software: you can redistribute it and/or modify jaroslav@425: * it under the terms of the GNU General Public License as published by jaroslav@425: * the Free Software Foundation, version 2 of the License. jaroslav@425: * jaroslav@425: * This program is distributed in the hope that it will be useful, jaroslav@425: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@425: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@425: * GNU General Public License for more details. jaroslav@425: * jaroslav@425: * You should have received a copy of the GNU General Public License jaroslav@425: * along with this program. Look for COPYING file in the top folder. jaroslav@425: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@424: */ jaroslav@424: package org.apidesign.bck2brwsr.tck; jaroslav@424: jaroslav@1375: import java.io.IOException; jaroslav@424: import java.io.InputStream; jaroslav@1316: import java.net.URL; jaroslav@1375: import java.util.Enumeration; jaroslav@424: import org.apidesign.bck2brwsr.vmtest.Compare; jaroslav@424: import org.apidesign.bck2brwsr.vmtest.VMTest; jaroslav@424: import org.testng.annotations.Factory; jaroslav@424: jaroslav@424: /** jaroslav@424: * jaroslav@424: * @author Jaroslav Tulach jaroslav@424: */ jaroslav@424: public class ResourcesTest { jaroslav@1375: @Compare public String allManifests() throws Exception { jaroslav@1375: Enumeration en = ClassLoader.getSystemResources("META-INF/MANIFEST.MF"); jaroslav@1375: assert en.hasMoreElements() : "Should have at least one manifest"; jaroslav@1375: String first = readString(en.nextElement().openStream()); jaroslav@1375: boolean different = false; jaroslav@1375: int cnt = 1; jaroslav@1375: while (en.hasMoreElements()) { jaroslav@1375: URL url = en.nextElement(); jaroslav@1375: String now = readString(url.openStream()); jaroslav@1375: if (!first.equals(now)) { jaroslav@1375: different = true; jaroslav@1375: } jaroslav@1375: cnt++; jaroslav@1375: if (cnt > 500) { jaroslav@1375: throw new IllegalStateException( jaroslav@1375: "Giving up. First manifest:\n" + first + jaroslav@1375: "\nLast manifest:\n" + now jaroslav@1375: ); jaroslav@1375: } jaroslav@1375: } jaroslav@1375: assert different : "Not all manifests should look like first one:\n" + first; jaroslav@1375: return "" + cnt; jaroslav@1375: } jaroslav@424: jaroslav@424: @Compare public String readResourceAsStream() throws Exception { jaroslav@424: InputStream is = getClass().getResourceAsStream("Resources.txt"); jaroslav@1375: return readString(is); jaroslav@1375: } jaroslav@1398: jaroslav@1398: @Compare public String readResourceViaConnection() throws Exception { jaroslav@1398: InputStream is = getClass().getResource("Resources.txt").openConnection().getInputStream(); jaroslav@1398: return readString(is); jaroslav@1398: } jaroslav@1375: jaroslav@1375: private String readString(InputStream is) throws IOException { jaroslav@424: StringBuilder sb = new StringBuilder(); jaroslav@1375: byte[] b = new byte[512]; jaroslav@1375: for (;;) { jaroslav@1375: int len = is.read(b); jaroslav@1375: if (len == -1) { jaroslav@1375: return sb.toString(); jaroslav@1375: } jaroslav@1375: for (int i = 0; i < len; i++) { jaroslav@1375: sb.append((char)b[i]); jaroslav@1375: } jaroslav@424: } jaroslav@424: } jaroslav@1333: jaroslav@1333: @Compare public String readResourceAsStreamFromClassLoader() throws Exception { jaroslav@1333: InputStream is = getClass().getClassLoader().getResourceAsStream("org/apidesign/bck2brwsr/tck/Resources.txt"); jaroslav@1375: return readString(is); jaroslav@1333: } jaroslav@424: jaroslav@1316: @Compare public String toURIFromURL() throws Exception { jaroslav@1316: URL u = new URL("http://apidesign.org"); jaroslav@1316: return u.toURI().toString(); jaroslav@1316: } jaroslav@1316: jaroslav@424: @Factory public static Object[] create() { jaroslav@424: return VMTest.create(ResourcesTest.class); jaroslav@424: } jaroslav@424: }