def test_parserset_selection_by_name(self):
        ps = ParserSet()
        p1 = SomeTestParser()
        p2 = RootTestParser()
        p3 = DependingTestParser()

        ps.add(p1)
        ps.add(p2)
        ps.add(p3)

        ps.select(parser=[p1.__class__.__name__])

        assert len(ps.parsers) == 1
        assert len(ps._parser_stash) == 2

        assert p1 in ps.parsers
        assert p2 in ps._parser_stash
        assert p3 in ps._parser_stash
    def test_parserset_selection_by_parser_class_multiple_parsers(self):
        ps = ParserSet()
        p1 = SomeTestParser()
        p2 = RootTestParser()
        p3 = DependingTestParser()

        ps.add(p1)
        ps.add(p2)
        ps.add(p3)

        ps.select(parser=[SomeTestParser, DependingTestParser])

        assert len(ps.parsers) == 2
        assert len(ps._parser_stash) == 1

        assert p1 in ps.parsers
        assert p2 in ps._parser_stash
        assert p3 in ps.parsers
    def test_deserialize_whitelist_same_parser_multiple_times(self, tmp_path):
        # same parser class can exist in ParserSet multiple times (e.g. with different arguments)
        ps = ParserSet()
        p1 = SomeTestParserArguments()
        p1.taxid = '9606'
        other_p1 = SomeTestParserArguments()
        other_p1.taxid = '10090'
        p2 = RootTestParser()
        p3 = DependingTestParser()

        ps.add(p1)
        ps.add(other_p1)
        ps.add(p2)
        ps.add(p3)

        ps.serialize(tmp_path)

        reloaded_ps = ParserSet.deserialize(
            tmp_path, whitelist=[SomeTestParserArguments])

        assert len(reloaded_ps.parsers) == 2
        assert p1.__class__.__name__ in [x.name for x in reloaded_ps.parsers]
        assert other_p1.__class__.__name__ in [
            x.name for x in reloaded_ps.parsers
        ]
        assert p2.__class__.__name__ not in [
            x.name for x in reloaded_ps.parsers
        ]
        assert p3.__class__.__name__ not in [
            x.name for x in reloaded_ps.parsers
        ]
    def test_deserialize_whitelist_multiple_parsers(self, tmp_path):

        ps = ParserSet()
        p1 = SomeTestParser()
        p2 = RootTestParser()
        p3 = DependingTestParser()

        ps.add(p1)
        ps.add(p2)
        ps.add(p3)

        ps.serialize(tmp_path)

        reloaded_ps = ParserSet.deserialize(
            tmp_path, whitelist=[SomeTestParser, DependingTestParser])

        assert len(reloaded_ps.parsers) == 2
        assert p1.__class__.__name__ in [x.name for x in reloaded_ps.parsers]
        assert p3.__class__.__name__ in [x.name for x in reloaded_ps.parsers]
        assert p2.__class__.__name__ not in [
            x.name for x in reloaded_ps.parsers
        ]
    def test_parserset_selection_by_parser_class_mulitple_times(self):
        # same parser class can exist in ParserSet multiple times (e.g. with different arguments)
        ps = ParserSet()
        p1 = SomeTestParserArguments()
        p1.taxid = '9606'
        other_p1 = SomeTestParserArguments()
        other_p1.taxid = '10090'
        p2 = RootTestParser()
        p3 = DependingTestParser()

        ps.add(p1)
        ps.add(other_p1)
        ps.add(p2)
        ps.add(p3)

        ps.select(parser=[SomeTestParserArguments])

        assert len(ps.parsers) == 2
        assert len(ps._parser_stash) == 2

        assert p1 in ps.parsers
        assert other_p1 in ps.parsers
        assert p2 in ps._parser_stash
        assert p3 in ps._parser_stash