Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #7
0
    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
Example #8
0
    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