Codegen actual useful.ObjectDescriptor type, now supported in pyasn1.
[asn2quickder] / asn1ate / test.py
1 # Copyright (c) 2013, Schneider Electric Buildings AB
2 # All rights reserved.
3 #
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are met:
6 #     * Redistributions of source code must retain the above copyright
7 #       notice, this list of conditions and the following disclaimer.
8 #     * Redistributions in binary form must reproduce the above copyright
9 #       notice, this list of conditions and the following disclaimer in the
10 #       documentation and/or other materials provided with the distribution.
11 #     * Neither the name of Schneider Electric Buildings AB nor the
12 #       names of contributors may be used to endorse or promote products
13 #       derived from this software without specific prior written permission.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
19 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26 from __future__ import print_function  # Python 2 compatibility
27
28 import sys
29 import argparse # Requires Python 2.7 or later, but that's OK for a test driver
30 from asn1ate import parser, sema, pyasn1gen
31 from asn1ate.support import pygen
32
33 def parse_args():
34     ap = argparse.ArgumentParser(description='Test driver for asn1ate.')
35     ap.add_argument('file', help='ASN.1 file to test.')
36     group = ap.add_mutually_exclusive_group()
37     group.add_argument('--parse', action='store_true', default=False, required=False, help='Only parse.')
38     group.add_argument('--sema', action='store_true', default=False, required=False, help='Only parse and build semantic model.')
39     group.add_argument('--gen', action='store_true', default=True, required=False, help='Parse, build semantic model and generate pyasn1 code. (Default)')
40
41     return ap.parse_args()
42
43
44 # Simplistic command-line driver
45 def main():
46     args = parse_args()
47     with open(args.file) as f:
48         asn1def = f.read()
49
50     parse_tree = parser.parse_asn1(asn1def)
51     if args.parse:
52         parser.print_parse_tree(parse_tree)
53         return 0
54
55     modules = sema.build_semantic_model(parse_tree)
56     if args.sema:
57         for module in modules:
58             print(module)
59         return 0
60
61     if args.gen:
62         for module in modules:
63             print(pygen.auto_generated_header(args.file))
64             pyasn1gen.generate_pyasn1(module, sys.stdout)
65
66     return 0
67
68
69 if __name__ == '__main__':
70     sys.exit(main())