#!/usr/bin/env python
# Copyright (c) 2012 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.

from struct_generator import GenerateField
from struct_generator import GenerateStruct
import unittest

class StructGeneratorTest(unittest.TestCase):
  def testGenerateIntField(self):
    self.assertEquals('const int foo_bar',
        GenerateField({'type': 'int', 'field': 'foo_bar'}))

  def testGenerateStringField(self):
    self.assertEquals('const char* const bar_foo',
        GenerateField({'type': 'string', 'field': 'bar_foo'}))

  def testGenerateString16Field(self):
    self.assertEquals('const wchar_t* const foo_bar',
        GenerateField({'type': 'string16', 'field': 'foo_bar'}))

  def testGenerateEnumField(self):
    self.assertEquals('const MyEnumType foo_foo',
        GenerateField({'type': 'enum',
                       'field': 'foo_foo',
                       'ctype': 'MyEnumType'}))

  def testGenerateArrayField(self):
    self.assertEquals('const int * bar_bar;\n'
                      '  const size_t bar_bar_size',
        GenerateField({'type': 'array',
                       'field': 'bar_bar',
                       'contents': {'type': 'int'}}))

  def testGenerateStruct(self):
    schema = [
      {'type': 'int', 'field': 'foo_bar'},
      {'type': 'string', 'field': 'bar_foo', 'default': 'dummy'},
      {
        'type': 'array',
        'field': 'bar_bar',
        'contents': {
          'type': 'enum',
          'ctype': 'MyEnumType'
        }
      }
    ]
    struct = ('struct MyTypeName {\n'
        '  const int foo_bar;\n'
        '  const char* const bar_foo;\n'
        '  const MyEnumType * bar_bar;\n'
        '  const size_t bar_bar_size;\n'
        '};\n')
    self.assertEquals(struct, GenerateStruct('MyTypeName', schema))

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