Mercurial > piecrust2
annotate tests/conftest.py @ 1171:7eb58b5748eb
cm: Update gulp/npm stuff.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 04 Oct 2019 11:45:38 -0700 |
parents | 978ed6deea91 |
children | 161cba5d031a |
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 |
1169
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
2 import re |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 import sys |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
4 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
|
5 import pprint |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
6 import os.path |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 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
|
8 import pytest |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
9 import yaml |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
10 import colorama |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
11 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
|
12 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
|
13 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
|
14 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
|
15 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 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
|
18 pass |
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 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 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
|
22 parser.addoption( |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
23 '--pc-log-debug', |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
24 action='store_true', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
25 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
|
26 parser.addoption( |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
27 '--pc-log-file', |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
28 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
|
29 parser.addoption( |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
30 '--pc-mock-debug', |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
31 action='store_true', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
32 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
|
33 parser.addoption( |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
34 '--pc-leave-mockfs', |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
35 action='store_true', |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
36 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
|
37 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 def pytest_configure(config): |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
40 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
|
41 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
|
42 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
|
43 root_logger.addHandler(hdl) |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
44 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
|
45 |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
46 from .basefs import TestFileSystemBase |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
47 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
|
48 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
|
49 |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
50 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
|
51 if log_file: |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
52 hdl = logging.StreamHandler( |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
53 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
|
54 logging.getLogger().addHandler(hdl) |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
55 |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
56 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
|
57 from .basefs import TestFileSystemBase |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
58 TestFileSystemBase._leave_mockfs = True |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
59 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
60 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
61 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
|
62 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
|
63 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
|
64 if category == 'bakes': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
65 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
|
66 elif category == 'cli': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
67 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
|
68 elif category == 'servings': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
69 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
|
70 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
71 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
72 def repr_nested_failure(excinfo): |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
73 # 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
|
74 # 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
|
75 if excinfo.value.__cause__: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
76 import traceback |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
77 ex = excinfo.value |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
78 return '\n'.join( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
79 traceback.format_exception( |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
80 type(ex), ex, ex.__traceback__)) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
81 return '' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
82 |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
83 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
84 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
|
85 def collect(self): |
1160
cf6b2bf042fb
tests: Fix YAML warning in tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1142
diff
changeset
|
86 spec = yaml.load_all(self.fspath.open(encoding='utf8'), |
cf6b2bf042fb
tests: Fix YAML warning in tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1142
diff
changeset
|
87 Loader=yaml.SafeLoader) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
88 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
|
89 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
|
90 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
|
91 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
|
92 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
|
93 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
94 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
95 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
|
96 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
|
97 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
|
98 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
|
99 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
100 @property |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
101 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
|
102 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
|
103 |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
104 @property |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
105 def mock_debug(self): |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
106 return bool(self.config.getoption('--pc-mock-debug')) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
107 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
108 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
|
109 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
|
110 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
111 if self.spec.get('no_kitchen', False): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
112 fs.withDir('/') |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
113 return fs |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
114 |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
115 # 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
|
116 # 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
|
117 config = { |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
118 'site': { |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
119 'default_format': 'none', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
120 'default_page_layout': 'none', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
121 'default_post_layout': 'none'} |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
122 } |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
123 |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
124 # Website or theme config. |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
125 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
|
126 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
|
127 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
|
128 fs.withThemeConfig(config) |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
129 else: |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
130 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
|
131 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
|
132 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
|
133 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
|
134 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
135 # 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
|
136 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
|
137 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
|
138 _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
|
139 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
140 if self.mock_debug: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
141 res = '\nMock File-System:\n' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
142 res += 'At: %s\n' % fs.path('') |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
143 res += '\n'.join(print_fs_tree(fs.path(''))) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
144 res += '\n' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
145 print(res) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
146 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
147 return fs |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
148 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
149 def repr_failure(self, excinfo): |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
150 res = super(YamlTestItemBase, self).repr_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
151 nested_res = repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
152 if nested_res: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
153 res = str(res) + '\n' + nested_res |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
154 return res |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
155 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
156 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
157 def check_expected_outputs(spec, fs, error_type): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
158 cctx = CompareContext() |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
159 expected_output_files = spec.get('out') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
160 if expected_output_files: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
161 actual = fs.getStructure('kitchen/_counter') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
162 error = _compare_dicts(expected_output_files, actual, cctx) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
163 if error: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
164 raise error_type(error) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
165 |
1169
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
166 pyversion = sys.hexversion |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
167 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
168 expected_partial_files = spec.get('outfiles') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
169 if expected_partial_files: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
170 keys = list(sorted(expected_partial_files.keys())) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
171 for key in keys: |
1169
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
172 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
173 cleankey, valid = _eval_pyversion_condition(key) |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
174 if not valid: |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
175 logging.getLogger().warning( |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
176 "Skipping '%s' because the python version condition " |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
177 "was not met" % key) |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
178 continue |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
179 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
180 try: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
181 actual = fs.getFileEntry('kitchen/_counter/' + |
1169
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
182 cleankey.lstrip('/')) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
183 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
|
184 lines = print_fs_tree(fs.path('kitchen/_counter')) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
185 raise error_type([ |
1169
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
186 "Can't access output file %s: %s" % (cleankey, 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
|
187 "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
|
188 lines) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
189 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
190 expected = expected_partial_files[key] |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
191 # 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
|
192 # those and I have no idea why. |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
193 actual = actual.rstrip('\n') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
194 expected = expected.rstrip('\n') |
1169
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
195 cctx.path = cleankey |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
196 cmpres = _compare_str(expected, actual, cctx) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
197 if cmpres: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
198 raise error_type(cmpres) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
199 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
200 |
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
|
201 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
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 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
|
213 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
|
214 |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
215 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
216 class ChefTestItem(YamlTestItemBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
217 __initialized_logging__ = False |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
218 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
219 def runtest(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
220 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
|
221 colorama.init() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
222 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
|
223 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
|
224 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
|
225 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
|
226 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
227 fs = self._prepareMockFs() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
228 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
229 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
|
230 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
|
231 argv = argv.split(' ') |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
232 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
|
233 argv.insert(0, '--theme') |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
234 if not self.spec.get('no_kitchen', False): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
235 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
|
236 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
237 with mock_fs_scope(fs, keep=self.mock_debug): |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
238 cwd = os.getcwd() |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
239 memstream = io.StringIO() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
240 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
|
241 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
|
242 try: |
583
1eda551ee681
cli: More proper argument parsing for the main/root arguments.
Ludovic Chabant <ludovic@chabant.com>
parents:
582
diff
changeset
|
243 from piecrust.main import _pre_parse_chef_args, _run_chef |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
244 os.chdir(fs.path('/')) |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
245 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
|
246 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
|
247 finally: |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
248 logging.getLogger().removeHandler(hdl) |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
249 os.chdir(cwd) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
250 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
251 expected_code = self.spec.get('code', 0) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
252 if expected_code != exit_code: |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
253 raise UnexpectedChefExitCodeError("Got '%d', expected '%d'." % |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
254 (exit_code, expected_code)) |
493
95b77239c3b7
tests: Fix `find` tests on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
466
diff
changeset
|
255 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
256 expected_out = self.spec.get('out', None) |
567
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
257 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
|
258 actual_out = memstream.getvalue() |
779
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
259 if not self.spec.get('no_strip'): |
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
260 actual_out = actual_out.rstrip(' \n') |
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
261 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
|
262 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
|
263 expected_out = expected_out.replace('/', os.sep) |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
264 if expected_out != actual_out: |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
265 raise UnexpectedChefOutputError(expected_out, actual_out) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
266 |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
267 expected_files = self.spec.get('files', None) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
268 if expected_files is not None: |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
269 for path in expected_files: |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
270 path = '/' + path.lstrip('/') |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
271 if not os.path.exists(fs.path(path)): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
272 raise MissingChefOutputFileError(fs, path) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
273 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
274 def reportinfo(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
275 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
|
276 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
277 def repr_failure(self, excinfo): |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
278 if isinstance(excinfo.value, UnexpectedChefExitCodeError): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
279 return str(excinfo.value) |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
280 if isinstance(excinfo.value, UnexpectedChefOutputError): |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
281 return ('\n'.join( |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
282 ['Unexpected command output. Expected:', |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
283 excinfo.value.args[0], |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
284 "Got:", |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
285 excinfo.value.args[1]])) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
286 if isinstance(excinfo.value, MissingChefOutputFileError): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
287 lines = print_fs_tree(excinfo.value.args[0].path('')) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
288 return ('\n'.join( |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
289 ["Missing file: %s" % excinfo.value.args[1], |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
290 "Got output directory:"] + |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
291 lines)) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
292 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
|
293 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
294 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
295 class UnexpectedChefExitCodeError(Exception): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
296 pass |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
297 |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
298 |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
299 class UnexpectedChefOutputError(Exception): |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
300 pass |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
301 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
302 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
303 class MissingChefOutputFileError(Exception): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
304 pass |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
305 |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
306 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
307 class ChefTestFile(YamlTestFileBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
308 __item_class__ = ChefTestItem |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
309 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
310 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
311 class BakeTestItem(YamlTestItemBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
312 def runtest(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
313 fs = self._prepareMockFs() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
314 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
315 from piecrust.baking.baker import Baker |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
316 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
|
317 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
|
318 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
|
319 |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
320 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
|
321 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
|
322 values = list(values.items()) |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
323 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
|
324 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
|
325 |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
326 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
|
327 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
|
328 config_variants=variants, |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
329 config_values=values) |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
330 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
|
331 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
|
332 |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
333 if not records.success: |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
334 errors = [] |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
335 for r in records.records: |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
336 for e in r.getEntries(): |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
337 errors += e.getAllErrors() |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
338 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
|
339 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
340 check_expected_outputs(self.spec, fs, UnexpectedBakeOutputError) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
341 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
342 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
|
343 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
|
344 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
345 def repr_failure(self, excinfo): |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
346 if isinstance(excinfo.value, UnexpectedBakeOutputError): |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
347 return ('\n'.join( |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
348 ['Unexpected bake output. Left is expected output, ' |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
349 'right is actual output.'] + |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
350 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
|
351 elif isinstance(excinfo.value, BakeError): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
352 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
|
353 ['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
|
354 excinfo.value.args[0])) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
355 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
356 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
|
357 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
|
358 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
359 |
398
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
360 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
|
361 pass |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
362 |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
363 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
364 class UnexpectedBakeOutputError(Exception): |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
365 pass |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
366 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
367 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
368 class BakeTestFile(YamlTestFileBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
369 __item_class__ = BakeTestItem |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
370 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
371 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
372 class ServeTestItem(YamlTestItemBase): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
373 def runtest(self): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
374 fs = self._prepareMockFs() |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
375 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
376 url = self.spec.get('url') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
377 if url is None: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
378 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
|
379 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
380 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
|
381 expected_headers = self.spec.get('headers') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
382 expected_output = self.spec.get('out') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
383 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
|
384 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
385 from werkzeug.test import Client |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
386 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
|
387 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
|
388 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
|
389 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
390 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
|
391 appfactory = PieCrustFactory( |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
392 fs.path('/kitchen'), |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
393 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
|
394 server = PieCrustServer(appfactory) |
775
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
395 |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
396 client = Client(server, BaseResponse) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
397 resp = client.get(url) |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
398 if expected_status != resp.status_code: |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
399 raise UnexpectedChefServingError( |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
400 url, |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
401 "Expected HTTP status '%s', got '%s'" % |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
402 (expected_status, resp.status_code), |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
403 resp) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
404 |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
405 cctx = CompareContext() |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
406 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
407 if expected_headers: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
408 for k, v in expected_headers.items(): |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
409 cmpres = _compare_str(v, resp.headers.get(k), cctx) |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
410 if cmpres: |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
411 raise UnexpectedChefServingOutput(cmpres) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
412 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
413 actual = resp.data.decode('utf8').rstrip() |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
414 if expected_output: |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
415 cmpres = _compare_str(expected_output.rstrip(), actual, cctx) |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
416 if cmpres: |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
417 raise UnexpectedChefServingOutput(cmpres) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
418 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
419 if expected_contains: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
420 assert expected_contains.rstrip() in actual |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
421 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
422 def reportinfo(self): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
423 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
|
424 |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
425 def repr_failure(self, excinfo): |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
426 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
|
427 if isinstance(excinfo.value, MultipleNotFound): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
428 res = '\n'.join( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
429 ["HTTP error 404 returned:", |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
430 str(excinfo.value)] + |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
431 [str(e) for e in excinfo.value._nfes]) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
432 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
433 return res |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
434 elif isinstance(excinfo.value, HTTPException): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
435 res = '\n'.join( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
436 ["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
|
437 excinfo.value.description]) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
438 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
439 return res |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
440 elif isinstance(excinfo.value, UnexpectedChefServingError): |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
441 res = str(excinfo.value) |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
442 res += '\nWhile requesting URL: %s' % excinfo.value.url |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
443 res += '\nBody:\n%s' % excinfo.value.resp.data.decode('utf8') |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
444 return res |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
445 elif isinstance(excinfo.value, UnexpectedChefServingOutput): |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
446 res = '\n'.join( |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
447 ["Unexpected serving output. Left is expected output, " |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
448 "right is actual output."] + |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
449 excinfo.value.args[0]) |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
450 return res |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
451 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
|
452 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
453 |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
454 class UnexpectedChefServingError(Exception): |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
455 def __init__(self, url, msg, resp): |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
456 super().__init__(msg) |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
457 self.url = url |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
458 self.resp = resp |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
459 |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
460 |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
461 class UnexpectedChefServingOutput(Exception): |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
462 pass |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
463 |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
464 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
465 class ServeTestFile(YamlTestFileBase): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
466 __item_class__ = ServeTestItem |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
467 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
468 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
469 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
|
470 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
|
471 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
|
472 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
|
473 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
|
474 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
|
475 _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
|
476 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
477 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
478 class CompareContext(object): |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
479 def __init__(self, path=None, t=None): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
480 self.path = path or '' |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
481 self.time = t or time.time() |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
482 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
483 def createChildContext(self, name): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
484 ctx = CompareContext( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
485 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
|
486 t=self.time) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
487 return ctx |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
488 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
489 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
490 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
|
491 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
|
492 return (["Different items: ", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
493 "%s: %s" % (ctx.path, pprint.pformat(left)), |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
494 "%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
|
495 if isinstance(left, str): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
496 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
|
497 elif isinstance(left, dict): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
498 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
|
499 elif isinstance(left, list): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
500 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
|
501 elif left != right: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
502 return (["Different items: ", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
503 "%s: %s" % (ctx.path, pprint.pformat(left)), |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
504 "%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
|
505 |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
506 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
507 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
|
508 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
|
509 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
|
510 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
|
511 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
|
512 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
|
513 ['- %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
|
514 ['Left:', ', '.join(left.keys())] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
515 ['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
|
516 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
|
517 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
|
518 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
|
519 ['- %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
|
520 ['Left:', ', '.join(left.keys())] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
521 ['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
|
522 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
|
523 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
524 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
|
525 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
|
526 rv = right[key] |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
527 child_ctx = ctx.createChildContext(key) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
528 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
|
529 if cmpres: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
530 return cmpres |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
531 return None |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
532 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
533 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
534 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
|
535 for i in range(min(len(left), len(right))): |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
536 lc = left[i] |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
537 rc = right[i] |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
538 cmpres = _compare(lc, rc, ctx) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
539 if cmpres: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
540 return cmpres |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
541 if len(left) > len(right): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
542 return (["Left '%s' contains more items. First extra item: " % |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
543 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
|
544 if len(right) > len(left): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
545 return (["Right '%s' contains more items. First extra item: " % |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
546 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
|
547 return None |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
548 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
549 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
550 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
|
551 if left == right: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
552 return None |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
553 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
554 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
|
555 time.gmtime(ctx.time)) |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
556 test_time_iso8601_pattern = '%test_time_iso8601%' |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
557 |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
558 left_time_indices = [] |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
559 i = -1 |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
560 while True: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
561 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
|
562 if i >= 0: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
563 left_time_indices.append(i) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
564 left = (left[:i] + test_time_iso8601 + |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
565 left[i + len(test_time_iso8601_pattern):]) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
566 else: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
567 break |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
568 |
665
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
569 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
|
570 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
|
571 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
|
572 skip_for -= 1 |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
573 continue |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
574 |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
575 if i in left_time_indices: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
576 # 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
|
577 # 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
|
578 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
|
579 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
|
580 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
|
581 # 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
|
582 # 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
|
583 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
|
584 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
|
585 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
|
586 left_time.tm_isdst) |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
587 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
|
588 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
|
589 if abs(difference) <= 1: |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
590 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
|
591 skip_for = len(test_time_iso8601) - 1 |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
592 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
593 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
|
594 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
|
595 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
|
596 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
|
597 |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
598 l_str = '' |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
599 l_offset = 0 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
600 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
|
601 c = repr(left[j]).strip("'") |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
602 l_str += c |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
603 if j < i: |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
604 l_offset += len(c) |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
605 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
606 r_str = '' |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
607 r_offset = 0 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
608 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
|
609 c = repr(right[j]).strip("'") |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
610 r_str += c |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
611 if j < i: |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
612 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
|
613 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
614 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
|
615 "Left:", left, '', |
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
616 "Right:", right, '', |
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
617 "Difference:", |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
618 l_str, (' ' * l_offset + '^'), |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
619 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
|
620 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
621 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
|
622 return ["Left is longer.", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
623 "Left '%s': " % ctx.path, left, |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
624 "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
|
625 "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
|
626 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
627 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
|
628 return ["Right is longer.", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
629 "Left '%s': " % ctx.path, left, |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
630 "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
|
631 "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
|
632 |
1169
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
633 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
634 re_pyver_cond = re.compile(r'^\{py(?P<cmp>[\<\>\=]\=?)(?P<ver>[\d\.]+)\}') |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
635 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
636 _cur_pyver = (sys.version_info.major, sys.version_info.minor, |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
637 sys.version_info.micro) |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
638 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
639 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
640 def _eval_pyversion_condition(string): |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
641 m = re_pyver_cond.match(string) |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
642 if m is None: |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
643 return string, True |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
644 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
645 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
646 pyver_bits = m.group('ver').split('.') |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
647 while len(pyver_bits) < 3: |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
648 pyver_bits.append('0') |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
649 cmp_ver = tuple([int(b) for b in pyver_bits]) |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
650 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
651 cmp_op = m.group('cmp') |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
652 if cmp_op == '>': |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
653 res = _cur_pyver > cmp_ver |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
654 elif cmp_op == '>=': |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
655 res = _cur_pyver >= cmp_ver |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
656 elif cmp_op == '<': |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
657 res = _cur_pyver < cmp_ver |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
658 elif cmp_op == '<=': |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
659 res = _cur_pyver <= cmp_ver |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
660 elif cmp_op == '==': |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
661 res = _cur_pyver == cmp_ver |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
662 else: |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
663 raise Exception("Unknown comparison operator: %s" % cmp_op) |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
664 |
978ed6deea91
tests: Add ability to test different expected outputs based on Python version.
Ludovic Chabant <ludovic@chabant.com>
parents:
1160
diff
changeset
|
665 return string[m.end():], res |