1#############################################################################
2##
3## Copyright (C) 2016 The Qt Company Ltd.
4## Contact: https://www.qt.io/licensing/
5##
6## This file is part of the test suite of Qt for Python.
7##
8## $QT_BEGIN_LICENSE:GPL-EXCEPT$
9## Commercial License Usage
10## Licensees holding valid commercial Qt licenses may use this file in
11## accordance with the commercial license agreement provided with the
12## Software or, alternatively, in accordance with the terms contained in
13## a written agreement between you and The Qt Company. For licensing terms
14## and conditions see https://www.qt.io/terms-conditions. For further
15## information use the contact form at https://www.qt.io/contact-us.
16##
17## GNU General Public License Usage
18## Alternatively, this file may be used under the terms of the GNU
19## General Public License version 3 as published by the Free Software
20## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21## included in the packaging of this file. Please review the following
22## information to ensure the GNU General Public License requirements will
23## be met: https://www.gnu.org/licenses/gpl-3.0.html.
24##
25## $QT_END_LICENSE$
26##
27#############################################################################
28
29import os
30import sys
31import unittest
32
33sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
34from init_paths import init_test_paths
35init_test_paths(False)
36
37from PySide2.QtCore import QObject, Property, QCoreApplication
38from PySide2.QtScript import  QScriptEngine
39
40class MyObject(QObject):
41    def __init__(self, parent = None):
42        QObject.__init__(self, parent)
43        self._p = 100
44
45    def setX(self, value):
46        self._p = value
47
48    def getX(self):
49        return self._p
50
51    def resetX(self):
52        self._p = 100
53
54    def delX(self):
55        self._p = 0
56
57    x = Property(int, getX, setX, resetX, delX)
58
59
60class QPropertyTest(unittest.TestCase):
61
62    def testSimple(self):
63        o = MyObject()
64        self.assertEqual(o.x, 100)
65        o.x = 42
66        self.assertEqual(o.x, 42)
67
68    def testHasProperty(self):
69        o = MyObject()
70        o.setProperty("x", 10)
71        self.assertEqual(o.x, 10)
72        self.assertEqual(o.property("x"), 10)
73
74    def testMetaProperty(self):
75        o = MyObject()
76        m = o.metaObject()
77        found = False
78        for i in range(m.propertyCount()):
79            mp = m.property(i)
80            if mp.name() == "x":
81                found = True
82                break
83        self.assertTrue(found)
84
85    def testScriptQProperty(self):
86        qapp = QCoreApplication([])
87        myEngine = QScriptEngine()
88        obj = MyObject()
89        scriptObj = myEngine.newQObject(obj)
90        myEngine.globalObject().setProperty("obj", scriptObj)
91        myEngine.evaluate("obj.x = 42")
92        self.assertEqual(scriptObj.property("x").toInt32(), 42)
93        self.assertEqual(obj.property("x"), 42)
94
95if __name__ == '__main__':
96    unittest.main()
97