1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
/*
* Copyright 2000-2016 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.ui.declarative;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Test;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
/**
* Tests for {@link Design} declarative support class.
*
* @author Vaadin Ltd
*/
public class DesignTest {
private static Charset CP1251_CHARSET = Charset.forName("cp1251");
private static Charset UTF8_CHARSET = Charset.forName("UTF-8");
private static String NON_ASCII_STRING = "\u043C";
private static Charset DEFAULT_CHARSET = Charset.defaultCharset();
@AfterClass
public static void restoreCharset()
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
setCharset(DEFAULT_CHARSET);
}
@Test
public void write_cp1251SystemDefaultEncoding_resultEqualsToUtf8Encoding()
throws IOException, NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
setCp1251Charset();
String cp1251Html = getHtml();
setUtf8Charset();
String utf8Html = getHtml();
Assert.assertEquals(
"Html written with UTF-8 as default encoding "
+ "differs from html written with cp1251 encoding",
cp1251Html, utf8Html);
}
@Test
public void write_cp1251SystemDefaultEncoding_writtenLabelHasCorrectValue()
throws IOException, NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
setCp1251Charset();
String cp1251Html = getHtml();
Assert.assertEquals(
"Non ascii string parsed from serialized HTML "
+ "differs from expected",
NON_ASCII_STRING, getHtmlLabelValue(cp1251Html));
}
@Test
public void write_utf8SystemDefaultEncoding_writtenLabelHasCorrectValue()
throws IOException, NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
setUtf8Charset();
String utf8 = getHtml();
Assert.assertEquals(
"Non ascii string parsed from serialized HTML "
+ "differs from expected",
NON_ASCII_STRING, getHtmlLabelValue(utf8));
}
private String getHtmlLabelValue(String html) {
Document document = Jsoup.parse(html);
Element label = document.select("vaadin-label").get(0);
StringBuilder builder = new StringBuilder();
for (Node child : label.childNodes()) {
if (child instanceof TextNode) {
builder.append(((TextNode) child).getWholeText());
}
}
return builder.toString().trim();
}
private String getHtml() throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
Component label = new Label(NON_ASCII_STRING);
Design.write(label, out);
return out.toString(UTF8_CHARSET.name());
}
private void setCp1251Charset()
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
setCharset(CP1251_CHARSET);
}
private void setUtf8Charset()
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
setCharset(UTF8_CHARSET);
}
private static void setCharset(Charset charset)
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
Field field = Charset.class.getDeclaredField("defaultCharset");
field.setAccessible(true);
field.set(null, charset);
}
}
|