1 # Copyright 2014 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 import math 6 import unittest 7 8 # pylint: disable=F0401 9 import mojo.system 10 11 # Generated files 12 # pylint: disable=F0401 13 import sample_import_mojom 14 import sample_import2_mojom 15 import sample_service_mojom 16 17 18 class StructBindingsTest(unittest.TestCase): 19 20 def testModule(self): 21 self.assertEquals(sample_service_mojom.DefaultsTest.__module__, 22 'sample_service_mojom') 23 24 def testDefaultsTest(self): 25 defaults_test = sample_service_mojom.DefaultsTest() 26 self.assertEquals(defaults_test.a0, -12) 27 self.assertEquals(defaults_test.a1, 12) 28 self.assertEquals(defaults_test.a2, 1234) 29 self.assertEquals(defaults_test.a3, 34567) 30 self.assertEquals(defaults_test.a4, 123456) 31 self.assertEquals(defaults_test.a5, 3456789012) 32 self.assertEquals(defaults_test.a6, -111111111111) 33 self.assertEquals(defaults_test.a7, 9999999999999999999) 34 self.assertEquals(defaults_test.a8, 0x12345) 35 self.assertEquals(defaults_test.a9, -0x12345) 36 self.assertEquals(defaults_test.a10, 1234) 37 self.assertEquals(defaults_test.a11, True) 38 self.assertEquals(defaults_test.a12, False) 39 self.assertEquals(defaults_test.a13, 123.25) 40 self.assertEquals(defaults_test.a14, 1234567890.123) 41 self.assertEquals(defaults_test.a15, 1E10) 42 self.assertEquals(defaults_test.a16, -1.2E+20) 43 self.assertEquals(defaults_test.a17, 1.23E-20) 44 self.assertEquals(defaults_test.a18, None) 45 self.assertEquals(defaults_test.a19, None) 46 self.assertEquals(defaults_test.a20, sample_service_mojom.Bar.Type.BOTH) 47 self.assertEquals(defaults_test.a21, None) 48 self.assertTrue(isinstance(defaults_test.a22, sample_import2_mojom.Thing)) 49 self.assertEquals(defaults_test.a23, 0xFFFFFFFFFFFFFFFF) 50 self.assertEquals(defaults_test.a24, 0x123456789) 51 self.assertEquals(defaults_test.a25, -0x123456789) 52 self.assertEquals(defaults_test.a26, float('inf')) 53 self.assertEquals(defaults_test.a27, float('-inf')) 54 self.assertTrue(math.isnan(defaults_test.a28)) 55 self.assertEquals(defaults_test.a29, float('inf')) 56 self.assertEquals(defaults_test.a30, float('-inf')) 57 self.assertTrue(math.isnan(defaults_test.a31)) 58 59 def testNoAliasing(self): 60 foo1 = sample_service_mojom.Foo() 61 foo2 = sample_service_mojom.Foo() 62 foo1.name = "foo1" 63 foo2.name = "foo2" 64 self.assertEquals(foo1.name, "foo1") 65 self.assertEquals(foo2.name, "foo2") 66 67 defaults_test1 = sample_service_mojom.DefaultsTest() 68 defaults_test2 = sample_service_mojom.DefaultsTest() 69 self.assertNotEquals(defaults_test1.a22, defaults_test2.a22) 70 71 def testImmutableAttributeSet(self): 72 foo_instance = sample_service_mojom.Foo() 73 with self.assertRaises(AttributeError): 74 foo_instance.new_attribute = None 75 with self.assertRaises(AttributeError): 76 del foo_instance.name 77 78 def _TestIntegerField(self, entity, field_name, bits, signed): 79 if signed: 80 min_value = -(1 << (bits - 1)) 81 max_value = (1 << (bits - 1)) - 1 82 else: 83 min_value = 0 84 max_value = (1 << bits) - 1 85 entity.__setattr__(field_name, min_value) 86 entity.__setattr__(field_name, max_value) 87 with self.assertRaises(TypeError): 88 entity.__setattr__(field_name, None) 89 with self.assertRaises(OverflowError): 90 entity.__setattr__(field_name, min_value - 1) 91 with self.assertRaises(OverflowError): 92 entity.__setattr__(field_name, max_value + 1) 93 with self.assertRaises(TypeError): 94 entity.__setattr__(field_name, 'hello world') 95 96 def testTypes(self): 97 defaults_test = sample_service_mojom.DefaultsTest() 98 # Integer types 99 self._TestIntegerField(defaults_test, 'a0', 8, True) 100 self._TestIntegerField(defaults_test, 'a1', 8, False) 101 self._TestIntegerField(defaults_test, 'a2', 16, True) 102 self._TestIntegerField(defaults_test, 'a3', 16, False) 103 self._TestIntegerField(defaults_test, 'a4', 32, True) 104 self._TestIntegerField(defaults_test, 'a5', 32, False) 105 self._TestIntegerField(defaults_test, 'a6', 64, True) 106 self._TestIntegerField(defaults_test, 'a7', 64, False) 107 108 # Boolean types 109 defaults_test.a11 = False 110 self.assertEquals(defaults_test.a11, False) 111 defaults_test.a11 = None 112 self.assertEquals(defaults_test.a11, False) 113 defaults_test.a11 = [] 114 self.assertEquals(defaults_test.a11, False) 115 defaults_test.a12 = True 116 self.assertEquals(defaults_test.a12, True) 117 defaults_test.a12 = 1 118 self.assertEquals(defaults_test.a12, True) 119 defaults_test.a12 = [[]] 120 self.assertEquals(defaults_test.a12, True) 121 122 # Floating point types 123 with self.assertRaises(TypeError): 124 defaults_test.a13 = 'hello' 125 with self.assertRaises(TypeError): 126 defaults_test.a14 = 'hello' 127 128 # Array type 129 defaults_test.a18 = None 130 defaults_test.a18 = [] 131 defaults_test.a18 = [ 0 ] 132 defaults_test.a18 = [ 255 ] 133 defaults_test.a18 = [ 0, 255 ] 134 with self.assertRaises(TypeError): 135 defaults_test.a18 = [[]] 136 with self.assertRaises(OverflowError): 137 defaults_test.a18 = [ -1 ] 138 with self.assertRaises(OverflowError): 139 defaults_test.a18 = [ 256 ] 140 141 # String type 142 defaults_test.a19 = None 143 defaults_test.a19 = '' 144 defaults_test.a19 = 'hello world' 145 with self.assertRaises(TypeError): 146 defaults_test.a19 = [[]] 147 with self.assertRaises(TypeError): 148 defaults_test.a19 = [ -1 ] 149 with self.assertRaises(TypeError): 150 defaults_test.a19 = [ 256 ] 151 152 # Structs 153 defaults_test.a21 = None 154 defaults_test.a21 = sample_import_mojom.Point() 155 with self.assertRaises(TypeError): 156 defaults_test.a21 = 1 157 with self.assertRaises(TypeError): 158 defaults_test.a21 = sample_import2_mojom.Thing() 159 160 # Handles 161 foo_instance = sample_service_mojom.Foo() 162 foo_instance.source = None 163 foo_instance.source = mojo.system.Handle() 164 with self.assertRaises(TypeError): 165 foo_instance.source = 1 166 with self.assertRaises(TypeError): 167 foo_instance.source = object() 168 169 def testConstructor(self): 170 bar_instance = sample_service_mojom.Bar() 171 foo_instance = sample_service_mojom.Foo(name="Foo", 172 x=-1, 173 y=5, 174 a=False, 175 bar=bar_instance) 176 self.assertEquals(foo_instance.name, "Foo") 177 self.assertEquals(foo_instance.x, -1) 178 self.assertEquals(foo_instance.y, 5) 179 self.assertEquals(foo_instance.a, False) 180 self.assertEquals(foo_instance.bar, bar_instance) 181 182