rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ResourcesTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 30 Oct 2014 17:21:08 +0100
changeset 1719 d83b02a4b7a8
parent 1718 ff14ad07bc16
child 1721 15f7116b57b6
permissions -rw-r--r--
chromium just returns 404 in case the URL has been revoked. Throw exceptions by ownself.
jaroslav@425
     1
/**
jaroslav@425
     2
 * Back 2 Browser Bytecode Translator
jaroslav@425
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@425
     4
 *
jaroslav@425
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@425
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@425
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@425
     8
 *
jaroslav@425
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@425
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@425
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@425
    12
 * GNU General Public License for more details.
jaroslav@425
    13
 *
jaroslav@425
    14
 * You should have received a copy of the GNU General Public License
jaroslav@425
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@425
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@424
    17
 */
jaroslav@424
    18
package org.apidesign.bck2brwsr.tck;
jaroslav@424
    19
jaroslav@1717
    20
import java.io.ByteArrayInputStream;
jaroslav@1717
    21
import java.io.Closeable;
jaroslav@1375
    22
import java.io.IOException;
jaroslav@424
    23
import java.io.InputStream;
jaroslav@1316
    24
import java.net.URL;
jaroslav@1717
    25
import java.net.URLConnection;
jaroslav@1375
    26
import java.util.Enumeration;
jaroslav@1717
    27
import net.java.html.js.JavaScriptBody;
jaroslav@1717
    28
import org.apidesign.bck2brwsr.vmtest.BrwsrTest;
jaroslav@424
    29
import org.apidesign.bck2brwsr.vmtest.Compare;
jaroslav@424
    30
import org.apidesign.bck2brwsr.vmtest.VMTest;
jaroslav@424
    31
import org.testng.annotations.Factory;
jaroslav@424
    32
jaroslav@424
    33
/**
jaroslav@424
    34
 *
jaroslav@424
    35
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@424
    36
 */
jaroslav@424
    37
