From d2d4785f82b8e04a90aaac0ac73d8766b263f66e Mon Sep 17 00:00:00 2001 From: Simon Montoya Palacio Date: Fri, 10 May 2019 08:42:44 -0500 Subject: [PATCH 1/7] agregar un test diferente a los del video --- .phpunit.result.cache | 1 + 1 file changed, 1 insertion(+) create mode 100644 .phpunit.result.cache diff --git a/.phpunit.result.cache b/.phpunit.result.cache new file mode 100644 index 0000000..bf44c6b --- /dev/null +++ b/.phpunit.result.cache @@ -0,0 +1 @@ +C:37:"PHPUnit\Runner\DefaultTestResultCache":905:{a:2:{s:7:"defects";a:1:{s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";i:5;}s:5:"times";a:10:{s:32:"Tests\DummyTest::it_asserts_true";d:0.006;s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";d:0.007;s:65:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content";d:0.004;s:84:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_once_attribute";d:0;s:85:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_twice_attribute";d:0;s:52:"Tests\HtmlElementTest::test_it_generates_a_tag_image";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_image_with_attributes";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_attributes";d:0;s:71:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_attributes";d:0;s:83:"Tests\HtmlElementTest::test_it_generates_a_tag_image_it_escapes_the_html_attributes";d:0;}}} \ No newline at end of file From b19090b0aa98e92ca8aaa1b0667493aaf2a06e28 Mon Sep 17 00:00:00 2001 From: Simon Montoya Palacio Date: Fri, 10 May 2019 08:48:27 -0500 Subject: [PATCH 2/7] discard --- tests/HtmlElementTest.php | 75 ++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 41 deletions(-) diff --git a/tests/HtmlElementTest.php b/tests/HtmlElementTest.php index 5b9524a..e904496 100644 --- a/tests/HtmlElementTest.php +++ b/tests/HtmlElementTest.php @@ -1,88 +1,81 @@ assertFalse((new HtmlElement('p'))->isVoid()); - - $this->assertTrue((new HtmlElement('img'))->isVoid()); - } - - /** @test */ - function it_generates_attributes() + function test_it_generates_a_paragraph_with_content() { - $element = new HtmlElement('span', ['class' => 'a_span', 'id' => 'the_span']); + $element = new HtmlElement('p',[],'este es el contenido'); - $this->assertSame(' class="a_span" id="the_span"', $element->attributes()); + $this->assertSame( + '

este es el contenido

', + $element->render() + ); } - /** @test */ - function it_generates_a_paragraph_with_content() + function test_it_generates_a_paragraph_with_content_and_once_attribute() { - $element = new HtmlElement('p', [], 'Este es el contenido'); + $element = new HtmlElement('p',['id' => 'my_paragraph' ],'este es el contenido'); $this->assertSame( - '

Este es el contenido

', + '

este es el contenido

', $element->render() ); } - /** @test */ - function it_generates_a_paragraph_with_content_and_an_id_attribute() + function test_it_generates_a_paragraph_with_content_and_twice_attribute() { - $element = new HtmlElement( - 'p', ['id' => 'my_paragraph'], 'Este es el contenido' - ); + $element = new HtmlElement('p', + ['id' => 'my_paragraph','class' => 'paragraph' ],'este es el contenido'); $this->assertSame( - '

Este es el contenido

', + '

este es el contenido

', $element->render() ); } - /** @test */ - function it_generates_a_paragraph_with_multiple_attributes() + function test_it_generates_a_tag_image() { - $element = new HtmlElement( - 'p', ['id' => 'my_paragraph', 'class' => 'paragraph'], 'Este es el contenido' - ); + $element = new HtmlElement('img',['src' => 'img/img.png']); $this->assertSame( - '

Este es el contenido

', + '', $element->render() ); } - /** @test */ - function it_generates_an_img_tag() + function test_it_generates_a_tag_image_it_escapes_the_html_attributes() { - $element = new HtmlElement('img', ['src' => 'img/styde.png']); + $element = new HtmlElement('img', + ['src' => 'img/img.png','title' => 'Curso de "Refactorizacion" en styde']); - $this->assertSame('', $element->render()); + $this->assertSame( + '', + $element->render() + ); } - /** @test */ - function it_escapes_the_html_attributes() + function test_it_generates_a_tag_input_with_boolean_attributes() { - $element = new HtmlElement('img', ['src' => 'img/styde.png', 'title' => 'Curso de "Refactorización" en Styde']); + $element = new HtmlElement('input',['required']); $this->assertSame( - '', + '', $element->render() ); } - /** @test */ - function it_generates_elements_with_boolean_attributes() + function test_it_generates_a_tag_input_without_boolean_attributes() { - $element = new HtmlElement('input', ['required']); + $element = new HtmlElement('input'); + + $this->assertSame( + '', + $element->render() - $this->assertSame('', $element->render()); - } } \ No newline at end of file From 105d86ad608c110248f5e2e5ce2e375c3f6d664c Mon Sep 17 00:00:00 2001 From: Simon Montoya Palacio Date: Fri, 10 May 2019 08:52:51 -0500 Subject: [PATCH 3/7] agregar tests diferente a los del video --- .phpunit.result.cache | 2 +- public/index.php | 40 ++++++++++++++++++++------------------- tests/HtmlElementTest.php | 12 ++++++++++++ 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/.phpunit.result.cache b/.phpunit.result.cache index bf44c6b..c55d56e 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -C:37:"PHPUnit\Runner\DefaultTestResultCache":905:{a:2:{s:7:"defects";a:1:{s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";i:5;}s:5:"times";a:10:{s:32:"Tests\DummyTest::it_asserts_true";d:0.006;s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";d:0.007;s:65:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content";d:0.004;s:84:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_once_attribute";d:0;s:85:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_twice_attribute";d:0;s:52:"Tests\HtmlElementTest::test_it_generates_a_tag_image";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_image_with_attributes";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_attributes";d:0;s:71:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_attributes";d:0;s:83:"Tests\HtmlElementTest::test_it_generates_a_tag_image_it_escapes_the_html_attributes";d:0;}}} \ No newline at end of file +C:37:"PHPUnit\Runner\DefaultTestResultCache":1153:{a:2:{s:7:"defects";a:1:{s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";i:5;}s:5:"times";a:13:{s:32:"Tests\DummyTest::it_asserts_true";d:0.006;s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";d:0.007;s:65:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content";d:0.007;s:84:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_once_attribute";d:0;s:85:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_twice_attribute";d:0;s:52:"Tests\HtmlElementTest::test_it_generates_a_tag_image";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_image_with_attributes";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_attributes";d:0;s:71:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_attributes";d:0;s:83:"Tests\HtmlElementTest::test_it_generates_a_tag_image_it_escapes_the_html_attributes";d:0;s:76:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_boolean_attributes";d:0;s:79:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_boolean_attributes";d:0;s:57:"Tests\HtmlElementTest::test_it_generates_html_without_tag";d:0;}}} \ No newline at end of file diff --git a/public/index.php b/public/index.php index 409cfab..8438927 100644 --- a/public/index.php +++ b/public/index.php @@ -2,40 +2,42 @@ require '../vendor/autoload.php'; -$element = new \App\HtmlElement('p', [], 'Este es el contenido'); +$element = new \App\HtmlElement('',[],'este es el contenido'); -echo $element->open().'Cualquier contenido'.$element->close(); +echo htmlentities($element->render(),ENT_QUOTES,'utf-8'); -exit; +echo "

"; -echo htmlentities($element->render(), ENT_QUOTES, 'UTF-8'); +$element = new \App\HtmlElement('p',['id' => 'my_paragraph' ],'este es el contenido'); -echo '

'; +echo htmlentities($element->render(),ENT_QUOTES,'utf-8'); -$element = new \App\HtmlElement('p', ['id' => 'my_paragraph'], 'Este es el contenido'); +echo "

"; -echo htmlentities($element->render(), ENT_QUOTES, 'UTF-8'); +$element = new \App\HtmlElement('p',['id' => 'my_paragraph','class' => 'paragraph' ],'este es el contenido'); -echo '

'; +echo htmlentities($element->render(),ENT_QUOTES,'utf-8'); -$element = new \App\HtmlElement('p', ['id' => 'my_paragraph', 'class' => 'paragraph'], 'Este es el contenido'); +echo "

"; -echo htmlentities($element->render(), ENT_QUOTES, 'UTF-8'); +$element = new \App\HtmlElement('img',['src' => 'img/img.png']); -echo '

'; +echo htmlentities($element->render(),ENT_QUOTES,'utf-8'); -$element = new \App\HtmlElement('img', ['src' => 'img/styde.png']); +echo "

"; -echo htmlentities($element->render(), ENT_QUOTES, 'UTF-8'); +$element = new \App\HtmlElement('img',['src' => 'img/img.png','title' => 'Curso de "Refactorizacion" en styde']); -echo '

'; +echo htmlentities($element->render(),ENT_QUOTES,'utf-8'); -$element = new \App\HtmlElement('img', ['src' => 'img/styde.png', 'title' => 'Curso de "Refactorización" en Styde']); +echo "

"; -echo htmlentities($element->render(), ENT_QUOTES, 'UTF-8'); +$element = new \App\HtmlElement('input',['required']); -echo '

'; +echo htmlentities($element->render(),ENT_QUOTES,'utf-8'); -$element = new \App\HtmlElement('input', ['required']); +echo "

"; -echo htmlentities($element->render(), ENT_QUOTES, 'UTF-8'); \ No newline at end of file +$element = new \App\HtmlElement('input'); + +echo htmlentities($element->render(),ENT_QUOTES,'utf-8'); \ No newline at end of file diff --git a/tests/HtmlElementTest.php b/tests/HtmlElementTest.php index e904496..d6916d3 100644 --- a/tests/HtmlElementTest.php +++ b/tests/HtmlElementTest.php @@ -77,5 +77,17 @@ function test_it_generates_a_tag_input_without_boolean_attributes() $this->assertSame( '', $element->render() + ); + } + function test_it_generates_html_without_tag() + { + $element = new HtmlElement('',[],'este es el contenido'); + + $this->assertSame( + '<>este es el contenido', + $element->render() + ); + + } } \ No newline at end of file From db79996611249695ad83f7cb3422f034a7d21591 Mon Sep 17 00:00:00 2001 From: Simon Montoya Palacio Date: Fri, 10 May 2019 08:55:05 -0500 Subject: [PATCH 4/7] discard --- public/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/index.php b/public/index.php index 8438927..6d31893 100644 --- a/public/index.php +++ b/public/index.php @@ -2,7 +2,7 @@ require '../vendor/autoload.php'; -$element = new \App\HtmlElement('',[],'este es el contenido'); +$element = new \App\HtmlElement('p',[],'este es el contenido'); echo htmlentities($element->render(),ENT_QUOTES,'utf-8'); From 482309401cdd9f19a33e6a249ea76da954461659 Mon Sep 17 00:00:00 2001 From: Simon Montoya Palacio Date: Fri, 10 May 2019 08:56:53 -0500 Subject: [PATCH 5/7] agregar tests diferente a los del video --- .gitignore | 2 +- app/HtmlElement.php | 59 ++++++++++++++++++++++----------------------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index bcc0b7a..f2ecd3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .idea -vendor/ \ No newline at end of file +vendor/ diff --git a/app/HtmlElement.php b/app/HtmlElement.php index 10f3aa8..baff750 100644 --- a/app/HtmlElement.php +++ b/app/HtmlElement.php @@ -1,7 +1,9 @@ name = $name; - $this->attributes = new HtmlAttributes($attributes); $this->content = $content; - } - - public function render() - { - if ($this->isVoid()) { - return $this->open(); - } - - return $this->open().$this->content().$this->close(); - } - - public function open(): string - { - return '<'.$this->name.$this->attributes().'>'; + $this->attributes = $attributes; } - public function attributes(): string + public function render() { - return $this->attributes->render(); - } + //si el elemento tiene atributos + if (! empty($this->attributes)){ + $htmlAttributes = ''; + foreach ($this->attributes as $attribute => $value){ + if (is_numeric($attribute)){ + $htmlAttributes .= ' '.$value; + }else{ + $htmlAttributes .= ' '.$attribute.'="'.htmlentities($value,ENT_QUOTES,'UTF-8').'"';// + } + } + //abrir la etiqueta con atributos + $result = '<'.$this->name.$htmlAttributes.'>'; + }else{ + //abrir la etiqueta sin atributos + $result = '<'.$this->name.'>'; + } - public function isVoid(): bool - { - return in_array($this->name, ['br', 'hr', 'img', 'input', 'meta']); - } + if (in_array($this->name, ['img','br','hr','input','meta'])){ + return $result; + } - public function content(): string - { - return htmlentities($this->content, ENT_QUOTES, 'UTF-8'); + //imprimit el contenido + $result .= htmlentities($this->content,ENT_QUOTES,'UTF-8'); + //cerrar la etiqueta + $result .='name.'>'; + return $result; } - public function close(): string - { - return 'name.'>'; - } } \ No newline at end of file From 6c7ad3f65943c4afa233397e3cda4a35c83808e4 Mon Sep 17 00:00:00 2001 From: Simon Montoya Palacio Date: Fri, 10 May 2019 09:45:13 -0500 Subject: [PATCH 6/7] agregar mas test despues de extraer metodos --- .phpunit.result.cache | 2 +- app/HtmlElement.php | 45 +++++++++++++++++++++++++++++++-------- tests/HtmlElementTest.php | 24 +++++++++++++++++++++ 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/.phpunit.result.cache b/.phpunit.result.cache index c55d56e..440f144 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -C:37:"PHPUnit\Runner\DefaultTestResultCache":1153:{a:2:{s:7:"defects";a:1:{s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";i:5;}s:5:"times";a:13:{s:32:"Tests\DummyTest::it_asserts_true";d:0.006;s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";d:0.007;s:65:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content";d:0.007;s:84:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_once_attribute";d:0;s:85:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_twice_attribute";d:0;s:52:"Tests\HtmlElementTest::test_it_generates_a_tag_image";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_image_with_attributes";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_attributes";d:0;s:71:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_attributes";d:0;s:83:"Tests\HtmlElementTest::test_it_generates_a_tag_image_it_escapes_the_html_attributes";d:0;s:76:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_boolean_attributes";d:0;s:79:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_boolean_attributes";d:0;s:57:"Tests\HtmlElementTest::test_it_generates_html_without_tag";d:0;}}} \ No newline at end of file +C:37:"PHPUnit\Runner\DefaultTestResultCache":1407:{a:2:{s:7:"defects";a:2:{s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";i:5;s:46:"Tests\HtmlElementTest::test_it_check_close_tag";i:3;}s:5:"times";a:16:{s:32:"Tests\DummyTest::it_asserts_true";d:0.006;s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";d:0.007;s:65:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content";d:0.001;s:84:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_once_attribute";d:0;s:85:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_twice_attribute";d:0;s:52:"Tests\HtmlElementTest::test_it_generates_a_tag_image";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_image_with_attributes";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_attributes";d:0;s:71:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_attributes";d:0;s:83:"Tests\HtmlElementTest::test_it_generates_a_tag_image_it_escapes_the_html_attributes";d:0;s:76:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_boolean_attributes";d:0;s:79:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_boolean_attributes";d:0;s:57:"Tests\HtmlElementTest::test_it_generates_html_without_tag";d:0;s:65:"Tests\HtmlElementTest::test_it_checks_if_a_element_is_void_or_not";d:0.005;s:46:"Tests\HtmlElementTest::test_it_check_close_tag";d:0;s:45:"Tests\HtmlElementTest::test_it_check_open_tag";d:0;}}} \ No newline at end of file diff --git a/app/HtmlElement.php b/app/HtmlElement.php index baff750..2c14c17 100644 --- a/app/HtmlElement.php +++ b/app/HtmlElement.php @@ -28,7 +28,21 @@ public function __construct(string $name, array $attributes =[], $content = null public function render() { - //si el elemento tiene atributos + $result = $this->open(); + + if ($this->isVoid()){ + return $result; + } + + $result .= $this->content(); + + $result .= $this->close(); + + return $result; + } + + public function open() + { if (! empty($this->attributes)){ $htmlAttributes = ''; foreach ($this->attributes as $attribute => $value){ @@ -45,15 +59,28 @@ public function render() $result = '<'.$this->name.'>'; } - if (in_array($this->name, ['img','br','hr','input','meta'])){ - return $result; - } - - //imprimit el contenido - $result .= htmlentities($this->content,ENT_QUOTES,'UTF-8'); - //cerrar la etiqueta - $result .='name.'>'; return $result; } + public function isVoid() + { + return in_array($this->name, ['img','br','hr','input','meta']); + } + + /** + * @return string + */ + public function content() + { + return htmlentities($this->content, ENT_QUOTES, 'UTF-8'); + } + + /** + * @return string + */ + public function close() + { + return 'name . '>'; + } + } \ No newline at end of file diff --git a/tests/HtmlElementTest.php b/tests/HtmlElementTest.php index d6916d3..70b5062 100644 --- a/tests/HtmlElementTest.php +++ b/tests/HtmlElementTest.php @@ -8,6 +8,15 @@ class HtmlElementTest extends TestCase { + function test_it_checks_if_a_element_is_void_or_not() + { + $this->assertFalse((new HtmlElement('p'))->isVoid()); + + $this->assertTrue((new HtmlElement('img'))->isVoid()); + + $this->assertTrue((new HtmlElement('input'))->isVoid()); + } + function test_it_generates_a_paragraph_with_content() { $element = new HtmlElement('p',[],'este es el contenido'); @@ -88,6 +97,21 @@ function test_it_generates_html_without_tag() '<>este es el contenido', $element->render() ); + } + + function test_it_check_open_tag() + { + $this->assertSame( + '

', + (new HtmlElement('p'))->open() + ); + } + function test_it_check_close_tag() + { + $this->assertSame( + '

', + (new HtmlElement('p'))->close() + ); } } \ No newline at end of file From d1f2b06c5e414ba6313eaa038eefa49842c2fd9a Mon Sep 17 00:00:00 2001 From: Simon Montoya Palacio Date: Fri, 10 May 2019 11:43:25 -0500 Subject: [PATCH 7/7] agregar mas test --- .phpunit.result.cache | 2 +- app/HtmlAttributes.php | 2 +- app/HtmlElement.php | 74 +++++++++++++++++++++++++++------------ tests/HtmlElementTest.php | 20 +++++++++++ 4 files changed, 73 insertions(+), 25 deletions(-) diff --git a/.phpunit.result.cache b/.phpunit.result.cache index 440f144..1f939d5 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -C:37:"PHPUnit\Runner\DefaultTestResultCache":1407:{a:2:{s:7:"defects";a:2:{s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";i:5;s:46:"Tests\HtmlElementTest::test_it_check_close_tag";i:3;}s:5:"times";a:16:{s:32:"Tests\DummyTest::it_asserts_true";d:0.006;s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";d:0.007;s:65:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content";d:0.001;s:84:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_once_attribute";d:0;s:85:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_twice_attribute";d:0;s:52:"Tests\HtmlElementTest::test_it_generates_a_tag_image";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_image_with_attributes";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_attributes";d:0;s:71:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_attributes";d:0;s:83:"Tests\HtmlElementTest::test_it_generates_a_tag_image_it_escapes_the_html_attributes";d:0;s:76:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_boolean_attributes";d:0;s:79:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_boolean_attributes";d:0;s:57:"Tests\HtmlElementTest::test_it_generates_html_without_tag";d:0;s:65:"Tests\HtmlElementTest::test_it_checks_if_a_element_is_void_or_not";d:0.005;s:46:"Tests\HtmlElementTest::test_it_check_close_tag";d:0;s:45:"Tests\HtmlElementTest::test_it_check_open_tag";d:0;}}} \ No newline at end of file +C:37:"PHPUnit\Runner\DefaultTestResultCache":2591:{a:2:{s:7:"defects";a:15:{s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";i:5;s:46:"Tests\HtmlElementTest::test_it_check_close_tag";i:4;s:51:"Tests\HtmlElementTest::test_it_generates_attributes";i:4;s:84:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_once_attribute";i:4;s:85:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_twice_attribute";i:4;s:52:"Tests\HtmlElementTest::test_it_generates_a_tag_image";i:4;s:83:"Tests\HtmlElementTest::test_it_generates_a_tag_image_it_escapes_the_html_attributes";i:4;s:76:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_boolean_attributes";i:4;s:65:"Tests\HtmlElementTest::test_it_checks_if_a_element_is_void_or_not";i:4;s:65:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content";i:4;s:79:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_boolean_attributes";i:4;s:57:"Tests\HtmlElementTest::test_it_generates_html_without_tag";i:4;s:45:"Tests\HtmlElementTest::test_it_check_open_tag";i:4;s:42:"Tests\HtmlElementTest::test_check_is_empty";i:3;s:53:"Tests\HtmlElementTest::test_check_attributes_is_empty";i:4;}s:5:"times";a:19:{s:32:"Tests\DummyTest::it_asserts_true";d:0.006;s:54:"Tests\HtmlElementTest::test_it_generates_html_elements";d:0.007;s:65:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content";d:0;s:84:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_once_attribute";d:0;s:85:"Tests\HtmlElementTest::test_it_generates_a_paragraph_with_content_and_twice_attribute";d:0;s:52:"Tests\HtmlElementTest::test_it_generates_a_tag_image";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_image_with_attributes";d:0;s:68:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_attributes";d:0;s:71:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_attributes";d:0;s:83:"Tests\HtmlElementTest::test_it_generates_a_tag_image_it_escapes_the_html_attributes";d:0;s:76:"Tests\HtmlElementTest::test_it_generates_a_tag_input_with_boolean_attributes";d:0;s:79:"Tests\HtmlElementTest::test_it_generates_a_tag_input_without_boolean_attributes";d:0;s:57:"Tests\HtmlElementTest::test_it_generates_html_without_tag";d:0.001;s:65:"Tests\HtmlElementTest::test_it_checks_if_a_element_is_void_or_not";d:0.008;s:46:"Tests\HtmlElementTest::test_it_check_close_tag";d:0;s:45:"Tests\HtmlElementTest::test_it_check_open_tag";d:0;s:51:"Tests\HtmlElementTest::test_it_generates_attributes";d:0.001;s:42:"Tests\HtmlElementTest::test_check_is_empty";d:0.008;s:53:"Tests\HtmlElementTest::test_check_attributes_is_empty";d:0;}}} \ No newline at end of file diff --git a/app/HtmlAttributes.php b/app/HtmlAttributes.php index 8ad06fa..4dabc49 100644 --- a/app/HtmlAttributes.php +++ b/app/HtmlAttributes.php @@ -14,7 +14,7 @@ public function __construct(array $attributes = []) $this->attributes = $attributes; } - public function render(): string + public function render() { return array_reduce(array_keys($this->attributes), function ($result, $attribute) { return $result . $this->renderAttribute($attribute); diff --git a/app/HtmlElement.php b/app/HtmlElement.php index 2c14c17..8471cf5 100644 --- a/app/HtmlElement.php +++ b/app/HtmlElement.php @@ -23,45 +23,73 @@ public function __construct(string $name, array $attributes =[], $content = null { $this->name = $name; $this->content = $content; - $this->attributes = $attributes; + $this->attributes = new HtmlAttributes($attributes); } public function render() { - $result = $this->open(); - if ($this->isVoid()){ - return $result; + return $this->open(); } - $result .= $this->content(); - - $result .= $this->close(); - - return $result; + return $this->open().$this->content().$this->close(); } public function open() { - if (! empty($this->attributes)){ - $htmlAttributes = ''; - foreach ($this->attributes as $attribute => $value){ - if (is_numeric($attribute)){ - $htmlAttributes .= ' '.$value; - }else{ - $htmlAttributes .= ' '.$attribute.'="'.htmlentities($value,ENT_QUOTES,'UTF-8').'"';// - } - } - //abrir la etiqueta con atributos - $result = '<'.$this->name.$htmlAttributes.'>'; + if ($this->hasAttributes()){ + return '<'.$this->name.$this->attributes->render().'>'; }else{ - //abrir la etiqueta sin atributos - $result = '<'.$this->name.'>'; + return '<'.$this->name.'>'; } + } + + public function attributes() + { + return $this->attributes->render(); + } - return $result; + /** + * @return bool + */ + public function hasAttributes() + { + return !empty($this->getAttributes()); } + /*public function attributes() + { + + return array_reduce(array_keys($this->getAttributes()),function ($result,$attribute){ + return $result . $this->attributes->render($attribute); + },''); + + /*$htmlAttributes = ''; + + foreach ($this->attributes as $attribute => $value){ + + $htmlAttributes .= $this->renderAttribute($attribute,$value); + + } + + return $htmlAttributes; + }*/ + + /*protected function renderAttribute($attribute) + { + if (is_numeric($attribute)){ + return ' '.$this->getAttributes()[$attribute]; + } + + return ' '.$attribute.'="'.htmlentities($this->getAttributes()[$attribute],ENT_QUOTES,'UTF-8').'"';// + }*/ + + protected function getAttributes() + { + return $this->attributes->attributes; + } + + public function isVoid() { return in_array($this->name, ['img','br','hr','input','meta']); diff --git a/tests/HtmlElementTest.php b/tests/HtmlElementTest.php index 70b5062..db60b07 100644 --- a/tests/HtmlElementTest.php +++ b/tests/HtmlElementTest.php @@ -17,6 +17,17 @@ function test_it_checks_if_a_element_is_void_or_not() $this->assertTrue((new HtmlElement('input'))->isVoid()); } + function test_it_generates_attributes() + { + $element = new HtmlElement('span',['class' => 'a_spam', 'id' => 'the_spam' ]); + + $this->assertSame( + ' class="a_spam" id="the_spam"', + $element->attributes() + + ); + } + function test_it_generates_a_paragraph_with_content() { $element = new HtmlElement('p',[],'este es el contenido'); @@ -79,6 +90,15 @@ function test_it_generates_a_tag_input_with_boolean_attributes() ); } + function test_check_attributes_is_empty() + { + $element = new HtmlElement('p',[]); + $this->assertFalse( + $element->hasAttributes() + ); + + } + function test_it_generates_a_tag_input_without_boolean_attributes() { $element = new HtmlElement('input');