Example #1
0
 def test_cannot_create_schema_with_one_column_but_no_producer(
         self, mock_sys_exit):
     try:
         parse_arguments(['-n', '10', 'cmdline', '-c', 'A'])
     except TypeError:
         # unfortunately argparse relies on sys.exit to "exit" a function, so when it
         # is mocked the function returns without an issue with None and causes a TypeError.
         pass
     mock_sys_exit.assert_called_with(2)
Example #2
0
 def test_cannot_create_schema_if_size_parameter_missing(
         self, mock_sys_exit):
     try:
         parse_arguments(['cmdline', '-c', 'A', '%int'])
     except TypeError:
         # unfortunately argparse relies on sys.exit to "exit" a function, so when it
         # is mocked the function returns without an issue with None and causes a TypeError.
         pass
     mock_sys_exit.assert_called_with(2)
Example #3
0
    def test_raises_error_if_number_of_columns_is_incorrect(
            self, mock_sys_exit):
        try:
            parse_arguments(['-n', '5', 'expr', '-c', 'a', '%int.%int'])
        except TypeError:
            # unfortunately argparse relies on sys.exit to "exit" a function, so when it
            # is mocked the function returns without an issue with None and causes a TypeError.
            pass

        mock_sys_exit.assert_called_with(2)
Example #4
0
 def test_can_create_schema_with_two_identical_columns_using_expr(self, _):
     schema, _, _, size_dict = parse_arguments([
         '-n', '5', 'expr', '--columns', 'A,B', 'let A := %int in @A . @A'
     ])
     self.assertEqual({'number_of_rows': 5}, size_dict)
     self.assertEqual(('A', 'B'), schema.columns)
     self.assertEqual(1, len(schema.producers))
     self.assertEqual(
         SimpleNamespace(name='producer#0', type='int', config={}),
         schema.producers[0])
     self.assertEqual(3, len(schema.transformers))
     expected_transformer_A = SimpleNamespace(
         name='transformer#0',
         inputs=['producer#0'],
         outputs=['A'],
         transformer=IdentityTransformer(1))
     expected_transformer_A_copy = SimpleNamespace(
         name='transformer#1',
         inputs=['producer#0'],
         outputs=['A'],
         transformer=IdentityTransformer(1))
     expected_transformer_B = SimpleNamespace(
         name='transformer#2',
         inputs=['producer#0'],
         outputs=['B'],
         transformer=IdentityTransformer(1))
     self.assertEqual(expected_transformer_A, schema.transformers[0])
     self.assertEqual(expected_transformer_A_copy, schema.transformers[1])
     self.assertEqual(expected_transformer_B, schema.transformers[2])
Example #5
0
    def test_cannot_create_schema_without_specifying_cmdline_and_expr(
            self, mock_sys_exit):
        try:
            parse_arguments(['-n', '10', '-c', 'A', '%int'])
        except TypeError:
            # unfortunately argparse relies on sys.exit to "exit" a function, so when it
            # is mocked the function returns without an issue with None and causes a TypeError.
            pass
        mock_sys_exit.assert_called_with(2)

        try:
            parse_arguments(['-n', '10', 'let a := #int in @a'])
        except TypeError:
            # unfortunately argparse relies on sys.exit to "exit" a function, so when it
            # is mocked the function returns without an issue with None and causes a TypeError.
            pass
        mock_sys_exit.assert_called_with(2)
Example #6
0
 def test_can_create_schema_with_one_column(self, _):
     schema, _, _, size_dict = parse_arguments(
         ['-n', '5', 'cmdline', '-c', 'A', '%int'])
     self.assertEqual({'number_of_rows': 5}, size_dict)
     self.assertEqual(('A', ), schema.columns)
     self.assertEqual(
         SimpleNamespace(name='producer#0', type='int', config={}),
         schema.producers[0])
     expected_transformer = SimpleNamespace(
         name='transformer#0',
         inputs=['producer#0'],
         outputs=['A'],
         transformer=IdentityTransformer(1))
     self.assertEqual(expected_transformer, schema.transformers[0])
