2 namespace Masterminds\HTML5\Tests;
4 use Masterminds\HTML5\Elements;
6 class ElementsTest extends TestCase
9 public $html5Elements = array(
122 public $mathmlElements = array(
164 public $svgElements = array(
182 "feComponentTransfer",
200 "feSpecularLighting",
247 public function testIsHtml5Element()
249 foreach ($this->html5Elements as $element) {
250 $this->assertTrue(Elements::isHtml5Element($element), 'html5 element test failed on: ' . $element);
252 $this->assertTrue(Elements::isHtml5Element(strtoupper($element)), 'html5 element test failed on: ' . strtoupper($element));
260 foreach ($nonhtml5 as $element) {
261 $this->assertFalse(Elements::isHtml5Element($element), 'html5 element test failed on: ' . $element);
263 $this->assertFalse(Elements::isHtml5Element(strtoupper($element)), 'html5 element test failed on: ' . strtoupper($element));
267 public function testIsMathMLElement()
269 foreach ($this->mathmlElements as $element) {
270 $this->assertTrue(Elements::isMathMLElement($element), 'MathML element test failed on: ' . $element);
272 // MathML is case sensetitive so these should all fail.
273 $this->assertFalse(Elements::isMathMLElement(strtoupper($element)), 'MathML element test failed on: ' . strtoupper($element));
281 foreach ($nonMathML as $element) {
282 $this->assertFalse(Elements::isMathMLElement($element), 'MathML element test failed on: ' . $element);
286 public function testIsSvgElement()
288 foreach ($this->svgElements as $element) {
289 $this->assertTrue(Elements::isSvgElement($element), 'SVG element test failed on: ' . $element);
291 // SVG is case sensetitive so these should all fail.
292 $this->assertFalse(Elements::isSvgElement(strtoupper($element)), 'SVG element test failed on: ' . strtoupper($element));
300 foreach ($nonSVG as $element) {
301 $this->assertFalse(Elements::isSvgElement($element), 'SVG element test failed on: ' . $element);
305 public function testIsElement()
307 foreach ($this->html5Elements as $element) {
308 $this->assertTrue(Elements::isElement($element), 'html5 element test failed on: ' . $element);
310 $this->assertTrue(Elements::isElement(strtoupper($element)), 'html5 element test failed on: ' . strtoupper($element));
313 foreach ($this->mathmlElements as $element) {
314 $this->assertTrue(Elements::isElement($element), 'MathML element test failed on: ' . $element);
316 // MathML is case sensetitive so these should all fail.
317 $this->assertFalse(Elements::isElement(strtoupper($element)), 'MathML element test failed on: ' . strtoupper($element));
320 foreach ($this->svgElements as $element) {
321 $this->assertTrue(Elements::isElement($element), 'SVG element test failed on: ' . $element);
323 // SVG is case sensetitive so these should all fail. But, there is duplication
324 // html5 and SVG. Since html5 is case insensetitive we need to make sure
325 // it's not a html5 element first.
326 if (! in_array($element, $this->html5Elements)) {
327 $this->assertFalse(Elements::isElement(strtoupper($element)), 'SVG element test failed on: ' . strtoupper($element));
336 foreach ($nonhtml5 as $element) {
337 $this->assertFalse(Elements::isElement($element), 'html5 element test failed on: ' . $element);
339 $this->assertFalse(Elements::isElement(strtoupper($element)), 'html5 element test failed on: ' . strtoupper($element));
343 public function testElement()
345 foreach ($this->html5Elements as $element) {
346 $this->assertGreaterThan(0, Elements::element($element));
353 foreach ($nonhtml5 as $element) {
354 $this->assertFalse(Elements::element($element));
358 public function testIsA()
360 $this->assertTrue(Elements::isA('script', Elements::KNOWN_ELEMENT));
361 $this->assertFalse(Elements::isA('scriptypoo', Elements::KNOWN_ELEMENT));
362 $this->assertTrue(Elements::isA('script', Elements::TEXT_RAW));
363 $this->assertFalse(Elements::isA('script', Elements::TEXT_RCDATA));
365 $voidElements = array(
379 foreach ($voidElements as $element) {
380 $this->assertTrue(Elements::isA($element, Elements::VOID_TAG), 'Void element test failed on: ' . $element);
388 foreach ($nonVoid as $tag) {
389 $this->assertFalse(Elements::isA($tag, Elements::VOID_TAG), 'Void element test failed on: ' . $tag);
428 foreach ($blockTags as $tag) {
429 $this->assertTrue(Elements::isA($tag, Elements::BLOCK_TAG), 'Block tag test failed on: ' . $tag);
432 $nonBlockTags = array(
437 foreach ($nonBlockTags as $tag) {
438 $this->assertFalse(Elements::isA($tag, Elements::BLOCK_TAG), 'Block tag test failed on: ' . $tag);
442 public function testNormalizeSvgElement()
446 'altglyph' => 'altGlyph',
448 'fespecularlighting' => 'feSpecularLighting',
450 'foreignobject' => 'foreignObject'
453 foreach ($tests as $input => $expected) {
454 $this->assertEquals($expected, Elements::normalizeSvgElement($input));
458 public function testNormalizeSvgAttribute()
462 'attributename' => 'attributeName',
464 'limitingconeangle' => 'limitingConeAngle',
466 'patterncontentunits' => 'patternContentUnits'
469 foreach ($tests as $input => $expected) {
470 $this->assertEquals($expected, Elements::normalizeSvgAttribute($input));
474 public function testNormalizeMathMlAttribute()
478 'definitionurl' => 'definitionURL',
482 foreach ($tests as $input => $expected) {
483 $this->assertEquals($expected, Elements::normalizeMathMlAttribute($input));