1 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 """Tests for the geometry module.""" 6 7 import unittest 8 9 from devil.utils import geometry as g 10 11 12 class PointTest(unittest.TestCase): 13 14 def testStr(self): 15 p = g.Point(1, 2) 16 self.assertEquals(str(p), '(1, 2)') 17 18 def testAdd(self): 19 p = g.Point(1, 2) 20 q = g.Point(3, 4) 21 r = g.Point(4, 6) 22 self.assertEquals(p + q, r) 23 24 def testAdd_TypeErrorWithInvalidOperands(self): 25 # pylint: disable=pointless-statement 26 p = g.Point(1, 2) 27 with self.assertRaises(TypeError): 28 p + 4 # Can't add point and scalar. 29 with self.assertRaises(TypeError): 30 4 + p # Can't add scalar and point. 31 32 def testMult(self): 33 p = g.Point(1, 2) 34 r = g.Point(2, 4) 35 self.assertEquals(2 * p, r) # Multiply by scalar on the left. 36 37 def testMult_TypeErrorWithInvalidOperands(self): 38 # pylint: disable=pointless-statement 39 p = g.Point(1, 2) 40 q = g.Point(2, 4) 41 with self.assertRaises(TypeError): 42 p * q # Can't multiply points. 43 with self.assertRaises(TypeError): 44 p * 4 # Can't multiply by a scalar on the right. 45 46 47 class RectangleTest(unittest.TestCase): 48 49 def testStr(self): 50 r = g.Rectangle(g.Point(0, 1), g.Point(2, 3)) 51 self.assertEquals(str(r), '[(0, 1), (2, 3)]') 52 53 def testCenter(self): 54 r = g.Rectangle(g.Point(0, 1), g.Point(2, 3)) 55 c = g.Point(1, 2) 56 self.assertEquals(r.center, c) 57 58 def testFromJson(self): 59 r1 = g.Rectangle(g.Point(0, 1), g.Point(2, 3)) 60 r2 = g.Rectangle.FromDict({'top': 1, 'left': 0, 'bottom': 3, 'right': 2}) 61 self.assertEquals(r1, r2) 62