2016-02-02 09:54:52 +01:00
|
|
|
# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
|
|
# may not use this file except in compliance with the License. A copy of
|
|
|
|
# the License is located at
|
|
|
|
#
|
|
|
|
# http://aws.amazon.com/apache2.0/
|
|
|
|
#
|
|
|
|
# or in the "license" file accompanying this file. This file is
|
|
|
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
|
|
# ANY KIND, either express or implied. See the License for the specific
|
|
|
|
# language governing permissions and limitations under the License.
|
|
|
|
from botocore.compat import OrderedDict
|
|
|
|
from tests.unit.docs import BaseDocsTest
|
|
|
|
from botocore.docs.sharedexample import SharedExampleDocumenter, \
|
|
|
|
document_shared_examples
|
|
|
|
|
|
|
|
|
|
|
|
class TestDocumentSharedExamples(BaseDocsTest):
|
|
|
|
def setUp(self):
|
|
|
|
super(TestDocumentSharedExamples, self).setUp()
|
|
|
|
self.add_shape({
|
|
|
|
"foo": {
|
|
|
|
"type": "string"
|
|
|
|
}
|
|
|
|
})
|
|
|
|
self.add_shape({
|
|
|
|
"nested": {"type": "string"}
|
|
|
|
})
|
|
|
|
self.add_shape({
|
|
|
|
"other": {
|
|
|
|
"type": "structure",
|
|
|
|
"members": {"nested": {"shape": "nested"}}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
self.add_shape({
|
|
|
|
"aloha": {
|
|
|
|
"type": "list",
|
|
|
|
"member": {"shape": "other"}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
self.add_shape_to_params('foo', 'foo')
|
|
|
|
self.add_shape_to_params('aloha', 'aloha')
|
|
|
|
self._examples = [{
|
|
|
|
"id": "sample-id",
|
|
|
|
"title": "sample-title",
|
|
|
|
"description": "Sample Description.",
|
|
|
|
"input": OrderedDict([
|
|
|
|
("aloha", [
|
|
|
|
"other",
|
|
|
|
{
|
|
|
|
"nested": "fun!"
|
|
|
|
}
|
|
|
|
]),
|
|
|
|
("foo", "bar"),
|
|
|
|
]),
|
|
|
|
"output": OrderedDict([
|
|
|
|
("foo", "baz"),
|
|
|
|
]),
|
|
|
|
"comments": {
|
|
|
|
"input": {
|
|
|
|
"aloha": "mahalo"
|
|
|
|
},
|
|
|
|
"output": {
|
|
|
|
"foo": "Sample Comment"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
def test_default(self):
|
|
|
|
document_shared_examples(
|
|
|
|
self.doc_structure, self.operation_model,
|
|
|
|
'response = client.foo', self._examples)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"**Examples**",
|
|
|
|
"Sample Description.",
|
|
|
|
"::",
|
|
|
|
" response = client.foo(",
|
|
|
|
" # mahalo",
|
|
|
|
" aloha=[",
|
|
|
|
" 'other',",
|
|
|
|
" {",
|
|
|
|
" 'nested': 'fun!',",
|
|
|
|
" },",
|
|
|
|
" ],",
|
|
|
|
" foo='bar',",
|
|
|
|
" )",
|
|
|
|
" print(response)",
|
|
|
|
"Expected Output:",
|
|
|
|
"::",
|
|
|
|
" {",
|
|
|
|
" # Sample Comment",
|
|
|
|
" 'foo': 'baz',",
|
|
|
|
" 'ResponseMetadata': {",
|
|
|
|
" '...': '...',",
|
|
|
|
" },",
|
|
|
|
" }",
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
|
|
class TestSharedExampleDocumenter(BaseDocsTest):
|
|
|
|
def setUp(self):
|
|
|
|
super(TestSharedExampleDocumenter, self).setUp()
|
|
|
|
self.documenter = SharedExampleDocumenter()
|
|
|
|
|
|
|
|
def test_is_input(self):
|
|
|
|
self.add_shape_to_params('foo', 'String')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'input': {
|
|
|
|
'foo': 'bar'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"foo.bar(",
|
|
|
|
" foo='bar'",
|
|
|
|
")"
|
|
|
|
])
|
|
|
|
|
|
|
|
def test_dict_example(self):
|
|
|
|
self.add_shape({
|
|
|
|
'bar': {
|
|
|
|
"type": "structure",
|
|
|
|
"members": {
|
|
|
|
"bar": {"shape": "String"}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
self.add_shape_to_params('foo', 'bar')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'input': {
|
|
|
|
'foo': {'bar': 'baz'}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"foo.bar(",
|
|
|
|
" foo={",
|
|
|
|
" 'bar': 'baz',",
|
|
|
|
" },",
|
|
|
|
")"
|
|
|
|
])
|
|
|
|
|
|
|
|
def test_list_example(self):
|
|
|
|
self.add_shape({
|
|
|
|
"foo": {
|
|
|
|
"type": "list",
|
|
|
|
"member": {"shape": "String"}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
self.add_shape_to_params('foo', 'foo')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'input': {
|
|
|
|
'foo': ['bar']
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"foo.bar(",
|
|
|
|
" foo=[",
|
|
|
|
" 'bar',",
|
|
|
|
" ],",
|
|
|
|
")"
|
|
|
|
])
|
|
|
|
|
2016-10-11 02:22:54 +02:00
|
|
|
def test_can_handle_no_input_key(self):
|
|
|
|
self.add_shape_to_params('foo', 'String')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"foo.bar(",
|
|
|
|
")"
|
|
|
|
])
|
|
|
|
|
2016-02-02 09:54:52 +01:00
|
|
|
def test_unicode_string_example(self):
|
|
|
|
self.add_shape_to_params('foo', 'String')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'input': {
|
|
|
|
'foo': u'bar'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"foo.bar(",
|
|
|
|
" foo='bar'",
|
|
|
|
")"
|
|
|
|
])
|
|
|
|
|
|
|
|
def test_timestamp_example(self):
|
|
|
|
self.add_shape({
|
|
|
|
'foo': {'type': 'timestamp'}
|
|
|
|
})
|
|
|
|
self.add_shape_to_params('foo', 'foo')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'input': {
|
|
|
|
'foo': 'Fri, 20 Nov 2015 21:13:12 GMT'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"foo.bar(",
|
|
|
|
" foo=datetime(2015, 11, 20, 21, 13, 12, 4, 324, 0)",
|
|
|
|
")"
|
|
|
|
])
|
|
|
|
|
|
|
|
def test_map_example(self):
|
|
|
|
self.add_shape({
|
|
|
|
"baz": {"type": "string"}
|
|
|
|
})
|
|
|
|
self.add_shape({
|
|
|
|
'bar': {
|
|
|
|
"type": "map",
|
|
|
|
"key": {"shape": "baz"},
|
|
|
|
"value": {"shape": "baz"}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
self.add_shape_to_params('foo', 'bar')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'input': {
|
|
|
|
'foo': {'bar': 'baz'}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"foo.bar(",
|
|
|
|
" foo={",
|
|
|
|
" 'bar': 'baz',",
|
|
|
|
" },",
|
|
|
|
")"
|
|
|
|
])
|
|
|
|
|
|
|
|
def test_add_comment(self):
|
|
|
|
self.add_shape_to_params('foo', 'String')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'input': {
|
|
|
|
'foo': 'bar'
|
|
|
|
},
|
|
|
|
'comments': {
|
|
|
|
'input': {
|
|
|
|
'foo': 'baz'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"foo.bar(",
|
|
|
|
" # baz",
|
|
|
|
" foo='bar',",
|
|
|
|
")"
|
|
|
|
])
|
2017-06-27 11:52:19 +02:00
|
|
|
|
|
|
|
def test_unicode_exammple(self):
|
|
|
|
self.add_shape_to_params('foo', 'String')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'input': {
|
|
|
|
'foo': u'\u2713'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
u"foo.bar(",
|
|
|
|
u" foo='\u2713'",
|
|
|
|
u")"
|
|
|
|
])
|
2017-08-24 04:33:12 +02:00
|
|
|
|
|
|
|
def test_escape_character_example(self):
|
|
|
|
self.add_shape_to_params('foo', 'String')
|
|
|
|
self.documenter.document_shared_example(
|
|
|
|
example={
|
|
|
|
'output': {
|
|
|
|
'foo': 'good\n\rintentions!\n\r'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
prefix='foo.bar',
|
|
|
|
section=self.doc_structure,
|
|
|
|
operation_model=self.operation_model
|
|
|
|
)
|
|
|
|
self.assert_contains_lines_in_order([
|
|
|
|
"Expected Output:",
|
|
|
|
" {",
|
|
|
|
" 'foo': 'good\\n\\rintentions!\\n\\r',",
|
|
|
|
" }",
|
|
|
|
])
|