1// Copyright 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.content.browser;
6
7import android.test.InstrumentationTestCase;
8import android.test.suitebuilder.annotation.SmallTest;
9
10import org.chromium.base.test.util.UrlUtils;
11
12import java.net.URI;
13import java.net.URLDecoder;
14
15public class EncodeHtmlDataUriTest extends InstrumentationTestCase {
16    private static final String DATA_URI_PREFIX = "data:text/html;utf-8,";
17
18    private String getData(String dataUri) {
19        assertNotNull("Data URI is null", dataUri);
20        assertTrue("Incorrect HTML Data URI prefix", dataUri.startsWith(DATA_URI_PREFIX));
21        return dataUri.substring(DATA_URI_PREFIX.length());
22    }
23
24    private String decode(String dataUri) throws java.io.UnsupportedEncodingException {
25        String data = getData(dataUri);
26        return URLDecoder.decode(data, "UTF-8");
27    }
28
29    @SmallTest
30    public void testDelimitersEncoding() throws java.io.UnsupportedEncodingException {
31        String testString = "><#%\"'";
32        String encodedUri = UrlUtils.encodeHtmlDataUri(testString);
33        String decodedUri = decode(encodedUri);
34        assertEquals("Delimiters are not properly encoded", decodedUri, testString);
35    }
36
37    @SmallTest
38    public void testUnwiseCharactersEncoding() throws java.io.UnsupportedEncodingException {
39        String testString = "{}|\\^[]`";
40        String encodedUri = UrlUtils.encodeHtmlDataUri(testString);
41        String decodedUri = decode(encodedUri);
42        assertEquals("Unwise characters are not properly encoded", decodedUri, testString);
43    }
44
45    @SmallTest
46    public void testWhitespaceEncoding() throws java.io.UnsupportedEncodingException {
47        String testString = " \n\t";
48        String encodedUri = UrlUtils.encodeHtmlDataUri(testString);
49        String decodedUri = decode(encodedUri);
50        assertEquals("Whitespace characters are not properly encoded", decodedUri, testString);
51    }
52
53    @SmallTest
54    public void testReturnsValidUri()
55            throws java.net.URISyntaxException, java.io.UnsupportedEncodingException {
56        String testString = "<html><body onload=\"alert('Hello \\\"world\\\"');\"></body></html>";
57        String encodedUri = UrlUtils.encodeHtmlDataUri(testString);
58        String decodedUri = decode(encodedUri);
59        // Verify that the encoded URI is valid.
60        new URI(encodedUri);
61        // Verify that something sensible was encoded.
62        assertEquals("Simple HTML is not properly encoded", decodedUri, testString);
63    }
64}
65