summaryrefslogtreecommitdiffstats
path: root/tools/json_schema_compiler/ppapi_generator_test.py
blob: 4d396ffa91eb54376bbd38119bdf34d02e3919f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#!/usr/bin/env python
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os
import unittest

from model import Model
import ppapi_generator
from schema_loader import SchemaLoader


def _LoadNamespace(filename):
  filename = os.path.join(os.path.dirname(__file__), filename)
  schema_loader = SchemaLoader(
      os.path.dirname(os.path.relpath(os.path.normpath(filename),
                                      os.path.dirname(filename))),
      os.path.dirname(filename))
  schema = os.path.normpath(filename)
  api_def = schema_loader.LoadSchema(os.path.split(schema)[1])[0]

  api_model = Model()
  relpath = os.path.relpath(os.path.normpath(filename),
                            os.path.dirname(filename))
  namespace = api_model.AddNamespace(api_def, relpath)
  generator = ppapi_generator._PpapiGeneratorBase(namespace)
  return namespace, generator


class PpapiGeneratorIdlStructsTest(unittest.TestCase):
  def setUp(self):
    self.namespace, self.generator = _LoadNamespace(
        os.path.join('test', 'idl_pepper.idl'))

  def testTypesOrder(self):
    typename_to_index = dict(
        (type_.name, i) for i, type_ in enumerate(self.generator._types))
    self.assertLess(typename_to_index['MyType1'], typename_to_index['MyType2'])
    self.assertLess(typename_to_index['MyType1'], typename_to_index['MyType3'])
    self.assertLess(typename_to_index['MyType1'], typename_to_index['MyType4'])
    self.assertLess(typename_to_index['MyType1'], typename_to_index['MyType5'])
    self.assertLess(typename_to_index['MyType3'], typename_to_index['MyType5'])
    self.assertLess(typename_to_index['MyType4'], typename_to_index['MyType5'])
    self.assertLess(typename_to_index['MyType5'], typename_to_index['MyType6'])

  def testNeedsArray(self):
    self.assertFalse(self.generator.NeedsArray(self.namespace.types['MyType1']))
    self.assertTrue(self.generator.NeedsArray(self.namespace.types['MyType2']))
    self.assertTrue(self.generator.NeedsArray(self.namespace.types['MyType3']))
    self.assertFalse(self.generator.NeedsArray(self.namespace.types['MyType4']))
    self.assertFalse(self.generator.NeedsArray(self.namespace.types['MyType5']))
    self.assertTrue(self.generator.NeedsArray(self.namespace.types['EnumType']))

  def testNeedsOptional(self):
    self.assertFalse(
        self.generator.NeedsOptional(self.namespace.types['MyType1']))
    self.assertFalse(
        self.generator.NeedsOptional(self.namespace.types['MyType2']))
    self.assertTrue(
        self.generator.NeedsOptional(self.namespace.types['MyType3']))
    self.assertTrue(
        self.generator.NeedsOptional(self.namespace.types['MyType4']))
    self.assertFalse(
        self.generator.NeedsOptional(self.namespace.types['MyType5']))
    self.assertTrue(
        self.generator.NeedsOptional(self.namespace.types['EnumType']))

  def testNeedsOptionalArray(self):
    self.assertFalse(
        self.generator.NeedsOptionalArray(self.namespace.types['MyType1']))
    self.assertTrue(
        self.generator.NeedsOptionalArray(self.namespace.types['MyType2']))
    self.assertFalse(
        self.generator.NeedsOptionalArray(self.namespace.types['MyType3']))
    self.assertFalse(
        self.generator.NeedsOptionalArray(self.namespace.types['MyType4']))
    self.assertFalse(
        self.generator.NeedsOptionalArray(self.namespace.types['MyType5']))
    self.assertTrue(
        self.generator.NeedsOptionalArray(self.namespace.types['EnumType']))

  def testFormatParamTypePrimitive(self):
    self.assertEqual('int32_t', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['int_single']))
    self.assertEqual('PP_Int32_Array', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['int_array']))
    self.assertEqual('PP_Optional_Int32', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['optional_int']))
    self.assertEqual('PP_Optional_Int32_Array', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['optional_int_array']))
    self.assertEqual('double_t', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['double_single']))
    self.assertEqual('PP_Double_Array', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['double_array']))
    self.assertEqual('PP_Optional_Double', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['optional_double']))
    self.assertEqual('PP_Optional_Double_Array', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['optional_double_array']))
    self.assertEqual('PP_Var', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['string']))
    self.assertEqual('PP_String_Array', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['string_array']))
    self.assertEqual('PP_Var', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['optional_string']))
    self.assertEqual('PP_Optional_String_Array', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['optional_string_array']))

  def testFormatParamTypeStruct(self):
    self.assertEqual('PP_IdlPepper_MyType0', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['struct_single']))
    self.assertEqual(
        'PP_IdlPepper_MyType0_Array', self.generator.FormatParamType(
            self.namespace.types['MyType'].properties['struct_array']))
    self.assertEqual(
        'PP_IdlPepper_Optional_MyType0', self.generator.FormatParamType(
            self.namespace.types['MyType'].properties['optional_struct']))
    self.assertEqual(
        'PP_IdlPepper_Optional_MyType0_Array', self.generator.FormatParamType(
            self.namespace.types['MyType'].properties[
                'optional_struct_array']))

  def testFormatParamTypeEnum(self):
    self.assertEqual('PP_IdlPepper_EnumType', self.generator.FormatParamType(
        self.namespace.types['MyType'].properties['enum_single']))
    self.assertEqual(
        'PP_IdlPepper_EnumType_Array', self.generator.FormatParamType(
            self.namespace.types['MyType'].properties['enum_array']))
    self.assertEqual(
        'PP_IdlPepper_Optional_EnumType', self.generator.FormatParamType(
            self.namespace.types['MyType'].properties['optional_enum']))
    self.assertEqual(
        'PP_IdlPepper_Optional_EnumType_Array', self.generator.FormatParamType(
            self.namespace.types['MyType'].properties['optional_enum_array']))

  def testEnumValueName(self):
    enum_type = self.namespace.types['EnumType']
    self.assertEqual('PP_IDLPEPPER_ENUMTYPE_NAME1',
                     self.generator.EnumValueName(enum_type.enum_values[0],
                                                  enum_type))
    self.assertEqual('PP_IDLPEPPER_ENUMTYPE_NAME2',
                     self.generator.EnumValueName(enum_type.enum_values[1],
                                                  enum_type))
    enum_type = self.namespace.types['AnotherEnumType']
    self.assertEqual('PP_IDLPEPPER_ANOTHERENUMTYPE_NAME1',
                     self.generator.EnumValueName(enum_type.enum_values[0],
                                                  enum_type))
    self.assertEqual('PP_IDLPEPPER_ANOTHERENUMTYPE_NAME2',
                     self.generator.EnumValueName(enum_type.enum_values[1],
                                                  enum_type))

  def testReturnTypes(self):
    self.assertEqual('void', self.generator.GetFunctionReturnType(
        self.namespace.functions['function1']))
    self.assertEqual('void', self.generator.GetFunctionReturnType(
        self.namespace.functions['function2']))
    self.assertEqual('int32_t', self.generator.GetFunctionReturnType(
        self.namespace.functions['function3']))
    self.assertEqual('int32_t', self.generator.GetFunctionReturnType(
        self.namespace.functions['function4']))
    self.assertEqual('int32_t', self.generator.GetFunctionReturnType(
        self.namespace.functions['function5']))
    self.assertEqual('int32_t', self.generator.GetFunctionReturnType(
        self.namespace.functions['function6']))

  def testHasOutArray(self):
    self.assertFalse(self.generator.HasArrayOuts(
        self.namespace.functions['function1']))
    self.assertFalse(self.generator.HasArrayOuts(
        self.namespace.functions['function2']))
    self.assertTrue(self.generator.HasArrayOuts(
        self.namespace.functions['function3']))
    self.assertFalse(self.generator.HasArrayOuts(
        self.namespace.functions['function4']))
    self.assertFalse(self.generator.HasArrayOuts(
        self.namespace.functions['function5']))
    self.assertTrue(self.generator.HasArrayOuts(
        self.namespace.functions['function6']))
    self.assertTrue(self.generator.HasArrayOuts(
        self.namespace.functions['function7']))
    self.assertTrue(self.generator.HasArrayOuts(
        self.namespace.functions['function8']))
    self.assertFalse(self.generator.HasArrayOuts(
        self.namespace.functions['function9']))
    self.assertTrue(self.generator.HasArrayOuts(
        self.namespace.functions['function10']))
    self.assertTrue(self.generator.HasArrayOuts(
        self.namespace.functions['function11']))
    self.assertFalse(self.generator.HasArrayOuts(
        self.namespace.functions['function12']))

if __name__ == '__main__':
  unittest.main()