|  | #!/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 { | 
|  | [Constructor(long x)] 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(); | 
|  | }; | 
|  | }; | 
|  | @X module M2 { | 
|  | @Y interface I {}; | 
|  | };''' | 
|  |  | 
|  | expected_text = \ | 
|  | '''module M { | 
|  | [Constructor(in long x)] | 
|  | 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(); | 
|  | }; | 
|  | }; | 
|  | @X module M2 { | 
|  | @Y | 
|  | interface I { | 
|  | }; | 
|  | }; | 
|  | ''' | 
|  | self._run_test(input_text, expected_text) | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | logging.config.fileConfig("logging.conf") | 
|  | if __name__ == '__main__': | 
|  | unittest.main() |