annotate tests/conftest.py @ 1051:971b4d67e82a

serve: Fix problems with assets disappearing between servings. When an asset file changes, its source's pipeline is re-run. But that created a bake record that only had that pipeline's output, so the other outputs were incorrectly considered empty and therefore any stray files were removed. Now we copy over bake records for the pipelines we don't run.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 26 Jan 2018 18:05:02 -0800
parents 63f118c773ee
children 2aa6174453c8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
1 import io
86
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import sys
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
3 import time
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
4 import pprint
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
5 import os.path
86
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 import logging
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
7 import pytest
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
8 import yaml
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
9 import colorama
520
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
10 from werkzeug.exceptions import HTTPException
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
11 from piecrust.app import PieCrustFactory, apply_variants_and_values
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
12 from piecrust.configuration import merge_dicts
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
13 from .mockutil import mock_fs, mock_fs_scope
86
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 def pytest_runtest_setup(item):
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 pass
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 def pytest_addoption(parser):
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
21 parser.addoption(
1028
63f118c773ee tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents: 979
diff changeset
22 '--pc-log-debug',
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
23 action='store_true',
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
24 help="Sets the PieCrust logger to output debug info to stdout.")
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
25 parser.addoption(
1028
63f118c773ee tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents: 979
diff changeset
26 '--pc-log-file',
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
27 help="Sets the PieCrust logger to write to a file.")
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
28 parser.addoption(
1028
63f118c773ee tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents: 979
diff changeset
29 '--pc-mock-debug',
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
30 action='store_true',
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
31 help="Prints contents of the mock file-system.")
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
32 parser.addoption(
1028
63f118c773ee tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents: 979
diff changeset
33 '--pc-leave-mockfs',
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
34 action='store_true',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
35 help="Leave the contents of the mock file-system on disk.")
86
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 def pytest_configure(config):
1028
63f118c773ee tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents: 979
diff changeset
39 if config.getoption('--pc-log-debug'):
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
40 root_logger = logging.getLogger()
86
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 hdl = logging.StreamHandler(stream=sys.stdout)
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
42 root_logger.addHandler(hdl)
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
43 root_logger.setLevel(logging.DEBUG)
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
44
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
45 from .basefs import TestFileSystemBase
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
46 TestFileSystemBase._use_chef_debug = True
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
47 TestFileSystemBase._pytest_log_handler = hdl
86
1cd67680c38c Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48
1028
63f118c773ee tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents: 979
diff changeset
49 log_file = config.getoption('--pc-log-file')
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
50 if log_file:
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
51 hdl = logging.StreamHandler(
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
52 stream=open(log_file, 'w', encoding='utf8'))
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
53 logging.getLogger().addHandler(hdl)
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
54
1028
63f118c773ee tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents: 979
diff changeset
55 if config.getoption('--pc-leave-mockfs'):
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
56 from .basefs import TestFileSystemBase
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
57 TestFileSystemBase._leave_mockfs = True
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
58
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
59
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
60 def pytest_collect_file(parent, path):
397
879b6b5647a8 tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents: 391
diff changeset
61 if path.ext == '.yaml' and path.basename.startswith("test"):
879b6b5647a8 tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents: 391
diff changeset
62 category = os.path.basename(path.dirname)
879b6b5647a8 tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents: 391
diff changeset
63 if category == 'bakes':
391
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
64 return BakeTestFile(path, parent)
397
879b6b5647a8 tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents: 391
diff changeset
65 elif category == 'cli':
391
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
66 return ChefTestFile(path, parent)
397
879b6b5647a8 tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents: 391
diff changeset
67 elif category == 'servings':
391
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
68 return ServeTestFile(path, parent)
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
69
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
70
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
71 def repr_nested_failure(excinfo):
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
72 # PyTest sadly doesn't show nested exceptions so we have to do it
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
73 # ourselves... it's not pretty, but at least it's more useful.
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
74 if excinfo.value.__cause__:
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
75 import traceback
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
76 ex = excinfo.value
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
77 return '\n'.join(
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
78 traceback.format_exception(
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
79 type(ex), ex, ex.__traceback__))
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
80 return ''
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
81
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
82
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
83 class YamlTestFileBase(pytest.File):
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
84 def collect(self):
530
1f37f66204b8 tests: Help the Yaml loader figure out the encoding on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 520
diff changeset
85 spec = yaml.load_all(self.fspath.open(encoding='utf8'))
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
86 for i, item in enumerate(spec):
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
87 name = '%s_%d' % (self.fspath.basename, i)
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
88 if 'test_name' in item:
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
89 name += '_%s' % item['test_name']
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
90 yield self.__item_class__(name, self, item)
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
91
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
92
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
93 class YamlTestItemBase(pytest.Item):
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
94 def __init__(self, name, parent, spec):
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
95 super(YamlTestItemBase, self).__init__(name, parent)
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
96 self.spec = spec
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
97
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
98 @property
674
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
99 def is_theme_site(self):
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
100 return self.spec.get('theme_config') is not None
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
101
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
102 @property
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
103 def mock_debug(self):
1028
63f118c773ee tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents: 979
diff changeset
104 return bool(self.config.getoption('--pc-mock-debug'))
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
105
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
106 def _prepareMockFs(self):
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
107 fs = mock_fs()
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
108
674
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
109 # Suppress any formatting or layout so we can compare
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
110 # much simpler strings.
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
111 config = {
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
112 'site': {
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
113 'default_format': 'none',
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
114 'default_page_layout': 'none',
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
115 'default_post_layout': 'none'}
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
116 }
674
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
117
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
118 # Website or theme config.
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
119 test_theme_config = self.spec.get('theme_config')
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
120 if test_theme_config is not None:
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
121 merge_dicts(config, test_theme_config)
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
122 fs.withThemeConfig(config)
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
123 else:
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
124 test_config = self.spec.get('config')
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
125 if test_config is not None:
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
126 merge_dicts(config, test_config)
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
127 fs.withConfig(config)
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
128
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
129 # Input file-system.
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
130 input_files = self.spec.get('in')
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
131 if input_files is not None:
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
132 _add_mock_files(fs, '/kitchen', input_files)
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
133
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
134 if self.mock_debug:
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
135 res = '\nMock File-System:\n'
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
136 res += 'At: %s\n' % fs.path('')
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
137 res += '\n'.join(print_fs_tree(fs.path('')))
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
138 res += '\n'
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
139 print(res)
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
140
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
141 return fs
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
142
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
143 def repr_failure(self, excinfo):
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
144 res = super(YamlTestItemBase, self).repr_failure(excinfo)
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
145 nested_res = repr_nested_failure(excinfo)
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
146 if nested_res:
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
147 res = str(res) + '\n' + nested_res
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
148 return res
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
149
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
150
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
151 def check_expected_outputs(spec, fs, error_type):
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
152 cctx = CompareContext()
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
153 expected_output_files = spec.get('out')
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
154 if expected_output_files:
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
155 actual = fs.getStructure('kitchen/_counter')
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
156 error = _compare_dicts(expected_output_files, actual, cctx)
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
157 if error:
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
158 raise error_type(error)
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
159
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
160 expected_partial_files = spec.get('outfiles')
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
161 if expected_partial_files:
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
162 keys = list(sorted(expected_partial_files.keys()))
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
163 for key in keys:
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
164 try:
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
165 actual = fs.getFileEntry('kitchen/_counter/' +
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
166 key.lstrip('/'))
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
167 except Exception as e:
559
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
168 lines = print_fs_tree(fs.path('kitchen/_counter'))
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
169 raise error_type([
559
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
170 "Can't access output file %s: %s" % (key, e),
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
171 "Got output directory:"] +
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
172 lines)
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
173
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
174 expected = expected_partial_files[key]
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
175 # HACK because for some reason PyYAML adds a new line for
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
176 # those and I have no idea why.
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
177 actual = actual.rstrip('\n')
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
178 expected = expected.rstrip('\n')
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
179 cctx.path = key
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
180 cmpres = _compare_str(expected, actual, cctx)
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
181 if cmpres:
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
182 raise error_type(cmpres)
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
183
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
184
559
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
185 def print_fs_tree(rootpath):
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
186 import os
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
187 import os.path
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
188 lines = []
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
189 offset = len(rootpath)
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
190 for pathname, dirnames, filenames in os.walk(rootpath):
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
191 level = pathname[offset:].count(os.sep)
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
192 indent = ' ' * 4 * (level)
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
193 lines.append(indent + os.path.basename(pathname) + '/')
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
194 indent2 = ' ' * 4 * (level + 1)
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
195 for f in filenames:
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
196 lines.append(indent2 + f)
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
197 return lines
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
198
b95977d97652 tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents: 553
diff changeset
199
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
200 class ChefTestItem(YamlTestItemBase):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
201 __initialized_logging__ = False
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
202
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
203 def runtest(self):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
204 if not ChefTestItem.__initialized_logging__:
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
205 colorama.init()
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
206 hdl = logging.StreamHandler(stream=sys.stdout)
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
207 logging.getLogger().addHandler(hdl)
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
208 logging.getLogger().setLevel(logging.INFO)
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
209 ChefTestItem.__initialized_logging__ = True
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
210
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
211 fs = self._prepareMockFs()
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
212
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
213 argv = self.spec['args']
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
214 if isinstance(argv, str):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
215 argv = argv.split(' ')
674
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
216 if self.is_theme_site:
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
217 argv.insert(0, '--theme')
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
218 argv = ['--root', fs.path('/kitchen')] + argv
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
219
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
220 expected_code = self.spec.get('code', 0)
567
a65f04ddbea2 showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents: 559
diff changeset
221 expected_out = self.spec.get('out', None)
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
222
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
223 with mock_fs_scope(fs, keep=self.mock_debug):
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
224 memstream = io.StringIO()
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
225 hdl = logging.StreamHandler(stream=memstream)
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
226 logging.getLogger().addHandler(hdl)
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
227 try:
583
1eda551ee681 cli: More proper argument parsing for the main/root arguments.
Ludovic Chabant <ludovic@chabant.com>
parents: 582
diff changeset
228 from piecrust.main import _pre_parse_chef_args, _run_chef
674
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
229 pre_args = _pre_parse_chef_args(argv)
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
230 exit_code = _run_chef(pre_args, argv)
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
231 finally:
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
232 logging.getLogger().removeHandler(hdl)
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
233
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
234 assert expected_code == exit_code
493
95b77239c3b7 tests: Fix `find` tests on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents: 466
diff changeset
235
567
a65f04ddbea2 showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents: 559
diff changeset
236 if expected_out is not None:
a65f04ddbea2 showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents: 559
diff changeset
237 actual_out = memstream.getvalue()
779
982de61e7da9 tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 778
diff changeset
238 if not self.spec.get('no_strip'):
982de61e7da9 tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 778
diff changeset
239 actual_out = actual_out.rstrip(' \n')
982de61e7da9 tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 778
diff changeset
240 expected_out = expected_out.rstrip(' \n')
567
a65f04ddbea2 showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents: 559
diff changeset
241 if self.spec.get('replace_out_path_sep'):
a65f04ddbea2 showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents: 559
diff changeset
242 expected_out = expected_out.replace('/', os.sep)
a65f04ddbea2 showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents: 559
diff changeset
243 assert expected_out == actual_out
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
244
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
245 def reportinfo(self):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
246 return self.fspath, 0, "bake: %s" % self.name
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
247
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
248 def repr_failure(self, excinfo):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
249 if isinstance(excinfo.value, ExpectedChefOutputError):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
250 return ('\n'.join(
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
251 ['Unexpected command output. Left is expected output, '
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
252 'right is actual output'] +
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
253 excinfo.value.args[0]))
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
254 return super(ChefTestItem, self).repr_failure(excinfo)
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
255
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
256
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
257 class ExpectedChefOutputError(Exception):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
258 pass
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
259
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
260
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
261 class ChefTestFile(YamlTestFileBase):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
262 __item_class__ = ChefTestItem
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
263
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
264
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
265 class BakeTestItem(YamlTestItemBase):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
266 def runtest(self):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
267 fs = self._prepareMockFs()
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
268
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
269 from piecrust.baking.baker import Baker
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
270 with mock_fs_scope(fs, keep=self.mock_debug):
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
271 out_dir = fs.path('kitchen/_counter')
674
f987b29d6fab tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents: 673
diff changeset
272 app = fs.getApp(theme_site=self.is_theme_site)
466
456db44dcc53 bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents: 439
diff changeset
273
456db44dcc53 bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents: 439
diff changeset
274 values = self.spec.get('config_values')
456db44dcc53 bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents: 439
diff changeset
275 if values is not None:
456db44dcc53 bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents: 439
diff changeset
276 values = list(values.items())
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
277 variants = self.spec.get('config_variants')
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
278 apply_variants_and_values(app, variants, values)
466
456db44dcc53 bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents: 439
diff changeset
279
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
280 appfactory = PieCrustFactory(app.root_dir,
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
281 theme_site=self.is_theme_site,
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
282 config_variants=variants,
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
283 config_values=values)
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
284 baker = Baker(appfactory, app, out_dir)
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
285 records = baker.bake()
398
af17c143b9ab tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents: 397
diff changeset
286
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
287 if not records.success:
411
e7b865f8f335 bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents: 399
diff changeset
288 errors = []
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
289 for r in records.records:
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
290 for e in r.getEntries():
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
291 errors += e.getAllErrors()
411
e7b865f8f335 bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents: 399
diff changeset
292 raise BakeError(errors)
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
293
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
294 check_expected_outputs(self.spec, fs, ExpectedBakeOutputError)
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
295
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
296 def reportinfo(self):
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
297 return self.fspath, 0, "bake: %s" % self.name
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
298
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
299 def repr_failure(self, excinfo):
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
300 if isinstance(excinfo.value, ExpectedBakeOutputError):
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
301 return ('\n'.join(
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
302 ['Unexpected bake output. Left is expected output, '
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
303 'right is actual output'] +
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
304 excinfo.value.args[0]))
398
af17c143b9ab tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents: 397
diff changeset
305 elif isinstance(excinfo.value, BakeError):
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
306 res = ('\n'.join(
398
af17c143b9ab tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents: 397
diff changeset
307 ['Errors occured during bake:'] +
af17c143b9ab tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents: 397
diff changeset
308 excinfo.value.args[0]))
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
309 res += repr_nested_failure(excinfo)
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
310 return res
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
311 return super(BakeTestItem, self).repr_failure(excinfo)
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
312
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
313
398
af17c143b9ab tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents: 397
diff changeset
314 class BakeError(Exception):
af17c143b9ab tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents: 397
diff changeset
315 pass
af17c143b9ab tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents: 397
diff changeset
316
af17c143b9ab tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents: 397
diff changeset
317
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
318 class ExpectedBakeOutputError(Exception):
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
319 pass
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
320
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
321
385
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
322 class BakeTestFile(YamlTestFileBase):
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
323 __item_class__ = BakeTestItem
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
324
2d5f2289885a tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 365
diff changeset
325
391
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
326 class ServeTestItem(YamlTestItemBase):
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
327 def runtest(self):
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
328 fs = self._prepareMockFs()
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
329
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
330 url = self.spec.get('url')
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
331 if url is None:
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
332 raise Exception("Missing URL in test spec.")
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
333
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
334 expected_status = self.spec.get('status', 200)
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
335 expected_headers = self.spec.get('headers')
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
336 expected_output = self.spec.get('out')
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
337 expected_contains = self.spec.get('out_contains')
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
338
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
339 from werkzeug.test import Client
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
340 from werkzeug.wrappers import BaseResponse
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
341 from piecrust.app import PieCrustFactory
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
342 from piecrust.serving.server import PieCrustServer
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
343
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
344 with mock_fs_scope(fs, keep=self.mock_debug):
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
345 appfactory = PieCrustFactory(
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
346 fs.path('/kitchen'),
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
347 theme_site=self.is_theme_site)
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
348 server = PieCrustServer(appfactory)
775
ba0a6bd5e913 tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 674
diff changeset
349
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
350 client = Client(server, BaseResponse)
391
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
351 resp = client.get(url)
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
352 assert expected_status == resp.status_code
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
353
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
354 if expected_headers:
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
355 for k, v in expected_headers.items():
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
356 assert v == resp.headers.get(k)
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
357
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
358 actual = resp.data.decode('utf8').rstrip()
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
359 if expected_output:
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
360 assert expected_output.rstrip() == actual
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
361
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
362 if expected_contains:
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
363 assert expected_contains.rstrip() in actual
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
364
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
365 def reportinfo(self):
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
366 return self.fspath, 0, "serve: %s" % self.name
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
367
520
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
368 def repr_failure(self, excinfo):
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
369 from piecrust.serving.server import MultipleNotFound
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
370 if isinstance(excinfo.value, MultipleNotFound):
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
371 res = '\n'.join(
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
372 ["HTTP error 404 returned:",
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
373 str(excinfo.value)] +
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
374 [str(e) for e in excinfo.value._nfes])
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
375 res += repr_nested_failure(excinfo)
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
376 return res
520
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
377 elif isinstance(excinfo.value, HTTPException):
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
378 res = '\n'.join(
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
379 ["HTTP error %s returned:" % excinfo.value.code,
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
380 excinfo.value.description])
673
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
381 res += repr_nested_failure(excinfo)
d6403c21bdea tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents: 666
diff changeset
382 return res
520
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
383 return super(ServeTestItem, self).repr_failure(excinfo)
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
384
391
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
385
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
386 class ServeTestFile(YamlTestFileBase):
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
387 __item_class__ = ServeTestItem
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
388
3e4bb57d8506 tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents: 385
diff changeset
389
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
390 def _add_mock_files(fs, parent_path, spec):
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
391 for name, subspec in spec.items():
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
392 path = os.path.join(parent_path, name)
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
393 if isinstance(subspec, str):
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
394 fs.withFile(path, subspec)
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
395 elif isinstance(subspec, dict):
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
396 _add_mock_files(fs, path, subspec)
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
397
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
398
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
399 class CompareContext(object):
439
c0700c6d9545 tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 436
diff changeset
400 def __init__(self, path=None, t=None):
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
401 self.path = path or ''
439
c0700c6d9545 tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 436
diff changeset
402 self.time = t or time.time()
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
403
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
404 def createChildContext(self, name):
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
405 ctx = CompareContext(
974
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
406 path='%s/%s' % (self.path, name),
72f17534d58e tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents: 806
diff changeset
407 t=self.time)
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
408 return ctx
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
409
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
410
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
411 def _compare(left, right, ctx):
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
412 if type(left) != type(right):
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
413 return (["Different items: ",
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
414 "%s: %s" % (ctx.path, pprint.pformat(left)),
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
415 "%s: %s" % (ctx.path, pprint.pformat(right))])
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
416 if isinstance(left, str):
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
417 return _compare_str(left, right, ctx)
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
418 elif isinstance(left, dict):
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
419 return _compare_dicts(left, right, ctx)
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
420 elif isinstance(left, list):
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
421 return _compare_lists(left, right, ctx)
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
422 elif left != right:
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
423 return (["Different items: ",
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
424 "%s: %s" % (ctx.path, pprint.pformat(left)),
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
425 "%s: %s" % (ctx.path, pprint.pformat(right))])
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
426
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
427
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
428 def _compare_dicts(left, right, ctx):
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
429 key_diff = set(left.keys()) ^ set(right.keys())
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
430 if key_diff:
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
431 extra_left = set(left.keys()) - set(right.keys())
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
432 if extra_left:
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
433 return (["Left contains more items: "] +
520
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
434 ['- %s/%s' % (ctx.path, k) for k in extra_left] +
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
435 ['Left:', ', '.join(left.keys())] +
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
436 ['Right:', ', '.join(right.keys())])
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
437 extra_right = set(right.keys()) - set(left.keys())
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
438 if extra_right:
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
439 return (["Right contains more items: "] +
520
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
440 ['- %s/%s' % (ctx.path, k) for k in extra_right] +
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
441 ['Left:', ', '.join(left.keys())] +
bab91fcef741 bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents: 493
diff changeset
442 ['Right:', ', '.join(right.keys())])
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
443 return ["Unknown difference"]
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
444
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
445 for key in left.keys():
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
446 lv = left[key]
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
447 rv = right[key]
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
448 child_ctx = ctx.createChildContext(key)
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
449 cmpres = _compare(lv, rv, child_ctx)
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
450 if cmpres:
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
451 return cmpres
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
452 return None
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
453
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
454
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
455 def _compare_lists(left, right, ctx):
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
456 for i in range(min(len(left), len(right))):
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
457 l = left[i]
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
458 r = right[i]
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
459 cmpres = _compare(l, r, ctx)
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
460 if cmpres:
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
461 return cmpres
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
462 if len(left) > len(right):
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
463 return (["Left '%s' contains more items. First extra item: " %
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
464 ctx.path, left[len(right)]])
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
465 if len(right) > len(left):
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
466 return (["Right '%s' contains more items. First extra item: " %
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
467 ctx.path, right[len(left)]])
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
468 return None
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
469
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
470
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
471 def _compare_str(left, right, ctx):
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
472 if left == right:
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
473 return None
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
474
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
475 test_time_iso8601 = time.strftime('%Y-%m-%dT%H:%M:%SZ',
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
476 time.gmtime(ctx.time))
582
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
477 test_time_iso8601_pattern = '%test_time_iso8601%'
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
478
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
479 left_time_indices = []
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
480 i = -1
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
481 while True:
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
482 i = left.find(test_time_iso8601_pattern, i + 1)
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
483 if i >= 0:
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
484 left_time_indices.append(i)
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
485 left = (left[:i] + test_time_iso8601 +
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
486 left[i + len(test_time_iso8601_pattern):])
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
487 else:
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
488 break
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
489
665
5dc13c816045 tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents: 583
diff changeset
490 skip_for = -1
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
491 for i in range(min(len(left), len(right))):
665
5dc13c816045 tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents: 583
diff changeset
492 if skip_for > 0:
5dc13c816045 tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents: 583
diff changeset
493 skip_for -= 1
5dc13c816045 tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents: 583
diff changeset
494 continue
5dc13c816045 tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents: 583
diff changeset
495
582
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
496 if i in left_time_indices:
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
497 # This is where the time starts. Let's compare that the time
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
498 # values are within a few seconds of each other (usually 0 or 1).
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
499 right_time_str = right[i:i + len(test_time_iso8601)]
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
500 right_time = time.strptime(right_time_str, '%Y-%m-%dT%H:%M:%SZ')
806
8ac2d6045d1d tests: Fix for time comparisons.
Ludovic Chabant <ludovic@chabant.com>
parents: 788
diff changeset
501 left_time = time.gmtime(ctx.time)
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
502 # Need to patch the daylist-savings-time flag because it can
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
503 # mess up the computation of the time difference.
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
504 right_time = (right_time[0], right_time[1], right_time[2],
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
505 right_time[3], right_time[4], right_time[5],
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
506 right_time[6], right_time[7],
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
507 left_time.tm_isdst)
582
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
508 difference = time.mktime(left_time) - time.mktime(right_time)
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
509 print("Got time difference: %d" % difference)
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents: 974
diff changeset
510 if abs(difference) <= 1:
582
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
511 print("(good enough, moving to end of timestamp)")
665
5dc13c816045 tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents: 583
diff changeset
512 skip_for = len(test_time_iso8601) - 1
582
d8d9e0424a72 tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 567
diff changeset
513
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
514 if left[i] != right[i]:
365
a9929e0b8f66 tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents: 351
diff changeset
515 start = max(0, i - 15)
399
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
516 l_end = min(len(left), i + 15)
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
517 r_end = min(len(right), i + 15)
365
a9929e0b8f66 tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents: 351
diff changeset
518
399
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
519 l_str = ''
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
520 l_offset = 0
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
521 for j in range(start, l_end):
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
522 c = repr(left[j]).strip("'")
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
523 l_str += c
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
524 if j < i:
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
525 l_offset += len(c)
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
526
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
527 r_str = ''
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
528 r_offset = 0
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
529 for j in range(start, r_end):
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
530 c = repr(right[j]).strip("'")
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
531 r_str += c
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
532 if j < i:
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
533 r_offset += len(c)
365
a9929e0b8f66 tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents: 351
diff changeset
534
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
535 return ["Items '%s' differ at index %d:" % (ctx.path, i), '',
365
a9929e0b8f66 tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents: 351
diff changeset
536 "Left:", left, '',
a9929e0b8f66 tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents: 351
diff changeset
537 "Right:", right, '',
a9929e0b8f66 tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents: 351
diff changeset
538 "Difference:",
399
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
539 l_str, (' ' * l_offset + '^'),
a0724af26c12 tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents: 398
diff changeset
540 r_str, (' ' * r_offset + '^')]
665
5dc13c816045 tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents: 583
diff changeset
541
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
542 if len(left) > len(right):
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
543 return ["Left is longer.",
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
544 "Left '%s': " % ctx.path, left,
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
545 "Right '%s': " % ctx.path, right,
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
546 "Extra items: %r" % left[len(right):]]
665
5dc13c816045 tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents: 583
diff changeset
547
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
548 if len(right) > len(left):
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
549 return ["Right is longer.",
436
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
550 "Left '%s': " % ctx.path, left,
2aa879d63133 tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
551 "Right '%s': " % ctx.path, right,
351
1f22d4b10fef tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents: 347
diff changeset
552 "Extra items: %r" % right[len(left):]]
347
76c838453dbe tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents: 86
diff changeset
553