puppet 4.8.2-x86-mingw32 → 4.9.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/CONTRIBUTING.md +25 -1
- data/Gemfile +6 -0
- data/Rakefile +1 -0
- data/ext/project_data.yaml +5 -1
- data/ext/windows/service/daemon.rb +2 -1
- data/install.rb +43 -6
- data/lib/hiera/puppet_function.rb +15 -17
- data/lib/hiera/scope.rb +12 -14
- data/lib/puppet.rb +52 -0
- data/lib/puppet/application/face_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +4 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/data_providers.rb +6 -3
- data/lib/puppet/data_providers/data_adapter.rb +6 -0
- data/lib/puppet/data_providers/data_function_support.rb +7 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_config.rb +31 -10
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
- data/lib/puppet/data_providers/hiera_support.rb +6 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
- data/lib/puppet/defaults.rb +25 -4
- data/lib/puppet/face/ca.rb +2 -0
- data/lib/puppet/face/certificate_request.rb +2 -0
- data/lib/puppet/face/certificate_revocation_list.rb +2 -0
- data/lib/puppet/face/file.rb +3 -0
- data/lib/puppet/face/help.rb +19 -17
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/key.rb +1 -0
- data/lib/puppet/face/man.rb +4 -2
- data/lib/puppet/face/module/generate.rb +1 -1
- data/lib/puppet/face/status.rb +2 -0
- data/lib/puppet/feature/base.rb +9 -2
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/file_system.rb +15 -3
- data/lib/puppet/file_system/windows.rb +8 -0
- data/lib/puppet/forge.rb +6 -6
- data/lib/puppet/forge/repository.rb +1 -2
- data/lib/puppet/functions/binary_file.rb +4 -10
- data/lib/puppet/functions/hiera_array.rb +1 -1
- data/lib/puppet/functions/hiera_include.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +24 -0
- data/lib/puppet/functions/json_data.rb +18 -0
- data/lib/puppet/functions/yaml_data.rb +21 -0
- data/lib/puppet/generate/type.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +4 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
- data/lib/puppet/indirector/request.rb +5 -1
- data/lib/puppet/interface.rb +14 -2
- data/lib/puppet/interface/face_collection.rb +1 -1
- data/lib/puppet/module.rb +14 -2
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/module_tool/applications/builder.rb +3 -2
- data/lib/puppet/module_tool/applications/installer.rb +14 -14
- data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
- data/lib/puppet/module_tool/installed_modules.rb +7 -7
- data/lib/puppet/module_tool/local_tarball.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/webrick.rb +2 -1
- data/lib/puppet/parser/functions/hiera.rb +14 -0
- data/lib/puppet/parser/functions/hiera_array.rb +14 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
- data/lib/puppet/parser/functions/hiera_include.rb +14 -0
- data/lib/puppet/parser/scope.rb +14 -20
- data/lib/puppet/plugins/data_providers.rb +2 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
- data/lib/puppet/plugins/data_providers/registry.rb +2 -36
- data/lib/puppet/pops.rb +6 -9
- data/lib/puppet/pops/adaptable.rb +0 -3
- data/lib/puppet/pops/binder/producers.rb +3 -3
- data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/closure.rb +1 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/label_provider.rb +14 -0
- data/lib/puppet/pops/loader/loader_paths.rb +3 -1
- data/lib/puppet/pops/loader/module_loaders.rb +21 -7
- data/lib/puppet/pops/loader/typed_name.rb +0 -2
- data/lib/puppet/pops/loaders.rb +31 -12
- data/lib/puppet/pops/lookup.rb +4 -3
- data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
- data/lib/puppet/pops/lookup/context.rb +121 -71
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
- data/lib/puppet/pops/lookup/data_provider.rb +102 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
- data/lib/puppet/pops/lookup/explainer.rb +122 -82
- data/lib/puppet/pops/lookup/function_provider.rb +82 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
- data/lib/puppet/pops/lookup/interpolation.rb +56 -35
- data/lib/puppet/pops/lookup/invocation.rb +179 -101
- data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
- data/lib/puppet/pops/merge_strategy.rb +120 -39
- data/lib/puppet/pops/parser/egrammar.ra +2 -0
- data/lib/puppet/pops/parser/eparser.rb +816 -808
- data/lib/puppet/pops/parser/locator.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +4 -3
- data/lib/puppet/pops/pcore.rb +21 -12
- data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
- data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
- data/lib/puppet/pops/serialization/deserializer.rb +17 -4
- data/lib/puppet/pops/serialization/extension.rb +37 -8
- data/lib/puppet/pops/serialization/object.rb +14 -6
- data/lib/puppet/pops/serialization/rgen.rb +2 -1
- data/lib/puppet/pops/serialization/serializer.rb +30 -7
- data/lib/puppet/pops/types/implementation_registry.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +55 -12
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
- data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
- data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
- data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
- data/lib/puppet/pops/types/recursion_guard.rb +64 -20
- data/lib/puppet/pops/types/ruby_generator.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +23 -13
- data/lib/puppet/pops/types/type_factory.rb +20 -9
- data/lib/puppet/pops/types/type_formatter.rb +37 -17
- data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
- data/lib/puppet/pops/types/type_parser.rb +6 -0
- data/lib/puppet/pops/types/types.rb +225 -132
- data/lib/puppet/pops/validation.rb +1 -1
- data/lib/puppet/pops/validation/checker4_0.rb +12 -2
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/pops/visitor.rb +4 -3
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
- data/lib/puppet/provider/nameservice.rb +15 -0
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +2 -2
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +5 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +15 -0
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +4 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +2 -3
- data/lib/puppet/resource/catalog.rb +12 -4
- data/lib/puppet/resource/type.rb +3 -3
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +2 -1
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/environment_conf.rb +6 -2
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +10 -0
- data/lib/puppet/ssl/certificate_authority.rb +13 -2
- data/lib/puppet/ssl/host.rb +23 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
- data/lib/puppet/type/user.rb +16 -3
- data/lib/puppet/util.rb +1 -0
- data/lib/puppet/util/execution.rb +3 -3
- data/lib/puppet/util/filetype.rb +11 -5
- data/lib/puppet/util/logging.rb +2 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/windows/adsi.rb +15 -12
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
- data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +19 -12
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +79 -0
- data/man/man5/puppet.conf.5 +1 -1
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
- data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
- data/spec/integration/application/apply_spec.rb +88 -2
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/data_binding_spec.rb +5 -5
- data/spec/integration/defaults_spec.rb +13 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +74 -0
- data/spec/integration/util/execution_spec.rb +8 -0
- data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
- data/spec/lib/puppet_spec/unindent.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +16 -0
- data/spec/unit/application/lookup_spec.rb +262 -227
- data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
- data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
- data/spec/unit/defaults_spec.rb +1 -1
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/certificate_request_spec.rb +10 -0
- data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
- data/spec/unit/face/file_spec.rb +4 -0
- data/spec/unit/face/help_spec.rb +17 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/file_system_spec.rb +143 -6
- data/spec/unit/functions/binary_file_spec.rb +1 -1
- data/spec/unit/functions/hiera_spec.rb +257 -47
- data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
- data/spec/unit/functions/lookup_spec.rb +1319 -608
- data/spec/unit/functions/new_spec.rb +3 -3
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +4 -4
- data/spec/unit/indirector/request_spec.rb +9 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/http/connection_spec.rb +10 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/lookup/context_spec.rb +45 -16
- data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
- data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
- data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
- data/spec/unit/pops/serialization/packer_spec.rb +4 -23
- data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
- data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
- data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
- data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
- data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
- data/spec/unit/pops/types/type_factory_spec.rb +3 -3
- data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
- data/spec/unit/pops/types/types_spec.rb +25 -2
- data/spec/unit/pops/validator/validator_spec.rb +60 -4
- data/spec/unit/provider/nameservice_spec.rb +42 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/pkg_spec.rb +22 -0
- data/spec/unit/provider/package/pkgng_spec.rb +12 -0
- data/spec/unit/provider/package/rpm_spec.rb +8 -8
- data/spec/unit/provider/service/smf_spec.rb +13 -11
- data/spec/unit/provider/service/systemd_spec.rb +8 -1
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/puppet_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +15 -9
- data/spec/unit/resource_spec.rb +20 -17
- data/spec/unit/semver_spec.rb +14 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
- data/spec/unit/type/user_spec.rb +32 -6
- data/spec/unit/util/filetype_spec.rb +3 -3
- data/spec/unit/util/yaml_spec.rb +1 -1
- data/spec/unit/util_spec.rb +10 -2
- data/tasks/i18n.rake +20 -0
- metadata +2661 -2607
- data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
- data/lib/puppet/vendor/load_semantic.rb +0 -1
- data/lib/puppet/vendor/semantic/Gemfile +0 -20
- data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/semantic/Rakefile +0 -69
- data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
- data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
- data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
- data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
- data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -513,7 +513,15 @@ describe 'Lexer2' do
|
|
513
513
|
"x\\u2713y"
|
514
514
|
CODE
|
515
515
|
# >= Ruby 1.9.3 reports \u
|
516
|
-
|
516
|
+
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713y"])
|
517
|
+
end
|
518
|
+
|
519
|
+
it 'should support adjacent short form unicode characters' do
|
520
|
+
code = <<-CODE
|
521
|
+
"x\\u2713\\u2713y"
|
522
|
+
CODE
|
523
|
+
# >= Ruby 1.9.3 reports \u
|
524
|
+
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713\u2713y"])
|
517
525
|
end
|
518
526
|
|
519
527
|
it 'should support unicode characters in long form' do
|
@@ -523,6 +531,13 @@ describe 'Lexer2' do
|
|
523
531
|
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u{1f452}y"])
|
524
532
|
end
|
525
533
|
|
534
|
+
it 'can escape the unicode escape' do
|
535
|
+
code = <<-"CODE"
|
536
|
+
"x\\\\u{1f452}y"
|
537
|
+
CODE
|
538
|
+
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\\u{1f452}y"])
|
539
|
+
end
|
540
|
+
|
526
541
|
it 'produces byte offsets that counts each byte in a comment' do
|
527
542
|
code = <<-"CODE"
|
528
543
|
# \u{0400}\na
|
@@ -42,6 +42,10 @@ describe "egrammar parsing of site expression" do
|
|
42
42
|
it "allows the keyword '#{keyword}' as a value in a hash" do
|
43
43
|
expect(dump(parse("$a = {'x'=>#{keyword}}"))).to(eq("(= $a ({} ('x' '#{keyword}')))"))
|
44
44
|
end
|
45
|
+
|
46
|
+
it "allows the keyword '#{keyword}' as an attribute name" do
|
47
|
+
expect(dump(parse("foo { 'x': #{keyword} => 'value' } "))).to eql("(resource foo\n ('x'\n (#{keyword} => 'value')))")
|
48
|
+
end
|
45
49
|
end
|
46
50
|
end
|
47
51
|
end
|
@@ -87,15 +87,6 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
|
|
87
87
|
expect(val2).to eql(val)
|
88
88
|
end
|
89
89
|
|
90
|
-
it 'Sensitive' do
|
91
|
-
sval = 'the sensitive value'
|
92
|
-
val = Types::PSensitiveType::Sensitive.new(sval)
|
93
|
-
write(val)
|
94
|
-
val2 = read
|
95
|
-
expect(val2).to be_a(Types::PSensitiveType::Sensitive)
|
96
|
-
expect(val2.unwrap).to eql(sval)
|
97
|
-
end
|
98
|
-
|
99
90
|
it 'Timespan' do
|
100
91
|
val = Time::Timespan.from_fields(false, 3, 12, 40, 31, 123)
|
101
92
|
write(val)
|
@@ -113,18 +104,18 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
|
|
113
104
|
end
|
114
105
|
|
115
106
|
it 'Version' do
|
116
|
-
val =
|
107
|
+
val = SemanticPuppet::Version.parse('1.2.3-alpha2')
|
117
108
|
write(val)
|
118
109
|
val2 = read
|
119
|
-
expect(val2).to be_a(
|
110
|
+
expect(val2).to be_a(SemanticPuppet::Version)
|
120
111
|
expect(val2).to eql(val)
|
121
112
|
end
|
122
113
|
|
123
114
|
it 'VersionRange' do
|
124
|
-
val =
|
115
|
+
val = SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
|
125
116
|
write(val)
|
126
117
|
val2 = read
|
127
|
-
expect(val2).to be_a(
|
118
|
+
expect(val2).to be_a(SemanticPuppet::VersionRange)
|
128
119
|
expect(val2).to eql(val)
|
129
120
|
end
|
130
121
|
|
@@ -135,16 +126,6 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
|
|
135
126
|
expect(val2).to be_a(Types::PBinaryType::Binary)
|
136
127
|
expect(val2).to eql(val)
|
137
128
|
end
|
138
|
-
|
139
|
-
it 'Sensitive with rich data' do
|
140
|
-
sval = Time::Timestamp.now
|
141
|
-
val = Types::PSensitiveType::Sensitive.new(sval)
|
142
|
-
write(val)
|
143
|
-
val2 = read
|
144
|
-
expect(val2).to be_a(Types::PSensitiveType::Sensitive)
|
145
|
-
expect(val2.unwrap).to be_a(Time::Timestamp)
|
146
|
-
expect(val2.unwrap).to eql(sval)
|
147
|
-
end
|
148
129
|
end
|
149
130
|
|
150
131
|
context 'will fail on attempts to write' do
|
@@ -121,19 +121,19 @@ module Serialization
|
|
121
121
|
|
122
122
|
it 'Version' do
|
123
123
|
# It does succeed on rare occasions, so we need to repeat
|
124
|
-
val =
|
124
|
+
val = SemanticPuppet::Version.parse('1.2.3-alpha2')
|
125
125
|
write(val)
|
126
126
|
val2 = read
|
127
|
-
expect(val2).to be_a(
|
127
|
+
expect(val2).to be_a(SemanticPuppet::Version)
|
128
128
|
expect(val2).to eql(val)
|
129
129
|
end
|
130
130
|
|
131
131
|
it 'VersionRange' do
|
132
132
|
# It does succeed on rare occasions, so we need to repeat
|
133
|
-
val =
|
133
|
+
val = SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
|
134
134
|
write(val)
|
135
135
|
val2 = read
|
136
|
-
expect(val2).to be_a(
|
136
|
+
expect(val2).to be_a(SemanticPuppet::VersionRange)
|
137
137
|
expect(val2).to eql(val)
|
138
138
|
end
|
139
139
|
|
@@ -186,6 +186,30 @@ module Serialization
|
|
186
186
|
expect(val2).to eql(val)
|
187
187
|
end
|
188
188
|
|
189
|
+
it 'Collection' do
|
190
|
+
val = Types::TypeFactory.collection(Types::TypeFactory.range(0, 20))
|
191
|
+
write(val)
|
192
|
+
val2 = read
|
193
|
+
expect(val2).to be_a(Types::PCollectionType)
|
194
|
+
expect(val2).to eql(val)
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'Array' do
|
198
|
+
val = Types::TypeFactory.array_of(Types::TypeFactory.integer, Types::TypeFactory.range(0, 20))
|
199
|
+
write(val)
|
200
|
+
val2 = read
|
201
|
+
expect(val2).to be_a(Types::PArrayType)
|
202
|
+
expect(val2).to eql(val)
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'Hash' do
|
206
|
+
val = Types::TypeFactory.hash_kv(Types::TypeFactory.string, Types::TypeFactory.integer, Types::TypeFactory.range(0, 20))
|
207
|
+
write(val)
|
208
|
+
val2 = read
|
209
|
+
expect(val2).to be_a(Types::PHashType)
|
210
|
+
expect(val2).to eql(val)
|
211
|
+
end
|
212
|
+
|
189
213
|
it 'Variant' do
|
190
214
|
val = Types::TypeFactory.variant(Types::TypeFactory.string, Types::TypeFactory.range(1, :default))
|
191
215
|
write(val)
|
@@ -208,8 +232,8 @@ module Serialization
|
|
208
232
|
val = [
|
209
233
|
Time::Timespan.from_fields(false, 3, 12, 40, 31, 123),
|
210
234
|
Time::Timestamp.now,
|
211
|
-
|
212
|
-
|
235
|
+
SemanticPuppet::Version.parse('1.2.3-alpha2'),
|
236
|
+
SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
|
213
237
|
Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
|
214
238
|
]
|
215
239
|
write(val)
|
@@ -222,8 +246,8 @@ module Serialization
|
|
222
246
|
val = {
|
223
247
|
'duration' => Time::Timespan.from_fields(false, 3, 12, 40, 31, 123),
|
224
248
|
'time' => Time::Timestamp.now,
|
225
|
-
'version' =>
|
226
|
-
'range' =>
|
249
|
+
'version' => SemanticPuppet::Version.parse('1.2.3-alpha2'),
|
250
|
+
'range' => SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
|
227
251
|
'binary' => Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
|
228
252
|
}
|
229
253
|
write(val)
|
@@ -9,9 +9,15 @@ describe 'The Object Type' do
|
|
9
9
|
|
10
10
|
let(:parser) { TypeParser.singleton }
|
11
11
|
let(:pp_parser) { Parser::EvaluatingParser.new }
|
12
|
-
let(:loader) {
|
12
|
+
let(:loader) { Loaders.find_loader(nil) }
|
13
13
|
let(:factory) { TypeFactory }
|
14
14
|
|
15
|
+
around(:each) do |example|
|
16
|
+
Puppet.override(:loaders => Loaders.new(Puppet::Node::Environment.create(:testing, []))) do
|
17
|
+
example.run
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
15
21
|
def type_object_t(name, body_string)
|
16
22
|
object = PObjectType.new(name, pp_parser.parse_string("{#{body_string}}").current.body)
|
17
23
|
loader.set_entry(Loader::TypedName.new(:type, name.downcase), object)
|
@@ -148,7 +154,7 @@ describe 'The Object Type' do
|
|
148
154
|
end
|
149
155
|
|
150
156
|
context 'when dealing with functions' do
|
151
|
-
it 'raises an error
|
157
|
+
it 'raises an error unless the function type is a Type[Callable]' do
|
152
158
|
obj = <<-OBJECT
|
153
159
|
functions => {
|
154
160
|
a => String
|
@@ -207,7 +213,7 @@ describe 'The Object Type' do
|
|
207
213
|
'function MyDerivedObject[a] attempts to override attribute MyObject[a]')
|
208
214
|
end
|
209
215
|
|
210
|
-
it 'raises an error when the
|
216
|
+
it 'raises an error when the a function overrides an attribute' do
|
211
217
|
parent = <<-OBJECT
|
212
218
|
functions => {
|
213
219
|
a => Callable
|
@@ -699,6 +705,43 @@ describe 'The Object Type' do
|
|
699
705
|
end
|
700
706
|
end
|
701
707
|
|
708
|
+
context 'when stringifying created instances' do
|
709
|
+
it 'outputs a Puppet constructor using the initializer hash' do
|
710
|
+
code = <<-CODE
|
711
|
+
type Spec::MyObject = Object[{attributes => { a => Integer }}]
|
712
|
+
type Spec::MySecondObject = Object[{parent => Spec::MyObject, attributes => { b => String }}]
|
713
|
+
notice(Spec::MySecondObject(42, 'Meaning of life'))
|
714
|
+
CODE
|
715
|
+
expect(eval_and_collect_notices(code)).to eql(["Spec::MySecondObject({\n 'a' => 42,\n 'b' => 'Meaning of life'\n})"])
|
716
|
+
end
|
717
|
+
end
|
718
|
+
|
719
|
+
context 'when used from Ruby' do
|
720
|
+
it 'can create an instance without scope using positional arguments' do
|
721
|
+
parse_object('MyObject', <<-OBJECT)
|
722
|
+
attributes => {
|
723
|
+
a => { type => Integer }
|
724
|
+
}
|
725
|
+
OBJECT
|
726
|
+
|
727
|
+
t = Puppet::Pops::Types::TypeParser.singleton.parse('MyObject', Puppet::Pops::Loaders.find_loader(nil))
|
728
|
+
instance = t.create(32)
|
729
|
+
expect(instance.a).to eql(32)
|
730
|
+
end
|
731
|
+
|
732
|
+
it 'can create an instance without scope using initialization hash' do
|
733
|
+
parse_object('MyObject', <<-OBJECT)
|
734
|
+
attributes => {
|
735
|
+
a => { type => Integer }
|
736
|
+
}
|
737
|
+
OBJECT
|
738
|
+
|
739
|
+
t = Puppet::Pops::Types::TypeParser.singleton.parse('MyObject', Puppet::Pops::Loaders.find_loader(nil))
|
740
|
+
instance = t.from_hash('a' => 32)
|
741
|
+
expect(instance.a).to eql(32)
|
742
|
+
end
|
743
|
+
end
|
744
|
+
|
702
745
|
context 'when used in Puppet expressions' do
|
703
746
|
it 'two anonymous empty objects are equal' do
|
704
747
|
code = <<-CODE
|
@@ -763,6 +806,28 @@ describe 'The Object Type' do
|
|
763
806
|
/attribute MySecondObject\[a\] attempts to override final attribute MyObject\[a\]/)
|
764
807
|
end
|
765
808
|
|
809
|
+
it 'can inherit from an aliased type' do
|
810
|
+
code = <<-CODE
|
811
|
+
type MyObject = Object[{ name => 'MyFirstObject', attributes => { a => Integer }}]
|
812
|
+
type MyObjectAlias = MyObject
|
813
|
+
type MySecondObject = Object[{ parent => MyObjectAlias, attributes => { b => String }}]
|
814
|
+
notice(MySecondObject < MyObjectAlias)
|
815
|
+
notice(MySecondObject < MyObject)
|
816
|
+
CODE
|
817
|
+
expect(eval_and_collect_notices(code)).to eql(['true', 'true'])
|
818
|
+
end
|
819
|
+
|
820
|
+
it 'detects equality duplication when inherited from an aliased type' do
|
821
|
+
code = <<-CODE
|
822
|
+
type MyObject = Object[{ name => 'MyFirstObject', attributes => { a => Integer }}]
|
823
|
+
type MyObjectAlias = MyObject
|
824
|
+
type MySecondObject = Object[{ parent => MyObjectAlias, attributes => { b => String }, equality => a}]
|
825
|
+
notice(MySecondObject < MyObject)
|
826
|
+
CODE
|
827
|
+
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error,
|
828
|
+
/MySecondObject equality is referencing attribute MyObject\[a\] which is included in equality of MyObject/)
|
829
|
+
end
|
830
|
+
|
766
831
|
it 'raises an error when object when circular inheritance is detected' do
|
767
832
|
code = <<-CODE
|
768
833
|
type MyFirstObject = Object[{
|
@@ -20,12 +20,12 @@ describe 'Semantic Versions' do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'returns its argument when the argument is a version' do
|
23
|
-
v =
|
23
|
+
v = SemanticPuppet::Version.new(1,0,0)
|
24
24
|
expect(PSemVerType.convert(v)).to equal(v)
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'converts a valid version string argument to a version' do
|
28
|
-
v =
|
28
|
+
v = SemanticPuppet::Version.new(1,0,0)
|
29
29
|
expect(PSemVerType.convert('1.0.0')).to eq(v)
|
30
30
|
end
|
31
31
|
|
@@ -42,12 +42,12 @@ describe 'Semantic Versions' do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'returns its argument when the argument is a version range' do
|
45
|
-
vr =
|
45
|
+
vr = SemanticPuppet::VersionRange.parse('1.x')
|
46
46
|
expect(PSemVerRangeType.convert(vr)).to equal(vr)
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'converts a valid version string argument to a version range' do
|
50
|
-
vr =
|
50
|
+
vr = SemanticPuppet::VersionRange.parse('1.x')
|
51
51
|
expect(PSemVerRangeType.convert('1.x')).to eq(vr)
|
52
52
|
end
|
53
53
|
|
@@ -123,7 +123,7 @@ module Puppet::Pops
|
|
123
123
|
version => '1.x',
|
124
124
|
pcore_version => '1.0.0',
|
125
125
|
OBJECT
|
126
|
-
expect { parse_type_set('MySet', ts) }.to raise_error(
|
126
|
+
expect { parse_type_set('MySet', ts) }.to raise_error(SemanticPuppet::Version::ValidationFailure)
|
127
127
|
end
|
128
128
|
|
129
129
|
it 'the pcore_version is an invalid semantic version' do
|
@@ -131,7 +131,7 @@ module Puppet::Pops
|
|
131
131
|
version => '1.0.0',
|
132
132
|
pcore_version => '1.x',
|
133
133
|
OBJECT
|
134
|
-
expect { parse_type_set('MySet', ts) }.to raise_error(
|
134
|
+
expect { parse_type_set('MySet', ts) }.to raise_error(SemanticPuppet::Version::ValidationFailure)
|
135
135
|
end
|
136
136
|
|
137
137
|
it 'the pcore_version is outside of the range of that is parsable by this runtime' do
|
@@ -419,6 +419,35 @@ module Puppet::Pops
|
|
419
419
|
OBJECT
|
420
420
|
end
|
421
421
|
end
|
422
|
+
|
423
|
+
it '#name_for method reports the name of deeply nested type correctly' do
|
424
|
+
tv = parse_type_set('Vehicles', <<-OBJECT)
|
425
|
+
version => '1.0.0',
|
426
|
+
pcore_version => '1.0.0',
|
427
|
+
types => { Car => Object[{}] }
|
428
|
+
OBJECT
|
429
|
+
tt = parse_type_set('Transports', <<-OBJECT)
|
430
|
+
version => '1.0.0',
|
431
|
+
pcore_version => '1.0.0',
|
432
|
+
references => {
|
433
|
+
Vecs => {
|
434
|
+
name => 'Vehicles',
|
435
|
+
version_range => '1.x'
|
436
|
+
}
|
437
|
+
}
|
438
|
+
OBJECT
|
439
|
+
ts = parse_type_set('TheSet', <<-OBJECT)
|
440
|
+
version => '1.0.0',
|
441
|
+
pcore_version => '1.0.0',
|
442
|
+
references => {
|
443
|
+
T => {
|
444
|
+
name => 'Transports',
|
445
|
+
version_range => '1.x'
|
446
|
+
}
|
447
|
+
}
|
448
|
+
OBJECT
|
449
|
+
expect(ts.name_for(tv['Car'], nil)).to eql('T::Vecs::Car')
|
450
|
+
end
|
422
451
|
end
|
423
452
|
end
|
424
453
|
end
|
@@ -1,24 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'puppet/pops/types/type_acceptor'
|
3
3
|
|
4
|
+
class PuppetSpec::TestTypeAcceptor
|
5
|
+
include Puppet::Pops::Types::TypeAcceptor
|
6
|
+
attr_reader :visitors, :guard
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@visitors = []
|
10
|
+
@guard = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def visit(type, guard)
|
14
|
+
@visitors << type
|
15
|
+
@guard = guard
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
4
19
|
module Puppet::Pops::Types
|
5
20
|
describe 'the Puppet::Pops::Types::TypeAcceptor' do
|
6
|
-
|
7
|
-
|
8
|
-
include TypeAcceptor
|
9
|
-
attr_reader :visitors, :guard
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@visitors = []
|
13
|
-
@guard = nil
|
14
|
-
end
|
15
|
-
|
16
|
-
def visit(type, guard)
|
17
|
-
@visitors << type
|
18
|
-
@guard = guard
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
21
|
+
|
22
|
+
let!(:acceptor_class) { PuppetSpec::TestTypeAcceptor }
|
22
23
|
|
23
24
|
let(:acceptor) { acceptor_class.new }
|
24
25
|
let(:guard) { RecursionGuard.new }
|
@@ -102,4 +103,4 @@ describe 'the Puppet::Pops::Types::TypeAcceptor' do
|
|
102
103
|
expect(acceptor.visitors).to include(t, PStringType::DEFAULT, PIntegerType::DEFAULT)
|
103
104
|
end
|
104
105
|
end
|
105
|
-
end
|
106
|
+
end
|
@@ -18,12 +18,12 @@ describe 'The type calculator' do
|
|
18
18
|
TypeFactory.regexp(pattern)
|
19
19
|
end
|
20
20
|
|
21
|
-
def string_t(
|
22
|
-
TypeFactory.string(
|
21
|
+
def string_t(string = nil)
|
22
|
+
TypeFactory.string(string)
|
23
23
|
end
|
24
24
|
|
25
|
-
def constrained_string_t(size_type
|
26
|
-
TypeFactory.string(size_type
|
25
|
+
def constrained_string_t(size_type)
|
26
|
+
TypeFactory.string(size_type)
|
27
27
|
end
|
28
28
|
|
29
29
|
def callable_t(*params)
|
@@ -141,7 +141,7 @@ describe 'The type calculator' do
|
|
141
141
|
it 'inferred string type knows the string value' do
|
142
142
|
t = calculator.infer('foo')
|
143
143
|
expect(t.class).to eq(PStringType)
|
144
|
-
expect(t.
|
144
|
+
expect(t.value).to eq('foo')
|
145
145
|
end
|
146
146
|
|
147
147
|
it 'boolean true translates to PBooleanType' do
|
@@ -222,15 +222,15 @@ describe 'The type calculator' do
|
|
222
222
|
|
223
223
|
context 'version' do
|
224
224
|
it 'translates to PVersionType' do
|
225
|
-
expect(calculator.infer(
|
225
|
+
expect(calculator.infer(SemanticPuppet::Version.new(1,0,0)).class).to eq(PSemVerType)
|
226
226
|
end
|
227
227
|
|
228
228
|
it 'range translates to PVersionRangeType' do
|
229
|
-
expect(calculator.infer(
|
229
|
+
expect(calculator.infer(SemanticPuppet::VersionRange.parse('1.x')).class).to eq(PSemVerRangeType)
|
230
230
|
end
|
231
231
|
|
232
232
|
it 'translates to a limited PVersionType by infer_set' do
|
233
|
-
v =
|
233
|
+
v = SemanticPuppet::Version.new(1,0,0)
|
234
234
|
t = calculator.infer_set(v)
|
235
235
|
expect(t.class).to eq(PSemVerType)
|
236
236
|
expect(t.ranges.size).to eq(1)
|
@@ -287,9 +287,9 @@ describe 'The type calculator' do
|
|
287
287
|
expect(t.to).to eq(42)
|
288
288
|
end
|
289
289
|
|
290
|
-
it 'Compound string values are
|
290
|
+
it 'Compound string values are converted to enums' do
|
291
291
|
t = calculator.infer(['a','b', 'c']).element_type
|
292
|
-
expect(t.class).to eq(
|
292
|
+
expect(t.class).to eq(PEnumType)
|
293
293
|
expect(t.values).to eq(['a', 'b', 'c'])
|
294
294
|
end
|
295
295
|
|
@@ -326,16 +326,16 @@ describe 'The type calculator' do
|
|
326
326
|
end
|
327
327
|
|
328
328
|
it 'with arrays of string values translates to PArrayType[PArrayType[PStringType]]' do
|
329
|
-
et = calculator.infer([['first' 'array'], ['second','array']])
|
329
|
+
et = calculator.infer([['first', 'array'], ['second','array']])
|
330
330
|
expect(et.class).to eq(PArrayType)
|
331
331
|
et = et.element_type
|
332
332
|
expect(et.class).to eq(PArrayType)
|
333
333
|
et = et.element_type
|
334
|
-
expect(et.class).to eq(
|
334
|
+
expect(et.class).to eq(PEnumType)
|
335
335
|
end
|
336
336
|
|
337
337
|
it 'with array of string values and array of fixnums translates to PArrayType[PArrayType[PScalarType]]' do
|
338
|
-
et = calculator.infer([['first' 'array'], [1,2]])
|
338
|
+
et = calculator.infer([['first', 'array'], [1,2]])
|
339
339
|
expect(et.class).to eq(PArrayType)
|
340
340
|
et = et.element_type
|
341
341
|
expect(et.class).to eq(PArrayType)
|
@@ -343,13 +343,13 @@ describe 'The type calculator' do
|
|
343
343
|
expect(et.class).to eq(PScalarType)
|
344
344
|
end
|
345
345
|
|
346
|
-
it 'with hashes of string values translates to PArrayType[PHashType[
|
346
|
+
it 'with hashes of string values translates to PArrayType[PHashType[PEnumType]]' do
|
347
347
|
et = calculator.infer([{:first => 'first', :second => 'second' }, {:first => 'first', :second => 'second' }])
|
348
348
|
expect(et.class).to eq(PArrayType)
|
349
349
|
et = et.element_type
|
350
350
|
expect(et.class).to eq(PHashType)
|
351
|
-
et = et.
|
352
|
-
expect(et.class).to eq(
|
351
|
+
et = et.value_type
|
352
|
+
expect(et.class).to eq(PEnumType)
|
353
353
|
end
|
354
354
|
|
355
355
|
it 'with hash of string values and hash of fixnums translates to PArrayType[PHashType[PScalarType]]' do
|
@@ -357,7 +357,7 @@ describe 'The type calculator' do
|
|
357
357
|
expect(et.class).to eq(PArrayType)
|
358
358
|
et = et.element_type
|
359
359
|
expect(et.class).to eq(PHashType)
|
360
|
-
et = et.
|
360
|
+
et = et.value_type
|
361
361
|
expect(et.class).to eq(PScalarType)
|
362
362
|
end
|
363
363
|
end
|
@@ -374,12 +374,12 @@ describe 'The type calculator' do
|
|
374
374
|
expect(k.runtime_type_name).to eq('Symbol')
|
375
375
|
end
|
376
376
|
|
377
|
-
it 'with string keys translates to PHashType[
|
378
|
-
expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(
|
377
|
+
it 'with string keys translates to PHashType[PEnumType, value]' do
|
378
|
+
expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(PEnumType)
|
379
379
|
end
|
380
380
|
|
381
381
|
it 'with fixnum values translates to PHashType[key, PIntegerType]' do
|
382
|
-
expect(calculator.infer({:first => 1, :second => 2}).
|
382
|
+
expect(calculator.infer({:first => 1, :second => 2}).value_type.class).to eq(PIntegerType)
|
383
383
|
end
|
384
384
|
|
385
385
|
it 'when empty infers a type that answers true to is_the_empty_hash?' do
|
@@ -435,8 +435,8 @@ describe 'The type calculator' do
|
|
435
435
|
expect(t.patterns[0].regexp.match('abc')[1]).to eq('b')
|
436
436
|
end
|
437
437
|
|
438
|
-
it 'constructs a
|
439
|
-
t =
|
438
|
+
it 'constructs a PEnumType with multiple strings' do
|
439
|
+
t = enum_t('a', 'b', 'c', 'abc')
|
440
440
|
expect(t.values).to eq(['a', 'b', 'c', 'abc'].sort)
|
441
441
|
end
|
442
442
|
end
|
@@ -482,7 +482,7 @@ describe 'The type calculator' do
|
|
482
482
|
t1 = string_t('abc')
|
483
483
|
t2 = string_t('xyz')
|
484
484
|
common_t = calculator.common_type(t1,t2)
|
485
|
-
expect(common_t.class).to eq(
|
485
|
+
expect(common_t.class).to eq(PEnumType)
|
486
486
|
expect(common_t.values).to eq(['abc', 'xyz'])
|
487
487
|
end
|
488
488
|
|
@@ -503,11 +503,11 @@ describe 'The type calculator' do
|
|
503
503
|
end
|
504
504
|
|
505
505
|
it 'computes values to be empty if the one has empty values' do
|
506
|
-
t1 =
|
506
|
+
t1 = string_t('apa')
|
507
507
|
t2 = constrained_string_t(range_t(2,4))
|
508
508
|
common_t = calculator.common_type(t1,t2)
|
509
509
|
expect(common_t.class).to eq(PStringType)
|
510
|
-
expect(common_t.
|
510
|
+
expect(common_t.value).to be_nil
|
511
511
|
end
|
512
512
|
end
|
513
513
|
|
@@ -1154,7 +1154,7 @@ describe 'The type calculator' do
|
|
1154
1154
|
|
1155
1155
|
it 'should accept multiple strings if they all match any patterns' do
|
1156
1156
|
p_t = pattern_t('X', 'Y', 'abc')
|
1157
|
-
p_s =
|
1157
|
+
p_s = enum_t('Xa', 'aY', 'abc')
|
1158
1158
|
expect(calculator.assignable?(p_t, p_s)).to eq(true)
|
1159
1159
|
end
|
1160
1160
|
|
@@ -1166,7 +1166,7 @@ describe 'The type calculator' do
|
|
1166
1166
|
|
1167
1167
|
it 'should reject multiple strings if not all match any patterns' do
|
1168
1168
|
p_t = pattern_t('abc', 'ab', 'c', 'q')
|
1169
|
-
p_s =
|
1169
|
+
p_s = enum_t('X', 'Y', 'Z')
|
1170
1170
|
expect(calculator.assignable?(p_t, p_s)).to eq(false)
|
1171
1171
|
end
|
1172
1172
|
|
@@ -1661,9 +1661,8 @@ describe 'The type calculator' do
|
|
1661
1661
|
end
|
1662
1662
|
|
1663
1663
|
it 'should consider string values' do
|
1664
|
-
string = string_t('a'
|
1664
|
+
string = string_t('a')
|
1665
1665
|
expect(calculator.instance?(string, 'a')).to eq(true)
|
1666
|
-
expect(calculator.instance?(string, 'b')).to eq(true)
|
1667
1666
|
expect(calculator.instance?(string, 'c')).to eq(false)
|
1668
1667
|
end
|
1669
1668
|
|
@@ -1936,7 +1935,7 @@ describe 'The type calculator' do
|
|
1936
1935
|
t = calculator.type(Hash)
|
1937
1936
|
expect(t.class).to eq(PHashType)
|
1938
1937
|
expect(t.key_type.class).to eq(PScalarType)
|
1939
|
-
expect(t.
|
1938
|
+
expect(t.value_type.class).to eq(PDataType)
|
1940
1939
|
end
|
1941
1940
|
end
|
1942
1941
|
|
@@ -2066,25 +2065,25 @@ describe 'The type calculator' do
|
|
2066
2065
|
end
|
2067
2066
|
|
2068
2067
|
it 'a generic inference is produced using infer_generic' do
|
2069
|
-
expect(calculator.infer_generic(['a','b']).element_type
|
2068
|
+
expect(calculator.infer_generic(['a','b']).element_type).to eql(string_t(range_t(1,1)))
|
2070
2069
|
end
|
2071
2070
|
|
2072
2071
|
it 'a generic result is created by generalize given an instance specific result for an Array' do
|
2073
2072
|
generic = calculator.infer(['a','b'])
|
2074
|
-
expect(generic.element_type.values).to eq(['a',
|
2073
|
+
expect(generic.element_type.values).to eq(['a','b'])
|
2075
2074
|
generic = generic.generalize
|
2076
|
-
expect(generic.element_type
|
2075
|
+
expect(generic.element_type).to eql(string_t(range_t(1,1)))
|
2077
2076
|
end
|
2078
2077
|
|
2079
2078
|
it 'a generic result is created by generalize given an instance specific result for a Hash' do
|
2080
|
-
generic = calculator.infer({'a' =>1,'
|
2081
|
-
expect(generic.key_type.values.sort).to eq(['a', '
|
2082
|
-
expect(generic.
|
2083
|
-
expect(generic.
|
2079
|
+
generic = calculator.infer({'a' =>1,'bcd' => 2})
|
2080
|
+
expect(generic.key_type.values.sort).to eq(['a', 'bcd'])
|
2081
|
+
expect(generic.value_type.from).to eq(1)
|
2082
|
+
expect(generic.value_type.to).to eq(2)
|
2084
2083
|
generic = generic.generalize
|
2085
|
-
expect(generic.key_type.
|
2086
|
-
expect(generic.
|
2087
|
-
expect(generic.
|
2084
|
+
expect(generic.key_type.size_type).to eq(range_t(1,3))
|
2085
|
+
expect(generic.value_type.from).to eq(nil)
|
2086
|
+
expect(generic.value_type.to).to eq(nil)
|
2088
2087
|
end
|
2089
2088
|
|
2090
2089
|
it 'ensures that Struct key types are not generalized' do
|