From 8d27b50a7c4afa91afb2e51c1e46bf3f678dd920 Mon Sep 17 00:00:00 2001 From: Sergei Trofimov Date: Wed, 9 Aug 2017 14:56:32 +0100 Subject: [PATCH] tests: add tests documenting enum behavior Add tests that exercising various ways of creating and using WA enums. --- tests/test_utils.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tests/test_utils.py b/tests/test_utils.py index 270beaa4..60dec0dc 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -18,7 +18,7 @@ from unittest import TestCase from nose.tools import raises, assert_equal, assert_not_equal, assert_in, assert_not_in -from nose.tools import assert_true, assert_false +from nose.tools import assert_true, assert_false, assert_raises, assert_is, assert_list_equal from wa.utils.types import (list_or_integer, list_or_bool, caseless_string, arguments, prioritylist, enum, level) @@ -97,6 +97,37 @@ class TestPriorityList(TestCase): class TestEnumLevel(TestCase): + def test_enum_creation(self): + e = enum(['one', 'two', 'three']) + assert_list_equal(e.values, [0, 1, 2]) + + e = enum(['one', 'two', 'three'], start=10) + assert_list_equal(e.values, [10, 11, 12]) + + e = enum(['one', 'two', 'three'], start=-10, step=10) + assert_list_equal(e.values, [-10, 0, 10]) + + def test_enum_behavior(self): + e = enum(['one', 'two', 'three']) + + # case-insensitive level name and level value may all + # be used for equality comparisons. + assert_equal(e.one, 'one') + assert_equal(e.one, 'ONE') + assert_equal(e.one, 0) + assert_not_equal(e.one, '0') + + # ditto for enum membership tests + assert_in('one', e.values) + assert_in(2, e.values) + assert_not_in('five', e.values) + + # The same level object returned, only when + # passing in a valid level name/value. + assert_is(e('one'), e('ONE')) + assert_is(e('one'), e(0)) + assert_raises(ValueError, e, 'five') + def test_serialize_level(self): l = level('test', 1) s = l.to_pod()