Пример #1
0
    def test_union(self):

        ns = ApiNamespace('files')

        update_parent_rev = Struct(
            'UpdateParentRev',
            None,
            ns,
        )
        update_parent_rev.set_attributes(
            "Overwrite existing file if the parent rev matches.",
            [
                StructField('parent_rev', String(),
                            'The revision to be updated.', None)
            ],
        )
        update_parent_rev._add_example(
            AstExample(path=None,
                       lineno=None,
                       lexpos=None,
                       label='default',
                       text=None,
                       fields={
                           'parent_rev':
                           AstExampleField(None, None, None, 'parent_rev',
                                           'xyz123')
                       }))

        # test variants with only tags, as well as those with structs.
        conflict = Union(
            'WriteConflictPolicy',
            None,
            ns,
            True,
        )
        conflict.set_attributes(
            'Policy for managing write conflicts.',
            [
                UnionField('reject', Void(),
                           'On a write conflict, reject the new file.', None),
                UnionField(
                    'overwrite', Void(),
                    'On a write conflict, overwrite the existing file.', None),
                UnionField(
                    'update_if_matching_parent_rev', update_parent_rev,
                    'On a write conflict, overwrite the existing file.', None),
            ],
        )

        conflict._add_example(
            AstExample(path=None,
                       lineno=None,
                       lexpos=None,
                       label='default',
                       text=None,
                       fields={
                           'update_if_matching_parent_rev':
                           AstExampleField(
                               None, None, None,
                               'update_if_matching_parent_rev',
                               AstExampleRef(None, None, None, 'default'))
                       }))

        conflict._compute_examples()

        # test that only null value is returned for an example of a Void type
        self.assertEqual(conflict.get_examples()['reject'].value,
                         {'.tag': 'reject'})

        # test that dict is returned for a tagged struct variant
        self.assertEqual(conflict.get_examples()['default'].value, {
            '.tag': 'update_if_matching_parent_rev',
            'parent_rev': 'xyz123'
        })
Пример #2
0
    def test_union(self):

        ns = ApiNamespace('files')

        update_parent_rev = Struct(
            'UpdateParentRev',
            None,
            ns,
        )
        update_parent_rev.set_attributes(
            "Overwrite existing file if the parent rev matches.",
            [
                StructField('parent_rev', String(), 'The revision to be updated.', None)
            ],
        )
        update_parent_rev._add_example(
            AstExample(
                path=None,
                lineno=None,
                lexpos=None,
                label='default',
                text=None,
                fields={
                    'parent_rev': AstExampleField(
                        None,
                        None,
                        None,
                        'parent_rev',
                        'xyz123')}))

        # test variants with only tags, as well as those with structs.
        conflict = Union(
            'WriteConflictPolicy',
            None,
            ns,
            True,
        )
        conflict.set_attributes(
            'Policy for managing write conflicts.',
            [
                UnionField(
                    'reject', Void(),
                    'On a write conflict, reject the new file.', None),
                UnionField(
                    'overwrite', Void(),
                    'On a write conflict, overwrite the existing file.', None),
                UnionField(
                    'update_if_matching_parent_rev', update_parent_rev,
                    'On a write conflict, overwrite the existing file.', None),
            ],
        )

        conflict._add_example(
            AstExample(
                path=None,
                lineno=None,
                lexpos=None,
                label='default',
                text=None,
                fields={
                    'update_if_matching_parent_rev': AstExampleField(
                        None,
                        None,
                        None,
                        'update_if_matching_parent_rev',
                        AstExampleRef(None, None, None, 'default'))}))

        conflict._compute_examples()

        # test that only null value is returned for an example of a Void type
        self.assertEqual(conflict.get_examples()['reject'].value, {'.tag': 'reject'})

        # test that dict is returned for a tagged struct variant
        self.assertEqual(conflict.get_examples()['default'].value,
            {'.tag': 'update_if_matching_parent_rev', 'parent_rev': 'xyz123'})
