<s> from __future__ import unicode_literals <EOL> import jsonschema <EOL> import pytest <EOL> from pre_commit . clientlib . validate_config import CONFIG_JSON_SCHEMA <EOL> from pre_commit . clientlib . validate_config import InvalidConfigError <EOL> from pre_commit . clientlib . validate_config import run <EOL> from pre_commit . clientlib . validate_config import validate_config_extra <EOL> from pre_commit . jsonschema_extensions import apply_defaults <EOL> from testing . util import get_resource_path <EOL> from testing . util import is_valid_according_to_schema <EOL> @ pytest . mark . parametrize ( <EOL> ( '<STR_LIT:input>' , '<STR_LIT>' ) , <EOL> ( <EOL> ( [ '<STR_LIT>' ] , <NUM_LIT:0> ) , <EOL> ( [ '<STR_LIT>' ] , <NUM_LIT:1> ) , <EOL> ( [ get_resource_path ( '<STR_LIT>' ) ] , <NUM_LIT:1> ) , <EOL> ( [ get_resource_path ( '<STR_LIT>' ) ] , <NUM_LIT:1> ) , <EOL> ) , <EOL> ) <EOL> def test_run ( input , expected_output ) : <EOL> assert run ( input ) == expected_output <EOL> @ pytest . mark . parametrize ( ( '<STR_LIT>' , '<STR_LIT>' ) , ( <EOL> ( [ ] , False ) , <EOL> ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ { '<STR_LIT:id>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' } ] , <EOL> } ] , <EOL> True , <EOL> ) , <EOL> ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ <EOL> { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:args>' : [ '<STR_LIT:foo>' , '<STR_LIT:bar>' , '<STR_LIT>' ] , <EOL> } , <EOL> ] , <EOL> } ] , <EOL> True , <EOL> ) , <EOL> ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ <EOL> { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT:args>' : [ '<STR_LIT:foo>' , '<STR_LIT:bar>' , '<STR_LIT>' ] , <EOL> } , <EOL> ] , <EOL> } ] , <EOL> False , <EOL> ) , <EOL> ) ) <EOL> def test_is_valid_according_to_schema ( config_obj , expected ) : <EOL> ret = is_valid_according_to_schema ( config_obj , CONFIG_JSON_SCHEMA ) <EOL> assert ret is expected <EOL> def test_config_with_failing_regexes_fails ( ) : <EOL> with pytest . raises ( InvalidConfigError ) : <EOL> config = apply_defaults ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : [ { '<STR_LIT:id>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT:(>' } ] , <EOL> } ] , <EOL> CONFIG_JSON_SCHEMA , <EOL> ) <EOL> validate_config_extra ( config ) <EOL> def test_config_with_ok_regexes_passes ( ) : <EOL> config = apply_defaults ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : [ { '<STR_LIT:id>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' } ] , <EOL> } ] , <EOL> CONFIG_JSON_SCHEMA , <EOL> ) <EOL> validate_config_extra ( config ) <EOL> def test_config_with_invalid_exclude_regex_fails ( ) : <EOL> with pytest . raises ( InvalidConfigError ) : <EOL> config = apply_defaults ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : [ { '<STR_LIT:id>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT:(>' } ] , <EOL> } ] , <EOL> CONFIG_JSON_SCHEMA , <EOL> ) <EOL> validate_config_extra ( config ) <EOL> def test_config_with_ok_exclude_regex_passes ( ) : <EOL> config = apply_defaults ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : [ { '<STR_LIT:id>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' } ] , <EOL> } ] , <EOL> CONFIG_JSON_SCHEMA , <EOL> ) <EOL> validate_config_extra ( config ) <EOL> @ pytest . mark . parametrize ( '<STR_LIT>' , ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT:foo>' , <EOL> '<STR_LIT>' : [ { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT:name>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } ] , <EOL> } ] , <EOL> ) ) <EOL> def test_config_with_local_hooks_definition_fails ( config_obj ) : <EOL> with pytest . raises ( ( <EOL> jsonschema . exceptions . ValidationError , InvalidConfigError <EOL> ) ) : <EOL> jsonschema . validate ( config_obj , CONFIG_JSON_SCHEMA ) <EOL> config = apply_defaults ( config_obj , CONFIG_JSON_SCHEMA ) <EOL> validate_config_extra ( config ) <EOL> @ pytest . mark . parametrize ( '<STR_LIT>' , ( <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT:name>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:args>' : [ '<STR_LIT:hello>' , '<STR_LIT>' ] , <EOL> } ] , <EOL> } ] , <EOL> [ { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ { <EOL> '<STR_LIT:id>' : '<STR_LIT>' , <EOL> '<STR_LIT:name>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:args>' : [ '<STR_LIT:hello>' , '<STR_LIT>' ] , <EOL> } ] <EOL> } ] , <EOL> ) ) <EOL> def test_config_with_local_hooks_definition_passes ( config_obj ) : <EOL> jsonschema . validate ( config_obj , CONFIG_JSON_SCHEMA ) <EOL> config = apply_defaults ( config_obj , CONFIG_JSON_SCHEMA ) <EOL> validate_config_extra ( config ) <EOL> def test_does_not_contain_defaults ( ) : <EOL> """<STR_LIT>""" <EOL> to_process = [ ( CONFIG_JSON_SCHEMA , ( ) ) ] <EOL> while to_process : <EOL> schema , route = to_process . pop ( ) <EOL> if isinstance ( schema , dict ) : <EOL> if '<STR_LIT:default>' in schema : <EOL> raise AssertionError ( <EOL> '<STR_LIT>' . format ( <EOL> '<STR_LIT>' . join ( route ) , <EOL> ) <EOL> ) <EOL> for key , value in schema . items ( ) : <EOL> to_process . append ( ( value , route + ( key , ) ) ) </s>
