1#!/usr/bin/env python
2# Copyright (c) 2012 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6from struct_generator import GenerateField
7from struct_generator import GenerateStruct
8import unittest
9
10class StructGeneratorTest(unittest.TestCase):
11  def testGenerateIntField(self):
12    self.assertEquals('const int foo_bar',
13        GenerateField({'type': 'int', 'field': 'foo_bar'}))
14
15  def testGenerateStringField(self):
16    self.assertEquals('const char* const bar_foo',
17        GenerateField({'type': 'string', 'field': 'bar_foo'}))
18
19  def testGenerateString16Field(self):
20    self.assertEquals('const wchar_t* const foo_bar',
21        GenerateField({'type': 'string16', 'field': 'foo_bar'}))
22
23  def testGenerateEnumField(self):
24    self.assertEquals('const MyEnumType foo_foo',
25        GenerateField({'type': 'enum',
26                       'field': 'foo_foo',
27                       'ctype': 'MyEnumType'}))
28
29  def testGenerateArrayField(self):
30    self.assertEquals('const int * bar_bar;\n'
31                      '  const size_t bar_bar_size',
32        GenerateField({'type': 'array',
33                       'field': 'bar_bar',
34                       'contents': {'type': 'int'}}))
35
36  def testGenerateStruct(self):
37    schema = [
38      {'type': 'int', 'field': 'foo_bar'},
39      {'type': 'string', 'field': 'bar_foo', 'default': 'dummy'},
40      {
41        'type': 'array',
42        'field': 'bar_bar',
43        'contents': {
44          'type': 'enum',
45          'ctype': 'MyEnumType'
46        }
47      }
48    ]
49    struct = ('struct MyTypeName {\n'
50        '  const int foo_bar;\n'
51        '  const char* const bar_foo;\n'
52        '  const MyEnumType * bar_bar;\n'
53        '  const size_t bar_bar_size;\n'
54        '};\n')
55    self.assertEquals(struct, GenerateStruct('MyTypeName', schema))
56
57if __name__ == '__main__':
58  unittest.main()
59