Пример #3
0
    def test_struct(self):

        ns = ApiNamespace('test')

        quota_info = Struct(
            'QuotaInfo',
            None,
            ns,
        )
        quota_info.set_attributes(
            "Information about a user's space quota.",
            [
                StructField('quota', UInt64(), 'Total amount of space.', None),
            ],
        )

        # add an example that doesn't fit the definition of a struct
        with self.assertRaises(InvalidSpec) as cm:
            quota_info._add_example(
                AstExample(path=None,
                           lineno=None,
                           lexpos=None,
                           label='default',
                           text=None,
                           fields={
                               'bad_field':
                               AstExampleField(None, None, None, 'bad_field',
                                               'xyz123')
                           }))
        self.assertIn('has unknown field', cm.exception.msg)

        quota_info._add_example(
            AstExample(path=None,
                       lineno=None,
                       lexpos=None,
                       label='default',
                       text=None,
                       fields={
                           'quota':
                           AstExampleField(None, None, None, 'quota', 64000)
                       }))

        # set null for a required field
        with self.assertRaises(InvalidSpec) as cm:
            quota_info._add_example(
                AstExample(path=None,
                           lineno=None,
                           lexpos=None,
                           label='null',
                           text=None,
                           fields={
                               'quota':
                               AstExampleField(None, None, None, 'quota', None)
                           }))
        self.assertEqual(
            "Bad example for field 'quota': null is not a valid integer",
            cm.exception.msg)

        self.assertTrue(quota_info._has_example('default'))

        quota_info.nullable = True

        # test for structs within structs
        account_info = Struct(
            'AccountInfo',
            None,
            ns,
        )
        account_info.set_attributes(
            "Information about an account.",
            [
                StructField('account_id', String(),
                            'Unique identifier for account.', None),
                StructField('quota_info', quota_info, 'Quota', None)
            ],
        )

        account_info._add_example(
            AstExample(path=None,
                       lineno=None,
                       lexpos=None,
                       label='default',
                       text=None,
                       fields={
                           'account_id':
                           AstExampleField(None, None, None, 'account_id',
                                           'xyz123'),
                           'quota_info':
                           AstExampleField(
                               None, None, None, 'quota_info',
                               AstExampleRef(None, None, None, 'default'))
                       }))

        account_info._compute_examples()

        # ensure that an example for quota_info is propagated up
        self.assertIn('quota_info',
                      account_info.get_examples()['default'].value)
Пример #4
0
    def test_struct(self):

        ns = ApiNamespace('test')

        quota_info = Struct(
            'QuotaInfo',
            None,
            ns,
        )
        quota_info.set_attributes(
            "Information about a user's space quota.",
            [
                StructField('quota', UInt64(), 'Total amount of space.', None),
            ],
        )

        # add an example that doesn't fit the definition of a struct
        with self.assertRaises(InvalidSpec) as cm:
            quota_info._add_example(
                AstExample(
                    path=None,
                    lineno=None,
                    lexpos=None,
                    label='default',
                    text=None,
                    fields={
                        'bad_field': AstExampleField(
                            None,
                            None,
                            None,
                            'bad_field',
                            'xyz123')}))
        self.assertIn('has unknown field', cm.exception.msg)

        quota_info._add_example(
            AstExample(
                path=None,
                lineno=None,
                lexpos=None,
                label='default',
                text=None,
                fields={
                    'quota': AstExampleField(
                        None,
                        None,
                        None,
                        'quota',
                        64000)}))

        # set null for a required field
        with self.assertRaises(InvalidSpec) as cm:
            quota_info._add_example(
                AstExample(
                    path=None,
                    lineno=None,
                    lexpos=None,
                    label='null',
                    text=None,
                    fields={
                        'quota': AstExampleField(
                            None,
                            None,
                            None,
                            'quota',
                            None)}))
        self.assertEqual(
            "Bad example for field 'quota': null is not a valid integer",
            cm.exception.msg)

        self.assertTrue(quota_info._has_example('default'))

        quota_info.nullable = True

        # test for structs within structs
        account_info = Struct(
            'AccountInfo',
            None,
            ns,
        )
        account_info.set_attributes(
            "Information about an account.",
            [
                StructField('account_id', String(), 'Unique identifier for account.', None),
                StructField('quota_info', quota_info, 'Quota', None)
            ],
        )

        account_info._add_example(
            AstExample(
                path=None,
                lineno=None,
                lexpos=None,
                label='default',
                text=None,
                fields={
                    'account_id': AstExampleField(
                        None,
                        None,
                        None,
                        'account_id',
                        'xyz123'),
                    'quota_info': AstExampleField(
                        None,
                        None,
                        None,
                        'quota_info',
                        AstExampleRef(
                            None,
                            None,
                            None,
                            'default'))})
        )

        account_info._compute_examples()

        # ensure that an example for quota_info is propagated up
        self.assertIn('quota_info', account_info.get_examples()['default'].value)