├── ruby ├── Gemfile ├── server.rb └── Gemfile.lock ├── tests ├── 5.html ├── 1.html ├── 2.html ├── 3.html ├── 6.html ├── 7.html ├── 8.html ├── 4.html ├── 10.html ├── 9.html ├── 13.html ├── 12.html ├── 11.html ├── 14.html ├── 5.json ├── 1.json ├── 4.json ├── 7.json ├── 2.json ├── 3.json ├── 6.json ├── 8.json ├── 10.json ├── 9.json ├── 11.json ├── 13.json ├── 14.json └── 12.json ├── README.md ├── LICENSE ├── results ├── results.php ├── output.json └── results.html └── run.php /ruby/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org/' 2 | 3 | gem 'sinatra' 4 | gem 'microformats' 5 | gem 'puma' 6 | -------------------------------------------------------------------------------- /tests/5.html: -------------------------------------------------------------------------------- 1 |
Hello World
Hello
World
Hello
3 | World
Hello
World
Hello World
4 |one 4 | two 5 | three6 |
One
4 |Two
5 |Three
6 |4 | one 5 | two 6 | threeAnd Hello Mars! 7 |
5 | one 6 | two 7 | three 8 |9 |
Hello World
4 |5 | one 6 | two 7 | three
And Hello Mars!
8 |Hello World
", 14 | "value": "Hello World" 15 | } 16 | ] 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/4.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "type": [ 5 | "h-entry" 6 | ], 7 | "properties": { 8 | "name": [ 9 | "Hello World" 10 | ], 11 | "content": [ 12 | { 13 | "html": "Hello World
", 14 | "value": "Hello World" 15 | } 16 | ] 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/7.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "type": [ 5 | "h-entry" 6 | ], 7 | "properties": { 8 | "name": [ 9 | "Hello\nWorld" 10 | ], 11 | "content": [ 12 | { 13 | "html": "HelloHello
World
Hello
\nWorld
Hello
World
", 14 | "value": "Hello\nWorld" 15 | } 16 | ] 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/8.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "type": [ 5 | "h-entry" 6 | ], 7 | "properties": { 8 | "name": [ 9 | "Hello\nWorld" 10 | ], 11 | "content": [ 12 | { 13 | "html": "one\ntwo\nthree", 14 | "value": "one\ntwo\nthree" 15 | } 16 | ] 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/9.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "type": [ 5 | "h-entry" 6 | ], 7 | "properties": { 8 | "name": [ 9 | "One\nTwo\nThree" 10 | ], 11 | "content": [ 12 | { 13 | "html": "
One
\nTwo
\nThree
", 14 | "value": "One\nTwo\nThree" 15 | } 16 | ] 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/11.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "type": [ 5 | "h-entry" 6 | ], 7 | "properties": { 8 | "name": [ 9 | "Hello World\n one\n two\n three" 10 | ], 11 | "content": [ 12 | { 13 | "html": "Hello World\none\n two\n three\n", 14 | "value": "Hello World\n one\n two\n three" 15 | } 16 | ] 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /ruby/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | json (2.1.0) 5 | microformats (4.0.7) 6 | json 7 | nokogiri 8 | mini_portile2 (2.3.0) 9 | mustermann (1.0.2) 10 | nokogiri (1.8.2) 11 | mini_portile2 (~> 2.3.0) 12 | puma (3.11.2) 13 | rack (2.0.4) 14 | rack-protection (2.0.1) 15 | rack 16 | sinatra (2.0.1) 17 | mustermann (~> 1.0) 18 | rack (~> 2.0) 19 | rack-protection (= 2.0.1) 20 | tilt (~> 2.0) 21 | tilt (2.0.8) 22 | 23 | PLATFORMS 24 | ruby 25 | 26 | DEPENDENCIES 27 | microformats 28 | puma 29 | sinatra 30 | 31 | BUNDLED WITH 32 | 1.16.0 33 | -------------------------------------------------------------------------------- /tests/13.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "type": [ 5 | "h-entry" 6 | ], 7 | "properties": { 8 | "name": [ 9 | "Hello World\n one\n two\n three\nAnd Hello Mars" 10 | ], 11 | "content": [ 12 | { 13 | "html": "Hello World
\n one\n two\n three\nAnd Hello Mars", 14 | "value": "Hello World\n one\n two\n three\nAnd Hello Mars" 15 | } 16 | ] 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /tests/14.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "type": [ 5 | "h-entry" 6 | ], 7 | "properties": { 8 | "name": [ 9 | "Hello World\n one\n two\n three\nAnd Hello Mars" 10 | ], 11 | "content": [ 12 | { 13 | "html": "
Hello World
\n\n one\n two\n three\n
And Hello Mars
",
14 | "value": "Hello World\n one\n two\n three\nAnd Hello Mars"
15 | }
16 | ]
17 | }
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/tests/12.json:
--------------------------------------------------------------------------------
1 | {
2 | "items": [
3 | {
4 | "type": [
5 | "h-entry"
6 | ],
7 | "properties": {
8 | "name": [
9 | "Correct name"
10 | ],
11 | "summary": [
12 | "Correct summary"
13 | ],
14 | "content": [
15 | {
16 | "html": "Correct name\n\nCorrect summary",
17 | "value": "Correct name Correct summary"
18 | }
19 | ]
20 | }
21 | }
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Microformats Blankspace Tests
2 | =============================
3 |
4 | Some test cases for blank space handling in Microformats.
5 |
6 | More details:
7 |
8 | * https://github.com/microformats/microformats2-parsing/issues/15
9 | * https://github.com/microformats/microformats2-parsing/issues/48
10 |
11 |
12 | Test Results
13 | ------------
14 |
15 | https://pin13.net/mf2/blankspace.html
16 |
17 |
18 | Compiling Results
19 | -----------------
20 |
21 | Run the parser against all the tests by running:
22 |
23 | ```
24 | php run.php
25 | ```
26 |
27 | That will send the test HTML to each parser, and store the results in `results/output.json`. It will also compile the results into an HTML file `results/results.html` which you can view in a browser.
28 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | This is free and unencumbered software released into the public domain.
2 |
3 | Anyone is free to copy, modify, publish, use, compile, sell, or
4 | distribute this software, either in source code form or as a compiled
5 | binary, for any purpose, commercial or non-commercial, and by any
6 | means.
7 |
8 | In jurisdictions that recognize copyright laws, the author or authors
9 | of this software dedicate any and all copyright interest in the
10 | software to the public domain. We make this dedication for the benefit
11 | of the public at large and to the detriment of our heirs and
12 | successors. We intend this dedication to be an overt act of
13 | relinquishment in perpetuity of all present and future rights to this
14 | software under copyright law.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
24 | For more information, please refer to Hello World Hello World Hello World Hello World Hello World Hello World Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World One Two Three One Two Three One Two Three One Two Three One Two Three One Two Three
to
for comparing equality
13 | return str_replace(['
','
'], '
', $input);
14 | }
15 |
16 | ob_start();
17 | ?>
18 |
53 |
54 |
55 |
85 | ]*>
56 |
66 |
67 |
68 | $test): ?>
69 | $prop): ?>
70 | Test
57 | HTML
58 | Property
59 | Expected
60 | PHP
61 | Ruby
62 | Python
63 | Go
64 | Node
65 |
71 |
72 |
81 |
82 |
83 |
84 | = $test['test'] ?>
73 |
74 |
75 | = htmlspecialchars(file_get_contents('../tests/'.$test['test'].'.html')) ?>= $prop ?>
76 |
77 |
78 | = explicit_blankspace($test['expected'][$prop]) ?>
79 |
80 | = explicit_blankspace($test[$parser][$prop]) ?>
(.+)~ms', $response, $match)) {
14 | $data = json_decode(htmlspecialchars_decode($match[1]), true);
15 | return $data['items'][0]['properties'];
16 | }
17 | }
18 | return false;
19 | }
20 |
21 | function get($url) {
22 | $ch = curl_init($url);
23 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
24 | curl_setopt($ch, CURLOPT_REFERER, 'https://github.com/aaronpk/microformats-blankspace-tests');
25 | $response = curl_exec($ch);
26 | $data = json_decode($response, true);
27 | if($data && isset($data['items'][0]['properties'])) {
28 | return $data['items'][0]['properties'];
29 | }
30 | return false;
31 | }
32 |
33 | function get_parsed_result($parser, $html, $num=false) {
34 | switch($parser) {
35 | case 'python':
36 | $url = 'https://python.microformats.io/';
37 | $param = 'doc';
38 | // $url = 'https://kartikprabhu.com/connection/mfparser';
39 | // $param = 'content';
40 | break;
41 | case 'ruby':
42 | $url = 'http://localhost:4567/parse';
43 | $param = 'html';
44 | break;
45 | case 'php':
46 | $url = 'https://mf2.io.dev/mf2/';
47 | $param = 'html';
48 | break;
49 | case 'go':
50 | $url = 'https://go.microformats.io/';
51 | $param = 'html';
52 | break;
53 | case 'node':
54 | $url = 'https://sturdy-backbone.glitch.me/mf2/?url=https://raw.githubusercontent.com/aaronpk/microformats-blankspace-tests/main/tests/%.html';
55 | break;
56 | }
57 |
58 | echo "\tRunning $parser\n";
59 | if($num) {
60 | $response = get(str_replace('%', $num, $url));
61 | } else {
62 | $response = post($url, [$param => $html, 'format'=>'json']);
63 | }
64 |
65 | return [
66 | 'name' => $response['name'][0],
67 | 'content.value' => $response['content'][0]['value'],
68 | 'content.html' => $response['content'][0]['html'],
69 | ];
70 | }
71 |
72 | chdir(__DIR__);
73 | $tests = glob('tests/*.html');
74 |
75 | usort($tests, function($a, $b) {
76 | preg_match('/(\d+)/', $a, $ma);
77 | preg_match('/(\d+)/', $b, $mb);
78 | return (int)$ma[1] > (int)$mb[1];
79 | });
80 |
81 | $data = [];
82 |
83 | foreach($tests as $htmlfile) {
84 | $num = str_replace('.html', '', basename($htmlfile));
85 | $html = file_get_contents($htmlfile);
86 | $jsonfile = str_replace('.html', '.json', $htmlfile);
87 | $json = json_decode(file_get_contents($jsonfile), true);
88 | $expected = [
89 | 'name' => $json['items'][0]['properties']['name'][0],
90 | 'content.value' => $json['items'][0]['properties']['content'][0]['value'],
91 | 'content.html' => $json['items'][0]['properties']['content'][0]['html'],
92 | ];
93 |
94 | // $python = get_parsed_result('python', $html);
95 | // print_r($python);
96 | // die();
97 |
98 | echo "Testing $htmlfile\n";
99 | $php = get_parsed_result('php', $html);
100 | $ruby = get_parsed_result('ruby', $html);
101 | $python = get_parsed_result('python', $html);
102 | $go = get_parsed_result('go', $html);
103 | $node = get_parsed_result('node', $html, $num);
104 |
105 | $data[] = [
106 | 'test' => $num,
107 | 'expected' => $expected,
108 | 'php' => $php,
109 | 'ruby' => $ruby,
110 | 'python' => $python,
111 | 'go' => $go,
112 | 'node' => $node,
113 | ];
114 | }
115 |
116 | file_put_contents('results/output.json', json_encode($data, JSON_PRETTY_PRINT+JSON_UNESCAPED_SLASHES));
117 |
118 | require('results/results.php');
119 |
120 |
--------------------------------------------------------------------------------
/results/output.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "test": "1",
4 | "expected": {
5 | "name": "Hello World",
6 | "content.value": "Hello World",
7 | "content.html": "
World
World
World
World
World
World
\nWorld
\nWorld
\nWorld
\nWorld
\nWorld
\nWorld
\n World"
206 | },
207 | "php": {
208 | "name": "Hello\nWorld",
209 | "content.value": "Hello\nWorld",
210 | "content.html": "Hello
\n World"
211 | },
212 | "ruby": {
213 | "name": "Hello\n World",
214 | "content.value": "Hello\n World",
215 | "content.html": "Hello
\n World"
216 | },
217 | "python": {
218 | "name": "Hello\n World",
219 | "content.value": "Hello\n World",
220 | "content.html": "Hello
\n World"
221 | },
222 | "go": {
223 | "name": "Hello\n World",
224 | "content.value": "Hello\n World",
225 | "content.html": "Hello
\n World"
226 | },
227 | "node": {
228 | "name": "Hello\n World",
229 | "content.value": "Hello\n World",
230 | "content.html": "Hello
\n World"
231 | }
232 | },
233 | {
234 | "test": "8",
235 | "expected": {
236 | "name": "Hello\nWorld",
237 | "content.value": "Hello\nWorld",
238 | "content.html": "
Hello
World
"
239 | },
240 | "php": {
241 | "name": "Hello\nWorld",
242 | "content.value": "Hello\nWorld",
243 | "content.html": "
Hello
World
"
244 | },
245 | "ruby": {
246 | "name": "HelloWorld",
247 | "content.value": "HelloWorld",
248 | "content.html": "
Hello
World
"
249 | },
250 | "python": {
251 | "name": "HelloWorld",
252 | "content.value": "HelloWorld",
253 | "content.html": "
Hello
World
"
254 | },
255 | "go": {
256 | "name": "HelloWorld",
257 | "content.value": "HelloWorld",
258 | "content.html": "
Hello
World
"
259 | },
260 | "node": {
261 | "name": "HelloWorld",
262 | "content.value": "HelloWorld",
263 | "content.html": "
Hello
World
"
264 | }
265 | },
266 | {
267 | "test": "9",
268 | "expected": {
269 | "name": "One\nTwo\nThree",
270 | "content.value": "One\nTwo\nThree",
271 | "content.html": "one\ntwo\nthree
"
305 | },
306 | "php": {
307 | "name": "one two three",
308 | "content.value": "one two three",
309 | "content.html": "one\ntwo\nthree
"
310 | },
311 | "ruby": {
312 | "name": "one\ntwo\nthree",
313 | "content.value": "one\ntwo\nthree",
314 | "content.html": "\n one\ntwo\nthree
\n"
315 | },
316 | "python": {
317 | "name": "one\ntwo\nthree",
318 | "content.value": "\n one\ntwo\nthree\n ",
319 | "content.html": "\n one\ntwo\nthree
\n "
320 | },
321 | "go": {
322 | "name": "one\ntwo\nthree",
323 | "content.value": "\n one\ntwo\nthree\n ",
324 | "content.html": "one\ntwo\nthree
"
325 | },
326 | "node": {
327 | "name": "one\ntwo\nthree",
328 | "content.value": "one\ntwo\nthree",
329 | "content.html": "\n one\ntwo\nthree
\n "
330 | }
331 | },
332 | {
333 | "test": "11",
334 | "expected": {
335 | "name": "Hello World\n one\n two\n three",
336 | "content.value": "Hello World\n one\n two\n three",
337 | "content.html": "Hello World\n \n one\n two\n three\n
"
338 | },
339 | "php": {
340 | "name": "Hello World one two three",
341 | "content.value": "Hello World one two three",
342 | "content.html": "Hello World\n \n one\n two\n three\n
"
343 | },
344 | "ruby": {
345 | "name": "Hello World\n \n one\n two\n three",
346 | "content.value": "Hello World\n \n one\n two\n three",
347 | "content.html": "\n Hello World\n \n one\n two\n three\n
\n"
348 | },
349 | "python": {
350 | "name": "Hello World\n one\n two\n three",
351 | "content.value": "\n Hello World\n one\n two\n three\n \n ",
352 | "content.html": "\n Hello World\n one\n two\n three\n
\n "
353 | },
354 | "go": {
355 | "name": "Hello World\n one\n two\n three",
356 | "content.value": "\n Hello World\n one\n two\n three\n \n ",
357 | "content.html": "Hello World\n one\n two\n three\n
"
358 | },
359 | "node": {
360 | "name": "Hello World\n \n one\n two\n three",
361 | "content.value": "Hello World\n \n one\n two\n three",
362 | "content.html": "\n Hello World\n \n one\n two\n three\n
\n "
363 | }
364 | },
365 | {
366 | "test": "12",
367 | "expected": {
368 | "name": "Correct name",
369 | "content.value": "Correct name Correct summary",
370 | "content.html": "Correct name\n\nCorrect summary"
371 | },
372 | "php": {
373 | "name": "Correct name",
374 | "content.value": "Correct name Correct summary",
375 | "content.html": "Correct name\n\nCorrect summary"
376 | },
377 | "ruby": {
378 | "name": "Correct name",
379 | "content.value": "Correct name\n\nCorrect summary",
380 | "content.html": "\nCorrect name\n\nCorrect summary\n"
381 | },
382 | "python": {
383 | "name": "Correct name",
384 | "content.value": "\nCorrect name\n\nCorrect summary\n",
385 | "content.html": "\nCorrect name\n\nCorrect summary\n"
386 | },
387 | "go": {
388 | "name": "Correct name",
389 | "content.value": "\nCorrect name\n\nCorrect summary\n",
390 | "content.html": "Correct name\n\nCorrect summary"
391 | },
392 | "node": {
393 | "name": "Correct name",
394 | "content.value": "Correct name\n\nCorrect summary",
395 | "content.html": "\nCorrect name\n\nCorrect summary\n"
396 | }
397 | }
398 | ]
--------------------------------------------------------------------------------
/results/results.html:
--------------------------------------------------------------------------------
1 |
36 |
37 |
38 |
461 |
--------------------------------------------------------------------------------
39 |
49 |
50 |
51 | Test
40 | HTML
41 | Property
42 | Expected
43 | PHP
44 | Ruby
45 | Python
46 | Go
47 | Node
48 |
52 |
65 | 1
53 |
57 | <div class="h-entry">
54 | <div class="e-content p-name"><p>Hello World</p></div>
55 | </div>
56 |
name
58 |
59 | Hello World
60 | Hello World
61 | Hello World
62 | Hello World
63 | Hello World
64 | Hello World
66 |
74 | content.value
67 |
68 | Hello World
69 | Hello World
70 | Hello World
71 | Hello World
72 | Hello World
73 | Hello World
75 |
83 | content.html
76 |
77 | <p>Hello World</p>
78 | <p>Hello World</p>
79 | <p>Hello World</p>
80 | <p>Hello World</p>
81 | <p>Hello World</p>
82 | <p>Hello World</p>
84 |
97 | 2
85 |
89 | <div class="h-entry">
86 | <div class="e-content p-name"><p>Hello<br>World</p></div>
87 | </div>
88 |
name
90 |
91 | Hello\nWorld
92 | Hello\nWorld
93 | HelloWorld
94 | HelloWorld
95 | HelloWorld
96 | HelloWorld
98 |
106 | content.value
99 |
100 | Hello\nWorld
101 | Hello\nWorld
102 | HelloWorld
103 | HelloWorld
104 | HelloWorld
105 | HelloWorld
107 |
115 | content.html
108 |
109 | <p>Hello<br>World</p>
110 | <p>Hello<br>World</p>
111 | <p>Hello<br>World</p>
112 | <p>Hello<br/>World</p>
113 | <p>Hello<br/>World</p>
114 | <p>Hello<br />World</p>
116 |
130 | 3
117 |
122 | <div class="h-entry">
118 | <div class="e-content p-name"><p>Hello<br>
119 | World</p></div>
120 | </div>
121 |
name
123 |
124 | Hello\nWorld
125 | Hello\nWorld
126 | Hello\nWorld
127 | Hello\nWorld
128 | Hello\nWorld
129 | Hello\nWorld
131 |
139 | content.value
132 |
133 | Hello\nWorld
134 | Hello\nWorld
135 | Hello\nWorld
136 | Hello\nWorld
137 | Hello\nWorld
138 | Hello\nWorld
140 |
148 | content.html
141 |
142 | <p>Hello<br>\nWorld</p>
143 | <p>Hello<br>\nWorld</p>
144 | <p>Hello<br>\nWorld</p>
145 | <p>Hello<br/>\nWorld</p>
146 | <p>Hello<br/>\nWorld</p>
147 | <p>Hello<br />\nWorld</p>
149 |
164 | 4
150 |
156 | <div class="h-entry">
151 | <div class="e-content p-name">
152 | <p>Hello World</p>
153 | </div>
154 | </div>
155 |
name
157 |
158 | Hello World
159 | Hello World
160 | Hello World
161 | Hello World
162 | Hello World
163 | Hello World
165 |
173 | content.value
166 |
167 | Hello World
168 | Hello World
169 | Hello World
170 | \n Hello World\n
171 | \n Hello World\n
172 | Hello World
174 |
182 | content.html
175 |
176 | <p>Hello World</p>
177 | <p>Hello World</p>
178 | \n <p>Hello World</p>\n
179 | \n <p>Hello World</p>\n
180 | <p>Hello World</p>
181 | \n <p>Hello World</p>\n
183 |
197 | 5
184 |
189 | <div class="h-entry">
185 | <div class="e-content p-name">Hello
186 | World</div>
187 | </div>
188 |
name
190 |
191 | Hello World
192 | Hello World
193 | Hello\nWorld
194 | Hello\nWorld
195 | Hello\nWorld
196 | Hello\nWorld
198 |
206 | content.value
199 |
200 | Hello World
201 | Hello World
202 | Hello\nWorld
203 | Hello\nWorld
204 | Hello\nWorld
205 | Hello\nWorld
207 |
215 | content.html
208 |
209 | Hello\nWorld
210 | Hello\nWorld
211 | Hello\nWorld
212 | Hello\nWorld
213 | Hello\nWorld
214 | Hello\nWorld
216 |
229 | 6
217 |
221 | <div class="h-entry">
218 | <div class="e-content p-name"><p>Hello</p><p>World</p></div>
219 | </div>
220 |
name
222 |
223 | Hello\nWorld
224 | Hello\nWorld
225 | Hello\nWorld
226 | HelloWorld
227 | HelloWorld
228 | HelloWorld
230 |
238 | content.value
231 |
232 | Hello\nWorld
233 | Hello\nWorld
234 | Hello\nWorld
235 | HelloWorld
236 | HelloWorld
237 | HelloWorld
239 |
247 | content.html
240 |
241 | <p>Hello</p><p>World</p>
242 | <p>Hello</p><p>World</p>
243 | <p>Hello</p>\n<p>World</p>
244 | <p>Hello</p><p>World</p>
245 | <p>Hello</p><p>World</p>
246 | <p>Hello</p><p>World</p>
248 |
262 | 7
249 |
254 | <div class="h-entry">
250 | <div class="e-content p-name">Hello<br>
251 | World</div>
252 | </div>
253 |
name
255 |
256 | Hello\nWorld
257 | Hello\nWorld
258 | Hello\n World
259 | Hello\n World
260 | Hello\n World
261 | Hello\n World
263 |
271 | content.value
264 |
265 | Hello\nWorld
266 | Hello\nWorld
267 | Hello\n World
268 | Hello\n World
269 | Hello\n World
270 | Hello\n World
272 |
280 | content.html
273 |
274 | Hello<br>\n World
275 | Hello<br>\n World
276 | Hello<br>\n World
277 | Hello<br/>\n World
278 | Hello<br/>\n World
279 | Hello<br />\n World
281 |
294 | 8
282 |
286 | <div class="h-entry">
283 | <div class="e-content p-name"><br>Hello<br>World<br></div>
284 | </div>
285 |
name
287 |
288 | Hello\nWorld
289 | Hello\nWorld
290 | HelloWorld
291 | HelloWorld
292 | HelloWorld
293 | HelloWorld
295 |
303 | content.value
296 |
297 | Hello\nWorld
298 | Hello\nWorld
299 | HelloWorld
300 | HelloWorld
301 | HelloWorld
302 | HelloWorld
304 |
312 | content.html
305 |
306 | <br>Hello<br>World<br>
307 | <br>Hello<br>World<br>
308 | <br>Hello<br>World<br>
309 | <br/>Hello<br/>World<br/>
310 | <br/>Hello<br/>World<br/>
311 | <br />Hello<br />World<br />
313 |
330 | 9
314 |
322 | <div class="h-entry">
315 | <div class="e-content p-name">
316 | <p>One</p>
317 | <p>Two</p>
318 | <p>Three</p>
319 | </div>
320 | </div>
321 |
name
323 |
324 | One\nTwo\nThree
325 | One\nTwo\nThree
326 | One\n Two\n Three
327 | One\n Two\n Three
328 | One\n Two\n Three
329 | One\n Two\n Three
331 |
339 | content.value
332 |
333 | One\nTwo\nThree
334 | One\nTwo\nThree
335 | One\n Two\n Three
336 | \n One\n Two\n Three\n
337 | \n One\n Two\n Three\n
338 | One\n Two\n Three
340 |
348 | content.html
341 |
342 | <p>One</p>\n <p>Two</p>\n <p>Three</p>
343 | <p>One</p>\n <p>Two</p>\n <p>Three</p>
344 | \n <p>One</p>\n <p>Two</p>\n <p>Three</p>\n
345 | \n <p>One</p>\n <p>Two</p>\n <p>Three</p>\n
346 | <p>One</p>\n <p>Two</p>\n <p>Three</p>
347 | \n <p>One</p>\n <p>Two</p>\n <p>Three</p>\n
349 |
366 | 10
350 |
358 | <div class="h-entry">
351 | <div class="e-content p-name">
352 | <pre>one
353 | two
354 | three</pre>
355 | </div>
356 | </div>
357 |
name
359 |
360 | one\ntwo\nthree
361 | one two three
362 | one\ntwo\nthree
363 | one\ntwo\nthree
364 | one\ntwo\nthree
365 | one\ntwo\nthree
367 |
375 | content.value
368 |
369 | one\ntwo\nthree
370 | one two three
371 | one\ntwo\nthree
372 | \n one\ntwo\nthree\n
373 | \n one\ntwo\nthree\n
374 | one\ntwo\nthree
376 |
384 | content.html
377 |
378 | <pre>one\ntwo\nthree</pre>
379 | <pre>one\ntwo\nthree</pre>
380 | \n <pre>one\ntwo\nthree</pre>\n
381 | \n <pre>one\ntwo\nthree</pre>\n
382 | <pre>one\ntwo\nthree</pre>
383 | \n <pre>one\ntwo\nthree</pre>\n
385 |
405 | 11
386 |
397 | <div class="h-entry">
387 | <div class="e-content p-name">
388 | Hello World
389 | <pre>
390 | one
391 | two
392 | three
393 | </pre>
394 | </div>
395 | </div>
396 |
name
398 |
399 | Hello World\n one\n two\n three
400 | Hello World one two three
401 | Hello World\n \n one\n two\n three
402 | Hello World\n one\n two\n three
403 | Hello World\n one\n two\n three
404 | Hello World\n \n one\n two\n three
406 |
414 | content.value
407 |
408 | Hello World\n one\n two\n three
409 | Hello World one two three
410 | Hello World\n \n one\n two\n three
411 | \n Hello World\n one\n two\n three\n \n
412 | \n Hello World\n one\n two\n three\n \n
413 | Hello World\n \n one\n two\n three
415 |
423 | content.html
416 |
417 | Hello World\n <pre>\n one\n two\n three\n </pre>
418 | Hello World\n <pre>\n one\n two\n three\n </pre>
419 | \n Hello World\n <pre>\n one\n two\n three\n </pre>\n
420 | \n Hello World\n <pre> one\n two\n three\n </pre>\n
421 | Hello World\n <pre> one\n two\n three\n </pre>
422 | \n Hello World\n <pre>\n one\n two\n three\n </pre>\n
424 |
441 | 12
425 |
433 | <body class="h-entry">
426 | <div class="e-content">
427 | <span class="p-name">Correct name</span>
428 |
429 | <span class="p-summary">Correct summary</span>
430 | </div>
431 | </body>
432 |
name
434 |
435 | Correct name
436 | Correct name
437 | Correct name
438 | Correct name
439 | Correct name
440 | Correct name
442 |
450 | content.value
443 |
444 | Correct name Correct summary
445 | Correct name Correct summary
446 | Correct name\n\nCorrect summary
447 | \nCorrect name\n\nCorrect summary\n
448 | \nCorrect name\n\nCorrect summary\n
449 | Correct name\n\nCorrect summary
451 |
459 |
460 | content.html
452 |
453 | <span class="p-name">Correct name</span>\n\n<span class="p-summary">Correct summary</span>
454 | <span class="p-name">Correct name</span>\n\n<span class="p-summary">Correct summary</span>
455 | \n<span class="p-name">Correct name</span>\n\n<span class="p-summary">Correct summary</span>\n
456 | \n<span class="p-name">Correct name</span>\n\n<span class="p-summary">Correct summary</span>\n
457 | <span class="p-name">Correct name</span>\n\n<span class="p-summary">Correct summary</span>
458 | \n<span class="p-name">Correct name</span>\n\n<span class="p-summary">Correct summary</span>\n