1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
# Copyright (C) 2023 Greenbone AG
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
import os
import unittest
from pathlib import Path
from pontos.git._status import Status, StatusEntry, parse_git_status
class StatusEntryTestCase(unittest.TestCase):
def test_parse_modified_modified(self):
status = StatusEntry("MM foo.txt")
self.assertEqual(status.index, Status.MODIFIED)
self.assertEqual(status.working_tree, Status.MODIFIED)
self.assertEqual(status.path, Path("foo.txt"))
def test_parse_modified_unmodified(self):
status = StatusEntry("M foo.txt")
self.assertEqual(status.index, Status.MODIFIED)
self.assertEqual(status.working_tree, Status.UNMODIFIED)
self.assertEqual(status.path, Path("foo.txt"))
def test_parse_deleted(self):
status = StatusEntry("D foo.txt")
self.assertEqual(status.index, Status.DELETED)
self.assertEqual(status.working_tree, Status.UNMODIFIED)
self.assertEqual(status.path, Path("foo.txt"))
def test_parse_added(self):
status = StatusEntry("A foo.txt")
self.assertEqual(status.index, Status.ADDED)
self.assertEqual(status.working_tree, Status.UNMODIFIED)
self.assertEqual(status.path, Path("foo.txt"))
def test_parse_untracked(self):
status = StatusEntry("?? foo.txt")
self.assertEqual(status.index, Status.UNTRACKED)
self.assertEqual(status.working_tree, Status.UNTRACKED)
self.assertEqual(status.path, Path("foo.txt"))
def test_parse_ignored_untracked(self):
status = StatusEntry("!? foo.txt")
self.assertEqual(status.index, Status.IGNORED)
self.assertEqual(status.working_tree, Status.UNTRACKED)
self.assertEqual(status.path, Path("foo.txt"))
def test_pathlike(self):
status = StatusEntry("MM foo.txt")
self.assertEqual(os.fspath(status), "foo.txt")
class ParseGitStatusTestCase(unittest.TestCase):
def test_parse_git_status(self):
output = (
b" M bar.json\x00R foo.rst\x00foo.md\x00A foo.txt\x00"
b"MM ipsum.json\x00AM ipsum.txt\x00D lorem.json\x00"
)
it = parse_git_status(output.decode("utf-8"))
status = next(it)
self.assertEqual(status.index, Status.UNMODIFIED)
self.assertEqual(status.working_tree, Status.MODIFIED)
self.assertEqual(status.path, Path("bar.json"))
status = next(it)
self.assertEqual(status.index, Status.RENAMED)
self.assertEqual(status.working_tree, Status.UNMODIFIED)
self.assertEqual(status.path, Path("foo.rst"))
self.assertEqual(status.old_path, Path("foo.md"))
status = next(it)
self.assertEqual(status.index, Status.ADDED)
self.assertEqual(status.working_tree, Status.UNMODIFIED)
self.assertEqual(status.path, Path("foo.txt"))
status = next(it)
self.assertEqual(status.index, Status.MODIFIED)
self.assertEqual(status.working_tree, Status.MODIFIED)
self.assertEqual(status.path, Path("ipsum.json"))
status = next(it)
self.assertEqual(status.index, Status.ADDED)
self.assertEqual(status.working_tree, Status.MODIFIED)
self.assertEqual(status.path, Path("ipsum.txt"))
status = next(it)
self.assertEqual(status.index, Status.DELETED)
self.assertEqual(status.working_tree, Status.UNMODIFIED)
self.assertEqual(status.path, Path("lorem.json"))
with self.assertRaises(StopIteration):
next(it)
|