python-efl/tests/evas/test_01_rect.py

368 lines
11 KiB
Python
Raw Normal View History

Put in a first, still wip, version of the python bindings in a merged tree. This is meant to be the 1.8 version of the wrappers and will include everything that now is in the python folder. Atm this include evas, ecore, edje, elementary and emotion (emotion still commented in the build couse it need some more testing). Eo is used as a base for all the objects that inherit from it in C, but in real nothing is used from Eo, it is used more like a container to share code between the libs. All the docs has been stripped out because we want to use the new sphinx style docs that Kay has done in his git repo. (Kay: please wait a little bit to include it, as working on the libs without docs is much more easy) The new wrappers include a new container module called efl and thus you can live with both the old and the new installation. This also means that you need to import the new modules as: "from efl import evas" (instead of the old "import evas") The idea here is that you can make your code works with both version doing something like: try: import evas except: from efl import evas ...like is done in the gtk bindings Some stuff has been leaved out on purpose, because was old stuff (like the hacked evas rotation stuff) or because was not working as expected (like all the ecore.evas.XXX modules). See the TODO.txt file for more info. Probably some stuff is out just because I missed them, let me know if you miss something. Improvements from the old version: - Py3 compatible (still some work to be done, but really only TODO, no problems to resolv) - Should also works on other platforms, like windoz (but not tested) - Unittests greatly improved, you can also run ALL tests at once - much more simpler :) I will contine the works in the next weeks and hope someone will help too. NOTE: I switched back to setup.py instead of autotools, because that is the right way to compile python stuff. So to build just use: python setup.py install or python3 setup.py install Enjoy davemds SVN revision: 83831
2013-02-11 14:32:50 -08:00
#!/usr/bin/env python
from efl import evas
import unittest
class TestRectBasics(unittest.TestCase):
def _test_values(self, r):
self.assertEqual(r.x, 1)
self.assertEqual(r.y, 2)
self.assertEqual(r.w, 3)
self.assertEqual(r.h, 4)
def testConstructorList(self):
r = evas.Rect(1, 2, 3, 4)
self._test_values(r)
def testConstructorTuple(self):
r = evas.Rect((1, 2, 3, 4))
self._test_values(r)
def testConstructorRect(self):
r = evas.Rect(evas.Rect(1, 2, 3, 4))
self._test_values(r)
def testConstructorKeywordsExplicit1(self):
r = evas.Rect(x=1, y=2, w=3, h=4)
self._test_values(r)
def testConstructorKeywordsExplicit2(self):
r = evas.Rect(left=1, top=2, width=3, height=4)
self._test_values(r)
def testConstructorKeywordsExplicit3(self):
r = evas.Rect(left=1, right=4, top=2, bottom=6)
self._test_values(r)
def testConstructorKeywordsExplicit4(self):
r = evas.Rect(right=4, bottom=6, width=3, height=4)
self._test_values(r)
def testConstructorKeywordsPosSize(self):
r = evas.Rect(pos=(1, 2), size=(3, 4))
self._test_values(r)
def testConstructorKeywordsGeometry(self):
r = evas.Rect(geometry=(1, 2, 3, 4))
self._test_values(r)
def testConstructorKeywordsRect(self):
r = evas.Rect(rect=evas.Rect(1, 2, 3, 4))
self._test_values(r)
class TestRectOperations(unittest.TestCase):
def setUp(self):
self.r = evas.Rect(10, 20, 30, 40)
def testContains(self):
r2 = evas.Rect(11, 21, 5, 5)
self.assertEqual(r2 in self.r, True)
def testContainsExactly(self):
r2 = evas.Rect(self.r)
self.assertEqual(r2 in self.r, True)
def testContainsLarger(self):
r2 = evas.Rect(0, 0, 100, 100)
self.assertEqual(r2 in self.r, False)
def testContainsOverlap1(self):
r2 = evas.Rect(0, 0, 20, 30)
self.assertEqual(r2 in self.r, False)
def testContainsOverlap2(self):
r2 = evas.Rect(15, 25, 50, 50)
self.assertEqual(r2 in self.r, False)
def testContainsTuple(self):
self.assertEqual((11, 21, 5, 5) in self.r, True)
def testContainsTupleLarger(self):
self.assertEqual((0, 0, 100, 100) in self.r, False)
def testContainsPoint(self):
self.assertEqual((15, 25) in self.r, True)
def testContainsPointNo(self):
self.assertEqual((0, 0) in self.r, False)
def testEqual(self):
self.assertEqual(self.r == self.r, True)
def testEqualOther(self):
self.assertEqual(self.r == evas.Rect(self.r), True)
def testEqualTuple(self):
self.assertEqual(self.r == (10, 20, 30, 40), True)
def testEqualOtherNo(self):
self.assertEqual(self.r == evas.Rect(1, 2, 3, 4), False)
def testEqualTupleNo(self):
self.assertEqual(self.r == (1, 2, 3, 4), False)
def testNotEqual(self):
self.assertEqual(self.r != self.r, False)
def testNotEqualOther(self):
self.assertEqual(self.r != evas.Rect(self.r), False)
def testNotEqualTuple(self):
self.assertEqual(self.r != (10, 20, 30, 40), False)
def testNotEqualOtherNo(self):
self.assertEqual(self.r != evas.Rect(1, 2, 3, 4), True)
def testNotEqualTupleNo(self):
self.assertEqual(self.r != (1, 2, 3, 4), True)
def testNormalize(self):
r2 = evas.Rect(left=10, right=0, top=20, bottom=0)
self.assertEqual(r2.left, 10)
self.assertEqual(r2.right, 0)
self.assertEqual(r2.top, 20)
self.assertEqual(r2.bottom, 0)
self.assertEqual(r2.w, -10)
self.assertEqual(r2.h, -20)
r2.normalize()
self.assertEqual(r2.left, 0)
self.assertEqual(r2.right, 10)
self.assertEqual(r2.top, 0)
self.assertEqual(r2.bottom, 20)
self.assertEqual(r2.w, 10)
self.assertEqual(r2.h, 20)
def testNonZero(self):
self.assertEqual(bool(self.r), True)
def testNonZero2(self):
self.assertEqual(bool(evas.Rect(0, 0, 0, 0)), False)
class TestRectIntercepts(unittest.TestCase):
def setUp(self):
self.r = evas.Rect(0, 0, 10, 10)
def testOver(self):
r2 = evas.Rect(self.r)
self.assert_(self.r.intercepts(r2))
def testInterceptTopLeft(self):
r2 = evas.Rect(-5, -5, 10, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptTopRight(self):
r2 = evas.Rect(5, -5, 10, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptBottomLeft(self):
r2 = evas.Rect(-5, 5, 10, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptBottomRight(self):
r2 = evas.Rect(5, 5, 10, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptLeft1(self):
r2 = evas.Rect(-5, 0, 10, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptLeft2(self):
r2 = evas.Rect(-5, 2, 10, 5)
self.assert_(self.r.intercepts(r2))
def testInterceptLeft3(self):
r2 = evas.Rect(-5, 5, 30, 5)
self.assert_(self.r.intercepts(r2))
def testInterceptRight1(self):
r2 = evas.Rect(5, 0, 10, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptRight2(self):
r2 = evas.Rect(5, 2, 10, 5)
self.assert_(self.r.intercepts(r2))
def testInterceptRight3(self):
r2 = evas.Rect(5, 5, 30, 5)
self.assert_(self.r.intercepts(r2))
def testInterceptTop1(self):
r2 = evas.Rect(0, -5, 10, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptTop2(self):
r2 = evas.Rect(2, -5, 5, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptTop3(self):
r2 = evas.Rect(5, -5, 5, 30)
self.assert_(self.r.intercepts(r2))
def testInterceptBottom1(self):
r2 = evas.Rect(0, 5, 10, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptBottom2(self):
r2 = evas.Rect(2, 5, 5, 10)
self.assert_(self.r.intercepts(r2))
def testInterceptBottom3(self):
r2 = evas.Rect(5, 5, 5, 30)
self.assert_(self.r.intercepts(r2))
def testNoIntercept1(self):
r2 = evas.Rect(-10, -10, 5, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept2(self):
r2 = evas.Rect(0, -10, 5, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept3(self):
r2 = evas.Rect(10, -10, 5, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept4(self):
r2 = evas.Rect(-10, -10, 30, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept5(self):
r2 = evas.Rect(-10, 15, 5, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept6(self):
r2 = evas.Rect(0, 15, 5, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept7(self):
r2 = evas.Rect(10, 15, 5, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept8(self):
r2 = evas.Rect(-10, 15, 30, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept9(self):
r2 = evas.Rect(-10, 5, 5, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept10(self):
r2 = evas.Rect(15, 5, 5, 5)
self.assert_(not self.r.intercepts(r2))
def testNoIntercept11(self):
r2 = evas.Rect(15, 15, 5, 5)
self.assert_(not self.r.intercepts(r2))
class TestRectClip(unittest.TestCase):
def setUp(self):
self.r = evas.Rect(0, 0, 10, 10)
def testClipContained(self):
r2 = evas.Rect(-10, -10, 30, 30)
self.assertEqual(self.r.clip(r2), self.r)
def testClipContains(self):
r2 = evas.Rect(5, 5, 2, 2)
self.assertEqual(self.r.clip(r2), r2)
def testClipOutside1(self):
r2 = evas.Rect(-10, -10, 5, 5)
self.assertEqual(self.r.clip(r2), evas.Rect(0, 0, 0, 0))
def testClipOutside2(self):
r2 = evas.Rect(15, 15, 5, 5)
self.assertEqual(self.r.clip(r2), evas.Rect(0, 0, 0, 0))
def testClipOutside3(self):
r2 = evas.Rect(-10, -10, 30, 5)
self.assertEqual(self.r.clip(r2), evas.Rect(0, 0, 0, 0))
def testInterceptTopLeft(self):
r2 = evas.Rect(-5, -5, 10, 10)
self.assertEqual(self.r.clip(r2), evas.Rect(0, 0, 5, 5))
def testInterceptTopRight(self):
r2 = evas.Rect(5, -5, 10, 10)
self.assertEqual(self.r.clip(r2), evas.Rect(5, 0, 5, 5))
def testInterceptBottomLeft(self):
r2 = evas.Rect(-5, 5, 10, 10)
self.assertEqual(self.r.clip(r2), evas.Rect(0, 5, 5, 5))
def testInterceptBottomRight(self):
r2 = evas.Rect(5, 5, 10, 10)
self.assertEqual(self.r.clip(r2), evas.Rect(5, 5, 5, 5))
def testInterceptLeft(self):
r2 = evas.Rect(-5, 2, 10, 5)
self.assertEqual(self.r.clip(r2), evas.Rect(0, 2, 5, 5))
def testInterceptRight(self):
r2 = evas.Rect(5, 2, 10, 5)
self.assertEqual(self.r.clip(r2), evas.Rect(5, 2, 5, 5))
def testInterceptTop(self):
r2 = evas.Rect(2, -5, 5, 10)
self.assertEqual(self.r.clip(r2), evas.Rect(2, 0, 5, 5))
def testInterceptBottom(self):
r2 = evas.Rect(2, 5, 5, 10)
self.assertEqual(self.r.clip(r2), evas.Rect(2, 5, 5, 5))
class TestRectUnion(unittest.TestCase):
def setUp(self):
self.r = evas.Rect(0, 0, 10, 10)
def testUnionContained(self):
r2 = evas.Rect(-10, -10, 30, 30)
self.assertEqual(self.r.union(r2), r2)
def testUnionContains(self):
r2 = evas.Rect(5, 5, 2, 2)
self.assertEqual(self.r.union(r2), self.r)
def testUnion(self):
r2 = evas.Rect(-10, -10, 5, 5)
self.assertEqual(self.r.union(r2), evas.Rect(-10, -10, 20, 20))
class TestRectClamp(unittest.TestCase):
def setUp(self):
self.r = evas.Rect(0, 0, 10, 10)
def testClampContained(self):
r2 = evas.Rect(-10, -10, 30, 30)
self.assertEqual(self.r.clamp(r2), self.r)
def testClampContains(self):
r2 = evas.Rect(0, 0, 4, 4)
# -3 = 4/2 - 5/2 (centered)
self.assertEqual(self.r.clamp(r2), evas.Rect(-3, -3, 10, 10))
def testClampTopLeft(self):
r2 = evas.Rect(5, 5, 20, 20)
self.assertEqual(self.r.clamp(r2), evas.Rect(5, 5, 10, 10))
def testClampTopRight(self):
r2 = evas.Rect(-15, 5, 20, 20)
self.assertEqual(self.r.clamp(r2), evas.Rect(-5, 5, 10, 10))
def testClampBottomLeft(self):
r2 = evas.Rect(5, -15, 20, 20)
self.assertEqual(self.r.clamp(r2), evas.Rect(5, -5, 10, 10))
def testClampBottomRight(self):
r2 = evas.Rect(-15, -15, 20, 20)
self.assertEqual(self.r.clamp(r2), evas.Rect(-5, -5, 10, 10))
if __name__ == '__main__':
unittest.main(verbosity=2)
evas.shutdown()