public class ResourcesTest {
jaroslav@1375
    38
    @Compare public String allManifests() throws Exception {
jaroslav@1375
    39
        Enumeration<URL> en = ClassLoader.getSystemResources("META-INF/MANIFEST.MF");
jaroslav@1375
    40
        assert en.hasMoreElements() : "Should have at least one manifest";
jaroslav@1375
    41
        String first = readString(en.nextElement().openStream());
jaroslav@1375
    42
        boolean different = false;
jaroslav@1375
    43
        int cnt = 1;
jaroslav@1375
    44
        while (en.hasMoreElements()) {
jaroslav@1375
    45
            URL url = en.nextElement();
jaroslav@1375
    46
            String now = readString(url.openStream());
jaroslav@1375
    47
            if (!first.equals(now)) {
jaroslav@1375
    48
                different = true;
jaroslav@1375
    49
            }
jaroslav@1375
    50
            cnt++;
jaroslav@1375
    51
            if (cnt > 500) {
jaroslav@1375
    52
                throw new IllegalStateException(
jaroslav@1375
    53
                    "Giving up. First manifest:\n" + first + 
jaroslav@1375
    54
                    "\nLast manifest:\n" + now
jaroslav@1375
    55
                );
jaroslav@1375
    56
            }
jaroslav@1375
    57
        }
jaroslav@1375
    58
        assert different : "Not all manifests should look like first one:\n" + first;
jaroslav@1600
    59
        if (cnt > 40 && cnt < 50) {
jaroslav@1600
    60
            return "OK";
jaroslav@1600
    61
        } else {
jaroslav@1600
    62
            return "" + cnt;
jaroslav@1600
    63
        }
jaroslav@1375
    64
    }
jaroslav@424
    65
    
jaroslav@424
    66
    @Compare public String readResourceAsStream() throws Exception {
jaroslav@424
    67
        InputStream is = getClass().getResourceAsStream("Resources.txt");
jaroslav@1375
    68
        return readString(is);
jaroslav@1375
    69
    }
jaroslav@1398
    70
    
jaroslav@1717
    71
    @Compare public String readResourceViaXMLHttpRequest() throws Exception {
jaroslav@1717
    72
        return readResourceViaXHR("Resources.txt", null);
jaroslav@1717
    73
    }
jaroslav@1717
    74
    
jaroslav@1717
    75
    @BrwsrTest public void xhrTestedInBrowser() throws Exception {
jaroslav@1717
    76
        boolean[] run = { false };
jaroslav@1717
    77
        readResourceViaXHR("Resources.txt", run);
jaroslav@1717
    78
        assert run[0] : "XHR really used in browser";
jaroslav@1717
    79
    }
jaroslav@1717
    80
jaroslav@1717
    81
    @Compare public String readBinaryResourceViaXMLHttpRequest() throws Exception {
jaroslav@1717
    82
        return readResourceViaXHR("0xfe", null);
jaroslav@1717
    83
    }
jaroslav@1717
    84
jaroslav@1717
    85
    private String readResourceViaXHR(final String res, boolean[] exec) throws IOException {
jaroslav@1717
    86
        URL url = getClass().getResource(res);
jaroslav@1717
    87
        URLConnection conn = url.openConnection();
jaroslav@1717
    88
        String java = readBytes(url.openStream());
jaroslav@1717
    89
        String java2 = readBytes(conn.getInputStream());
jaroslav@1717
    90
        assert java.equals(java2) : "Java:\n" + java + "\nConn:\n" + java2;
jaroslav@1717
    91
        
jaroslav@1717
    92
        URL url2 = conn.getURL();
jaroslav@1717
    93
        String java3 = readBytes(url.openStream());
jaroslav@1717
    94
        assert java.equals(java3) : "Java:\n" + java + "\nConnURL:\n" + java3;
jaroslav@1717
    95
        
jaroslav@1717
    96
        
jaroslav@1717
    97
        byte[] xhr = readXHR(url2.toExternalForm());
jaroslav@1717
    98
        if (xhr != null) {
jaroslav@1717
    99
            if (exec != null) {
jaroslav@1717
   100
                exec[0] = true;
jaroslav@1717
   101
            }
jaroslav@1717
   102
            String s = readBytes(new ByteArrayInputStream(xhr));
jaroslav@1717
   103
            assert java.equals(s) : "Java:\n" + java + "\nXHR:\n" + s;
jaroslav@1717
   104
            
jaroslav@1717
   105
            assert conn instanceof Closeable : "Can be closed";
jaroslav@1717
   106
            
jaroslav@1717
   107
            Closeable c = (Closeable) conn;
jaroslav@1717
   108
            c.close();
jaroslav@1717
   109
            
jaroslav@1717
   110
            byte[] xhr2 = null;
jaroslav@1717
   111
            try {
jaroslav@1717
   112
                xhr2 = readXHR(url2.toExternalForm());
jaroslav@1717
   113
            } catch (Throwable t) {
jaroslav@1717
   114
                // OK, expecting error
jaroslav@1717
   115
            }
jaroslav@1717
   116
            assert xhr2 == null : "Cannot read the URL anymore";
jaroslav@1717
   117
        }
jaroslav@1717
   118
        return java;
jaroslav@1717
   119
    }
jaroslav@1717
   120
jaroslav@1717
   121
    @JavaScriptBody(args = { "url" }, body =
jaroslav@1717
   122
        "if (typeof XMLHttpRequest === 'undefined') return null;\n" +
jaroslav@1717
   123
        "var xhr = new XMLHttpRequest();\n" +
jaroslav@1717
   124
        "xhr.overrideMimeType('text\\/plain; charset=x-user-defined');\n" +
jaroslav@1717
   125
        "xhr.open('GET', url, false);\n" +
jaroslav@1717
   126
        "xhr.send();\n" +
jaroslav@1719
   127
        "if (xhr.status !== 200) throw 'Status: ' + xhr.status + ' ' + xhr.statusText;\n" +
jaroslav@1717
   128
        "var ret = []\n" +
jaroslav@1717
   129
        "for (var i = 0; i < xhr.responseText.length; i++) {\n" +
jaroslav@1718
   130
        "  var b = xhr.responseText.charCodeAt(i) & 0xff;\n" +
jaroslav@1718
   131
        "  if (b > 127) b -= 256;\n" +
jaroslav@1718
   132
        "  ret.push(b);\n" +
jaroslav@1717
   133
        "}\n" +
jaroslav@1717
   134
        "return ret;\n"
jaroslav@1717
   135
    )
jaroslav@1717
   136
    private static byte[] readXHR(String url) {
jaroslav@1717
   137
        return null;
jaroslav@1717
   138
    }
jaroslav@1717
   139
    
jaroslav@1398
   140
    @Compare public String readResourceViaConnection() throws Exception {
jaroslav@1717
   141
        final URL url = getClass().getResource("Resources.txt");
jaroslav@1717
   142
        String str = url.toExternalForm();
jaroslav@1717
   143
        int idx = str.indexOf("org/apidesign/bck2brwsr/tck");
jaroslav@1717
   144
        assert idx >= 0 : "Package name found in the URL name: " + str;
jaroslav@1717
   145
        InputStream is = url.openConnection().getInputStream();
jaroslav@1398
   146
        return readString(is);
jaroslav@1398
   147
    }
jaroslav@1375
   148
jaroslav@1375
   149
    private String readString(InputStream is) throws IOException {
jaroslav@424
   150
        StringBuilder sb = new StringBuilder();
jaroslav@1375
   151
        byte[] b = new byte[512];
jaroslav@1375
   152
        for (;;) { 
jaroslav@1375
   153
            int len = is.read(b);
jaroslav@1375
   154
            if (len == -1) {
jaroslav@1375
   155
                return sb.toString();
jaroslav@1375
   156
            }
jaroslav@1375
   157
            for (int i = 0; i < len; i++) {
jaroslav@1375
   158
                sb.append((char)b[i]);
jaroslav@1375
   159
            }
jaroslav@424
   160
        }
jaroslav@424
   161
    }
jaroslav@1333
   162
jaroslav@1717
   163
    private String readBytes(InputStream is) throws IOException {
jaroslav@1717
   164
        StringBuilder sb = new StringBuilder();
jaroslav@1717
   165
        byte[] b = new byte[512];
jaroslav@1717
   166
        for (;;) { 
jaroslav@1717
   167
            int len = is.read(b);
jaroslav@1717
   168
            if (len == -1) {
jaroslav@1717
   169
                return sb.toString();
jaroslav@1717
   170
            }
jaroslav@1717
   171
            for (int i = 0; i < len; i++) {
jaroslav@1717
   172
                sb.append((int)b[i]).append(" ");
jaroslav@1717
   173
            }
jaroslav@1717
   174
        }
jaroslav@1717
   175
    }
jaroslav@1717
   176
jaroslav@1333
   177
    @Compare public String readResourceAsStreamFromClassLoader() throws Exception {
jaroslav@1333
   178
        InputStream is = getClass().getClassLoader().getResourceAsStream("org/apidesign/bck2brwsr/tck/Resources.txt");
jaroslav@1375
   179
        return readString(is);
jaroslav@1333
   180
    }
jaroslav@424
   181
    
jaroslav@1316
   182
    @Compare public String toURIFromURL() throws Exception {
jaroslav@1316
   183
        URL u = new URL("http://apidesign.org");
jaroslav@1316
   184
        return u.toURI().toString();
jaroslav@1316
   185
    }
jaroslav@1316
   186
    
jaroslav@424
   187
    @Factory public static Object[] create() {
jaroslav@424
   188
        return VMTest.create(ResourcesTest.class);
jaroslav@424
   189
    }
jaroslav@424
   190
}