|
1 | 1 | import datetime |
| 2 | +from enum import Enum |
2 | 3 | from unittest import TestCase |
3 | 4 |
|
4 | | -from asserts import assert_true, assert_false, assert_is_none, assert_equal |
| 5 | +from asserts import assert_true, assert_false, assert_is_none, assert_equal, \ |
| 6 | + assert_raises |
5 | 7 |
|
6 | 8 | from htmlgen.attribute import ( |
7 | 9 | html_attribute, |
|
12 | 14 | list_html_attribute, |
13 | 15 | data_attribute, |
14 | 16 | css_class_attribute, |
| 17 | + enum_attribute, |
15 | 18 | ) |
16 | 19 | from htmlgen.element import Element |
17 | 20 |
|
@@ -226,3 +229,51 @@ class MyElement(Element): |
226 | 229 | assert_true(element.has_css_class("my-class")) |
227 | 230 | element.attr = True |
228 | 231 | assert_true(element.has_css_class("my-class")) |
| 232 | + |
| 233 | + |
| 234 | +class TestEnum(Enum): |
| 235 | + FOO = "foo" |
| 236 | + BAR = "bar" |
| 237 | + |
| 238 | + |
| 239 | +class EnumAttributeTest(TestCase): |
| 240 | + def test_enum(self): |
| 241 | + class MyElement(Element): |
| 242 | + attr = enum_attribute("attr", TestEnum) |
| 243 | + |
| 244 | + element = MyElement("div") |
| 245 | + assert_is_none(element.attr) |
| 246 | + assert_equal("<div></div>", str(element)) |
| 247 | + element.attr = TestEnum.BAR |
| 248 | + assert_equal(TestEnum.BAR, element.attr) |
| 249 | + assert_equal('<div attr="bar"></div>', str(element)) |
| 250 | + element.attr = None |
| 251 | + assert_is_none(element.attr) |
| 252 | + assert_equal('<div></div>', str(element)) |
| 253 | + |
| 254 | + def test_default(self): |
| 255 | + class MyElement(Element): |
| 256 | + attr = enum_attribute("attr", TestEnum, default=TestEnum.FOO) |
| 257 | + |
| 258 | + element = MyElement("div") |
| 259 | + assert_equal(TestEnum.FOO, element.attr) |
| 260 | + assert_equal("<div></div>", str(element)) |
| 261 | + element.attr = TestEnum.BAR |
| 262 | + assert_equal(TestEnum.BAR, element.attr) |
| 263 | + assert_equal('<div attr="bar"></div>', str(element)) |
| 264 | + element.attr = None |
| 265 | + assert_equal(TestEnum.FOO, element.attr) |
| 266 | + assert_equal("<div></div>", str(element)) |
| 267 | + |
| 268 | + def test_not_an_enum(self): |
| 269 | + with assert_raises(TypeError): |
| 270 | + class MyElement(Element): |
| 271 | + attr = enum_attribute("attr", "foo") # type: ignore |
| 272 | + |
| 273 | + def test_invalid_value(self): |
| 274 | + class MyElement(Element): |
| 275 | + attr = enum_attribute("attr", TestEnum) |
| 276 | + |
| 277 | + element = MyElement("div") |
| 278 | + with assert_raises(TypeError): |
| 279 | + element.attr = "foo" # type: ignore |
0 commit comments