1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3# This file is part of Xpra. 4# Copyright (C) 2014-2019 Antoine Martin <antoine@xpra.org> 5# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 6# later version. See the file COPYING for details. 7 8import unittest 9 10try: 11 from xpra.rectangle import rectangle #@UnresolvedImport 12 13 R1 = rectangle(0, 0, 20, 20) 14 R2 = rectangle(0, 0, 20, 20) 15 R3 = rectangle(0, 0, 40, 40) 16 R4 = rectangle(10, 10, 50, 50) 17 R5 = rectangle(100, 100, 100, 100) 18except ImportError: 19 rectangle, R1, R2, R3, R4, R5 = None, None, None, None, None, None 20 21 22class TestRegion(unittest.TestCase): 23 24 def test_eq(self): 25 assert R1==R2 26 assert R1!=R3 27 assert R2!=R3 28 29 def test_intersection(self): 30 r1 = rectangle(0, 0, 100, 100) 31 r2 = rectangle(50, 50, 200, 200) 32 i = r1.intersection_rect(r2) 33 assert i.x==50 and i.y==50 and i.width==50 and i.height==50 34 i2 = r2.intersection_rect(r1) 35 assert i2==i 36 r3 = rectangle(100, 100, 50, 50) 37 i = r2.intersection_rect(r3) 38 assert i==r3 39 r4 = rectangle(0, 0, 10, 10) 40 i = r3.intersection_rect(r4) 41 assert i is None 42 43 def test_contains(self): 44 assert R1.contains_rect(R2) 45 assert not R1.contains_rect(R3) 46 assert R3.contains_rect(R1) 47 assert not R1.contains_rect(R4) 48 assert not R1.contains_rect(R5) 49 50 def test_substract(self): 51 # ########## ########## 52 # # # ########## 53 # # # ########## 54 # # # ########## 55 # # ## # -> + #### + #### + 56 # # ## # #### #### 57 # # # ########## 58 # # # ########## 59 # # # ########## 60 # ########## ########## 61 r = rectangle(0, 0, 100, 100) 62 sub = rectangle(40, 40, 20, 20) 63 l = r.substract_rect(sub) 64 assert len(l)==4 65 #verify total area has not changed: 66 total = r.width*r.height 67 assert total == sum(r.width*r.height for r in l+[sub]) 68 assert rectangle(0, 0, 100, 40) in l 69 assert rectangle(0, 40, 40, 20) in l 70 assert rectangle(0, 40, 40, 20) in l 71 # at (0,0) 72 # ########## 73 # # # 74 # # # 75 # # # 76 # # # at (50, 50) 77 # # # ########## 78 # # # # # 79 # # # - # # 80 # # # # # 81 # ########## # # 82 # # # 83 # # # 84 # # # 85 # # # 86 # ########## 87 r = rectangle(0, 0, 100, 100) 88 sub = rectangle(50, 50, 100, 100) 89 l = r.substract_rect(sub) 90 assert len(l)==2 91 assert rectangle(0, 0, 100, 50) in l 92 assert rectangle(0, 50, 50, 50) in l 93 assert rectangle(200, 200, 0, 0) not in l 94 95 96def main(): 97 #skip test if import failed (ie: not a server build) 98 if rectangle is not None: 99 unittest.main() 100 else: 101 print("no rectangle class, test skipped") 102 103if __name__ == '__main__': 104 main() 105