diff --git a/pre_commit/clientlib/validate_base.py b/pre_commit/clientlib/validate_base.py index 37180873..b15e9d77 100644 --- a/pre_commit/clientlib/validate_base.py +++ b/pre_commit/clientlib/validate_base.py @@ -24,7 +24,7 @@ def get_validator( exception_type on failure. """ - def validate(filename=None): + def validate(filename=None, load_strategy=yaml.load): filename = filename or os.path.join(git.get_root(), default_filename) if not os.path.exists(filename): @@ -33,7 +33,7 @@ def get_validator( file_contents = open(filename, 'r').read() try: - obj = yaml.load(file_contents) + obj = load_strategy(file_contents) except Exception as e: raise exception_type( 'File {0} is not a valid yaml file'.format(filename), e, diff --git a/testing/resources/ordering_data_test.yaml b/testing/resources/ordering_data_test.yaml new file mode 100644 index 00000000..3d606686 --- /dev/null +++ b/testing/resources/ordering_data_test.yaml @@ -0,0 +1,2 @@ +foo: bar +bar: baz diff --git a/tests/clientlib/validate_base_test.py b/tests/clientlib/validate_base_test.py index b74fba31..4d8851a9 100644 --- a/tests/clientlib/validate_base_test.py +++ b/tests/clientlib/validate_base_test.py @@ -7,6 +7,8 @@ import pytest from pre_commit import git from pre_commit.clientlib.validate_base import get_validator +from pre_commit.ordereddict import OrderedDict +from pre_commit.yaml_extensions import ordered_load from testing.util import get_resource_path @@ -71,3 +73,11 @@ def test_raises_when_additional_validation_fails(additional_validator): def test_returns_object_after_validating(noop_validator): ret = noop_validator(get_resource_path('array_yaml_file.yaml')) assert ret == ['foo', 'bar'] + + +def test_load_strategy(noop_validator): + ret = noop_validator( + get_resource_path('ordering_data_test.yaml'), + load_strategy=ordered_load, + ) + assert type(ret) is OrderedDict