Transform the AST to create a correct representation of the cases inside a switch statement
diff --git a/tests/test_c_parser.py b/tests/test_c_parser.py
index c4292d7..dbf7533 100644
--- a/tests/test_c_parser.py
+++ b/tests/test_c_parser.py
@@ -1284,6 +1284,14 @@
self.assert_num_klass_nodes(ps1, Return, 1)
def test_switch_statement(self):
+ def assert_case_node(node, const_value):
+ self.failUnless(isinstance(node, Case))
+ self.failUnless(isinstance(node.expr, Constant))
+ self.assertEqual(node.expr.value, const_value)
+
+ def assert_default_node(node):
+ self.failUnless(isinstance(node, Default))
+
s1 = r'''
int foo(void) {
switch (myvar) {
@@ -1301,7 +1309,46 @@
}
'''
ps1 = self.parse(s1)
- #~ ps1.show()
+ switch = ps1.ext[0].body.block_items[0]
+
+ block = switch.stmt.block_items
+ assert_case_node(block[0], '10')
+ self.assertEqual(len(block[0].stmts), 3)
+ assert_case_node(block[1], '20')
+ self.assertEqual(len(block[1].stmts), 0)
+ assert_case_node(block[2], '30')
+ self.assertEqual(len(block[2].stmts), 1)
+ assert_default_node(block[3])
+
+ s2 = r'''
+ int foo(void) {
+ switch (myvar) {
+ default:
+ joe = moe;
+ return 10;
+ case 10:
+ case 20:
+ case 30:
+ case 40:
+ break;
+ }
+ return 0;
+ }
+ '''
+ ps2 = self.parse(s2)
+ switch = ps2.ext[0].body.block_items[0]
+
+ block = switch.stmt.block_items
+ assert_default_node(block[0])
+ self.assertEqual(len(block[0].stmts), 2)
+ assert_case_node(block[1], '10')
+ self.assertEqual(len(block[1].stmts), 0)
+ assert_case_node(block[2], '20')
+ self.assertEqual(len(block[1].stmts), 0)
+ assert_case_node(block[3], '30')
+ self.assertEqual(len(block[1].stmts), 0)
+ assert_case_node(block[4], '40')
+ self.assertEqual(len(block[4].stmts), 1)
def test_for_statement(self):
s2 = r'''