def test_description_only_for_crosslink_manpage(self): help_command = self.create_help_command() operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_description(help_command=help_command) rendered = help_command.doc.getvalue().decode('utf-8') # The links are generated in the "man" mode. self.assertIn('See also: AWS API Documentation', rendered)
def setUp(self): self.arg_table = {} self.help_command = mock.Mock() self.help_command.event_class = 'custom' self.help_command.arg_table = self.arg_table self.help_command.obj.service.operations = [] self.operation_handler = OperationDocumentEventHandler( self.help_command)
def test_includes_global_args_ref_in_man_options(self): help_command = self.create_help_command() operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_options_end(help_command=help_command) rendered = help_command.doc.getvalue().decode('utf-8') # The links aren't generated in the "man" mode. self.assertIn("See 'aws help' for descriptions of global parameters", rendered)
def test_includes_global_args_ref_in_man_options(self): help_command = self.create_help_command() operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_options_end(help_command=help_command) rendered = help_command.doc.getvalue().decode('utf-8') # The links aren't generated in the "man" mode. self.assertIn( "See 'aws help' for descriptions of global parameters", rendered )
def test_includes_global_args_ref_in_html_options(self): help_command = self.create_help_command() help_command.doc.target = 'html' operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_options_end(help_command=help_command) rendered = help_command.doc.getvalue().decode('utf-8') self.assertIn( "See :doc:`'aws help' </reference/index>` for descriptions of " "global parameters", rendered)
class TestRecursiveShapes(unittest.TestCase): def setUp(self): self.arg_table = {} self.help_command = mock.Mock() self.help_command.event_class = 'custom' self.help_command.arg_table = self.arg_table self.operation_model = mock.Mock() self.operation_model.service_model.operation_names = [] self.help_command.obj = self.operation_model self.operation_handler = OperationDocumentEventHandler( self.help_command) def assert_rendered_docs_contain(self, expected): writes = [args[0][0] for args in self.help_command.doc.write.call_args_list] writes = '\n'.join(writes) self.assertIn(expected, writes) def test_handle_recursive_input(self): shape_map = { 'RecursiveStruct': { 'type': 'structure', 'members': { 'A': {'shape': 'NonRecursive'}, 'B': {'shape': 'RecursiveStruct'}, } }, 'NonRecursive': {'type': 'string'} } shape = StructureShape('RecursiveStruct', shape_map['RecursiveStruct'], ShapeResolver(shape_map)) self.arg_table['arg-name'] = mock.Mock(argument_model=shape) self.operation_handler.doc_option_example( 'arg-name', self.help_command) self.assert_rendered_docs_contain('{ ... recursive ... }') def test_handle_recursive_output(self): shape_map = { 'RecursiveStruct': { 'type': 'structure', 'members': { 'A': {'shape': 'NonRecursive'}, 'B': {'shape': 'RecursiveStruct'}, } }, 'NonRecursive': {'type': 'string'} } shape = StructureShape('RecursiveStruct', shape_map['RecursiveStruct'], ShapeResolver(shape_map)) operation_model = mock.Mock() operation_model.output_shape = shape self.help_command.obj = operation_model self.operation_handler.doc_output(self.help_command, 'event-name') self.assert_rendered_docs_contain('( ... recursive ... )')
def test_includes_global_args_ref_in_html_options(self): help_command = self.create_help_command() help_command.doc.target = 'html' operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_options_end(help_command=help_command) rendered = help_command.doc.getvalue().decode('utf-8') self.assertIn( "See :doc:`'aws help' </reference/index>` for descriptions of " "global parameters", rendered )
def get_help_docs_for_argument(self, shape): arg_table = {'arg-name': mock.Mock(argument_model=shape)} help_command = mock.Mock() help_command.doc = ReSTDocument() help_command.event_class = 'custom' help_command.arg_table = arg_table operation_model = mock.Mock() operation_model.service_model.operation_names = [] help_command.obj = operation_model operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_option('arg-name', help_command) return help_command.doc.getvalue().decode('utf-8')
def test_includes_webapi_crosslink_in_html(self): help_command = self.create_help_command() # Configure this for 'html' generation: help_command.obj.service_model.metadata = {'uid': 'service-1-2-3'} help_command.obj.name = 'myoperation' help_command.doc.target = 'html' operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_description(help_command=help_command) rendered = help_command.doc.getvalue().decode('utf-8') # Should expect an externa link because we're generating html. self.assertIn( 'See also: `AWS API Documentation ' '<https://docs.aws.amazon.com/goto/' 'WebAPI/service-1-2-3/myoperation>`_', rendered)
class TestTranslationMap(unittest.TestCase): def setUp(self): self.arg_table = {} self.help_command = mock.Mock() self.help_command.event_class = 'custom' self.help_command.arg_table = self.arg_table self.operation_model = mock.Mock() self.operation_model.service_model.operation_names = [] self.help_command.obj = self.operation_model self.operation_handler = OperationDocumentEventHandler( self.help_command) def assert_rendered_docs_contain(self, expected): writes = [args[0][0] for args in self.help_command.doc.write.call_args_list] writes = '\n'.join(writes) self.assertIn(expected, writes) def test_boolean_arg_groups(self): builder = DenormalizedStructureBuilder() input_model = builder.with_members({ 'Flag': {'type': 'boolean'} }).build_model() argument_model = input_model.members['Flag'] argument_model.name = 'Flag' self.arg_table['flag'] = mock.Mock( cli_type_name='boolean', argument_model=argument_model) self.arg_table['no-flag'] = mock.Mock( cli_type_name='boolean', argument_model=argument_model) # The --no-flag should not be used in the translation. self.assertEqual( self.operation_handler.build_translation_map(), {'Flag': 'flag'} )
def test_documents_enum_values(self): shape = {'type': 'string', 'enum': ['FOO', 'BAZ']} shape = StringShape('EnumArg', shape) arg_table = {'arg-name': mock.Mock(argument_model=shape)} help_command = mock.Mock() help_command.doc = ReSTDocument() help_command.event_class = 'custom' help_command.arg_table = arg_table operation_model = mock.Mock() operation_model.service_model.operation_names = [] help_command.obj = operation_model operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_option('arg-name', help_command) rendered = help_command.doc.getvalue().decode('utf-8') self.assertIn('Possible values', rendered) self.assertIn('FOO', rendered) self.assertIn('BAZ', rendered)
def test_documents_enum_values(self): shape = { 'type': 'string', 'enum': ['FOO', 'BAZ'] } shape = StringShape('EnumArg', shape) arg_table = {'arg-name': mock.Mock(argument_model=shape)} help_command = mock.Mock() help_command.doc = ReSTDocument() help_command.event_class = 'custom' help_command.arg_table = arg_table operation_model = mock.Mock() operation_model.service_model.operation_names = [] help_command.obj = operation_model operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_option('arg-name', help_command) rendered = help_command.doc.getvalue().decode('utf-8') self.assertIn('Possible values', rendered) self.assertIn('FOO', rendered) self.assertIn('BAZ', rendered)
def test_documents_json_header_shape(self): shape = { 'type': 'string', 'jsonvalue': True, 'location': 'header', 'locationName': 'X-Amz-Header-Name' } shape = StringShape('JSONValueArg', shape) arg_table = {'arg-name': mock.Mock(argument_model=shape)} help_command = mock.Mock() help_command.doc = ReSTDocument() help_command.event_class = 'custom' help_command.arg_table = arg_table operation_model = mock.Mock() operation_model.service_model.operation_names = [] help_command.obj = operation_model operation_handler = OperationDocumentEventHandler(help_command) operation_handler.doc_option('arg-name', help_command) rendered = help_command.doc.getvalue().decode('utf-8') self.assertIn('(JSON)', rendered)
class TestRecursiveShapes(unittest.TestCase): def setUp(self): self.arg_table = {} self.help_command = mock.Mock() self.help_command.event_class = 'custom' self.help_command.arg_table = self.arg_table self.operation_model = mock.Mock() self.operation_model.service_model.operation_names = [] self.help_command.obj = self.operation_model self.operation_handler = OperationDocumentEventHandler( self.help_command) def assert_rendered_docs_contain(self, expected): writes = [args[0][0] for args in self.help_command.doc.write.call_args_list] writes = '\n'.join(writes) self.assertIn(expected, writes) def assert_proper_indentation(self): indent = self.help_command.doc.style.indent.call_count dedent = self.help_command.doc.style.dedent.call_count message = 'Imbalanced indentation: indent (%s) != dedent (%s)' self.assertEquals(indent, dedent, message % (indent, dedent)) def test_handle_recursive_input(self): shape_map = { 'RecursiveStruct': { 'type': 'structure', 'members': { 'A': {'shape': 'NonRecursive'}, 'B': {'shape': 'RecursiveStruct'}, } }, 'NonRecursive': {'type': 'string'} } shape = StructureShape('RecursiveStruct', shape_map['RecursiveStruct'], ShapeResolver(shape_map)) self.arg_table['arg-name'] = mock.Mock(argument_model=shape) self.operation_handler.doc_option_example( 'arg-name', self.help_command, 'process-cli-arg.foo.bar') self.assert_rendered_docs_contain('{ ... recursive ... }') def test_handle_recursive_output(self): shape_map = { 'RecursiveStruct': { 'type': 'structure', 'members': { 'A': {'shape': 'NonRecursive'}, 'B': {'shape': 'RecursiveStruct'}, } }, 'NonRecursive': {'type': 'string'} } shape = StructureShape('RecursiveStruct', shape_map['RecursiveStruct'], ShapeResolver(shape_map)) operation_model = mock.Mock() operation_model.output_shape = shape self.help_command.obj = operation_model self.operation_handler.doc_output(self.help_command, 'event-name') self.assert_rendered_docs_contain('( ... recursive ... )') def test_handle_empty_nested_struct(self): shape_map = { 'InputStruct': { 'type': 'structure', 'members': { 'A': {'shape': 'Empty'}, } }, 'Empty': {'type': 'structure', 'members': {}} } shape = StructureShape('InputStruct', shape_map['InputStruct'], ShapeResolver(shape_map)) self.arg_table['arg-name'] = mock.Mock(argument_model=shape) self.operation_handler.doc_option_example( 'arg-name', self.help_command, 'process-cli-arg.foo.bar') self.assert_proper_indentation() def test_handle_no_output_shape(self): operation_model = mock.Mock() operation_model.output_shape = None self.help_command.obj = operation_model self.operation_handler.doc_output(self.help_command, 'event-name') self.assert_rendered_docs_contain('None') def test_handle_memberless_output_shape(self): shape_map = { 'NoMembers': { 'type': 'structure', 'members': {} } } shape = StructureShape('NoMembers', shape_map['NoMembers'], ShapeResolver(shape_map)) operation_model = mock.Mock() operation_model.output_shape = shape self.help_command.obj = operation_model self.operation_handler.doc_output(self.help_command, 'event-name') self.assert_rendered_docs_contain('None')
class TestRecursiveShapes(unittest.TestCase): def setUp(self): self.arg_table = {} self.help_command = mock.Mock() self.help_command.event_class = 'custom' self.help_command.arg_table = self.arg_table self.operation_model = mock.Mock() self.operation_model.service_model.operation_names = [] self.help_command.obj = self.operation_model self.operation_handler = OperationDocumentEventHandler( self.help_command) def assert_rendered_docs_contain(self, expected): writes = [args[0][0] for args in self.help_command.doc.write.call_args_list] writes = '\n'.join(writes) self.assertIn(expected, writes) def assert_proper_indentation(self): indent = self.help_command.doc.style.indent.call_count dedent = self.help_command.doc.style.dedent.call_count message = 'Imbalanced indentation: indent (%s) != dedent (%s)' self.assertEquals(indent, dedent, message % (indent, dedent)) def test_handle_recursive_input(self): shape_map = { 'RecursiveStruct': { 'type': 'structure', 'members': { 'A': {'shape': 'NonRecursive'}, 'B': {'shape': 'RecursiveStruct'}, } }, 'NonRecursive': {'type': 'string'} } shape = StructureShape('RecursiveStruct', shape_map['RecursiveStruct'], ShapeResolver(shape_map)) self.arg_table['arg-name'] = mock.Mock(argument_model=shape) self.operation_handler.doc_option_example( 'arg-name', self.help_command, 'process-cli-arg.foo.bar') self.assert_rendered_docs_contain('{ ... recursive ... }') def test_handle_recursive_output(self): shape_map = { 'RecursiveStruct': { 'type': 'structure', 'members': { 'A': {'shape': 'NonRecursive'}, 'B': {'shape': 'RecursiveStruct'}, } }, 'NonRecursive': {'type': 'string'} } shape = StructureShape('RecursiveStruct', shape_map['RecursiveStruct'], ShapeResolver(shape_map)) operation_model = mock.Mock() operation_model.output_shape = shape self.help_command.obj = operation_model self.operation_handler.doc_output(self.help_command, 'event-name') self.assert_rendered_docs_contain('( ... recursive ... )') def test_handle_empty_nested_struct(self): shape_map = { 'InputStruct': { 'type': 'structure', 'members': { 'A': {'shape': 'Empty'}, } }, 'Empty': {'type': 'structure', 'members': {}} } shape = StructureShape('InputStruct', shape_map['InputStruct'], ShapeResolver(shape_map)) self.arg_table['arg-name'] = mock.Mock(argument_model=shape) self.operation_handler.doc_option_example( 'arg-name', self.help_command, 'process-cli-arg.foo.bar') self.assert_proper_indentation()