Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4092684
TextContentTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
TextContentTest.php
View Options
<?php
declare
(
strict_types
=
1
);
namespace
MediaWiki\Tests\Content
;
use
MediaWiki\Content\Content
;
use
MediaWiki\Content\JavaScriptContent
;
use
MediaWiki\Content\TextContent
;
use
MediaWiki\Content\WikitextContent
;
use
MediaWiki\Context\RequestContext
;
use
MediaWiki\MainConfigNames
;
use
MediaWiki\Title\Title
;
use
MediaWiki\User\User
;
use
MediaWikiLangTestCase
;
/**
* Needs database to do link updates.
*
* @group ContentHandler
* @group Database
* @covers \MediaWiki\Content\TextContent
* @covers \MediaWiki\Content\TextContentHandler
*/
class
TextContentTest
extends
MediaWikiLangTestCase
{
/** @var RequestContext */
protected
$context
;
protected
function
setUp
():
void
{
parent
::
setUp
();
// Anon user
$user
=
new
User
();
$user
->
setName
(
'127.0.0.1'
);
$this
->
context
=
new
RequestContext
();
$this
->
context
->
setTitle
(
Title
::
makeTitle
(
NS_MAIN
,
'Test'
)
);
$this
->
context
->
setUser
(
$user
);
RequestContext
::
getMain
()->
setTitle
(
$this
->
context
->
getTitle
()
);
$this
->
overrideConfigValues
(
[
MainConfigNames
::
TextModelsToParse
=>
[
CONTENT_MODEL_WIKITEXT
,
CONTENT_MODEL_CSS
,
CONTENT_MODEL_JAVASCRIPT
,
],
MainConfigNames
::
CapitalLinks
=>
true
,
]
);
$this
->
clearHook
(
'ContentGetParserOutput'
);
}
/**
* NOTE: Overridden by subclass!
*
* @param string $text
* @return TextContent
*/
public
function
newContent
(
$text
)
{
return
new
TextContent
(
$text
);
}
public
static
function
dataGetRedirectTarget
()
{
return
[
[
'#REDIRECT [[Test]]'
,
null
,
],
];
}
/**
* @dataProvider dataGetRedirectTarget
*/
public
function
testGetRedirectTarget
(
$text
,
$expected
)
{
$content
=
$this
->
newContent
(
$text
);
$t
=
$content
->
getRedirectTarget
();
if
(
$expected
===
null
)
{
$this
->
assertNull
(
$t
,
"text should not have generated a redirect target: $text"
);
}
else
{
$this
->
assertEquals
(
$expected
,
$t
->
getPrefixedText
()
);
}
}
/**
* @dataProvider dataGetRedirectTarget
*/
public
function
testIsRedirect
(
$text
,
$expected
)
{
$content
=
$this
->
newContent
(
$text
);
$this
->
assertEquals
(
$expected
!==
null
,
$content
->
isRedirect
()
);
}
public
static
function
dataIsCountable
()
{
return
[
[
''
,
null
,
'any'
,
true
],
[
'Foo'
,
null
,
'any'
,
true
],
];
}
/**
* @dataProvider dataIsCountable
*/
public
function
testIsCountable
(
$text
,
$hasLinks
,
$mode
,
$expected
)
{
$this
->
overrideConfigValue
(
MainConfigNames
::
ArticleCountMethod
,
$mode
);
$content
=
$this
->
newContent
(
$text
);
$v
=
$content
->
isCountable
(
$hasLinks
);
$this
->
assertEquals
(
$expected
,
$v
,
'isCountable() returned unexpected value '
.
var_export
(
$v
,
true
)
.
' instead of '
.
var_export
(
$expected
,
true
)
.
" in mode `$mode` for text
\"
$text
\"
"
);
}
public
static
function
dataGetTextForSummary
()
{
return
[
[
"hello
\n
world."
,
16
,
'hello world.'
,
],
[
'hello world.'
,
8
,
'hello...'
,
],
[
'[[hello world]].'
,
8
,
'[[hel...'
,
],
];
}
/**
* @dataProvider dataGetTextForSummary
*/
public
function
testGetTextForSummary
(
$text
,
$maxlength
,
$expected
)
{
$content
=
$this
->
newContent
(
$text
);
$this
->
assertEquals
(
$expected
,
$content
->
getTextForSummary
(
$maxlength
)
);
}
/**
*/
public
function
testCopy
()
{
$content
=
$this
->
newContent
(
'hello world.'
);
$copy
=
$content
->
copy
();
$this
->
assertTrue
(
$content
->
equals
(
$copy
),
'copy must be equal to original'
);
$this
->
assertEquals
(
'hello world.'
,
$copy
->
getText
()
);
}
public
function
testGetTextMethods
()
{
$content
=
$this
->
newContent
(
'hello world.'
);
$this
->
assertEquals
(
12
,
$content
->
getSize
()
);
$this
->
assertEquals
(
'hello world.'
,
$content
->
getText
()
);
$this
->
assertEquals
(
'hello world.'
,
$content
->
getTextForSearchIndex
()
);
$this
->
assertEquals
(
'hello world.'
,
$content
->
getNativeData
()
);
$this
->
assertEquals
(
'hello world.'
,
$content
->
getWikitextForTransclusion
()
);
}
public
function
testGetModel
()
{
$content
=
$this
->
newContent
(
"hello world."
);
$this
->
assertEquals
(
CONTENT_MODEL_TEXT
,
$content
->
getModel
()
);
}
public
function
testGetContentHandler
()
{
$content
=
$this
->
newContent
(
"hello world."
);
$this
->
assertEquals
(
CONTENT_MODEL_TEXT
,
$content
->
getContentHandler
()->
getModelID
()
);
}
public
static
function
dataIsEmpty
()
{
return
[
[
''
,
true
],
[
' '
,
false
],
[
'0'
,
false
],
[
'hallo welt.'
,
false
],
];
}
/**
* @dataProvider dataIsEmpty
*/
public
function
testIsEmpty
(
$text
,
$empty
)
{
$content
=
$this
->
newContent
(
$text
);
$this
->
assertEquals
(
$empty
,
$content
->
isEmpty
()
);
}
public
static
function
dataEquals
()
{
return
[
[
new
TextContent
(
"hallo"
),
null
,
false
],
[
new
TextContent
(
"hallo"
),
new
TextContent
(
"hallo"
),
true
],
[
new
TextContent
(
"hallo"
),
new
JavaScriptContent
(
"hallo"
),
false
],
[
new
TextContent
(
"hallo"
),
new
WikitextContent
(
"hallo"
),
false
],
[
new
TextContent
(
"hallo"
),
new
TextContent
(
"HALLO"
),
false
],
];
}
/**
* @dataProvider dataEquals
*/
public
function
testEquals
(
Content
$a
,
?
Content
$b
=
null
,
$equal
=
false
)
{
$this
->
assertEquals
(
$equal
,
$a
->
equals
(
$b
)
);
}
public
static
function
provideConvert
()
{
return
[
[
// #0
'Hallo Welt'
,
CONTENT_MODEL_WIKITEXT
,
'lossless'
,
'Hallo Welt'
],
[
// #1
'Hallo Welt'
,
CONTENT_MODEL_WIKITEXT
,
'lossless'
,
'Hallo Welt'
],
[
// #1
'Hallo Welt'
,
CONTENT_MODEL_CSS
,
'lossless'
,
'Hallo Welt'
],
[
// #1
'Hallo Welt'
,
CONTENT_MODEL_JAVASCRIPT
,
'lossless'
,
'Hallo Welt'
],
];
}
/**
* @dataProvider provideConvert
*/
public
function
testConvert
(
$text
,
$model
,
$lossy
,
$expectedNative
)
{
$content
=
$this
->
newContent
(
$text
);
/** @var TextContent $converted */
$converted
=
$content
->
convert
(
$model
,
$lossy
);
if
(
$expectedNative
===
false
)
{
$this
->
assertFalse
(
$converted
,
"conversion to $model was expected to fail!"
);
}
else
{
$this
->
assertInstanceOf
(
Content
::
class
,
$converted
);
$this
->
assertEquals
(
$expectedNative
,
$converted
->
getText
()
);
}
}
/**
* @dataProvider provideNormalizeLineEndings
*/
public
function
testNormalizeLineEndings
(
$input
,
$expected
)
{
$this
->
assertEquals
(
$expected
,
TextContent
::
normalizeLineEndings
(
$input
)
);
}
public
static
function
provideNormalizeLineEndings
()
{
return
[
[
"Foo
\r\n
bar"
,
"Foo
\n
bar"
],
[
"Foo
\r
bar"
,
"Foo
\n
bar"
],
[
"Foobar
\n
"
,
"Foobar"
]
];
}
public
function
testSerialize
()
{
$cnt
=
$this
->
newContent
(
'testing text'
);
$this
->
assertSame
(
'testing text'
,
$cnt
->
serialize
()
);
}
}
class_alias
(
TextContentTest
::
class
,
'TextContentTest'
);
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Aug 18 2026, 12:22 (4 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
ca/c5/e3da44baf9e9a9b34e20fee27442
Default Alt Text
TextContentTest.php (6 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment