# Copyright 2011-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from portage.dep import Atom
from portage.tests import TestCase
from portage.update import parse_updates


class ParseUpdatesTestCase(TestCase):
    def testParseUpdates(self):
        test_cases = (
            (
                """
slotmove invalid_atom 0 3
slotmove !=invalid/blocker-3* 0 3
slotmove =valid/atom-3* 0 3 invalid_extra_token
slotmove =valid/atom-3* 0 3
slotmove =valid/atom-3* 0 3/3.1
slotmove =valid/atom-3* 0/0 3
move valid/atom1 valid/atom2 invalid_extra_token
move valid/atom1 invalid_atom2
move invalid_atom1 valid/atom2
move !invalid/blocker1 valid/atom2
move valid/atom1 !invalid/blocker2
move =invalid/operator-1* valid/atom2
move valid/atom1 =invalid/operator-2*
move valid/atom1 valid/atom2
""",
                [
                    ["slotmove", Atom("=valid/atom-3*"), "0", "3"],
                    ["move", Atom("valid/atom1"), Atom("valid/atom2")],
                ],
                12,
            ),
        )

        for input_content, expected_output, expected_error_count in test_cases:
            output_data, errors = parse_updates(input_content)
            self.assertEqual(output_data, expected_output)
            self.assertEqual(len(errors), expected_error_count)
