summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozpack/test/test_errors.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozpack/test/test_errors.py')
-rw-r--r--python/mozbuild/mozpack/test/test_errors.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/python/mozbuild/mozpack/test/test_errors.py b/python/mozbuild/mozpack/test/test_errors.py
new file mode 100644
index 0000000000..411b1b54c3
--- /dev/null
+++ b/python/mozbuild/mozpack/test/test_errors.py
@@ -0,0 +1,95 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import sys
+import unittest
+
+import mozunit
+import six
+
+from mozpack.errors import AccumulatedErrors, ErrorMessage, errors
+
+
+class TestErrors(object):
+ def setUp(self):
+ errors.out = six.moves.cStringIO()
+ errors.ignore_errors(False)
+
+ def tearDown(self):
+ errors.out = sys.stderr
+
+ def get_output(self):
+ return [l.strip() for l in errors.out.getvalue().splitlines()]
+
+
+class TestErrorsImpl(TestErrors, unittest.TestCase):
+ def test_plain_error(self):
+ errors.warn("foo")
+ self.assertRaises(ErrorMessage, errors.error, "foo")
+ self.assertRaises(ErrorMessage, errors.fatal, "foo")
+ self.assertEqual(self.get_output(), ["warning: foo"])
+
+ def test_ignore_errors(self):
+ errors.ignore_errors()
+ errors.warn("foo")
+ errors.error("bar")
+ self.assertRaises(ErrorMessage, errors.fatal, "foo")
+ self.assertEqual(self.get_output(), ["warning: foo", "warning: bar"])
+
+ def test_no_error(self):
+ with errors.accumulate():
+ errors.warn("1")
+
+ def test_simple_error(self):
+ with self.assertRaises(AccumulatedErrors):
+ with errors.accumulate():
+ errors.error("1")
+ self.assertEqual(self.get_output(), ["error: 1"])
+
+ def test_error_loop(self):
+ with self.assertRaises(AccumulatedErrors):
+ with errors.accumulate():
+ for i in range(3):
+ errors.error("%d" % i)
+ self.assertEqual(self.get_output(), ["error: 0", "error: 1", "error: 2"])
+
+ def test_multiple_errors(self):
+ with self.assertRaises(AccumulatedErrors):
+ with errors.accumulate():
+ errors.error("foo")
+ for i in range(3):
+ if i == 2:
+ errors.warn("%d" % i)
+ else:
+ errors.error("%d" % i)
+ errors.error("bar")
+ self.assertEqual(
+ self.get_output(),
+ ["error: foo", "error: 0", "error: 1", "warning: 2", "error: bar"],
+ )
+
+ def test_errors_context(self):
+ with self.assertRaises(AccumulatedErrors):
+ with errors.accumulate():
+ self.assertEqual(errors.get_context(), None)
+ with errors.context("foo", 1):
+ self.assertEqual(errors.get_context(), ("foo", 1))
+ errors.error("a")
+ with errors.context("bar", 2):
+ self.assertEqual(errors.get_context(), ("bar", 2))
+ errors.error("b")
+ self.assertEqual(errors.get_context(), ("foo", 1))
+ errors.error("c")
+ self.assertEqual(
+ self.get_output(),
+ [
+ "error: foo:1: a",
+ "error: bar:2: b",
+ "error: foo:1: c",
+ ],
+ )
+
+
+if __name__ == "__main__":
+ mozunit.main()