blob: 662173f9444fd1e1a375bf5845f450cf9cbbf649 [file] [log] [blame]
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import unittest
from mobly import asserts
from mobly import signals
MSG_EXPECTED_EXCEPTION = 'This is an expected exception.'
_OBJECT_1 = object()
_OBJECT_2 = object()
class AssertsTest(unittest.TestCase):
"""Verifies that asserts.xxx functions raise the correct test signals."""
def test_assert_false(self):
asserts.assert_false(False, MSG_EXPECTED_EXCEPTION)
with self.assertRaisesRegex(signals.TestFailure, MSG_EXPECTED_EXCEPTION):
asserts.assert_false(True, MSG_EXPECTED_EXCEPTION)
def test_assert_not_equal_pass(self):
asserts.assert_not_equal(1, 2)
def test_assert_not_equal_pass_with_msg_and_extras(self):
asserts.assert_not_equal(1, 2, msg='Message', extras='Extras')
def test_assert_not_equal_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_equal(1, 1)
self.assertEqual(cm.exception.details, '1 == 1')
def test_assert_not_equal_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_equal(1, 1, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details, '1 == 1 Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_almost_equal_pass(self):
asserts.assert_almost_equal(1.000001, 1.000002, places=3)
asserts.assert_almost_equal(1.0, 1.05, delta=0.1)
def test_assert_almost_equal_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_almost_equal(1, 1.0005, places=7)
self.assertRegex(cm.exception.details, r'1 != 1\.0005 within 7 places')
def test_assert_almost_equal_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_almost_equal(1,
2,
delta=0.1,
msg='Message',
extras='Extras')
self.assertRegex(cm.exception.details, r'1 != 2 within 0\.1 delta.*Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_not_almost_equal_pass(self):
asserts.assert_not_almost_equal(1.001, 1.002, places=3)
asserts.assert_not_almost_equal(1.0, 1.05, delta=0.01)
def test_assert_not_almost_equal_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_almost_equal(1, 1.0005, places=3)
self.assertRegex(cm.exception.details, r'1 == 1\.0005 within 3 places')
def test_assert_not_almost_equal_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_almost_equal(1,
2,
delta=1,
msg='Message',
extras='Extras')
self.assertRegex(cm.exception.details, r'1 == 2 within 1 delta.*Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_in_pass(self):
asserts.assert_in(1, [1, 2, 3])
asserts.assert_in(1, (1, 2, 3))
asserts.assert_in(1, {1: 2, 3: 4})
asserts.assert_in('a', 'abcd')
def test_assert_in_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_in(4, [1, 2, 3])
self.assertEqual(cm.exception.details, '4 not found in [1, 2, 3]')
def test_assert_in_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_in(4, [1, 2, 3], msg='Message', extras='Extras')
self.assertEqual(cm.exception.details, '4 not found in [1, 2, 3] Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_not_in_pass(self):
asserts.assert_not_in(4, [1, 2, 3])
asserts.assert_not_in(4, (1, 2, 3))
asserts.assert_not_in(4, {1: 2, 3: 4})
asserts.assert_not_in('e', 'abcd')
def test_assert_not_in_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_in(1, [1, 2, 3])
self.assertEqual(cm.exception.details, '1 unexpectedly found in [1, 2, 3]')
def test_assert_not_in_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_in(1, [1, 2, 3], msg='Message', extras='Extras')
self.assertEqual(cm.exception.details,
'1 unexpectedly found in [1, 2, 3] Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_is_pass(self):
asserts.assert_is(_OBJECT_1, _OBJECT_1)
def test_assert_is_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is(_OBJECT_1, _OBJECT_2)
self.assertEqual(cm.exception.details, f'{_OBJECT_1} is not {_OBJECT_2}')
def test_assert_is_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is(_OBJECT_1, _OBJECT_2, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details,
f'{_OBJECT_1} is not {_OBJECT_2} Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_is_not_pass(self):
asserts.assert_is_not(_OBJECT_1, _OBJECT_2)
def test_assert_is_not_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is_not(_OBJECT_1, _OBJECT_1)
self.assertEqual(cm.exception.details,
f'unexpectedly identical: {_OBJECT_1}')
def test_assert_is_not_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is_not(_OBJECT_1,
_OBJECT_1,
msg='Message',
extras='Extras')
self.assertEqual(cm.exception.details,
f'unexpectedly identical: {_OBJECT_1} Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_count_equal_pass(self):
asserts.assert_count_equal((1, 3, 3), [3, 1, 3])
def test_assert_count_equal_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_count_equal([3, 3], [3])
self.assertEqual(
cm.exception.details,
'Element counts were not equal:\nFirst has 2, Second has 1: 3')
def test_assert_count_equal_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_count_equal((3, 3), (4, 4), msg='Message', extras='Extras')
self.assertEqual(cm.exception.details,
('Element counts were not equal:\n'
'First has 2, Second has 0: 3\n'
'First has 0, Second has 2: 4 Message'))
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_less_pass(self):
asserts.assert_less(1.0, 2)
def test_assert_less_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_less(1, 1)
self.assertEqual(cm.exception.details, '1 not less than 1')
def test_assert_less_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_less(2, 1, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details, '2 not less than 1 Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_less_equal_pass(self):
asserts.assert_less_equal(1.0, 2)
asserts.assert_less_equal(1, 1)
def test_assert_less_equal_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_less_equal(2, 1)
self.assertEqual(cm.exception.details, '2 not less than or equal to 1')
def test_assert_less_equal_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_less_equal(2, 1, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details,
'2 not less than or equal to 1 Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_greater_pass(self):
asserts.assert_greater(2, 1.0)
def test_assert_greater_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_greater(1, 1)
self.assertEqual(cm.exception.details, '1 not greater than 1')
def test_assert_greater_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_greater(1, 2, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details, '1 not greater than 2 Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_greater_equal_pass(self):
asserts.assert_greater_equal(2, 1.0)
asserts.assert_greater_equal(1, 1)
def test_assert_greater_equal_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_greater_equal(1, 2)
self.assertEqual(cm.exception.details, '1 not greater than or equal to 2')
def test_assert_greater_equal_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_greater_equal(1, 2, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details,
'1 not greater than or equal to 2 Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_is_none_pass(self):
asserts.assert_is_none(None)
def test_assert_is_none_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is_none(1)
self.assertEqual(cm.exception.details, '1 is not None')
def test_assert_is_none_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is_none(1, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details, '1 is not None Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_is_not_none_pass(self):
asserts.assert_is_not_none(1)
def test_assert_is_not_none_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is_not_none(None)
self.assertEqual(cm.exception.details, 'unexpectedly None')
def test_assert_is_none_not_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is_not_none(None, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details, 'unexpectedly None Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_is_instance_pass(self):
asserts.assert_is_instance('foo', str)
asserts.assert_is_instance(1, int)
asserts.assert_is_instance(1.0, float)
def test_assert_is_instance_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is_instance(1, str)
self.assertEqual(cm.exception.details, f'1 is not an instance of {str}')
def test_assert_is_instance_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_is_instance(1.0, int, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details,
f'1.0 is not an instance of {int} Message')
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_not_is_instance_pass(self):
asserts.assert_not_is_instance('foo', int)
asserts.assert_not_is_instance(1, float)
asserts.assert_not_is_instance(1.0, int)
def test_assert_not_is_instance_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_is_instance(1, int)
self.assertEqual(cm.exception.details, f'1 is an instance of {int}')
def test_assert_not_is_instance_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_is_instance('foo', str, msg='Message', extras='Extras')
self.assertEqual(cm.exception.details,
f"'foo' is an instance of {str} Message")
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_regex_pass(self):
asserts.assert_regex('Big rocks', r'(r|m)ocks')
def test_assert_regex_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_regex('Big socks', r'(r|m)ocks')
self.assertEqual(
cm.exception.details,
"Regex didn't match: '(r|m)ocks' not found in 'Big socks'")
def test_assert_regex_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_regex('Big socks',
r'(r|m)ocks',
msg='Message',
extras='Extras')
self.assertEqual(
cm.exception.details,
("Regex didn't match: '(r|m)ocks' not found in 'Big socks' "
'Message'))
self.assertEqual(cm.exception.extras, 'Extras')
def test_assert_not_regex_pass(self):
asserts.assert_not_regex('Big socks', r'(r|m)ocks')
def test_assert_not_regex_fail(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_regex('Big rocks', r'(r|m)ocks')
self.assertEqual(
cm.exception.details,
"Regex matched: 'rocks' matches '(r|m)ocks' in 'Big rocks'")
def test_assert_not_regex_fail_with_msg_and_extras(self):
with self.assertRaises(signals.TestFailure) as cm:
asserts.assert_not_regex('Big mocks',
r'(r|m)ocks',
msg='Message',
extras='Extras')
self.assertEqual(
cm.exception.details,
("Regex matched: 'mocks' matches '(r|m)ocks' in 'Big mocks' "
'Message'))
self.assertEqual(cm.exception.extras, 'Extras')
if __name__ == '__main__':
unittest.main()