#!/usr/bin/python
# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

import idlnode
import idlparser
import idlrenderer
import logging.config
import unittest


class IDLRendererTestCase(unittest.TestCase):

  def _run_test(self, input_text, expected_text):
    """Parses input, renders it and compares the results"""
    parser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX)
    idl_file = idlnode.IDLFile(parser.parse(input_text))
    output_text = idlrenderer.render(idl_file)

    if output_text != expected_text:
      msg = '''
EXPECTED:
%s
ACTUAL  :
%s
''' % (expected_text, output_text)
      self.fail(msg)

  def test_rendering(self):
    input_text = \
'''module M {
  interface I : @A J, K {
    attribute int attr;
    readonly attribute long attr2;
    getter attribute int get_attr;
    setter attribute int set_attr;

    [A,B=123] void function(in long x, in optional boolean y);

    const boolean CONST = 1;

    @A @B() @C(x) @D(x=1) @E(x,y=2)
    void something();
  };
};'''

    expected_text = \
'''module M {
  interface I :
    @A J,
    K {

    /* Constants */
    const boolean CONST = 1;

    /* Attributes */
    attribute int attr;
    attribute long attr2;
    getter attribute int get_attr;
    setter attribute int set_attr;

    /* Operations */
    [A, B=123] void function(in long x, in optional boolean y);
    @A @B @C(x) @D(x=1) @E(x, y=2) void something();
  };
};
'''
    self._run_test(input_text, expected_text)

if __name__ == "__main__":
  logging.config.fileConfig("logging.conf")
  if __name__ == '__main__':
    unittest.main()
