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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
|
<?php
/**
* Tests of the parsing methods within mf2\Parser
*/
namespace Mf2\Parser\Test;
use Mf2;
use Mf2\Parser;
use PHPUnit_Framework_TestCase;
/**
* @todo some of these can be made into single tests with dataProviders
*/
class ParseImpliedTest extends PHPUnit_Framework_TestCase {
public function setUp() {
date_default_timezone_set('Europe/London');
}
public function testParsesImpliedPNameFromNodeValue() {
$input = '<span class="h-card">The Name</span>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('name', $output['items'][0]['properties']);
$this->assertEquals('The Name', $output['items'][0]['properties']['name'][0]);
}
public function testParsesImpliedPNameFromImgAlt() {
$input = '<img class="h-card" src="" alt="The Name" />';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('name', $output['items'][0]['properties']);
$this->assertEquals('The Name', $output['items'][0]['properties']['name'][0]);
}
public function testParsesImpliedPNameFromNestedImgAlt() {
$input = '<div class="h-card"><img src="" alt="The Name" /></div>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('name', $output['items'][0]['properties']);
$this->assertEquals('The Name', $output['items'][0]['properties']['name'][0]);
}
public function testParsesImpliedPNameFromDoublyNestedImgAlt() {
$input = '<div class="h-card"><span><img src="" alt="The Name" /></span></div>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('name', $output['items'][0]['properties']);
$this->assertEquals('The Name', $output['items'][0]['properties']['name'][0]);
}
public function testParsesImpliedUPhotoFromImgSrc() {
$input = '<img class="h-card" src="http://example.com/img.png" alt="" />';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('photo', $output['items'][0]['properties']);
$this->assertEquals('http://example.com/img.png', $output['items'][0]['properties']['photo'][0]);
}
public function testParsesImpliedUPhotoFromNestedImgSrc() {
$input = '<div class="h-card"><img src="http://example.com/img.png" alt="" /></div>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('photo', $output['items'][0]['properties']);
$this->assertEquals('http://example.com/img.png', $output['items'][0]['properties']['photo'][0]);
}
public function testParsesImpliedUPhotoFromDoublyNestedImgSrc() {
$input = '<div class="h-card"><span><img src="http://example.com/img.png" alt="" /></span></div>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('photo', $output['items'][0]['properties']);
$this->assertEquals('http://example.com/img.png', $output['items'][0]['properties']['photo'][0]);
}
public function testIgnoresImgIfNotOnlyChild() {
$input = '<div class="h-card"><img src="http://example.com/img.png" /> <p>Moar text</p></div>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayNotHasKey('photo', $output['items'][0]['properties']);
}
public function testIgnoresDoublyNestedImgIfNotOnlyDoublyNestedChild() {
$input = '<div class="h-card"><span><img src="http://example.com/img.png" /> <p>Moar text</p></span></div>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayNotHasKey('photo', $output['items'][0]['properties']);
}
public function testParsesImpliedUUrlFromAHref() {
$input = '<a class="h-card" href="http://example.com/">Some Name</a>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('url', $output['items'][0]['properties']);
$this->assertEquals('http://example.com/', $output['items'][0]['properties']['url'][0]);
}
public function testParsesImpliedUUrlFromNestedAHref() {
$input = '<span class="h-card"><a href="http://example.com/">Some Name</a></span>';
$parser = new Parser($input);
$output = $parser->parse();
$this->assertArrayHasKey('url', $output['items'][0]['properties']);
$this->assertEquals('http://example.com/', $output['items'][0]['properties']['url'][0]);
}
public function testMultipleImpliedHCards() {
$input = '<span class="h-card">Frances Berriman</span>
<a class="h-card" href="http://benward.me">Ben Ward</a>
<img class="h-card" alt="Sally Ride"
src="http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg"/>
<a class="h-card" href="http://tantek.com">
<img alt="Tantek Çelik" src="http://ttk.me/logo.jpg"/>
</a>';
$expected = '{
"rels": {},
"items": [{
"type": ["h-card"],
"properties": {
"name": ["Frances Berriman"]
}
},
{
"type": ["h-card"],
"properties": {
"name": ["Ben Ward"],
"url": ["http://benward.me"]
}
},
{
"type": ["h-card"],
"properties": {
"name": ["Sally Ride"],
"photo": ["http://upload.wikimedia.org/wikipedia/commons/a/a4/Ride-s.jpg"]
}
},
{
"type": ["h-card"],
"properties": {
"name": ["Tantek Çelik"],
"url": ["http://tantek.com"],
"photo": ["http://ttk.me/logo.jpg"]
}
}]
}';
$parser = new Parser($input, '', true);
$output = $parser->parse();
$this->assertJsonStringEqualsJsonString(json_encode($output), $expected);
}
/** as per https://github.com/indieweb/php-mf2/issues/37 */
public function testParsesImpliedNameConsistentWithPName() {
$inner = "Name \nand more";
$test = '<span class="h-card"> ' . $inner .' </span><span class="h-card"><span class="p-name"> ' . $inner . ' </span></span>';
$result = Mf2\parse($test);
$this->assertEquals($inner, $result['items'][0]['properties']['name'][0]);
$this->assertEquals($inner, $result['items'][1]['properties']['name'][0]);
}
/** @see https://github.com/indieweb/php-mf2/issues/6 */
public function testParsesImpliedNameFromAbbrTitle() {
$input = '<abbr class="h-card" title="Barnaby Walters">BJW</abbr>';
$result = Mf2\parse($input);
$this->assertEquals('Barnaby Walters', $result['items'][0]['properties']['name'][0]);
}
}
|