Change the handling in response_replacer and jsonhandler.replace so that numerals are preserved. The primary change here is that replace does not always return a str: it returns the found data. The remaining changes cascade from this fix. * If the 'message' being replaced is fully the regex, don't do regex-based replacement (which requires a string). Instead return the new value. * Do template replacing on test data _before_ dumping it to a string. This allows the small 'message' replacements described in the previous point. * Assure we can recurse through lists, not just dicts, when replacing in data structures. In the pull request at #206 there is a different mode of coercing and preserving data types operates by adding a coerce method to content handlers. While inspecting this it seemed like it might be too complex, so this alternate option has been explored. This might work, or perhaps a hybrid of the two. The coerce.yaml file from #206 was copied here and adapted to fit the different assumptions that are made in this change. Some of the assumptions in 206 don't map well to YAML handling of literal data formats.
78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License 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.
|
|
|
|
"""A sample test module to exercise the code.
|
|
|
|
For the sake of exploratory development.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
from gabbi import driver
|
|
from gabbi import fixture
|
|
from gabbi.handlers import base
|
|
from gabbi.tests import simple_wsgi
|
|
from gabbi.tests import util
|
|
|
|
|
|
TESTS_DIR = 'gabbits_intercept'
|
|
|
|
|
|
class TestFixtureOne(fixture.GabbiFixture):
|
|
"""Drive the fixture testing weakly."""
|
|
pass
|
|
|
|
|
|
class TestFixtureTwo(fixture.GabbiFixture):
|
|
"""Drive the fixture testing weakly."""
|
|
pass
|
|
|
|
|
|
class TestResponseHandler(base.ResponseHandler):
|
|
"""A sample response handler just to test."""
|
|
|
|
test_key_suffix = 'test'
|
|
test_key_value = []
|
|
|
|
def preprocess(self, test):
|
|
"""Add some data if the data is a string."""
|
|
try:
|
|
test.output = test.output + '\nAnother line'
|
|
except TypeError:
|
|
pass
|
|
|
|
def action(self, test, expected, value=None):
|
|
expected = expected.replace('COW', '', 1)
|
|
test.assertIn(expected, test.output)
|
|
|
|
|
|
# Incorporate the SkipAllFixture into this namespace so it can be used
|
|
# by tests (cf. skipall.yaml).
|
|
SkipAllFixture = fixture.SkipAllFixture
|
|
|
|
|
|
def load_tests(loader, tests, pattern):
|
|
"""Provide a TestSuite to the discovery process."""
|
|
# Set and environment variable for one of the tests.
|
|
util.set_test_environ()
|
|
|
|
prefix = os.environ.get('GABBI_PREFIX')
|
|
test_dir = os.path.join(os.path.dirname(__file__), TESTS_DIR)
|
|
return driver.build_tests(test_dir, loader, host=None,
|
|
intercept=simple_wsgi.SimpleWsgi,
|
|
test_loader_name=__name__,
|
|
prefix=prefix,
|
|
fixture_module=sys.modules[__name__],
|
|
response_handlers=[TestResponseHandler])
|