From 18dcb5a598d29a4c0b4b08a5fc8362225886f319 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Tue, 11 Apr 2017 15:07:12 +0300 Subject: Add assertion functions --- yarnutils/__init__.py | 10 +++++++ yarnutils/asserts.py | 66 ++++++++++++++++++++++++++++++++++++++++++++ yarnutils/asserts_tests.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 yarnutils/asserts.py create mode 100644 yarnutils/asserts_tests.py (limited to 'yarnutils') diff --git a/yarnutils/__init__.py b/yarnutils/__init__.py index 58f0236..ffcbaaa 100644 --- a/yarnutils/__init__.py +++ b/yarnutils/__init__.py @@ -18,3 +18,13 @@ from .vars import Variables from .matches import get_next_match, set_env_for_matches +from .asserts import ( + AssertError, + assertTrue, + assertFalse, + assertEqual, + assertNotEqual, + assertGreaterThan, + assertLessThan, + assertIn, +) diff --git a/yarnutils/asserts.py b/yarnutils/asserts.py new file mode 100644 index 0000000..aea055d --- /dev/null +++ b/yarnutils/asserts.py @@ -0,0 +1,66 @@ +# Copyright 2017 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# =*= License: GPL-3+ =*= + + +class AssertError(Exception): + + pass + + +def assertTrue(thing): + if not thing: + raise AssertError('expected {!r} to be true'.format(thing)) + + +def assertFalse(thing): + if thing: + raise AssertError('expected {!r} to be false'.format(thing)) + + +def assertEqual(a, b): + if a != b: + raise AssertError( + 'expected {!r} and {!r} to be equal, but they are not'.format( + a, b)) + + +def assertNotEqual(a, b): + if a == b: + raise AssertError( + 'expected {!r} and {!r} to be different, but they are not'.format( + a, b)) + + +def assertGreaterThan(a, b): + if a <= b: + raise AssertError( + 'expected {!r} > {!r}, but am disappoint'.format( + a, b)) + + +def assertLessThan(a, b): + if a >= b: + raise AssertError( + 'expected {!r} < {!r}, but am disappoint'.format( + a, b)) + + +def assertIn(a, b): + if a not in b: + raise AssertError( + 'expected {!r} in {!r}, but am disappoint'.format( + a, b)) diff --git a/yarnutils/asserts_tests.py b/yarnutils/asserts_tests.py new file mode 100644 index 0000000..dd3d4e8 --- /dev/null +++ b/yarnutils/asserts_tests.py @@ -0,0 +1,68 @@ +# Copyright 2017 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# =*= License: GPL-3+ =*= + + +import unittest + +import yarnutils + + +class AssertTests(unittest.TestCase): + + def test_true_and_false_work(self): + truths = [ + True, 1, "notempty", [0], (0,), {'foo': 0}, + ] + falsehoods = [ + None, False, 0, "", [], {}, + ] + + for thing in truths: + yarnutils.assertTrue(thing) + with self.assertRaises(yarnutils.AssertError): + yarnutils.assertFalse(thing) + + for thing in falsehoods: + yarnutils.assertFalse(thing) + with self.assertRaises(yarnutils.AssertError): + yarnutils.assertTrue(thing) + + def test_equal_works(self): + yarnutils.assertEqual(0, 0) + with self.assertRaises(yarnutils.AssertError): + yarnutils.assertEqual("foo", None) + + def test_not_equal_works(self): + yarnutils.assertNotEqual(0, 1) + with self.assertRaises(yarnutils.AssertError): + yarnutils.assertNotEqual(0, 0) + + def test_gt_works(self): + yarnutils.assertGreaterThan(1, 0) + with self.assertRaises(yarnutils.AssertError): + yarnutils.assertGreaterThan(0, 1) + + def test_lt_works(self): + yarnutils.assertLessThan(0, 1) + with self.assertRaises(yarnutils.AssertError): + yarnutils.assertLessThan(1, 0) + + def test_in_works(self): + yarnutils.assertIn(0, [0]) + with self.assertRaises(yarnutils.AssertError): + yarnutils.assertIn(0, []) + yarnutils.assertIn(0, [1, 2, 3]) -- cgit v1.2.1