python-botocore/tests/unit/docs/test_utils.py
2017-08-24 11:33:12 +09:00

228 lines
8.5 KiB
Python

# 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 tests import unittest
from tests.unit.docs import BaseDocsTest
from botocore.docs.utils import py_type_name
from botocore.docs.utils import py_default
from botocore.docs.utils import get_official_service_name
from botocore.docs.utils import AutoPopulatedParam
from botocore.docs.utils import HideParamFromOperations
from botocore.docs.utils import AppendParamDocumentation
from botocore.docs.utils import escape_controls
class TestPythonTypeName(unittest.TestCase):
def test_structure(self):
self.assertEqual('dict', py_type_name('structure'))
def test_list(self):
self.assertEqual('list', py_type_name('list'))
def test_map(self):
self.assertEqual('dict', py_type_name('map'))
def test_string(self):
self.assertEqual('string', py_type_name('string'))
def test_character(self):
self.assertEqual('string', py_type_name('character'))
def test_blob(self):
self.assertEqual('bytes', py_type_name('blob'))
def test_timestamp(self):
self.assertEqual('datetime', py_type_name('timestamp'))
def test_integer(self):
self.assertEqual('integer', py_type_name('integer'))
def test_long(self):
self.assertEqual('integer', py_type_name('long'))
def test_float(self):
self.assertEqual('float', py_type_name('float'))
def test_double(self):
self.assertEqual('float', py_type_name('double'))
class TestPythonDefault(unittest.TestCase):
def test_structure(self):
self.assertEqual('{...}', py_default('structure'))
def test_list(self):
self.assertEqual('[...]', py_default('list'))
def test_map(self):
self.assertEqual('{...}', py_default('map'))
def test_string(self):
self.assertEqual('\'string\'', py_default('string'))
def test_blob(self):
self.assertEqual('b\'bytes\'', py_default('blob'))
def test_timestamp(self):
self.assertEqual('datetime(2015, 1, 1)', py_default('timestamp'))
def test_integer(self):
self.assertEqual('123', py_default('integer'))
def test_long(self):
self.assertEqual('123', py_default('long'))
def test_double(self):
self.assertEqual('123.0', py_default('double'))
class TestGetOfficialServiceName(BaseDocsTest):
def setUp(self):
super(TestGetOfficialServiceName, self).setUp()
self.service_model.metadata = {
'serviceFullName': 'Official Name'
}
def test_no_short_name(self):
self.assertEqual('Official Name',
get_official_service_name(self.service_model))
def test_aws_short_name(self):
self.service_model.metadata['serviceAbbreviation'] = 'AWS Foo'
self.assertEqual('Official Name (Foo)',
get_official_service_name(self.service_model))
def test_amazon_short_name(self):
self.service_model.metadata['serviceAbbreviation'] = 'Amazon Foo'
self.assertEqual('Official Name (Foo)',
get_official_service_name(self.service_model))
def test_short_name_in_official_name(self):
self.service_model.metadata['serviceFullName'] = 'The Foo Service'
self.service_model.metadata['serviceAbbreviation'] = 'Amazon Foo'
self.assertEqual('The Foo Service',
get_official_service_name(self.service_model))
class TestAutopopulatedParam(BaseDocsTest):
def setUp(self):
super(TestAutopopulatedParam, self).setUp()
self.name = 'MyMember'
self.param = AutoPopulatedParam(self.name)
def test_request_param_not_required(self):
section = self.doc_structure.add_new_section(self.name)
section.add_new_section('param-documentation')
self.param.document_auto_populated_param(
'docs.request-params', self.doc_structure)
self.assert_contains_line(
'this parameter is automatically populated')
def test_request_param_required(self):
section = self.doc_structure.add_new_section(self.name)
is_required_section = section.add_new_section('is-required')
section.add_new_section('param-documentation')
is_required_section.write('**[REQUIRED]**')
self.param.document_auto_populated_param(
'docs.request-params', self.doc_structure)
self.assert_not_contains_line('**[REQUIRED]**')
self.assert_contains_line(
'this parameter is automatically populated')
def test_non_default_param_description(self):
description = 'This is a custom description'
self.param = AutoPopulatedParam(self.name, description)
section = self.doc_structure.add_new_section(self.name)
section.add_new_section('param-documentation')
self.param.document_auto_populated_param(
'docs.request-params', self.doc_structure)
self.assert_contains_line(description)
def test_request_example(self):
top_section = self.doc_structure.add_new_section('structure-value')
section = top_section.add_new_section(self.name)
example = 'MyMember: \'string\''
section.write(example)
self.assert_contains_line(example)
self.param.document_auto_populated_param(
'docs.request-example', self.doc_structure)
self.assert_not_contains_line(example)
def test_param_not_in_section_request_param(self):
self.doc_structure.add_new_section('Foo')
self.param.document_auto_populated_param(
'docs.request-params', self.doc_structure)
self.assertEqual(
'', self.doc_structure.flush_structure().decode('utf-8'))
def test_param_not_in_section_request_example(self):
top_section = self.doc_structure.add_new_section('structure-value')
section = top_section.add_new_section('Foo')
example = 'Foo: \'string\''
section.write(example)
self.assert_contains_line(example)
self.param.document_auto_populated_param(
'docs.request-example', self.doc_structure)
self.assert_contains_line(example)
class TestHideParamFromOperations(BaseDocsTest):
def setUp(self):
super(TestHideParamFromOperations, self).setUp()
self.name = 'MyMember'
self.param = HideParamFromOperations(
's3', self.name, ['SampleOperation'])
def test_hides_params_from_doc_string(self):
section = self.doc_structure.add_new_section(self.name)
param_signature = ':param %s: ' % self.name
section.write(param_signature)
self.assert_contains_line(param_signature)
self.param.hide_param(
'docs.request-params.s3.SampleOperation.complete-section',
self.doc_structure)
self.assert_not_contains_line(param_signature)
def test_hides_param_from_example(self):
structure = self.doc_structure.add_new_section('structure-value')
section = structure.add_new_section(self.name)
example = '%s: \'string\'' % self.name
section.write(example)
self.assert_contains_line(example)
self.param.hide_param(
'docs.request-example.s3.SampleOperation.complete-section',
self.doc_structure)
self.assert_not_contains_line(example)
class TestAppendParamDocumentation(BaseDocsTest):
def setUp(self):
super(TestAppendParamDocumentation, self).setUp()
self.name = 'MyMember'
self.param = AppendParamDocumentation(self.name, 'hello!')
def test_appends_documentation(self):
section = self.doc_structure.add_new_section(self.name)
param_section = section.add_new_section('param-documentation')
param_section.writeln('foo')
self.param.append_documentation(
'docs.request-params', self.doc_structure)
self.assert_contains_line('foo\n')
self.assert_contains_line('hello!')
class TestEscapeControls(unittest.TestCase):
def test_escapes_controls(self):
escaped = escape_controls('\na\rb\tc\fd\be')
self.assertEquals(escaped, '\\na\\rb\\tc\\fd\\be')