Skip to content

Commit eb41ae0

Browse files
author
Dave Lahr
committed
pandasGEXpress/concat_gctoo: add tests for main
1 parent 1dc7461 commit eb41ae0

File tree

4 files changed

+85
-2
lines changed

4 files changed

+85
-2
lines changed

cmapPy/pandasGEXpress/concat_gctoo.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ def main():
9898
# get args
9999
args = build_parser().parse_args(sys.argv[1:])
100100
setup_logger.setup(verbose=args.verbose)
101+
logger.debug("args: {}".format(args))
101102

102103
# Get files directly
103104
if args.input_filepaths is not None:
@@ -127,10 +128,12 @@ def main():
127128

128129
# Create concatenated gctoo object
129130
if args.concat_direction == "horiz":
130-
out_gctoo = hstack(gctoos, args.fields_to_remove, args.reset_ids)
131+
out_gctoo = hstack(gctoos, args.remove_all_metadata_fields, args.error_report_output_file,
132+
args.fields_to_remove, args.reset_ids)
131133

132134
elif args.concat_direction == "vert":
133-
out_gctoo = vstack(gctoos, args.fields_to_remove, args.reset_ids)
135+
out_gctoo = vstack(gctoos, args.remove_all_metadata_fields, args.error_report_output_file,
136+
args.fields_to_remove, args.reset_ids)
134137

135138
# Write out_gctoo to file
136139
logger.info("Writing to output file args.out_name: {}".format(args.out_name))
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#1.3
2+
2 2 1 0
3+
id rhd1 a b
4+
rid1 c 1.1 2.2
5+
rid2 d 3.3 4.4
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#1.3
2+
2 2 1 0
3+
id rhd1 g f
4+
rid1 e 1.1 2.2
5+
rid2 d 3.3 4.4

cmapPy/pandasGEXpress/tests/test_concat_gctoo.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ def test_assemble_common_meta(self):
8484
self.assertIn("orig_rid", report_df.columns)
8585
self.assertTrue(set(meta1.columns) < set(report_df.columns))
8686

87+
os.remove(error_report_file)
88+
8789

8890
out_meta1 = cg.assemble_common_meta([meta1, meta2], ["rhd3"], None, False, None)
8991
logger.debug("out_meta1:\n{}".format(out_meta1))
@@ -330,6 +332,74 @@ def test_build_mismatched_common_meta_report(self):
330332
self.assertTrue(set(meta1.columns) < set(r.columns))
331333
self.assertEqual({"r3"}, set(r.orig_rid))
332334

335+
def test_main(self):
336+
test_dir = "functional_tests/test_concat_gctoo/test_main"
337+
338+
g_a = pg.parse(os.path.join(test_dir, "a.gct"))
339+
logger.debug("g_a: {}".format(g_a))
340+
g_b = pg.parse(os.path.join(test_dir, "b.gct"))
341+
logger.debug("g_b: {}".format(g_b))
342+
343+
save_build_parser = cg.build_parser
344+
345+
class MockParser:
346+
def __init__(self, args):
347+
self.args = args
348+
def parse_args(self, unused):
349+
return self.args
350+
351+
#unhappy path - write out error report file
352+
expected_output_file = tempfile.mkstemp()[1]
353+
logger.debug("unhappy path - write out error report file - expected_output_file: {}".format(expected_output_file))
354+
355+
args = save_build_parser().parse_args(["-d", "horiz", "-if", g_a.src, g_b.src, "-o", "should_not_be_used",
356+
"-ot", "gct", "-erof", expected_output_file])
357+
logger.debug("args: {}".format(args))
358+
359+
my_mock_parser = MockParser(args)
360+
cg.build_parser = lambda: my_mock_parser
361+
362+
with self.assertRaises(cg.MismatchCommonMetadataConcatGctooException) as context:
363+
cg.main()
364+
365+
self.assertTrue(os.path.exists(expected_output_file))
366+
report_df = pd.read_csv(expected_output_file, sep="\t")
367+
logger.debug("report_df:\n{}".format(report_df))
368+
self.assertEqual(2, report_df.shape[0])
369+
370+
os.remove(expected_output_file)
371+
372+
print
373+
print
374+
print
375+
376+
#happy path
377+
args.remove_all_metadata_fields = True
378+
args.error_report_output_file = None
379+
380+
expected_output_file = tempfile.mkstemp(suffix=".gct")[1]
381+
logger.debug("happy path - expected_output_file: {}".format(expected_output_file))
382+
args.out_name = expected_output_file
383+
384+
my_mock_parser = MockParser(args)
385+
cg.buid_parser = lambda: my_mock_parser
386+
387+
cg.main()
388+
self.assertTrue(os.path.exists(expected_output_file))
389+
390+
r = pg.parse(expected_output_file)
391+
logger.debug("happy path -r:\n{}".format(r))
392+
logger.debug("r.data_df:\n{}".format(r.data_df))
393+
394+
self.assertEqual((2,4), r.data_df.shape)
395+
self.assertEqual({"a", "b", "g", "f"}, set(r.data_df.columns))
396+
self.assertEqual({"rid1", "rid2"}, set(r.data_df.index))
397+
398+
#cleanup
399+
os.remove(expected_output_file)
400+
401+
cg.build_parser = save_build_parser
402+
333403

334404
if __name__ == "__main__":
335405
setup_logger.setup(verbose=True)

0 commit comments

Comments
 (0)