Skip to content

Commit 90ccd5e

Browse files
committed
regression test
1 parent 3814348 commit 90ccd5e

File tree

2 files changed

+157
-0
lines changed

2 files changed

+157
-0
lines changed

tests/PHPStan/Analyser/AnalyserIntegrationTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1632,6 +1632,12 @@ public function testBug13980(): void
16321632
$this->assertNoErrors($errors);
16331633
}
16341634

1635+
public function testBug14207(): void
1636+
{
1637+
$errors = $this->runAnalyse(__DIR__ . '/data/bug-14207.php');
1638+
$this->assertNoErrors($errors);
1639+
}
1640+
16351641
public function testBug13945(): void
16361642
{
16371643
$errors = $this->runAnalyse(__DIR__ . '/data/bug-13945.php');
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Bug14207;
4+
5+
use function assert;
6+
use function PHPStan\Testing\assertType;
7+
8+
class WP_HTML_Token {
9+
public string $namespace;
10+
public string $node_name;
11+
}
12+
13+
class HelloWorld
14+
{
15+
/**
16+
* Returns whether an element of a given name is in the HTML special category.
17+
*
18+
* @since 6.4.0
19+
*
20+
* @see https://html.spec.whatwg.org/#special
21+
*
22+
* @param WP_HTML_Token|string $tag_name Node to check, or only its name if in the HTML namespace.
23+
* @return bool Whether the element of the given name is in the special category.
24+
*/
25+
public static function is_special( $tag_name ): bool {
26+
if ( is_string( $tag_name ) ) {
27+
$tag_name = strtoupper( $tag_name );
28+
} else {
29+
$tag_name = 'html' === $tag_name->namespace
30+
? strtoupper( $tag_name->node_name )
31+
: "{$tag_name->namespace} {$tag_name->node_name}";
32+
}
33+
34+
assertType('non-falsy-string|uppercase-string', $tag_name);
35+
36+
$x = (
37+
'ADDRESS' === $tag_name ||
38+
'APPLET' === $tag_name ||
39+
'AREA' === $tag_name ||
40+
'ARTICLE' === $tag_name ||
41+
'ASIDE' === $tag_name ||
42+
'BASE' === $tag_name ||
43+
'BASEFONT' === $tag_name ||
44+
'BGSOUND' === $tag_name ||
45+
'BLOCKQUOTE' === $tag_name ||
46+
'BODY' === $tag_name ||
47+
'BR' === $tag_name ||
48+
'BUTTON' === $tag_name ||
49+
'CAPTION' === $tag_name ||
50+
'CENTER' === $tag_name ||
51+
'COL' === $tag_name ||
52+
'COLGROUP' === $tag_name ||
53+
'DD' === $tag_name ||
54+
'DETAILS' === $tag_name ||
55+
'DIR' === $tag_name ||
56+
'DIV' === $tag_name ||
57+
'DL' === $tag_name ||
58+
'DT' === $tag_name ||
59+
'EMBED' === $tag_name ||
60+
'FIELDSET' === $tag_name ||
61+
'FIGCAPTION' === $tag_name ||
62+
'FIGURE' === $tag_name ||
63+
'FOOTER' === $tag_name ||
64+
'FORM' === $tag_name ||
65+
'FRAME' === $tag_name ||
66+
'FRAMESET' === $tag_name ||
67+
'H1' === $tag_name ||
68+
'H2' === $tag_name ||
69+
'H3' === $tag_name ||
70+
'H4' === $tag_name ||
71+
'H5' === $tag_name ||
72+
'H6' === $tag_name ||
73+
'HEAD' === $tag_name ||
74+
'HEADER' === $tag_name ||
75+
'HGROUP' === $tag_name ||
76+
'HR' === $tag_name ||
77+
'HTML' === $tag_name ||
78+
'IFRAME' === $tag_name ||
79+
'IMG' === $tag_name ||
80+
'INPUT' === $tag_name ||
81+
'KEYGEN' === $tag_name ||
82+
'LI' === $tag_name ||
83+
'LINK' === $tag_name ||
84+
'LISTING' === $tag_name ||
85+
'MAIN' === $tag_name ||
86+
'MARQUEE' === $tag_name ||
87+
'MENU' === $tag_name ||
88+
'META' === $tag_name ||
89+
'NAV' === $tag_name ||
90+
'NOEMBED' === $tag_name ||
91+
'NOFRAMES' === $tag_name ||
92+
'NOSCRIPT' === $tag_name ||
93+
'OBJECT' === $tag_name ||
94+
'OL' === $tag_name ||
95+
'P' === $tag_name ||
96+
'PARAM' === $tag_name ||
97+
'PLAINTEXT' === $tag_name ||
98+
'PRE' === $tag_name ||
99+
'SCRIPT' === $tag_name ||
100+
'SEARCH' === $tag_name ||
101+
'SECTION' === $tag_name ||
102+
'SELECT' === $tag_name ||
103+
'SOURCE' === $tag_name ||
104+
'STYLE' === $tag_name ||
105+
'SUMMARY' === $tag_name ||
106+
'TABLE' === $tag_name ||
107+
'TBODY' === $tag_name ||
108+
'TD' === $tag_name ||
109+
'TEMPLATE' === $tag_name ||
110+
'TEXTAREA' === $tag_name ||
111+
'TFOOT' === $tag_name ||
112+
'TH' === $tag_name ||
113+
'THEAD' === $tag_name ||
114+
'TITLE' === $tag_name ||
115+
'TR' === $tag_name ||
116+
'TRACK' === $tag_name ||
117+
'UL' === $tag_name ||
118+
'WBR' === $tag_name ||
119+
'XMP' === $tag_name ||
120+
121+
// MathML.
122+
'math MI' === $tag_name ||
123+
'math MO' === $tag_name ||
124+
'math MN' === $tag_name ||
125+
'math MS' === $tag_name ||
126+
'math MTEXT' === $tag_name ||
127+
'math ANNOTATION-XML' === $tag_name ||
128+
129+
// SVG.
130+
'svg DESC' === $tag_name ||
131+
'svg FOREIGNOBJECT' === $tag_name ||
132+
'svg TITLE' === $tag_name ||
133+
134+
// some random stuff
135+
'a1' === $tag_name ||
136+
'a2' === $tag_name ||
137+
'a3' === $tag_name ||
138+
'a4' === $tag_name ||
139+
'a5' === $tag_name ||
140+
'a6' === $tag_name ||
141+
'a7' === $tag_name ||
142+
'a8' === $tag_name ||
143+
'a9' === $tag_name
144+
);
145+
146+
assertType('bool', $x);
147+
assertType('non-falsy-string|uppercase-string', $tag_name);
148+
149+
return $x;
150+
}
151+
}

0 commit comments

Comments
 (0)