| # 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/. |
| |
| from mozpack.errors import ( |
| errors, |
| ErrorMessage, |
| AccumulatedErrors, |
| ) |
| import unittest |
| import mozunit |
| import sys |
| from cStringIO import StringIO |
| |
| |
| class TestErrors(object): |
| def setUp(self): |
| errors.out = StringIO() |
| 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.assertEquals(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.assertEquals(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.assertEquals(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.assertEquals(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.assertEquals(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() |