1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.protocol.data;
16
17 import org.htmlunit.WebDriverTestCase;
18 import org.htmlunit.junit.BrowserRunner;
19 import org.htmlunit.junit.annotation.Alerts;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.openqa.selenium.WebDriver;
23
24
25
26
27
28
29
30
31 @RunWith(BrowserRunner.class)
32 public class DataURLDecoderTest extends WebDriverTestCase {
33
34
35
36
37 @Test
38 @Alerts({"one", "two", "three", "four", "five's"})
39 public void dataProtocol() throws Exception {
40 final String html = DOCTYPE_HTML
41 + "<html><head>\n"
42 + "<script>\n"
43 + "var d1, d2, d3, d4, d5;\n"
44 + "</script>\n"
45 + "<script src=\"data:text/javascript,d1%20%3D%20'one'%3B\"></script>\n"
46 + "<script src=\"data:text/javascript;base64,ZDIgPSAndHdvJzs%3D\"></script>\n"
47 + "<script src=\""
48 + "data:text/javascript;base64,%5a%44%4d%67%50%53%41%6e%64%47%68%79%5a%57%55%6e%4f%77%3D%3D\"></script>\n"
49 + "<script src=\"data:text/javascript;base64,%20ZD%20Qg%0D%0APS%20An%20Zm91cic%0D%0A%207%20\"></script>\n"
50 + "<script src=\"data:text/javascript,d5%20%3D%20'five%5Cu0027s'%3B\"></script>\n"
51 + "<script>\n"
52 + LOG_TITLE_FUNCTION
53 + "function test() {\n"
54 + " log(d1);\n"
55 + " log(d2);\n"
56 + " log(d3);\n"
57 + " log(d4);\n"
58 + " log(d5);\n"
59 + "}\n"
60 + "</script></head><body onload='test()'></body></html>";
61
62 loadPageVerifyTitle2(html);
63 }
64
65
66
67
68 @Test
69 @Alerts(CHROME = "data:image/png;base64,"
70 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAHBJREFUOE+tkkkOACAIA+3/H40hEYOI"
71 + "iAtXYKBNQURUHgq3AACFbx8DeJFLHu8AaWTUaNUDILLDHnA/WAH026GETrU6m2Es7xgwLUQmDua0Qe14+gM9eA0QiDU25UGU"
72 + "hS9BcpNode8SOQXpC2B31etXnvKZ0TEDfq8AAAAASUVORK5CYII=",
73 EDGE = "data:image/png;base64,"
74 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAHBJREFUOE+tkkkOACAIA+3/H40hEYOI"
75 + "iAtXYKBNQURUHgq3AACFbx8DeJFLHu8AaWTUaNUDILLDHnA/WAH026GETrU6m2Es7xgwLUQmDua0Qe14+gM9eA0QiDU25UGU"
76 + "hS9BcpNode8SOQXpC2B31etXnvKZ0TEDfq8AAAAASUVORK5CYII=",
77 FF = "data:image/png;base64,"
78 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVQ4T62SSQ4AIAgD7f8frZKIQUTEhSsw0KbItdJD4RYA"
79 + "INHtYwAtUvHjHcCNiBqpegB4dugD5gcrgHzbldCpWmczjOQdA6YFz8TBnDYoHQ9/IAevAQzRxoY88LLwJUhmErXuXSKnIH0B"
80 + "7K5a/QKe8pnRes1vRwAAAABJRU5ErkJggg==",
81 FF_ESR = "data:image/png;base64,"
82 + "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVQ4T62SSQ4AIAgD7f8frZKIQUTEhSsw0KbItdJD4RYA"
83 + "INHtYwAtUvHjHcCNiBqpegB4dugD5gcrgHzbldCpWmczjOQdA6YFz8TBnDYoHQ9/IAevAQzRxoY88LLwJUhmErXuXSKnIH0B"
84 + "7K5a/QKe8pnRes1vRwAAAABJRU5ErkJggg==")
85 public void base64WithPlus() throws Exception {
86 final String html = DOCTYPE_HTML
87 + "<html><head>\n"
88 + "<script>\n"
89 + LOG_TEXTAREA_FUNCTION
90 + "function test() {\n"
91 + " var canvas = document.getElementById('canvas');\n"
92 + " var img = document.getElementById('image');\n"
93 + " canvas.width = img.width;\n"
94 + " canvas.height = img.height;\n"
95 + " var ctx = canvas.getContext('2d');\n"
96 + " ctx.drawImage(img, 0, 0);\n"
97 + " log(canvas.toDataURL());\n"
98 + "}\n"
99 + "</script></head><body onload='test()'>\n"
100 + " <img id='image' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEU"
101 + "AAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAA"
102 + "AElFTkSuQmCC'>\n"
103 + " <canvas id='canvas'></canvas>\n"
104 + LOG_TEXTAREA
105 + "</body></html>";
106
107 loadPageVerifyTextArea2(html);
108 }
109
110
111
112
113 @Test
114 @Alerts("HtmlUnit")
115 public void withPlus() throws Exception {
116 final String dataUrl = "data:text/html;charset=utf-8,"
117 + "<html><head></head>\n"
118 + "<body>\n"
119 + "<script>\n"
120 + " var result = 'Html';\n"
121 + " result += 'Unit§';\n"
122 + " window.document.title = result;\n"
123 + "</script>\n"
124 + "</body></html>";
125
126 final WebDriver driver = getWebDriver();
127 driver.get(dataUrl);
128 verifyTitle2(driver, getExpectedAlerts());
129 }
130 }