Mercurial > repos > jpayne > tableops
annotate test_tables_ops.py @ 0:402b58f45844 draft default tip
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
| author | jpayne |
|---|---|
| date | Mon, 08 Dec 2025 15:03:06 +0000 |
| parents | |
| children |
| rev | line source |
|---|---|
|
0
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
1 import unittest |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
2 import subprocess |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
3 import os |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
4 import csv |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
5 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
7 class TestTableOps(unittest.TestCase): |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
8 TEST_DATA_DIR = "test-data" |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
9 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
10 def _run_command(self, command, input_data=None): |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
11 process = subprocess.Popen( |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
12 command, |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
13 stdin=subprocess.PIPE if input_data else None, |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
14 stdout=subprocess.PIPE, |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
15 stderr=subprocess.PIPE, |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
16 text=True, # Important for handling text I/O |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
17 ) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
18 stdout, stderr = process.communicate(input_data) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
19 return process.returncode, stdout, stderr |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
20 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
21 def _compare_tsv(self, expected_file, actual_output): |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
22 with open( |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
23 os.path.join(self.TEST_DATA_DIR, expected_file), "r", encoding="utf-8" |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
24 ) as f: |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
25 expected_lines = list(csv.reader(f, delimiter="\t")) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
26 actual_lines = list(csv.reader(actual_output.splitlines(), delimiter="\t")) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
27 self.assertEqual(expected_lines, actual_lines) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
28 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
29 def test_table_union_union(self): |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
30 returncode, stdout, stderr = self._run_command( |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
31 [ |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
32 "table-union", |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
33 os.path.join(self.TEST_DATA_DIR, "dingbat.tsv"), |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
34 os.path.join(self.TEST_DATA_DIR, "loki.tsv"), |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
35 ] |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
36 ) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
37 self.assertEqual(returncode, 0) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
38 self._compare_tsv("combined.tsv", stdout) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
39 self.assertEqual(stderr, "") |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
40 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
41 def test_table_union_join(self): |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
42 returncode, stdout, stderr = self._run_command( |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
43 [ |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
44 "table-union", |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
45 "--no-union", |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
46 os.path.join(self.TEST_DATA_DIR, "users.tsv"), |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
47 os.path.join(self.TEST_DATA_DIR, "orders.tsv"), |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
48 ] |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
49 ) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
50 self.assertEqual(returncode, 0) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
51 self._compare_tsv("merged_expected.tsv", stdout) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
52 self.assertEqual(stderr, "") |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
53 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
54 def test_table_summarize(self): |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
55 returncode, stdout, stderr = self._run_command( |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
56 ["table-summarize", os.path.join(self.TEST_DATA_DIR, "data_summarize.tsv")] |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
57 ) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
58 self.assertEqual(returncode, 0) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
59 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
60 expected_summary = """Summary: |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
61 Category: |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
62 \t - A: 3 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
63 \t - B: 2 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
64 \t - C: 1 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
65 Value: |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
66 \t - 10: 1 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
67 \t - 12: 1 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
68 \t - 15: 1 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
69 \t - 20: 1 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
70 \t - 25: 1 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
71 \t - 30: 1 of 6 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
72 """ |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
73 self.assertEqual(stdout.strip(), expected_summary.strip()) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
74 self.assertEqual(stderr, "") |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
75 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
76 def test_table_sort(self): |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
77 returncode, stdout, stderr = self._run_command( |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
78 [ |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
79 "table-sort", |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
80 "-k", |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
81 "Age", |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
82 "-k", |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
83 "Name", |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
84 os.path.join(self.TEST_DATA_DIR, "data_sort.tsv"), |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
85 ] |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
86 ) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
87 self.assertEqual(returncode, 0) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
88 self._compare_tsv("sorted_data_expected.tsv", stdout) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
89 self.assertEqual(stderr, "") |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
90 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
91 def test_table_sort_pipe(self): |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
92 with open( |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
93 os.path.join(self.TEST_DATA_DIR, "data_sort.tsv"), "r", encoding="utf-8" |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
94 ) as infile: |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
95 input_data = infile.read() |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
96 returncode, stdout, stderr = self._run_command( |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
97 ["table-sort", "-k", "Age", "-k", "Name"], input_data |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
98 ) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
99 self.assertEqual(returncode, 0) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
100 self._compare_tsv("sorted_data_expected.tsv", stdout) |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
101 self.assertEqual(stderr, "") |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
102 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
103 |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
104 if __name__ == "__main__": |
|
402b58f45844
planemo upload commit 9cc4dc1db55299bf92ec6bd359161ece4592bd16-dirty
jpayne
parents:
diff
changeset
|
105 unittest.main() |
