| import json |
| import subprocess |
| import sys |
| import tempfile |
| import unittest |
| from pathlib import Path |
|
|
|
|
| ROOT = Path(__file__).resolve().parents[1] |
|
|
|
|
| class CliEntrypointTests(unittest.TestCase): |
| def test_run_vlm_script_path_supports_help(self): |
| result = subprocess.run( |
| [sys.executable, str(ROOT / "approach" / "run_vlm.py"), "--help"], |
| cwd=ROOT, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| text=True, |
| check=False, |
| ) |
|
|
| self.assertEqual(result.returncode, 0, result.stderr) |
| self.assertIn("--questions", result.stdout) |
|
|
| def test_run_vlm_returns_nonzero_when_a_record_fails(self): |
| with tempfile.TemporaryDirectory() as tmpdir: |
| root = Path(tmpdir) |
| questions = root / "questions.jsonl" |
| questions.write_text( |
| json.dumps( |
| { |
| "question_id": 0, |
| "image": "123_4.jpg", |
| "image_id": 123004, |
| "text": "mine", |
| } |
| ) |
| + "\n", |
| encoding="utf-8", |
| ) |
| metadata = root / "metadata.json" |
| metadata.write_text( |
| json.dumps( |
| { |
| "456": { |
| "app_name": "Different app", |
| "app_description": "Does not cover the selected screenshot.", |
| } |
| } |
| ), |
| encoding="utf-8", |
| ) |
| result = subprocess.run( |
| [ |
| sys.executable, |
| "-B", |
| str(ROOT / "approach" / "run_vlm.py"), |
| "--questions", |
| str(questions), |
| "--images-dir", |
| str(root / "images"), |
| "--output", |
| str(root / "answers.jsonl"), |
| "--app-metadata-cache", |
| str(metadata), |
| ], |
| cwd=ROOT, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| text=True, |
| check=False, |
| ) |
|
|
| self.assertEqual(result.returncode, 1, result.stdout + result.stderr) |
| self.assertEqual(json.loads(result.stdout)["errors"], 1) |
|
|
| def test_run_ape_script_path_supports_help(self): |
| result = subprocess.run( |
| [sys.executable, str(ROOT / "approach" / "run_ape.py"), "--help"], |
| cwd=ROOT, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| text=True, |
| check=False, |
| ) |
|
|
| self.assertEqual(result.returncode, 0, result.stderr) |
| self.assertIn("--candidates", result.stdout) |
|
|
| def test_generate_questions_script_path_supports_help(self): |
| result = subprocess.run( |
| [sys.executable, str(ROOT / "scripts" / "generate_questions.py"), "--help"], |
| cwd=ROOT, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| text=True, |
| check=False, |
| ) |
|
|
| self.assertEqual(result.returncode, 0, result.stderr) |
| self.assertIn("--images-dir", result.stdout) |
|
|
| def test_environment_check_script_path_supports_help(self): |
| result = subprocess.run( |
| [sys.executable, str(ROOT / "scripts" / "check_environment.py"), "--help"], |
| cwd=ROOT, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| text=True, |
| check=False, |
| ) |
|
|
| self.assertEqual(result.returncode, 0, result.stderr) |
| self.assertIn("--allow-no-cuda", result.stdout) |
|
|
| def test_release_test_runner_is_present(self): |
| self.assertTrue((ROOT / "scripts" / "run_tests.py").is_file()) |
|
|
| def test_offline_control_path_smoke(self): |
| result = subprocess.run( |
| [sys.executable, str(ROOT / "scripts" / "smoke_control_path.py")], |
| cwd=ROOT, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| text=True, |
| check=False, |
| ) |
|
|
| self.assertEqual(result.returncode, 0, result.stderr) |
| self.assertIn('"status": "ok"', result.stdout) |
|
|
| def test_ape_build_script_has_valid_shell_syntax(self): |
| result = subprocess.run( |
| ["bash", "-n", str(ROOT / "scripts" / "build_ape_extension.sh")], |
| cwd=ROOT, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| text=True, |
| check=False, |
| ) |
|
|
| self.assertEqual(result.returncode, 0, result.stderr) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|