aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/test/py/lib/test_repo.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/py/lib/test_repo.py')
-rw-r--r--test/py/lib/test_repo.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/test/py/lib/test_repo.py b/test/py/lib/test_repo.py
new file mode 100644
index 0000000..1922245
--- /dev/null
+++ b/test/py/lib/test_repo.py
@@ -0,0 +1,48 @@
+# Copyright (c) 2023 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "cimple" project.
+# For details, see https://github.com/egor-tensin/cimple.
+# Distributed under the MIT License.
+
+import logging
+import os
+import shutil
+
+from .process import Process
+
+
+class Repo:
+ BRANCH = 'main'
+
+ def __init__(self, path):
+ self.path = os.path.abspath(path)
+ os.makedirs(path, exist_ok=True)
+ self.run('git', 'init', '-q', f'--initial-branch={Repo.BRANCH}')
+ self.run('git', 'config', 'user.name', 'Test User')
+ self.run('git', 'config', 'user.email', 'test@example.com')
+
+ def run(self, *args, **kwargs):
+ Process.run(*args, cwd=self.path, **kwargs)
+
+
+class TestRepo(Repo):
+ # Prevent Pytest from discovering test cases in this class:
+ __test__ = False
+
+ DATA_DIR = 'test_repo'
+ CI_SCRIPT = 'ci.sh'
+ OUTPUT_DIR = 'output'
+
+ @staticmethod
+ def get_ci_script():
+ return os.path.join(os.path.dirname(__file__), TestRepo.DATA_DIR, TestRepo.CI_SCRIPT)
+
+ def __init__(self, path):
+ super().__init__(path)
+ shutil.copy(self.get_ci_script(), self.path)
+ self.run('git', 'add', '.')
+ self.run('git', 'commit', '-q', '-m', 'add CI script')
+ self.output_dir = os.path.join(self.path, TestRepo.OUTPUT_DIR)
+ os.makedirs(self.output_dir, exist_ok=True)
+
+ def count_ci_output_files(self):
+ return len([name for name in os.listdir(self.output_dir) if os.path.isfile(os.path.join(self.output_dir, name))])