123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <?php
- /**
- * @author Addshore
- * @covers JsonContent
- */
- class JsonContentTest extends MediaWikiLangTestCase {
- public static function provideValidConstruction() {
- return [
- [ 'foo', false, null ],
- [ '[]', true, [] ],
- [ '{}', true, (object)[] ],
- [ '""', true, '' ],
- [ '"0"', true, '0' ],
- [ '"bar"', true, 'bar' ],
- [ '0', true, '0' ],
- [ '{ "0": "bar" }', true, (object)[ 'bar' ] ],
- ];
- }
- /**
- * @dataProvider provideValidConstruction
- */
- public function testIsValid( $text, $isValid, $expected ) {
- $obj = new JsonContent( $text, CONTENT_MODEL_JSON );
- $this->assertEquals( $isValid, $obj->isValid() );
- $this->assertEquals( $expected, $obj->getData()->getValue() );
- }
- public static function provideDataToEncode() {
- return [
- [
- // Round-trip empty array
- '[]',
- '[]',
- ],
- [
- // Round-trip empty object
- '{}',
- '{}',
- ],
- [
- // Round-trip empty array/object (nested)
- '{ "foo": {}, "bar": [] }',
- "{\n \"foo\": {},\n \"bar\": []\n}",
- ],
- [
- '{ "foo": "bar" }',
- "{\n \"foo\": \"bar\"\n}",
- ],
- [
- '{ "foo": 1000 }',
- "{\n \"foo\": 1000\n}",
- ],
- [
- '{ "foo": 1000, "0": "bar" }',
- "{\n \"foo\": 1000,\n \"0\": \"bar\"\n}",
- ],
- ];
- }
- /**
- * @dataProvider provideDataToEncode
- */
- public function testBeautifyJson( $input, $beautified ) {
- $obj = new JsonContent( $input );
- $this->assertEquals( $beautified, $obj->beautifyJSON() );
- }
- /**
- * @dataProvider provideDataToEncode
- */
- public function testPreSaveTransform( $input, $transformed ) {
- $obj = new JsonContent( $input );
- $newObj = $obj->preSaveTransform(
- $this->getMockTitle(),
- $this->getMockUser(),
- $this->getMockParserOptions()
- );
- $this->assertTrue( $newObj->equals( new JsonContent( $transformed ) ) );
- }
- private function getMockTitle() {
- return $this->getMockBuilder( Title::class )
- ->disableOriginalConstructor()
- ->getMock();
- }
- private function getMockUser() {
- return $this->getMockBuilder( User::class )
- ->disableOriginalConstructor()
- ->getMock();
- }
- private function getMockParserOptions() {
- return $this->getMockBuilder( ParserOptions::class )
- ->disableOriginalConstructor()
- ->getMock();
- }
- public static function provideDataAndParserText() {
- return [
- [
- [],
- '<table class="mw-json"><tbody><tr><td>' .
- '<table class="mw-json"><tbody><tr><td class="mw-json-empty">Empty array</td></tr>'
- . '</tbody></table></td></tr></tbody></table>'
- ],
- [
- (object)[],
- '<table class="mw-json"><tbody><tr><td class="mw-json-empty">Empty object</td></tr>' .
- '</tbody></table>'
- ],
- [
- (object)[ 'foo' ],
- '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"foo"</td></tr>' .
- '</tbody></table>'
- ],
- [
- (object)[ 'foo', 'bar' ],
- '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"foo"</td></tr>' .
- '<tr><th>1</th><td class="value">"bar"</td></tr></tbody></table>'
- ],
- [
- (object)[ 'baz' => 'foo', 'bar' ],
- '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">"foo"</td></tr>' .
- '<tr><th>0</th><td class="value">"bar"</td></tr></tbody></table>'
- ],
- [
- (object)[ 'baz' => 1000, 'bar' ],
- '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">1000</td></tr>' .
- '<tr><th>0</th><td class="value">"bar"</td></tr></tbody></table>'
- ],
- [
- (object)[ '<script>alert("evil!")</script>' ],
- '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"' .
- '<script>alert("evil!")</script>"' .
- '</td></tr></tbody></table>',
- ],
- ];
- }
- /**
- * @dataProvider provideDataAndParserText
- */
- public function testFillParserOutput( $data, $expected ) {
- $obj = new JsonContent( FormatJson::encode( $data ) );
- $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
- $this->assertInstanceOf( ParserOutput::class, $parserOutput );
- $this->assertEquals( $expected, $parserOutput->getText() );
- }
- }
|