Example #7
0
 def test_can_create_schema_with_columns_with_config(self, _):
     schema, _, _, size_dict = parse_arguments(
         ['-n', '5', 'expr', '--columns', 'A', '%int{"min": 10}'])
     self.assertEqual({'number_of_rows': 5}, size_dict)
     self.assertEqual(('A', ), schema.columns)
     self.assertEqual(1, len(schema.producers))
     self.assertEqual(
         SimpleNamespace(name='producer#0', type='int', config={'min': 10}),
         schema.producers[0])
     self.assertEqual(1, len(schema.transformers))
     expected_transformer_A = SimpleNamespace(
         name='transformer#0',
         inputs=['producer#0'],
         outputs=['A'],
         transformer=IdentityTransformer(1))
     self.assertEqual(expected_transformer_A, schema.transformers[0])
Example #8
0
 def test_can_create_schema_with_third_column_sum_of_two_columns_using_expr(
         self, _):
     schema, _, _, size_dict = parse_arguments([
         '-n', '5', 'expr', '--columns', 'A,B,C',
         '(%int)=A . (%int)=B . (@A+@B)'
     ])
     self.assertEqual({'number_of_rows': 5}, size_dict)
     self.assertEqual(('A', 'B', 'C'), schema.columns)
     self.assertEqual(2, len(schema.producers))
     producers = sorted(schema.producers, key=lambda x: x.name)
     self.assertEqual(
         SimpleNamespace(name='producer#0', type='int', config={}),
         producers[0])
     self.assertEqual(
         SimpleNamespace(name='producer#1', type='int', config={}),
         producers[1])
     expected_transformer_A = SimpleNamespace(
         name='transformer#0',
         inputs=['producer#0'],
         outputs=['A'],
         transformer=IdentityTransformer(1))
     expected_transformer_B = SimpleNamespace(
         name='transformer#1',
         inputs=['producer#1'],
         outputs=['B'],
         transformer=IdentityTransformer(1))
     expected_transformer_merge = SimpleNamespace(
         name='transformer#2',
         inputs=['producer#0', 'producer#1'],
         outputs=['transformer#2#0'],
         transformer=MergeTransformer(2))
     expected_transformer_C = SimpleNamespace(
         name='transformer#3',
         inputs=['transformer#2#0'],
         outputs=['C'],
         transformer=IdentityTransformer(1))
     self.assertEqual(expected_transformer_A, schema.transformers[0])
     self.assertEqual(expected_transformer_B, schema.transformers[1])
     self.assertEqual(expected_transformer_merge, schema.transformers[2])
     self.assertEqual(expected_transformer_C, schema.transformers[3])
Example #9
0
 def test_can_create_schema_with_two_columns(self, _):
     schema, _, _, size_dict = parse_arguments(
         ['-n', '5', 'cmdline', '-c', 'A', '%int', '-c', 'B', '%int'])
     self.assertEqual({'number_of_rows': 5}, size_dict)
     self.assertEqual(('A', 'B'), schema.columns)
     producers = sorted(schema.producers, key=lambda x: x.name)
     self.assertEqual(
         SimpleNamespace(name='producer#0', type='int', config={}),
         producers[0])
     self.assertEqual(
         SimpleNamespace(name='producer#1', type='int', config={}),
         producers[1])
     expected_transformer_A = SimpleNamespace(
         name='transformer#0',
         inputs=['producer#0'],
         outputs=['A'],
         transformer=IdentityTransformer(1))
     expected_transformer_B = SimpleNamespace(
         name='transformer#1',
         inputs=['producer#1'],
         outputs=['B'],
         transformer=IdentityTransformer(1))
     self.assertEqual(expected_transformer_A, schema.transformers[0])
     self.assertEqual(expected_transformer_B, schema.transformers[1])