[ (bug 6299 sanity check)
!! wikitext
{{REVISIONID}}
!! html
]1337
!! end
!! test
Ref with content followed by blank ref
!! wikitext
[content]
!! html
[1]
[1]
!! end
!! test
Blank ref followed by ref with content
!! wikitext
[content]
!! html
[1]
[1]
!! end
!! test
Regression: non-blank ref "0" followed by ref with content
!! wikitext
[0]
[content]
!! html
[1]
[1]
- ↑ 1.0 1.1 0 Cite error: Invalid
<ref>
tag; name "blank" defined multiple times with different content
!! end
!! test
Regression sanity check: non-blank ref "1" followed by ref with content
!! wikitext
[1]
[content]
!! html
[1]
[1]
- ↑ 1.0 1.1 1 Cite error: Invalid
<ref>
tag; name "blank" defined multiple times with different content
!! end
!! test
Ref names containing a number
!! wikitext
[One]
[Two]
[Three]
!! html
[1]
[2]
[3]
!! end
!! test
T184912: Consistent normalization of consecutive underscores
!! wikitext
[example]
!! html
[1]
!! end
!! test
Erroneous refs
!! wikitext
[Zero]
[Also zero, but differently! (Normal ref)]
!! html
Cite error: Invalid <ref>
tag; name cannot be a simple integer. Use a descriptive title
[1]
Cite error: The opening <ref>
tag is malformed or has a bad name
[2]
[3]
Cite error: Invalid parameter in <references>
tag
- ↑ Also zero, but differently! (Normal ref)
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs named bar
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs named blankwithnoreference
!! end
!! test
Can't have name="…" and follow="…" the same time
!! wikitext
[theValue]
!! html
Cite error: Invalid <ref>
tag; invalid names, e.g. too many
!! end
!! test
Conflicting name="…" and follow="…" still invalid when a third parameter is present
!! wikitext
[theValue]
!! html
Cite error: Invalid <ref>
tag; invalid names, e.g. too many
!! end
!! test
It's not possible to follow="…" a [ defined in the section
!! wikitext
][theFollows]
[theValue]
!! html
Cite error: <ref>
tag with name "theName" defined in <references>
is not used in prior text.
!! end
!! test
A follow="…" before its parent is not merged
!! wikitext
[theFollows]
[theValue]
!! html
[1]
!! end
# This is a nasty edge case which was dropping the ref entirely.
!! test
"follow" after a named ref but before its parent
!! wikitext
[First]
[Second]
[Third]
!! html/php
[1]
[2]
!! end
!! test
"follow" after an anonymous ref but before its parent
!! wikitext
[First]
[Second]
[Third]
!! html/php
[1]
[2]
!! end
!! test
Valid follow="…" after it's parent
!! wikitext
[theValue]
[theFollows]
[Should be 2]
!! html
[1]
[2]
- ↑ theValue theFollows
- ↑ Should be 2
!! end
!! test
Forward-referenced ref with follow
!! wikitext
[theFollows]
[theValue]
!! html
[1]
- ↑ theFollows Cite error: Invalid
<ref>
tag; name "theName" defined multiple times with different content
!! end
!! test
Forward-referenced ref with magical follow edge case
!! wikitext
[theValue]
[ theValue]
!! html
[1]
!! end
!! test
Valid parameters become invalid when a third is present
!! wikitext
[theValue]
!! html
Cite error: Invalid <ref>
tag; invalid names, e.g. too many
!! end
!! test
Simple [, with in group
!! wikitext
Wikipedia rocks!][Proceeds of Rockology, vol. XXI]
Wikipedia rocks![Proceeds of Rockology, vol. XXI]
!! html
Wikipedia rocks![1]
Wikipedia rocks![note 1]
- ↑ Proceeds of Rockology, vol. XXI
- ↑ Proceeds of Rockology, vol. XXI
!! end
!! test
Simple [, with in group, with groupname in Chinese
!! wikitext
AAA][ref a]BBB[note b]CCC[ref c]
;refs
;notes
!! html
AAA[参 1]BBB[注 1]CCC[参 2]
- refs
- notes
!! end
!! test
Attributes are trimmed by the parser, see Sanitizer::decodeTagAttributes()
!! wikitext
[in group g]
[in group " g "]
!! html
[g 1]
[g 2]
- ↑ in group g
- ↑ in group " g "
!! end
!! test
[ defined in
!! wikitext
]
[BAR]
!! html
[1]
!! end
!! test
[ defined in called with #tag
!! wikitext
]
{{#tag:references|
[BAR]
}}
!! html
[1]
!! end
!! test
T242437 - Nested references edge case, outer tag function with LDR
!! wikitext
{{#tag:references|
[bar]
}}
!! html
[1]
Cite error: Closing tag missing for <references>
!! end
!! test
T242437 - Nested references edge case, outer tag function, inner LDR
!! wikitext
{{#tag:references|
[bar]
}}
!! html
[1]
Cite error: Closing tag missing for <references>
!! end
!! test
T242437 - Nested references edge case, inner tag function with LDR
!! wikitext
{{#tag:references|
[bar]
}}
!! html
[1]
!! end
!! test
[ defined in error conditions
!! wikitext
]
[BAR]
[bad group]
[BAR BAR]
!! html
[2 1]
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs named foo
Cite error: <ref>
tag defined in <references>
with name "foo" has no content.
Cite error: <ref>
tag with name "unused" defined in <references>
is not used in prior text.
Cite error: <ref>
tag in <references>
has conflicting group attribute "1".
Cite error: <ref>
tag defined in <references>
has no name attribute.
!! end
!! test
Error conditions on non-visible content
!! wikitext
[x]
[ ]
[ ]
!! html
[1]
[2]
[3]
- ↑ x
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs named b
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs named c
Cite error: <ref>
tag defined in <references>
with name "a" has no content.
Cite error: <ref>
tag defined in <references>
with name "b" has no content.
Cite error: <ref>
tag defined in <references>
with name "c" has no content.
!! end
!! article
MediaWiki:cite_link_label_group-klingon
!! text
wa' cha' wej loS vagh jav Soch chorgh Hut wa'maH
!! endarticle
!! test
[ with custom group link with number names in Klingon
!! wikitext
Wikipedia rocks!][Proceeds of Rockology, vol. XXI]
!! html
Wikipedia rocks![wa']
- ↑ Proceeds of Rockology, vol. XXI
!! end
!! test
Consecutive whitespace in custom link label message should not create empty []
!! wikitext
[1st]
[2nd]
!! html
[wa']
[cha']
!! end
!! test
Bug 31374 regression check: nested strip items
!! wikitext
{{#tag:ref|note[reference]|group=Note}}
!! html
[Note 1]
!! end
!! test
Bug 13073 regression check: wrapped
!! options
parsoid={"suppressErrors": true}
!! wikitext
[
foo
]
!! html/*
[1]
!! end
!! test
[ with no name and no content.
!! wikitext
Bla.]
!! html
Bla.Cite error: Invalid <ref>
tag; refs with no name must have content
!! end
!! test
[ with an empty-string name parameter and no content.
!! wikitext
Bla.][ ]
!! html
Bla.Cite error: Invalid <ref>
tag; refs with no name must have content
!! end
!! test
[ with a non-empty name parameter and no content.
!! wikitext
Bla.][ ]
!! html
Bla.[1]
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs named void
!! end
!! test
Multiple definition (outside )
!! wikitext
[abc]
[def]
!! html
[1]
[1]
- ↑ 1.0 1.1 abc Cite error: Invalid
<ref>
tag; name "a" defined multiple times with different content
!! end
!! test
Multiple definition (inside )
!! wikitext
[abc]
[def]
!! html
[1]
- ↑ abc Cite error: Invalid
<ref>
tag; name "a" defined multiple times with different content
!! end
!! test
Multiple definition (mixed outside/inside)
!! wikitext
[abc]
[def]
!! html
[1]
- ↑ abc Cite error: Invalid
<ref>
tag; name "a" defined multiple times with different content
!! end
!! test
Multiple definition (inside {{#tag:references}})
!! wikitext
{{#tag:references|
[abc]
[def]
}}
!! html
[1]
- ↑ abc Cite error: Invalid
<ref>
tag; name "a" defined multiple times with different content
!! end
# Parsoid doesn't rt cleanly because name attribute is actually broken
# here ([ tag closes at first >); see next test for a tidied version.
!! test
T29694 - [] in reference names in HTML5 fragment mode
!! config
wgFragmentMode=[ 'html5' ]
!! options
parsoid=wt2html
!! wikitext
][[bar]]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ ">[bar]
!! end
!! test
T29694 - [] in reference names in HTML5 fragment mode (tidied)
!! config
wgFragmentMode=[ 'html5' ]
!! wikitext
[[bar]]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ [bar]
!! end
#### ----------------------------------------------------------------
#### Parsoid-only testing of Parsoid's impl of [ and
#### tags. Parsoid's output for these tags differs from that of the
#### PHP parser.
#### ----------------------------------------------------------------
!! test
Ref: 1. ref-location should be replaced with an index span
!! wikitext
A ][foo]
B [foo]
C
!! html/parsoid
A [1]
B [2]
C [3]
- ↑ foo
- ↑ foo
- ↑
!! end
!! test
Ref: 2. ref-tags with identical names should all get the same index
!! wikitext
A [foo]
B
!! html/parsoid
A [1]
B [1]
- 1 2 foo
!! end
!! test
Ref: 3. spaces in ref-names should be ignored
!! wikitext
A [foo]
B
C
!! html/parsoid
A [1]
B [1]
C [1]
- 1 2 3 foo
!! end
# NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
!! test
Ref: 4. 'constructor' should be accepted as a valid ref-name
!! wikitext
A [foo]
!! html/parsoid
A [1]
- ↑ foo
!! end
!! test
Ref: 5. body should accept generic wikitext
!! wikitext
A [
This is a '''[[bolded link]]''' and this is a {{1x|transclusion}}
]
!! html/parsoid
A [1]
- ↑ This is a bolded link and this is a transclusion
!! end
!! test
Ref: 6. indent-pres should not be output in ref-body
!! wikitext
A [
foo
bar
baz
]
!! html/parsoid
A [1]
- ↑
foo
bar
baz
!! end
!! test
Ref: 7. No p-wrapping in ref-body
!! wikitext
A [
foo
bar
baz
booz
]
!! html/parsoid
A [1]
- ↑
foo
bar
baz
booz
!! end
!! test
Ref: 8. transclusion wikitext has lower precedence
!! wikitext
A [ foo {{1x|] B C}}
!! html/parsoid
A [1] B C}}
- ↑ foo {{1x|
!! end
!! test
Ref: 9. unclosed comments should not leak out of ref-body
!! wikitext
A [ foo
!! end
!! test
Ref: 10. Unclosed HTML tags should not leak out of ref-body
!! wikitext
A ][ foo ] B C
!! html/parsoid
A [1] B C
- ↑ foo
!! end
!! test
Ref: 11. ref-tags acts like an inline element wrt P-wrapping
!! wikitext
A [foo] B
C [bar] D
!! html/parsoid
A [1] B
C [2] D
- ↑ foo
- ↑ bar
!! end
!! test
Ref: 12. ref-tags act as trailing newline migration barrier
!! wikitext
a
b
c
!! html/parsoid
a
b [1]
[2]
c
- ↑
- ↑
!! end
!! test
Ref: 13. ref-tags are not SOL-transparent and block indent-pres
!! wikitext
[foo] A
[bar
] B
!! html/parsoid
[1] A
[2] B
- ↑ foo
- ↑ bar
!! end
## Roundtripping fails because of nowiki'ing
!! test
Ref: 14. A nested ref-tag should be emitted as plain text
!! options
parsoid=wt2html
!! wikitext
[foo ][bar] baz
!! html/parsoid
[1] baz</ref>
- ↑ foo <ref>bar
!! end
!! test
Ref: 15. ref-tags with identical names should get identical indexes
!! wikitext
A1 [foo] A2
B1 B2 [bar]
!! html/parsoid
A1 [1] A2 [1]
B1 [2] B2 [2]
- 1 2 foo
- 1 2 bar
!! end
## We don't bother wt2wt-ing non-standard whitespace
!! test
Ref: 16. Tokenizer should accept non-standard whitespace in [ and ] tags
!!options
parsoid=wt2html
!! wikitext
A [foo]
!! html/parsoid
A [1]
- ↑ foo
!! end
!! test
Ref: 17. Generate valid HTML5 id/about attributes
!! wikitext
[foo]
[ve-created name]
!! html/parsoid
[1]
[2]
- ↑ foo
- ↑ ve-created name
!! end
!! test
Ref: 18. T58916: Extension attributes should be parsed as plain text
!! config
wgFragmentMode=[ 'html5', 'legacy' ]
!! wikitext
[foo]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ foo
!! end
# Parsoid doesn't wt2wt this cleanly because we serialize both
# versions of the name the same way ("a & b")
!! test
Ref: 19. ref-tags with identical name encodings should get identical indexes
!! config
wgFragmentMode=[ 'html5', 'legacy' ]
!! options
parsoid=wt2html,html2html
!! wikitext
1 [foo] 2
!! html/php
1 [1] 2 [1]
!! html/parsoid
1 [1] 2 [1]
- 1 2 foo
!! end
!! test
Ref: 20. ref-tags with identical names but different content should keep it
!! wikitext
A [Foo one]
B [Foo two]
C
!! html/parsoid
A [1]
B [1]
C [1]
- 1 2 3 Foo one
!! end
!! test
References: 1a. references tag without any refs should be handled properly
!! wikitext
!! html/parsoid
!! end
!! test
References: 1b. references tag without any refs should be handled properly
!! wikitext
!! html/parsoid
!! end
!! test
References: 2. references tag with group only outputs references from that group
!! wikitext
A [foo]
B [bar]
C [baz]
!! html/parsoid
A [a 1]
B [b 1]
C [1]
- ↑ foo
- ↑ baz
- ↑ bar
!! end
!! test
References: 3. ref list should be cleared after processing references
!! wikitext
A [foo]
B [bar]
!! html
A [1]
B [1]
!! html/parsoid
A [1]
- ↑ foo
B [1]
- ↑ bar
!! end
!! test
Counters should be cleared after processing named
!! wikitext
A [foo]
B [bar]
!! html
A [g 1]
B [g 1]
!! end
!! test
References: 4. only referenced group should be cleared after processing references
!! wikitext
A [afoo]
B [bfoo]
C [cfoo]
!! html/parsoid
A [a 1]
B [1]
- ↑ afoo
C [2]
- ↑ bfoo
- ↑ cfoo
!! end
## Don't expect this to rt since we're dropping content
!! test
References: 5. ref tags in references should be processed while ignoring all other content
!! options
parsoid=wt2html,html2html
!! wikitext
A
B [bar]
[foo]
This should just get lost.
!! html/parsoid
A [1]
B [2]
- ↑ foo
- ↑ bar
!! end
!! test
References: 6. from a transclusion
!! wikitext
[Foo] {{1x|}}
!! html/php+untidy
[1]
!! html/php+tidy
[1]
!! html/parsoid
[1]
- ↑ Foo
!! end
!! test
References: 7. Multiple references tags (one without and one with nested refs) should be correctly handled
!! wikitext
A [foo bar for a]
B
[foo]
!! html/parsoid
A [1]
B [X 1]
- ↑ foo bar for a
- ↑ foo
!! end
!! test
References: 8. T88019: Remove s from templates inside [ that's itself inside a template
!! wikitext
X{{1x|][foo {{1x|bar}} and {{1x|baz}} boo]}}
!! html/parsoid
X[1]
- ↑ foo bar and baz boo
!! end
!! test
References: 9. Generate missing references list at the end
!! wikitext
A [foo]
B [bar]
!! html/parsoid
A [1] B [inexistent 1]
- ↑ foo
- ↑ bar
!! end
!! test
References: 10.1. New shouldn't be added for unrelated edits.
!! options
parsoid={
"modes": ["selser"],
"changes": [["#x", "remove"]],
"selser": "noauto"
}
!! wikitext
Unrelated text that's going to disappear.
A [foo]
!! wikitext/edited
Unrelated text.
A [foo]
!! end
!! test
References: 10.2. New shouldn't be added for unrelated edits.
!! options
parsoid={
"modes": ["selser"],
"changes": [["#x", "remove"]],
"selser": "noauto",
"responsiveReferences": { "enabled": true, "threshold": 2 }
}
!! wikitext
Unrelated text that's going to disappear.
A [foo]
!! wikitext/edited
Unrelated text.
A [foo]
!! end
# Doesn't wt2wt cleanly because we don't encode the & in html2wt direction
!! test
Entities in ref name
!! config
wgFragmentMode=[ 'html5', 'legacy' ]
!! options
parsoid=wt2html,html2html
!! wikitext
[hi]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ hi
!! end
## The output here may look funny, but it's what the php parser will do. The
## unclosed references tag becomes escaped text, and then a new references
## tag is auto-generated. The test is wt2html only because it roundtrips with
## nowiki tags, and the auto-generated references tag is only dropped in
## rtTestMode.
!! test
Generate references for unclosed references tag
!! options
parsoid=wt2html
!! wikitext
a[foo]
!! html/parsoid
a[1]
<references>
- ↑ foo
!! end
!! test
New reference serializes on its own line
!! options
parsoid=wt2wt,html2wt
!! wikitext
foo
!! html/parsoid
foo
!! end
!! test
Ref in ref
!! wikitext
test [hi {{refinref}}]
!! html/php
test [1]
Cite error: <ref>
tag defined in <references>
has no name attribute.
!! html/parsoid
test [1]
- ↑ hi
!! end
## Parsoid responsive references tests
!! test
Responsive references: disabled, autogenerated
!! options
parsoid={
"modes": ["wt2html"],
"responsiveReferences": { "enabled": false, "threshold": 2 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
- ↑ 1
- ↑ 2
!! end
!! test
Responsive references: enabled, autogenerated
!! options
parsoid={
"modes": ["wt2html"],
"responsiveReferences": { "enabled": true, "threshold": 2 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
!! end
!! test
Responsive references: enabled, autogenerated, exceed
!! options
parsoid={
"modes": ["wt2html"],
"responsiveReferences": { "enabled": true, "threshold": 1 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
!! end
!! test
Responsive references: disabled
!! options
parsoid={
"responsiveReferences": { "enabled": false, "threshold": 2 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
- ↑ 1
- ↑ 2
!! end
!! test
Responsive references: enabled
!! options
parsoid={
"responsiveReferences": { "enabled": true, "threshold": 2 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
!! end
!! test
Responsive references: enabled, exceed
!! options
parsoid={
"responsiveReferences": { "enabled": true, "threshold": 1 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
!! end
!! test
Responsive references: disabled, explicit
!! options
parsoid={
"responsiveReferences": { "enabled": false, "threshold": 2 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
!! end
!! test
Responsive references: disabled, explicit, exceed
!! options
parsoid={
"responsiveReferences": { "enabled": false, "threshold": 1 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
!! end
!! test
Responsive references: enabled, explicit off
!! options
parsoid={
"responsiveReferences": { "enabled": true, "threshold": 2 }
}
!! wikitext
Test [1][2]
!! html/parsoid
Test [1][2]
- ↑ 1
- ↑ 2
!! end
!! test
Responsive references: roundtrip templates
!! options
parsoid={
"responsiveReferences": { "enabled": true, "threshold": 2 }
}
!! wikitext
test [123]
{{1x|haha}}
!! html/parsoid
test [1]
haha
!! end
## End Parsoid responsive references tests
!! article
Template:CircularRef
!! text
[Hi {{CircularRef}}]
!! endarticle
!! test
CircularRef
!! wikitext
[Hi {{CircularRef}}]
!! html/php
[1]
Cite error: <ref>
tag defined in <references>
has no name attribute.
!! html/parsoid
[1]
- ↑ Hi
!! end
!! test
T15673: [ with direction "rtl"
!! wikitext
][TEST]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ TEST
!! end
!! test
T15673: [ with direction "ltr"
!! wikitext
][TEST]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ TEST
!! end
!! test
T15673: [ with direction "LTR", keeps upper case
!! wikitext
][TEST]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ TEST
!! end
!! test
T15673: [ with direction "nonsense", strip invalid dir attribute and shows error
!! wikitext
][TEST]
!! html+tidy
Cite error: Invalid dir="nonsense"
, must be ltr
or rtl
!! end
!! test
T15673: Direction is supported when specifying name and group
!! wikitext
[TEST]
!! html/php
[note 1]
!! html/parsoid
[note 1]
- ↑ TEST
!! end
## Just to catch regressions in Parsoid's tree-building / p-wrapping
!! test
Ref with block content in formatting tag
!! wikitext
''hiho
''
!! html/parsoid
hi[1]
- ↑
ho
!! end
!! test
T196827: Use the dir parameter only from the full definition of a named ref tag
!! wikitext
abcdef
ghi[jkl]mno
!! html/php
abc[1]def
ghi[1]mno
!! html/parsoid
abc[1]def
ghi[1]mno
- 1 2 jkl
!! end
!! test
T196827: Ignore the dir parameter from the first use, which is not a full definition, and use the dir value from the full definition of a named ref tag
!! wikitext
abcdef
ghi[jkl]mno
!! html/php
abc[1]def
ghi[1]mno
!! html/parsoid
abc[1]def
ghi[1]mno
- 1 2 jkl
!! end
!! test
Similarly named refs with identical bodies
!! wikitext
1 [1] 2 [1]
!! html/parsoid
1 [1] 2 [1]
- 1 2 1
!! end
!! test
T220196 - Reference names with high-bit characters, html5 mode
!! config
wgFragmentMode=['html5']
!! wikitext
[[bar]]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ [bar]
!! end
!! test
T220196 - Reference names with high-bit characters, legacy mode
!! config
wgFragmentMode=['legacy']
!! wikitext
[[bar]]
!! html/php
[1]
!! html/parsoid
[1]
- ↑ [bar]
!! end
## Just a regression test
!! test
Transclusion parameter spacing is lost without data-parsoid
!! options
parsoid=wt2wt
!! wikitext
[{{1x|
Hi ho
}}]
{{1x|
}}
!! html/parsoid
!! end
# TODO: Return a more helpful error, this is because the reference is never used, not about the group attribute.
!! test
Confusing error
!! wikitext
[foo]
!! html
Cite error: <ref>
tag defined in <references>
has group attribute "" which does not appear in prior text.
!! end
!! test
T242437 - Blank ref name in #tag regression
!! wikitext
{{#tag:references|
[foo]
}}
!! html
Cite error: <ref>
tag defined in <references>
has no name attribute.
!! end
!! test
T48140 - Make sure rollback/redo does not consume numbers
!! wikitext
[should be [1]]
{{#tag:references|
[a]
|group=g}}
[should be [2]]
!! html
[1]
[g 1]
[2]
- ↑ should be [1]
- ↑ should be [2]
!! end
!! test
Numbers in the default group need to start with 1, independent from other groups
!! wikitext
{{#tag:references|
[a]
|group=g}}
[c]
!! html
[g 1]
[1]
!! end
!! test
Serialize reference tags by themselves on a line
!! options
parsoid=html2wt
!! html/parsoid
hi [1]
hi ho
!! wikitext
hi [ho]
hi ho
!! end