|
| 1 | +import os |
| 2 | + |
| 3 | +import pytest |
| 4 | +from pytest_test_utils import TmpDir |
| 5 | + |
| 6 | +from scmrepo.git import Git |
| 7 | + |
| 8 | + |
| 9 | +def test_open(tmp_dir: TmpDir, scm: Git): |
| 10 | + files = tmp_dir.gen( |
| 11 | + {"foo": "foo", "тест": "проверка", "data": {"lorem": "ipsum"}} |
| 12 | + ) |
| 13 | + scm.add_commit(files, message="add") |
| 14 | + |
| 15 | + fs = scm.get_fs("master") |
| 16 | + with fs.open("foo", mode="r", encoding="utf-8") as fobj: |
| 17 | + assert fobj.read() == "foo" |
| 18 | + with fs.open("тест", mode="r", encoding="utf-8") as fobj: |
| 19 | + assert fobj.read() == "проверка" |
| 20 | + with pytest.raises(IOError): |
| 21 | + fs.open("not-existing-file") |
| 22 | + with pytest.raises(IOError): |
| 23 | + fs.open("data") |
| 24 | + |
| 25 | + |
| 26 | +def test_exists(tmp_dir: TmpDir, scm: Git): |
| 27 | + scm.commit("init") |
| 28 | + files = tmp_dir.gen( |
| 29 | + {"foo": "foo", "тест": "проверка", "data": {"lorem": "ipsum"}} |
| 30 | + ) |
| 31 | + |
| 32 | + fs = scm.get_fs("master") |
| 33 | + |
| 34 | + assert not fs.exists("foo") |
| 35 | + assert not fs.exists("тест") |
| 36 | + assert not fs.exists("data") |
| 37 | + assert not fs.exists(os.path.join("data", "lorem")) |
| 38 | + |
| 39 | + scm.add_commit(files, message="add") |
| 40 | + |
| 41 | + fs = scm.get_fs("master") |
| 42 | + assert fs.exists("foo") |
| 43 | + assert fs.exists("тест") |
| 44 | + assert fs.exists("data") |
| 45 | + assert fs.exists(os.path.join("data", "lorem")) |
| 46 | + assert not fs.exists("non-existing-file") |
| 47 | + |
| 48 | + |
| 49 | +def test_isdir(tmp_dir: TmpDir, scm: Git): |
| 50 | + tmp_dir.gen({"foo": "foo", "тест": "проверка", "data": {"lorem": "ipsum"}}) |
| 51 | + scm.add_commit(["foo", "data"], message="add") |
| 52 | + |
| 53 | + fs = scm.get_fs("master") |
| 54 | + |
| 55 | + assert fs.isdir("data") |
| 56 | + assert not fs.isdir("foo") |
| 57 | + assert not fs.isdir("non-existing-file") |
| 58 | + |
| 59 | + |
| 60 | +def test_isfile(tmp_dir: TmpDir, scm: Git): |
| 61 | + tmp_dir.gen({"foo": "foo", "тест": "проверка", "data": {"lorem": "ipsum"}}) |
| 62 | + scm.add_commit(["foo", "data"], message="add") |
| 63 | + |
| 64 | + fs = scm.get_fs("master") |
| 65 | + assert fs.isfile("foo") |
| 66 | + assert not fs.isfile("data") |
| 67 | + assert not fs.isfile("not-existing-file") |
| 68 | + |
| 69 | + |
| 70 | +def test_walk(tmp_dir: TmpDir, scm: Git): |
| 71 | + tmp_dir.gen( |
| 72 | + { |
| 73 | + "foo": "foo", |
| 74 | + "тест": "проверка", |
| 75 | + "data": {"lorem": "ipsum", "subdir": {"sub": "sub"}}, |
| 76 | + } |
| 77 | + ) |
| 78 | + scm.add_commit(os.path.join("data", "subdir"), message="add") |
| 79 | + fs = scm.get_fs("master") |
| 80 | + |
| 81 | + def convert_to_sets(walk_results): |
| 82 | + return [ |
| 83 | + (root, set(dirs), set(nondirs)) |
| 84 | + for root, dirs, nondirs in walk_results |
| 85 | + ] |
| 86 | + |
| 87 | + assert convert_to_sets(fs.walk(".")) == convert_to_sets( |
| 88 | + [ |
| 89 | + (scm.root_dir, ["data"], []), |
| 90 | + (os.path.join(scm.root_dir, "data"), ["subdir"], []), |
| 91 | + ( |
| 92 | + os.path.join(scm.root_dir, "data", "subdir"), |
| 93 | + [], |
| 94 | + ["sub"], |
| 95 | + ), |
| 96 | + ] |
| 97 | + ) |
| 98 | + |
| 99 | + assert convert_to_sets( |
| 100 | + fs.walk(os.path.join("data", "subdir")) |
| 101 | + ) == convert_to_sets( |
| 102 | + [ |
| 103 | + ( |
| 104 | + os.path.join(scm.root_dir, "data", "subdir"), |
| 105 | + [], |
| 106 | + ["sub"], |
| 107 | + ) |
| 108 | + ] |
| 109 | + ) |
| 110 | + |
| 111 | + |
| 112 | +def test_ls(tmp_dir: TmpDir, scm: Git): |
| 113 | + files = tmp_dir.gen( |
| 114 | + { |
| 115 | + "foo": "foo", |
| 116 | + "тест": "проверка", |
| 117 | + "data": {"lorem": "ipsum", "subdir": {"sub": "sub"}}, |
| 118 | + } |
| 119 | + ) |
| 120 | + scm.add_commit(files, message="add") |
| 121 | + fs = scm.get_fs("master") |
| 122 | + |
| 123 | + assert fs.ls(".", detail=False) == ["foo", "тест", "data"] |
| 124 | + assert fs.ls(".") == { |
| 125 | + "data": { |
| 126 | + "mode": 16384, |
| 127 | + "name": str(tmp_dir / "data"), |
| 128 | + "sha": "f5d6ac1955c85410b71bb6e35e4c57c54e2ad524", |
| 129 | + "size": 66, |
| 130 | + "type": "directory", |
| 131 | + }, |
| 132 | + "foo": { |
| 133 | + "mode": 33188, |
| 134 | + "name": str(tmp_dir / "foo"), |
| 135 | + "sha": "19102815663d23f8b75a47e7a01965dcdc96468c", |
| 136 | + "size": 3, |
| 137 | + "type": "file", |
| 138 | + }, |
| 139 | + "тест": { |
| 140 | + "mode": 33188, |
| 141 | + "name": str(tmp_dir / "тест"), |
| 142 | + "sha": "eeeba1738f4c12844163b89112070c6e57eb764e", |
| 143 | + "size": 16, |
| 144 | + "type": "file", |
| 145 | + }, |
| 146 | + } |
0 commit comments