Split the Java parser into a JavaCommon.py module.
[scons.git] / src / engine / SCons / Tool / JavaCommonTests.py
1 #
2 # __COPYRIGHT__
3 #
4 # Permission is hereby granted, free of charge, to any person obtaining
5 # a copy of this software and associated documentation files (the
6 # "Software"), to deal in the Software without restriction, including
7 # without limitation the rights to use, copy, modify, merge, publish,
8 # distribute, sublicense, and/or sell copies of the Software, and to
9 # permit persons to whom the Software is furnished to do so, subject to
10 # the following conditions:
11 #
12 # The above copyright notice and this permission notice shall be included
13 # in all copies or substantial portions of the Software.
14 #
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
16 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
17 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 #
23
24 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
25
26 import unittest
27
28 import SCons.Tool.JavaCommon
29
30 class parse_javaTestCase(unittest.TestCase):
31
32     def test_empty(self):
33         """Test a bare-bones class"""
34
35         pkg_dir, classes = SCons.Tool.JavaCommon.parse_java("""\
36 package com.sub.bar;
37
38 public class Foo
39 {
40
41      public static void main(String[] args)
42      {
43
44      }
45
46 }
47 """)
48         assert pkg_dir == 'com/sub/bar', pkg_dir
49         assert classes == ['Foo'], classes
50
51     def test_inner_classes(self):
52         """Test parsing various forms of inner classes"""
53
54         pkg_dir, classes = SCons.Tool.JavaCommon.parse_java("""\
55 class Empty {
56 }
57
58 interface Listener {
59   public void execute();
60 }
61
62 public
63 class
64 Test {
65   class Inner {
66     void go() {
67       use(new Listener() {
68         public void execute() {
69           System.out.println("In Inner");
70         }
71       });
72     }
73     String s1 = "class A";
74     String s2 = "new Listener() { }";
75     /* class B */
76     /* new Listener() { } */
77   }
78
79   public static void main(String[] args) {
80     new Test().run();
81   }
82
83   void run() {
84     use(new Listener() {
85       public void execute() {
86         use(new Listener( ) {
87           public void execute() {
88             System.out.println("Inside execute()");
89           }
90         });
91       }
92     });
93
94     new Inner().go();
95   }
96
97   void use(Listener l) {
98     l.execute();
99   }
100 }
101
102 class Private {
103   void run() {
104     new Listener() {
105       public void execute() {
106       }
107     };
108   }
109 }
110 """)
111
112         assert pkg_dir is None, pkg_dir
113         expect = [
114                    'Empty',
115                    'Listener',
116                    'Test$1',
117                    'Test$Inner',
118                    'Test$2',
119                    'Test$3',
120                    'Test',
121                    'Private$1',
122                    'Private',
123                  ]
124         assert classes == expect, classes
125
126 if __name__ == "__main__":
127     suite = unittest.TestSuite()
128     tclasses = [ parse_javaTestCase ]
129     for tclass in tclasses:
130         names = unittest.getTestCaseNames(tclass, 'test_')
131         suite.addTests(map(tclass, names))
132     if not unittest.TextTestRunner().run(suite).wasSuccessful():
133         sys.exit(1)