def testnestingwithsamefeatures(self): """Check that a #ifdef can be nested in another #ifdef but have the same feature""" feature_dict, fexpr_dict = get_feature_lines( [ (3, 9, LineType.IF, ["A", "B"], "defined(A) && defined(B)"), (6, 8, LineType.IF, ["A", "D"], "(defined(A) && defined(B)) && (defined(D))"), ], "unittest.c", ) self.assertSetEqual(feature_dict.get_line_info(2), set([]), "line 2 should be empty") self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(6), set(["A", "B", "D"])) self.assertSetEqual(feature_dict.get_line_info(7), set(["A", "B", "D"])) self.assertSetEqual(feature_dict.get_line_info(8), set(["A", "B", "D"])) self.assertSetEqual(feature_dict.get_line_info(9), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(10), set([])) self.assertSetEqual(fexpr_dict.get_line_info(2), set([]), "line 2 should be empty") self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(6), set(["(defined(A) && defined(B)) && (defined(D))"])) self.assertSetEqual(fexpr_dict.get_line_info(7), set(["(defined(A) && defined(B)) && (defined(D))"])) self.assertSetEqual(fexpr_dict.get_line_info(8), set(["(defined(A) && defined(B)) && (defined(D))"])) self.assertSetEqual(fexpr_dict.get_line_info(9), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(10), set([])) pass
def testnesting(self): """Check that a #ifdef can be nested in an another #ifdef""" feature_dict, fexpr_dict = \ get_feature_lines( [(3, 9, LineType.IF, ["A", "B"], "defined(A) && defined(B)"), (6, 8, LineType.IF, ["C", "D"], "(defined(A) && defined(B)) && (defined(C) && defined(D))")], "unittest.c") self.assertSetEqual(feature_dict.get_line_info(2), set(["Base_Feature"])) self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(6), set(["A", "B", "C", "D"])) self.assertSetEqual(feature_dict.get_line_info(7), set(["A", "B", "C", "D"])) self.assertSetEqual(feature_dict.get_line_info(8), set(["A", "B", "C", "D"])) self.assertSetEqual(feature_dict.get_line_info(9), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(10), set(["Base_Feature"])) self.assertSetEqual(fexpr_dict.get_line_info(2), set(["Base_Feature"])) self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(6), set(["(defined(A) && defined(B)) && (defined(C) && defined(D))"])) self.assertSetEqual(fexpr_dict.get_line_info(7), set(["(defined(A) && defined(B)) && (defined(C) && defined(D))"])) self.assertSetEqual(fexpr_dict.get_line_info(8), set(["(defined(A) && defined(B)) && (defined(C) && defined(D))"])) self.assertSetEqual(fexpr_dict.get_line_info(9), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(10), set(["Base_Feature"])) pass
def testorderdoesntmatter(self): """Check that a #ifdef can follow another #ifdef""" feature_dict, fexpr_dict = get_feature_lines( [ (6, 8, LineType.IF, ["C", "D"], "defined(C) && defined(D)"), (3, 5, LineType.IF, ["A", "B"], "defined(A) && defined(B)"), ], "unittest.c", ) self.assertSetEqual(feature_dict.get_line_info(2), set([])) self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(6), set(["C", "D"])) self.assertSetEqual(feature_dict.get_line_info(7), set(["C", "D"])) self.assertSetEqual(feature_dict.get_line_info(8), set(["C", "D"])) self.assertSetEqual(feature_dict.get_line_info(9), set([])) self.assertSetEqual(fexpr_dict.get_line_info(2), set([])) self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(6), set(["defined(C) && defined(D)"])) self.assertSetEqual(fexpr_dict.get_line_info(7), set(["defined(C) && defined(D)"])) self.assertSetEqual(fexpr_dict.get_line_info(8), set(["defined(C) && defined(D)"])) self.assertSetEqual(fexpr_dict.get_line_info(9), set([])) pass
def testelif(self): """Check we throw when line is used multiple times""" # for example #elif "C" on line 5 feature_dict, fexpr_dict = \ get_feature_lines( [(3, 5, LineType.IF, ["A", "B"], "defined(A) && defined(B)"), (5, 6, LineType.ELIF, ["A", "B", "C"], "(!(defined(A)) && (!(defined(B)) && defined(C)")], "unittest.c") self.assertSetEqual(feature_dict.get_line_info(2), set(["Base_Feature"])) self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B", "C"])) self.assertSetEqual(feature_dict.get_line_info(6), set(["A", "B", "C"])) self.assertSetEqual(feature_dict.get_line_info(7), set(["Base_Feature"])) self.assertSetEqual(fexpr_dict.get_line_info(2), set(["Base_Feature"])) self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"]), fexpr_dict.get_line_info(3)) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["(!(defined(A)) && (!(defined(B)) && defined(C)"])) self.assertSetEqual(fexpr_dict.get_line_info(6), set(["(!(defined(A)) && (!(defined(B)) && defined(C)"])) self.assertSetEqual(fexpr_dict.get_line_info(7), set(["Base_Feature"])) pass
def testelif(self): """Check we throw when line is used multiple times""" # for example #elif "C" on line 5 feature_dict, fexpr_dict = \ get_feature_lines( [(3, 5, LineType.IF, ["A", "B"], "defined(A) && defined(B)"), (5, 6, LineType.ELIF, ["A", "B", "C"], "(!(defined(A)) && (!(defined(B)) && defined(C)")], "unittest.c") self.assertSetEqual(feature_dict.get_line_info(2), set([])) self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B", "C"])) self.assertSetEqual(feature_dict.get_line_info(6), set(["A", "B", "C"])) self.assertSetEqual(feature_dict.get_line_info(7), set([])) self.assertSetEqual(fexpr_dict.get_line_info(2), set([])) self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"]), fexpr_dict.get_line_info(3)) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual( fexpr_dict.get_line_info(5), set(["(!(defined(A)) && (!(defined(B)) && defined(C)"])) self.assertSetEqual( fexpr_dict.get_line_info(6), set(["(!(defined(A)) && (!(defined(B)) && defined(C)"])) self.assertSetEqual(fexpr_dict.get_line_info(7), set([])) pass
def testorderdoesntmatter(self): """Check that a #ifdef can follow another #ifdef""" feature_dict, fexpr_dict = \ get_feature_lines( [(6, 8, LineType.IF, ["C", "D"], "defined(C) && defined(D)"), (3, 5, LineType.IF, ["A", "B"], "defined(A) && defined(B)")], "unittest.c") self.assertSetEqual(feature_dict.get_line_info(2), set([])) self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(6), set(["C", "D"])) self.assertSetEqual(feature_dict.get_line_info(7), set(["C", "D"])) self.assertSetEqual(feature_dict.get_line_info(8), set(["C", "D"])) self.assertSetEqual(feature_dict.get_line_info(9), set([])) self.assertSetEqual(fexpr_dict.get_line_info(2), set([])) self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(6), set(["defined(C) && defined(D)"])) self.assertSetEqual(fexpr_dict.get_line_info(7), set(["defined(C) && defined(D)"])) self.assertSetEqual(fexpr_dict.get_line_info(8), set(["defined(C) && defined(D)"])) self.assertSetEqual(fexpr_dict.get_line_info(9), set([])) pass
def testnestingwithsamefeatures(self): """Check that a #ifdef can be nested in another #ifdef but have the same feature""" feature_dict, fexpr_dict = \ get_feature_lines( [(3, 9, LineType.IF, ["A", "B"], "defined(A) && defined(B)"), (6, 8, LineType.IF, ["A", "D"], "(defined(A) && defined(B)) && (defined(D))")], "unittest.c") self.assertSetEqual(feature_dict.get_line_info(2), set(["Base_Feature"]), "line 2 should contain the Base_Feature") self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(6), set(["A", "B", "D"])) self.assertSetEqual(feature_dict.get_line_info(7), set(["A", "B", "D"])) self.assertSetEqual(feature_dict.get_line_info(8), set(["A", "B", "D"])) self.assertSetEqual(feature_dict.get_line_info(9), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(10), set(["Base_Feature"])) self.assertSetEqual(fexpr_dict.get_line_info(2), set(["Base_Feature"]), "line 2 should contain the Base_Feature") self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["defined(A) && defined(B)"])) self.assertSetEqual( fexpr_dict.get_line_info(6), set(["(defined(A) && defined(B)) && (defined(D))"])) self.assertSetEqual( fexpr_dict.get_line_info(7), set(["(defined(A) && defined(B)) && (defined(D))"])) self.assertSetEqual( fexpr_dict.get_line_info(8), set(["(defined(A) && defined(B)) && (defined(D))"])) self.assertSetEqual(fexpr_dict.get_line_info(9), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(10), set(["Base_Feature"])) pass
def testsingleline(self): """Check that a single line is split as expected""" feature_dict, fexpr_dict = get_feature_lines( [(3, 5, LineType.IF, ["A", "B"], "defined(A) && defined(B)")], "unittest.c" ) self.assertSetEqual(feature_dict.get_line_info(2), set([])) self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(6), set([])) self.assertSetEqual(fexpr_dict.get_line_info(2), set([])) self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(6), set([])) pass
def testnesting(self): """Check that a #ifdef can be nested in an another #ifdef""" feature_dict, fexpr_dict = \ get_feature_lines( [(3, 9, LineType.IF, ["A", "B"], "defined(A) && defined(B)"), (6, 8, LineType.IF, ["C", "D"], "(defined(A) && defined(B)) && (defined(C) && defined(D))")], "unittest.c") self.assertSetEqual(feature_dict.get_line_info(2), set([])) self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(6), set(["A", "B", "C", "D"])) self.assertSetEqual(feature_dict.get_line_info(7), set(["A", "B", "C", "D"])) self.assertSetEqual(feature_dict.get_line_info(8), set(["A", "B", "C", "D"])) self.assertSetEqual(feature_dict.get_line_info(9), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(10), set([])) self.assertSetEqual(fexpr_dict.get_line_info(2), set([])) self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["defined(A) && defined(B)"])) self.assertSetEqual( fexpr_dict.get_line_info(6), set(["(defined(A) && defined(B)) && (defined(C) && defined(D))"])) self.assertSetEqual( fexpr_dict.get_line_info(7), set(["(defined(A) && defined(B)) && (defined(C) && defined(D))"])) self.assertSetEqual( fexpr_dict.get_line_info(8), set(["(defined(A) && defined(B)) && (defined(C) && defined(D))"])) self.assertSetEqual(fexpr_dict.get_line_info(9), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(10), set([])) pass
def testsingleline(self): """Check that a single line is split as expected""" feature_dict, fexpr_dict = \ get_feature_lines([(3, 5, LineType.IF, ["A", "B"], "defined(A) && defined(B)")], "unittest.c") self.assertSetEqual(feature_dict.get_line_info(2), set([])) self.assertSetEqual(feature_dict.get_line_info(3), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(4), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(5), set(["A", "B"])) self.assertSetEqual(feature_dict.get_line_info(6), set([])) self.assertSetEqual(fexpr_dict.get_line_info(2), set([])) self.assertSetEqual(fexpr_dict.get_line_info(3), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(4), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(5), set(["defined(A) && defined(B)"])) self.assertSetEqual(fexpr_dict.get_line_info(6), set([])) pass