puppet 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +51 -10
- data/Gemfile +27 -14
- data/LICENSE +3 -3
- data/MAINTAINERS +66 -0
- data/README.md +9 -11
- data/Rakefile +36 -0
- data/conf/auth.conf +23 -2
- data/conf/fileserver.conf +7 -12
- data/conf/hiera.yaml +11 -0
- data/conf/puppet.conf +1 -1
- data/ext/README.environment +1 -1
- data/ext/build_defaults.yaml +10 -37
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +3 -5
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppet-common.install +0 -1
- data/ext/debian/puppet-common.manpages +0 -2
- data/ext/debian/puppet.default +0 -5
- data/ext/debian/puppet.init +1 -16
- data/ext/debian/puppet.logrotate +14 -5
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/envpuppet +2 -2
- data/ext/hiera/hiera.yaml +15 -0
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/logcheck/puppet +1 -1
- data/ext/osx/puppet.plist +30 -0
- data/ext/project_data.yaml +29 -16
- data/ext/puppet-test +3 -27
- data/ext/rack/config.ru +2 -2
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/client.init +67 -17
- data/ext/redhat/client.sysconfig +1 -10
- data/ext/redhat/logrotate +15 -3
- data/ext/redhat/puppet.spec.erb +6 -14
- data/ext/redhat/server.init +1 -1
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet +44 -0
- data/ext/solaris/smf/puppet.xml +44 -0
- data/ext/suse/client.init +30 -33
- data/ext/suse/puppet.spec +2 -2
- data/ext/suse/server.init +2 -2
- data/ext/systemd/puppet.service +13 -1
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/windows/service/daemon.rb +10 -15
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +99 -66
- data/lib/hiera/puppet_function.rb +28 -18
- data/lib/hiera/scope.rb +12 -14
- data/lib/hiera_puppet.rb +6 -14
- data/lib/puppet/agent/disabler.rb +3 -3
- data/lib/puppet/agent/locker.rb +12 -3
- data/lib/puppet/agent.rb +35 -39
- data/lib/puppet/application/agent.rb +53 -25
- data/lib/puppet/application/apply.rb +83 -28
- data/lib/puppet/application/ca.rb +1 -0
- data/lib/puppet/application/cert.rb +54 -5
- data/lib/puppet/application/describe.rb +2 -2
- data/lib/puppet/application/device.rb +80 -50
- data/lib/puppet/application/doc.rb +9 -9
- data/lib/puppet/application/face_base.rb +11 -12
- data/lib/puppet/application/filebucket.rb +84 -10
- data/lib/puppet/application/generate.rb +5 -0
- data/lib/puppet/application/lookup.rb +357 -0
- data/lib/puppet/application/master.rb +33 -26
- data/lib/puppet/application/resource.rb +22 -23
- data/lib/puppet/application.rb +31 -15
- data/lib/puppet/application_support.rb +1 -1
- data/lib/puppet/compilable_resource_type.rb +15 -0
- data/lib/puppet/configurer/downloader.rb +2 -2
- data/lib/puppet/configurer/fact_handler.rb +13 -4
- data/lib/puppet/configurer/plugin_handler.rb +7 -5
- data/lib/puppet/configurer.rb +198 -55
- data/lib/puppet/context/trusted_information.rb +22 -2
- data/lib/puppet/context.rb +20 -5
- data/lib/puppet/daemon.rb +17 -13
- data/lib/puppet/data_binding.rb +4 -2
- data/lib/puppet/defaults.rb +309 -123
- data/lib/puppet/environments.rb +105 -10
- data/lib/puppet/error.rb +32 -2
- data/lib/puppet/etc.rb +161 -0
- data/lib/puppet/external/dot.rb +1 -1
- data/lib/puppet/external/pson/common.rb +4 -0
- data/lib/puppet/face/ca.rb +56 -44
- data/lib/puppet/face/catalog/select.rb +4 -4
- data/lib/puppet/face/catalog.rb +3 -3
- data/lib/puppet/face/certificate.rb +28 -22
- data/lib/puppet/face/certificate_request.rb +3 -1
- data/lib/puppet/face/certificate_revocation_list.rb +3 -1
- data/lib/puppet/face/config.rb +12 -12
- data/lib/puppet/face/epp.rb +96 -50
- data/lib/puppet/face/facts.rb +5 -5
- data/lib/puppet/face/generate.rb +64 -0
- data/lib/puppet/face/help/face.erb +3 -0
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/help.rb +37 -29
- data/lib/puppet/face/key.rb +4 -3
- data/lib/puppet/face/man.rb +12 -10
- data/lib/puppet/face/module/build.rb +7 -7
- data/lib/puppet/face/module/changes.rb +8 -7
- data/lib/puppet/face/module/generate.rb +25 -25
- data/lib/puppet/face/module/install.rb +19 -15
- data/lib/puppet/face/module/list.rb +16 -12
- data/lib/puppet/face/module/search.rb +4 -4
- data/lib/puppet/face/module/uninstall.rb +13 -10
- data/lib/puppet/face/module/upgrade.rb +11 -7
- data/lib/puppet/face/module.rb +3 -3
- data/lib/puppet/face/node/clean.rb +8 -8
- data/lib/puppet/face/node.rb +6 -6
- data/lib/puppet/face/parser.rb +28 -25
- data/lib/puppet/face/plugin.rb +14 -21
- data/lib/puppet/face/report.rb +10 -10
- data/lib/puppet/face/resource.rb +13 -13
- data/lib/puppet/face/status.rb +9 -6
- data/lib/puppet/feature/base.rb +13 -5
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/eventlog.rb +1 -1
- data/lib/puppet/feature/hiera_eyaml.rb +3 -0
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_bucket/dipper.rb +62 -6
- data/lib/puppet/file_bucket/file.rb +4 -17
- data/lib/puppet/file_serving/base.rb +3 -3
- data/lib/puppet/file_serving/configuration/parser.rb +12 -12
- data/lib/puppet/file_serving/configuration.rb +3 -3
- data/lib/puppet/file_serving/content.rb +1 -1
- data/lib/puppet/file_serving/fileset.rb +7 -5
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +33 -12
- data/lib/puppet/file_serving/mount/file.rb +6 -6
- data/lib/puppet/file_serving/mount/modules.rb +1 -1
- data/lib/puppet/file_serving/mount.rb +1 -1
- data/lib/puppet/file_serving/terminus_helper.rb +7 -8
- data/lib/puppet/file_serving/terminus_selector.rb +3 -1
- data/lib/puppet/file_system/file_impl.rb +13 -4
- data/lib/puppet/file_system/memory_impl.rb +10 -2
- data/lib/puppet/file_system/path_pattern.rb +7 -6
- data/lib/puppet/file_system/uniquefile.rb +5 -5
- data/lib/puppet/file_system/windows.rb +39 -16
- data/lib/puppet/file_system.rb +46 -5
- data/lib/puppet/forge/cache.rb +1 -0
- data/lib/puppet/forge/errors.rb +12 -12
- data/lib/puppet/forge/repository.rb +5 -36
- data/lib/puppet/forge.rb +17 -15
- data/lib/puppet/functions/alert.rb +14 -0
- data/lib/puppet/functions/annotate.rb +108 -0
- data/lib/puppet/functions/assert_type.rb +53 -19
- data/lib/puppet/functions/binary_file.rb +19 -0
- data/lib/puppet/functions/break.rb +22 -0
- data/lib/puppet/functions/call.rb +42 -0
- data/lib/puppet/functions/contain.rb +33 -0
- data/lib/puppet/functions/crit.rb +14 -0
- data/lib/puppet/functions/debug.rb +14 -0
- data/lib/puppet/functions/defined.rb +160 -0
- data/lib/puppet/functions/dig.rb +23 -0
- data/lib/puppet/functions/each.rb +89 -39
- data/lib/puppet/functions/emerg.rb +14 -0
- data/lib/puppet/functions/epp.rb +29 -37
- data/lib/puppet/functions/err.rb +14 -0
- data/lib/puppet/functions/eyaml_lookup_key.rb +94 -0
- data/lib/puppet/functions/filter.rb +64 -38
- data/lib/puppet/functions/find_file.rb +31 -0
- data/lib/puppet/functions/hiera.rb +83 -3
- data/lib/puppet/functions/hiera_array.rb +73 -4
- data/lib/puppet/functions/hiera_hash.rb +82 -2
- data/lib/puppet/functions/hiera_include.rb +93 -6
- data/lib/puppet/functions/hocon_data.rb +41 -0
- data/lib/puppet/functions/include.rb +21 -0
- data/lib/puppet/functions/info.rb +14 -0
- data/lib/puppet/functions/inline_epp.rb +44 -71
- data/lib/puppet/functions/json_data.rb +33 -0
- data/lib/puppet/functions/lest.rb +17 -0
- data/lib/puppet/functions/lookup.rb +172 -184
- data/lib/puppet/functions/map.rb +60 -33
- data/lib/puppet/functions/match.rb +32 -14
- data/lib/puppet/functions/new.rb +31 -0
- data/lib/puppet/functions/next.rb +23 -0
- data/lib/puppet/functions/notice.rb +14 -0
- data/lib/puppet/functions/reduce.rb +112 -71
- data/lib/puppet/functions/regsubst.rb +23 -26
- data/lib/puppet/functions/require.rb +37 -0
- data/lib/puppet/functions/return.rb +22 -0
- data/lib/puppet/functions/reverse_each.rb +25 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +25 -39
- data/lib/puppet/functions/split.rb +3 -3
- data/lib/puppet/functions/step.rb +26 -0
- data/lib/puppet/functions/strftime.rb +43 -0
- data/lib/puppet/functions/then.rb +14 -0
- data/lib/puppet/functions/type.rb +31 -0
- data/lib/puppet/functions/unique.rb +132 -0
- data/lib/puppet/functions/unwrap.rb +40 -0
- data/lib/puppet/functions/versioncmp.rb +36 -0
- data/lib/puppet/functions/warning.rb +14 -0
- data/lib/puppet/functions/with.rb +15 -7
- data/lib/puppet/functions/yaml_data.rb +42 -0
- data/lib/puppet/functions.rb +226 -76
- data/lib/puppet/generate/models/type/property.rb +70 -0
- data/lib/puppet/generate/models/type/type.rb +62 -0
- data/lib/puppet/generate/templates/type/pcore.erb +42 -0
- data/lib/puppet/generate/type.rb +239 -0
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/graph/relationship_graph.rb +4 -1
- data/lib/puppet/graph/simple_graph.rb +51 -74
- data/lib/puppet/indirector/catalog/compiler.rb +242 -38
- data/lib/puppet/indirector/catalog/json.rb +18 -0
- data/lib/puppet/indirector/certificate/disabled_ca.rb +1 -1
- data/lib/puppet/indirector/certificate_request/ca.rb +3 -3
- data/lib/puppet/indirector/certificate_request/disabled_ca.rb +1 -1
- data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +1 -1
- data/lib/puppet/indirector/certificate_status/file.rb +6 -6
- data/lib/puppet/indirector/data_binding/none.rb +4 -1
- data/lib/puppet/indirector/exec.rb +2 -2
- data/lib/puppet/indirector/face.rb +24 -19
- data/lib/puppet/indirector/facts/facter.rb +9 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +142 -29
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/file_server.rb +10 -2
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/hiera.rb +12 -4
- data/lib/puppet/indirector/indirection.rb +25 -18
- data/lib/puppet/indirector/json.rb +11 -12
- data/lib/puppet/indirector/key/ca.rb +2 -2
- data/lib/puppet/indirector/key/disabled_ca.rb +1 -1
- data/lib/puppet/indirector/key/file.rb +4 -3
- data/lib/puppet/indirector/ldap.rb +6 -5
- data/lib/puppet/indirector/memory.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +9 -8
- data/lib/puppet/indirector/node/exec.rb +9 -7
- data/lib/puppet/indirector/node/ldap.rb +10 -8
- data/lib/puppet/indirector/node/plain.rb +2 -1
- data/lib/puppet/indirector/node/write_only_yaml.rb +6 -1
- data/lib/puppet/indirector/node/yaml.rb +0 -9
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/report/rest.rb +13 -0
- data/lib/puppet/indirector/request.rb +40 -23
- data/lib/puppet/indirector/resource/ral.rb +1 -1
- data/lib/puppet/indirector/resource/validator.rb +1 -1
- data/lib/puppet/indirector/rest.rb +103 -10
- data/lib/puppet/indirector/ssl_file.rb +33 -12
- data/lib/puppet/indirector/terminus.rb +7 -7
- data/lib/puppet/indirector/yaml.rb +5 -5
- data/lib/puppet/indirector.rb +2 -2
- data/lib/puppet/info_service/class_information_service.rb +110 -0
- data/lib/puppet/info_service.rb +7 -0
- data/lib/puppet/interface/documentation.rb +1 -1
- data/lib/puppet/interface/face_collection.rb +7 -2
- data/lib/puppet/interface.rb +12 -4
- data/lib/puppet/loaders.rb +6 -0
- data/lib/puppet/metatype/manager.rb +25 -8
- data/lib/puppet/module.rb +73 -34
- data/lib/puppet/module_tool/applications/application.rb +8 -9
- data/lib/puppet/module_tool/applications/builder.rb +9 -9
- data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
- data/lib/puppet/module_tool/applications/installer.rb +21 -20
- data/lib/puppet/module_tool/applications/searcher.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +2 -1
- data/lib/puppet/module_tool/applications/unpacker.rb +4 -4
- data/lib/puppet/module_tool/applications/upgrader.rb +19 -18
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/contents_description.rb +1 -1
- data/lib/puppet/module_tool/dependency.rb +0 -1
- data/lib/puppet/module_tool/errors/installer.rb +23 -23
- data/lib/puppet/module_tool/errors/shared.rb +44 -42
- data/lib/puppet/module_tool/errors/uninstaller.rb +13 -9
- data/lib/puppet/module_tool/errors/upgrader.rb +11 -11
- data/lib/puppet/module_tool/install_directory.rb +1 -1
- data/lib/puppet/module_tool/installed_modules.rb +10 -10
- data/lib/puppet/module_tool/local_tarball.rb +7 -7
- data/lib/puppet/module_tool/metadata.rb +47 -21
- data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +14 -3
- data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +48 -38
- data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +19 -4
- data/lib/puppet/module_tool/skeleton/templates/generator/{tests → examples}/init.pp.erb +3 -3
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/module_tool/tar.rb +5 -4
- data/lib/puppet/module_tool.rb +11 -7
- data/lib/puppet/network/auth_config_parser.rb +13 -12
- data/lib/puppet/network/authconfig.rb +23 -3
- data/lib/puppet/network/authorization.rb +8 -1
- data/lib/puppet/network/authstore.rb +2 -2
- data/lib/puppet/network/format.rb +7 -7
- data/lib/puppet/network/format_handler.rb +12 -9
- data/lib/puppet/network/format_support.rb +11 -5
- data/lib/puppet/network/formats.rb +38 -27
- data/lib/puppet/network/http/api/indirected_routes.rb +86 -58
- data/lib/puppet/network/http/api/master/v3/environment.rb +82 -0
- data/lib/puppet/network/http/api/master/v3.rb +7 -1
- data/lib/puppet/network/http/compression.rb +12 -8
- data/lib/puppet/network/http/connection.rb +21 -15
- data/lib/puppet/network/http/error.rb +14 -10
- data/lib/puppet/network/http/factory.rb +8 -4
- data/lib/puppet/network/http/handler.rb +11 -6
- data/lib/puppet/network/http/issues.rb +1 -0
- data/lib/puppet/network/http/pool.rb +10 -1
- data/lib/puppet/network/http/rack/rest.rb +27 -3
- data/lib/puppet/network/http/rack.rb +2 -2
- data/lib/puppet/network/http/request.rb +34 -20
- data/lib/puppet/network/http/response.rb +13 -1
- data/lib/puppet/network/http/webrick/rest.rb +2 -2
- data/lib/puppet/network/http/webrick.rb +7 -6
- data/lib/puppet/network/rights.rb +7 -17
- data/lib/puppet/network/server.rb +2 -2
- data/lib/puppet/node/environment.rb +73 -17
- data/lib/puppet/node/facts.rb +1 -6
- data/lib/puppet/node.rb +61 -18
- data/lib/puppet/parameter/boolean.rb +1 -1
- data/lib/puppet/parameter/package_options.rb +1 -1
- data/lib/puppet/parameter/path.rb +3 -3
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parameter/value_collection.rb +4 -4
- data/lib/puppet/parameter.rb +24 -29
- data/lib/puppet/parser/ast/node.rb +1 -1
- data/lib/puppet/parser/ast/pops_bridge.rb +103 -29
- data/lib/puppet/parser/ast/resource.rb +5 -0
- data/lib/puppet/parser/ast/resource_instance.rb +5 -1
- data/lib/puppet/parser/ast/resourceparam.rb +5 -0
- data/lib/puppet/parser/ast.rb +5 -0
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +57 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
- data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
- data/lib/puppet/parser/compiler.rb +351 -128
- data/lib/puppet/parser/e4_parser_adapter.rb +14 -14
- data/lib/puppet/parser/environment_compiler.rb +199 -0
- data/lib/puppet/parser/functions/assert_type.rb +47 -17
- data/lib/puppet/parser/functions/binary_file.rb +24 -0
- data/lib/puppet/parser/functions/break.rb +39 -0
- data/lib/puppet/parser/functions/contain.rb +7 -15
- data/lib/puppet/parser/functions/create_resources.rb +49 -25
- data/lib/puppet/parser/functions/defined.rb +106 -69
- data/lib/puppet/parser/functions/dig.rb +29 -0
- data/lib/puppet/parser/functions/each.rb +86 -28
- data/lib/puppet/parser/functions/epp.rb +30 -38
- data/lib/puppet/parser/functions/file.rb +4 -2
- data/lib/puppet/parser/functions/filter.rb +60 -24
- data/lib/puppet/parser/functions/find_file.rb +28 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
- data/lib/puppet/parser/functions/generate.rb +5 -4
- data/lib/puppet/parser/functions/hiera.rb +98 -28
- data/lib/puppet/parser/functions/hiera_array.rb +86 -29
- data/lib/puppet/parser/functions/hiera_hash.rb +96 -31
- data/lib/puppet/parser/functions/hiera_include.rb +96 -41
- data/lib/puppet/parser/functions/include.rb +5 -8
- data/lib/puppet/parser/functions/inline_epp.rb +36 -61
- data/lib/puppet/parser/functions/inline_template.rb +3 -3
- data/lib/puppet/parser/functions/lest.rb +49 -0
- data/lib/puppet/parser/functions/lookup.rb +129 -151
- data/lib/puppet/parser/functions/map.rb +56 -21
- data/lib/puppet/parser/functions/match.rb +29 -13
- data/lib/puppet/parser/functions/new.rb +939 -0
- data/lib/puppet/parser/functions/next.rb +38 -0
- data/lib/puppet/parser/functions/reduce.rb +98 -61
- data/lib/puppet/parser/functions/regsubst.rb +4 -2
- data/lib/puppet/parser/functions/require.rb +4 -27
- data/lib/puppet/parser/functions/return.rb +71 -0
- data/lib/puppet/parser/functions/reverse_each.rb +83 -0
- data/lib/puppet/parser/functions/scanf.rb +25 -31
- data/lib/puppet/parser/functions/slice.rb +18 -25
- data/lib/puppet/parser/functions/split.rb +2 -2
- data/lib/puppet/parser/functions/step.rb +84 -0
- data/lib/puppet/parser/functions/strftime.rb +185 -0
- data/lib/puppet/parser/functions/then.rb +73 -0
- data/lib/puppet/parser/functions/type.rb +53 -0
- data/lib/puppet/parser/functions/with.rb +17 -9
- data/lib/puppet/parser/functions.rb +39 -21
- data/lib/puppet/parser/parser_factory.rb +0 -30
- data/lib/puppet/parser/relationship.rb +49 -20
- data/lib/puppet/parser/resource/param.rb +0 -3
- data/lib/puppet/parser/resource.rb +165 -50
- data/lib/puppet/parser/scope.rb +419 -200
- data/lib/puppet/parser/templatewrapper.rb +4 -3
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/parser.rb +3 -1
- data/lib/puppet/plugins/configuration.rb +15 -58
- data/lib/puppet/plugins/syntax_checkers.rb +6 -11
- data/lib/puppet/pops/adaptable.rb +12 -7
- data/lib/puppet/pops/adapters.rb +102 -73
- data/lib/puppet/pops/evaluator/access_operator.rb +248 -158
- data/lib/puppet/pops/evaluator/callable_signature.rb +7 -0
- data/lib/puppet/pops/evaluator/closure.rb +251 -109
- data/lib/puppet/pops/evaluator/collector_transformer.rb +51 -37
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +6 -2
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +8 -5
- data/lib/puppet/pops/evaluator/compare_operator.rb +113 -13
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +17 -11
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +281 -151
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -9
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -1
- data/lib/puppet/pops/evaluator/relationship_operator.rb +44 -20
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +74 -49
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +117 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +142 -91
- data/lib/puppet/pops/functions/dispatch.rb +34 -14
- data/lib/puppet/pops/functions/dispatcher.rb +17 -16
- data/lib/puppet/pops/functions/function.rb +30 -4
- data/lib/puppet/pops/issue_reporter.rb +49 -21
- data/lib/puppet/pops/issues.rb +404 -102
- data/lib/puppet/pops/label_provider.rb +18 -4
- data/lib/puppet/pops/loader/base_loader.rb +74 -20
- data/lib/puppet/pops/loader/dependency_loader.rb +27 -2
- data/lib/puppet/pops/loader/gem_support.rb +2 -2
- data/lib/puppet/pops/loader/loader.rb +57 -48
- data/lib/puppet/pops/loader/loader_paths.rb +113 -6
- data/lib/puppet/pops/loader/module_loaders.rb +128 -35
- data/lib/puppet/pops/loader/null_loader.rb +17 -1
- data/lib/puppet/pops/loader/predefined_loader.rb +24 -0
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +19 -7
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +96 -0
- data/lib/puppet/pops/loader/static_loader.rb +111 -41
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +93 -0
- data/lib/puppet/pops/loader/typed_name.rb +54 -0
- data/lib/puppet/pops/loaders.rb +213 -31
- data/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
- data/lib/puppet/pops/lookup/context.rb +200 -0
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
- data/lib/puppet/pops/lookup/data_provider.rb +92 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
- data/lib/puppet/pops/lookup/explainer.rb +594 -0
- data/lib/puppet/pops/lookup/function_provider.rb +110 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +761 -0
- data/lib/puppet/pops/lookup/interpolation.rb +154 -0
- data/lib/puppet/pops/lookup/invocation.rb +261 -0
- data/lib/puppet/pops/lookup/location_resolver.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +471 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
- data/lib/puppet/pops/lookup.rb +49 -49
- data/lib/puppet/pops/merge_strategy.rb +197 -46
- data/lib/puppet/pops/migration/migration_checker.rb +58 -0
- data/lib/puppet/pops/model/ast.pp +692 -0
- data/lib/puppet/pops/model/ast.rb +4833 -0
- data/lib/puppet/pops/model/ast_transformer.rb +15 -9
- data/lib/puppet/pops/model/factory.rb +550 -527
- data/lib/puppet/pops/model/model_label_provider.rb +33 -8
- data/lib/puppet/pops/model/model_tree_dumper.rb +52 -7
- data/lib/puppet/pops/parser/code_merger.rb +13 -1
- data/lib/puppet/pops/parser/egrammar.ra +190 -67
- data/lib/puppet/pops/parser/eparser.rb +1823 -1338
- data/lib/puppet/pops/parser/epp_support.rb +27 -12
- data/lib/puppet/pops/parser/evaluating_parser.rb +31 -17
- data/lib/puppet/pops/parser/heredoc_support.rb +20 -16
- data/lib/puppet/pops/parser/interpolation_support.rb +18 -5
- data/lib/puppet/pops/parser/lexer2.rb +460 -383
- data/lib/puppet/pops/parser/lexer_support.rb +132 -25
- data/lib/puppet/pops/parser/locator.rb +86 -9
- data/lib/puppet/pops/parser/parser_support.rb +59 -54
- data/lib/puppet/pops/parser/slurp_support.rb +37 -12
- data/lib/puppet/pops/patterns.rb +16 -1
- data/lib/puppet/pops/pcore.rb +103 -0
- data/lib/puppet/pops/puppet_stack.rb +43 -0
- data/lib/puppet/pops/resource/param.rb +55 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +314 -0
- data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
- data/lib/puppet/pops/semantic_error.rb +12 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +176 -0
- data/lib/puppet/pops/serialization/abstract_writer.rb +215 -0
- data/lib/puppet/pops/serialization/deserializer.rb +80 -0
- data/lib/puppet/pops/serialization/extension.rb +157 -0
- data/lib/puppet/pops/serialization/from_data_converter.rb +181 -0
- data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
- data/lib/puppet/pops/serialization/json.rb +297 -0
- data/lib/puppet/pops/serialization/json_path.rb +126 -0
- data/lib/puppet/pops/serialization/object.rb +71 -0
- data/lib/puppet/pops/serialization/serializer.rb +139 -0
- data/lib/puppet/pops/serialization/time_factory.rb +67 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +292 -0
- data/lib/puppet/pops/serialization.rb +41 -0
- data/lib/puppet/pops/time/timespan.rb +718 -0
- data/lib/puppet/pops/time/timestamp.rb +148 -0
- data/lib/puppet/pops/types/annotatable.rb +36 -0
- data/lib/puppet/pops/types/annotation.rb +71 -0
- data/lib/puppet/pops/types/class_loader.rb +29 -29
- data/lib/puppet/pops/types/enumeration.rb +9 -27
- data/lib/puppet/pops/types/implementation_registry.rb +141 -0
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/p_binary_type.rb +226 -0
- data/lib/puppet/pops/types/p_meta_type.rb +87 -0
- data/lib/puppet/pops/types/p_object_type.rb +925 -0
- data/lib/puppet/pops/types/p_runtime_type.rb +115 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +141 -0
- data/lib/puppet/pops/types/p_sensitive_type.rb +73 -0
- data/lib/puppet/pops/types/p_timespan_type.rb +192 -0
- data/lib/puppet/pops/types/p_timestamp_type.rb +69 -0
- data/lib/puppet/pops/types/p_type_set_type.rb +360 -0
- data/lib/puppet/pops/types/puppet_object.rb +26 -0
- data/lib/puppet/pops/types/recursion_guard.rb +136 -0
- data/lib/puppet/pops/types/ruby_generator.rb +439 -0
- data/lib/puppet/pops/types/ruby_method.rb +31 -0
- data/lib/puppet/pops/types/string_converter.rb +1099 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +21 -19
- data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
- data/lib/puppet/pops/types/type_calculator.rb +252 -1232
- data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
- data/lib/puppet/pops/types/type_factory.rb +300 -166
- data/lib/puppet/pops/types/type_formatter.rb +734 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1106 -0
- data/lib/puppet/pops/types/type_parser.rb +382 -275
- data/lib/puppet/pops/types/type_set_reference.rb +59 -0
- data/lib/puppet/pops/types/types.rb +3287 -289
- data/lib/puppet/pops/utils.rb +7 -30
- data/lib/puppet/pops/validation/checker4_0.rb +353 -125
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +13 -5
- data/lib/puppet/pops/validation.rb +50 -18
- data/lib/puppet/pops/visitor.rb +30 -6
- data/lib/puppet/pops.rb +46 -57
- data/lib/puppet/property/ensure.rb +4 -4
- data/lib/puppet/property/list.rb +1 -10
- data/lib/puppet/property.rb +84 -21
- data/lib/puppet/provider/aixobject.rb +11 -11
- data/lib/puppet/provider/augeas/augeas.rb +89 -34
- data/lib/puppet/provider/command.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +3 -3
- data/lib/puppet/provider/exec/posix.rb +4 -4
- data/lib/puppet/provider/exec/windows.rb +4 -4
- data/lib/puppet/provider/exec.rb +14 -7
- data/lib/puppet/provider/file/posix.rb +5 -5
- data/lib/puppet/provider/file/windows.rb +4 -4
- data/lib/puppet/provider/group/aix.rb +6 -6
- data/lib/puppet/provider/group/directoryservice.rb +10 -0
- data/lib/puppet/provider/group/groupadd.rb +2 -2
- data/lib/puppet/provider/group/pw.rb +2 -1
- data/lib/puppet/provider/group/windows_adsi.rb +23 -7
- data/lib/puppet/provider/host/parsed.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +20 -19
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/maillist/mailman.rb +2 -2
- data/lib/puppet/provider/mcx/mcxcontent.rb +6 -5
- data/lib/puppet/provider/mount/parsed.rb +162 -3
- data/lib/puppet/provider/mount.rb +2 -1
- data/lib/puppet/provider/naginator.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +65 -72
- data/lib/puppet/provider/nameservice.rb +40 -17
- data/lib/puppet/provider/network_device.rb +2 -1
- data/lib/puppet/provider/package/aix.rb +5 -5
- data/lib/puppet/provider/package/appdmg.rb +7 -6
- data/lib/puppet/provider/package/apple.rb +2 -2
- data/lib/puppet/provider/package/apt.rb +5 -5
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/aptrpm.rb +2 -2
- data/lib/puppet/provider/package/blastwave.rb +4 -4
- data/lib/puppet/provider/package/dnf.rb +46 -0
- data/lib/puppet/provider/package/dpkg.rb +3 -3
- data/lib/puppet/provider/package/fink.rb +3 -3
- data/lib/puppet/provider/package/freebsd.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +35 -9
- data/lib/puppet/provider/package/hpux.rb +1 -1
- data/lib/puppet/provider/package/nim.rb +17 -14
- data/lib/puppet/provider/package/openbsd.rb +11 -11
- data/lib/puppet/provider/package/opkg.rb +1 -1
- data/lib/puppet/provider/package/pacman.rb +20 -19
- data/lib/puppet/provider/package/pip.rb +83 -22
- data/lib/puppet/provider/package/pip3.rb +20 -0
- data/lib/puppet/provider/package/pkg.rb +21 -17
- data/lib/puppet/provider/package/pkgdmg.rb +12 -9
- data/lib/puppet/provider/package/pkgin.rb +6 -6
- data/lib/puppet/provider/package/pkgng.rb +143 -0
- data/lib/puppet/provider/package/pkgutil.rb +7 -7
- data/lib/puppet/provider/package/portage.rb +183 -35
- data/lib/puppet/provider/package/ports.rb +3 -6
- data/lib/puppet/provider/package/portupgrade.rb +4 -4
- data/lib/puppet/provider/package/puppet_gem.rb +0 -0
- data/lib/puppet/provider/package/rpm.rb +130 -21
- data/lib/puppet/provider/package/rug.rb +1 -1
- data/lib/puppet/provider/package/sun.rb +4 -3
- data/lib/puppet/provider/package/tdnf.rb +28 -0
- data/lib/puppet/provider/package/up2date.rb +1 -1
- data/lib/puppet/provider/package/urpmi.rb +1 -1
- data/lib/puppet/provider/package/windows/exe_package.rb +10 -9
- data/lib/puppet/provider/package/windows/msi_package.rb +4 -4
- data/lib/puppet/provider/package/windows/package.rb +12 -4
- data/lib/puppet/provider/package/windows.rb +5 -5
- data/lib/puppet/provider/package/yum.rb +73 -94
- data/lib/puppet/provider/package/zypper.rb +70 -16
- data/lib/puppet/provider/package.rb +6 -2
- data/lib/puppet/provider/parsedfile.rb +3 -3
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +39 -7
- data/lib/puppet/provider/selmodule/semodule.rb +20 -16
- data/lib/puppet/provider/service/base.rb +4 -3
- data/lib/puppet/provider/service/bsd.rb +9 -9
- data/lib/puppet/provider/service/daemontools.rb +5 -5
- data/lib/puppet/provider/service/debian.rb +14 -5
- data/lib/puppet/provider/service/freebsd.rb +1 -1
- data/lib/puppet/provider/service/init.rb +27 -3
- data/lib/puppet/provider/service/launchd.rb +57 -19
- data/lib/puppet/provider/service/rcng.rb +51 -0
- data/lib/puppet/provider/service/redhat.rb +2 -1
- data/lib/puppet/provider/service/runit.rb +4 -4
- data/lib/puppet/provider/service/smf.rb +59 -8
- data/lib/puppet/provider/service/src.rb +66 -39
- data/lib/puppet/provider/service/systemd.rb +141 -22
- data/lib/puppet/provider/service/upstart.rb +1 -3
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
- data/lib/puppet/provider/sshkey/parsed.rb +20 -10
- data/lib/puppet/provider/user/aix.rb +12 -6
- data/lib/puppet/provider/user/directoryservice.rb +43 -66
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/ldap.rb +1 -1
- data/lib/puppet/provider/user/openbsd.rb +1 -0
- data/lib/puppet/provider/user/pw.rb +1 -0
- data/lib/puppet/provider/user/user_role_add.rb +19 -2
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +51 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +12 -9
- data/lib/puppet/provider/zfs/zfs.rb +2 -2
- data/lib/puppet/provider/zone/solaris.rb +6 -3
- data/lib/puppet/provider/zpool/zpool.rb +2 -2
- data/lib/puppet/provider.rb +11 -7
- data/lib/puppet/reference/configuration.rb +13 -5
- data/lib/puppet/reference/indirection.rb +3 -3
- data/lib/puppet/reference/metaparameter.rb +1 -1
- data/lib/puppet/reference/providers.rb +8 -9
- data/lib/puppet/reference/report.rb +9 -12
- data/lib/puppet/reference/type.rb +3 -3
- data/lib/puppet/relationship.rb +7 -9
- data/lib/puppet/reports/http.rb +6 -2
- data/lib/puppet/reports.rb +5 -1
- data/lib/puppet/resource/capability_finder.rb +128 -0
- data/lib/puppet/resource/catalog.rb +163 -51
- data/lib/puppet/resource/status.rb +34 -20
- data/lib/puppet/resource/type.rb +246 -97
- data/lib/puppet/resource/type_collection.rb +97 -17
- data/lib/puppet/resource.rb +242 -199
- data/lib/puppet/settings/array_setting.rb +1 -1
- data/lib/puppet/settings/autosign_setting.rb +1 -1
- data/lib/puppet/settings/base_setting.rb +9 -3
- data/lib/puppet/settings/boolean_setting.rb +1 -1
- data/lib/puppet/settings/config_file.rb +4 -3
- data/lib/puppet/settings/directory_setting.rb +6 -0
- data/lib/puppet/settings/duration_setting.rb +1 -1
- data/lib/puppet/settings/enum_setting.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +28 -8
- data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
- data/lib/puppet/settings/file_setting.rb +22 -11
- data/lib/puppet/settings/ini_file.rb +2 -2
- data/lib/puppet/settings/priority_setting.rb +1 -1
- data/lib/puppet/settings/server_list_setting.rb +20 -0
- data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
- data/lib/puppet/settings/terminus_setting.rb +1 -1
- data/lib/puppet/settings/ttl_setting.rb +2 -2
- data/lib/puppet/settings.rb +118 -46
- data/lib/puppet/ssl/base.rb +16 -3
- data/lib/puppet/ssl/certificate.rb +1 -1
- data/lib/puppet/ssl/certificate_authority/interface.rb +172 -32
- data/lib/puppet/ssl/certificate_authority.rb +67 -31
- data/lib/puppet/ssl/certificate_factory.rb +5 -5
- data/lib/puppet/ssl/certificate_request.rb +19 -19
- data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
- data/lib/puppet/ssl/certificate_revocation_list.rb +3 -3
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/configuration.rb +4 -1
- data/lib/puppet/ssl/host.rb +47 -25
- data/lib/puppet/ssl/inventory.rb +11 -4
- data/lib/puppet/ssl/key.rb +8 -4
- data/lib/puppet/ssl/oids.rb +48 -8
- data/lib/puppet/ssl/validator/default_validator.rb +6 -7
- data/lib/puppet/syntax_checkers/base64.rb +41 -0
- data/lib/puppet/syntax_checkers/json.rb +5 -7
- data/lib/puppet/test/test_helper.rb +21 -11
- data/lib/puppet/transaction/additional_resource_generator.rb +105 -11
- data/lib/puppet/transaction/event.rb +45 -7
- data/lib/puppet/transaction/event_manager.rb +7 -7
- data/lib/puppet/transaction/persistence.rb +84 -0
- data/lib/puppet/transaction/report.rb +113 -37
- data/lib/puppet/transaction/resource_harness.rb +99 -37
- data/lib/puppet/transaction.rb +100 -54
- data/lib/puppet/type/augeas.rb +15 -6
- data/lib/puppet/type/component.rb +11 -0
- data/lib/puppet/type/cron.rb +27 -44
- data/lib/puppet/type/exec.rb +82 -52
- data/lib/puppet/type/file/checksum.rb +1 -0
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +37 -122
- data/lib/puppet/type/file/data_sync.rb +92 -0
- data/lib/puppet/type/file/ensure.rb +22 -19
- data/lib/puppet/type/file/group.rb +3 -3
- data/lib/puppet/type/file/mode.rb +10 -6
- data/lib/puppet/type/file/owner.rb +3 -3
- data/lib/puppet/type/file/selcontext.rb +19 -2
- data/lib/puppet/type/file/source.rb +134 -37
- data/lib/puppet/type/file/target.rb +2 -2
- data/lib/puppet/type/file.rb +160 -61
- data/lib/puppet/type/filebucket.rb +3 -8
- data/lib/puppet/type/group.rb +28 -10
- data/lib/puppet/type/host.rb +7 -7
- data/lib/puppet/type/interface.rb +9 -4
- data/lib/puppet/type/k5login.rb +1 -1
- data/lib/puppet/type/macauthorization.rb +2 -2
- data/lib/puppet/type/mailalias.rb +2 -18
- data/lib/puppet/type/maillist.rb +1 -1
- data/lib/puppet/type/mount.rb +31 -8
- data/lib/puppet/type/notify.rb +3 -1
- data/lib/puppet/type/package.rb +37 -17
- data/lib/puppet/type/resources.rb +7 -7
- data/lib/puppet/type/schedule.rb +14 -14
- data/lib/puppet/type/scheduled_task.rb +18 -5
- data/lib/puppet/type/service.rb +25 -1
- data/lib/puppet/type/ssh_authorized_key.rb +20 -30
- data/lib/puppet/type/sshkey.rb +9 -7
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/tidy.rb +24 -15
- data/lib/puppet/type/user.rb +112 -53
- data/lib/puppet/type/yumrepo.rb +36 -16
- data/lib/puppet/type/zone.rb +13 -13
- data/lib/puppet/type/zpool.rb +3 -3
- data/lib/puppet/type.rb +175 -47
- data/lib/puppet/util/at_fork/noop.rb +18 -0
- data/lib/puppet/util/at_fork/solaris.rb +158 -0
- data/lib/puppet/util/at_fork.rb +35 -0
- data/lib/puppet/util/autoload.rb +18 -13
- data/lib/puppet/util/backups.rb +6 -6
- data/lib/puppet/util/character_encoding.rb +98 -0
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/classgen.rb +5 -5
- data/lib/puppet/util/command_line/puppet_option_parser.rb +3 -3
- data/lib/puppet/util/command_line/trollop.rb +32 -32
- data/lib/puppet/util/command_line.rb +14 -6
- data/lib/puppet/util/diff.rb +1 -1
- data/lib/puppet/util/errors.rb +4 -4
- data/lib/puppet/util/execution.rb +42 -23
- data/lib/puppet/util/feature.rb +5 -5
- data/lib/puppet/util/fileparsing.rb +8 -8
- data/lib/puppet/util/filetype.rb +26 -20
- data/lib/puppet/util/http_proxy.rb +132 -0
- data/lib/puppet/util/inifile.rb +5 -5
- data/lib/puppet/util/instance_loader.rb +2 -2
- data/lib/puppet/util/json_lockfile.rb +4 -4
- data/lib/puppet/util/ldap/connection.rb +2 -2
- data/lib/puppet/util/ldap/manager.rb +2 -2
- data/lib/puppet/util/limits.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +33 -18
- data/lib/puppet/util/log.rb +92 -16
- data/lib/puppet/util/logging.rb +88 -6
- data/lib/puppet/util/metric.rb +9 -6
- data/lib/puppet/util/monkey_patches.rb +41 -65
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +29 -11
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -9
- data/lib/puppet/util/network_device/config.rb +7 -7
- data/lib/puppet/util/network_device/transport/ssh.rb +13 -9
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/plist.rb +153 -0
- data/lib/puppet/util/posix.rb +5 -5
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/profiler/around_profiler.rb +1 -1
- data/lib/puppet/util/profiler/wall_clock.rb +1 -1
- data/lib/puppet/util/profiler.rb +1 -1
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/psych_support.rb +4 -12
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +3 -3
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
- data/lib/puppet/util/rdoc.rb +6 -6
- data/lib/puppet/util/reference.rb +9 -7
- data/lib/puppet/util/resource_template.rb +2 -2
- data/lib/puppet/util/retry_action.rb +2 -2
- data/lib/puppet/util/rubygems.rb +1 -1
- data/lib/puppet/util/run_mode.rb +3 -16
- data/lib/puppet/util/selinux.rb +54 -12
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/splayer.rb +18 -0
- data/lib/puppet/util/storage.rb +5 -5
- data/lib/puppet/util/suidmanager.rb +4 -4
- data/lib/puppet/util/symbolic_file_mode.rb +9 -9
- data/lib/puppet/util/tag_set.rb +1 -4
- data/lib/puppet/util/tagging.rb +9 -3
- data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
- data/lib/puppet/util/windows/access_control_entry.rb +2 -2
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +222 -85
- data/lib/puppet/util/windows/api_types.rb +28 -19
- data/lib/puppet/util/windows/com.rb +7 -7
- data/lib/puppet/util/windows/error.rb +3 -3
- data/lib/puppet/util/windows/eventlog.rb +192 -0
- data/lib/puppet/util/windows/file.rb +115 -22
- data/lib/puppet/util/windows/principal.rb +191 -0
- data/lib/puppet/util/windows/process.rb +90 -13
- data/lib/puppet/util/windows/registry.rb +31 -25
- data/lib/puppet/util/windows/root_certs.rb +6 -6
- data/lib/puppet/util/windows/security.rb +52 -51
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +89 -20
- data/lib/puppet/util/windows/taskscheduler.rb +154 -98
- data/lib/puppet/util/windows/user.rb +38 -20
- data/lib/puppet/util/windows.rb +7 -0
- data/lib/puppet/util/yaml.rb +15 -3
- data/lib/puppet/util.rb +259 -33
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
- data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/vendor/semantic/lib/semantic.rb +4 -6
- 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/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/module_release.rb +17 -5
- 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/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +203 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +758 -0
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +9 -0
- data/lib/puppet/vendor/semantic_puppet/locales/config.yaml +21 -0
- data/lib/puppet/version.rb +7 -3
- data/lib/puppet.rb +104 -6
- data/lib/puppet_x.rb +7 -1
- data/locales/config.yaml +29 -0
- data/locales/puppet.pot +7995 -0
- data/man/man5/puppet.conf.5 +61 -41
- data/man/man8/puppet-agent.8 +6 -3
- data/man/man8/puppet-apply.8 +6 -3
- data/man/man8/puppet-ca.8 +3 -3
- data/man/man8/puppet-catalog.8 +3 -3
- data/man/man8/puppet-cert.8 +3 -3
- data/man/man8/puppet-certificate.8 +3 -3
- data/man/man8/puppet-certificate_request.8 +3 -3
- data/man/man8/puppet-certificate_revocation_list.8 +3 -3
- data/man/man8/puppet-config.8 +4 -4
- data/man/man8/puppet-describe.8 +2 -2
- data/man/man8/puppet-device.8 +7 -4
- data/man/man8/puppet-doc.8 +2 -2
- data/man/man8/puppet-epp.8 +3 -3
- data/man/man8/puppet-facts.8 +3 -3
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-help.8 +3 -3
- data/man/man8/puppet-inspect.8 +3 -3
- data/man/man8/puppet-key.8 +3 -3
- data/man/man8/puppet-man.8 +3 -3
- data/man/man8/puppet-master.8 +6 -3
- data/man/man8/puppet-module.8 +10 -10
- data/man/man8/puppet-node.8 +3 -3
- data/man/man8/puppet-parser.8 +3 -3
- data/man/man8/puppet-plugin.8 +3 -3
- data/man/man8/puppet-report.8 +3 -3
- data/man/man8/puppet-resource.8 +3 -3
- data/man/man8/puppet-status.8 +4 -4
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +22 -0
- data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/environment/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/{sample → hiera_bad_syntax_json}/environment.conf +1 -1
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/third_utf8.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/utf8.yaml +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +22 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +48 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server1.yaml +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server2.yaml +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +20 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/production/lib/puppet/functions/environment/data.rb +3 -1
- data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +2 -1
- data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +2 -1
- data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/functions/data.pp +6 -0
- data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/manifests/init.pp +9 -0
- data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
- 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_fixture/environments/production/modules/abc/metadata.json +9 -0
- data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/data/empty_key.json +1 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/data/empty_key.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/data/empty.yaml +2 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/data/first.json +4 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/hiera.yaml +8 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/manifests/init.pp +3 -0
- data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/metadata.json +9 -0
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +0 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/type/usee_type.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +87 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcalled.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller4.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/callingpuppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/functions/hello.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/manifests/init.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/metadata.json +10 -0
- data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/hello.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/subspace/hello.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +1 -10
- data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +0 -0
- data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +93 -85
- data/spec/fixtures/unit/provider/mount/parsed/aix.mount +11 -7
- data/spec/fixtures/unit/provider/package/pkgng/pkg.info +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.query +1 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +1 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +3 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-obsoletes.txt +195 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-empty.out +3 -0
- data/spec/fixtures/unit/provider/service/smf/svcs.out +4 -3
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/agent/logging_spec.rb +15 -14
- data/spec/integration/application/apply_spec.rb +442 -32
- data/spec/integration/application/doc_spec.rb +0 -0
- data/spec/integration/application/lookup_spec.rb +155 -0
- data/spec/integration/configurer_spec.rb +1 -1
- data/spec/integration/data_binding_spec.rb +195 -0
- data/spec/integration/defaults_spec.rb +29 -4
- data/spec/integration/directory_environments_spec.rb +16 -0
- data/spec/integration/environments/default_manifest_spec.rb +16 -16
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/environments/settings_spec.rb +32 -4
- data/spec/integration/faces/ca_spec.rb +0 -0
- data/spec/integration/faces/config_spec.rb +80 -0
- data/spec/integration/faces/documentation_spec.rb +2 -2
- data/spec/integration/faces/plugin_spec.rb +0 -4
- data/spec/integration/file_bucket/file_spec.rb +2 -2
- data/spec/integration/file_serving/fileset_spec.rb +0 -0
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -0
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/indirector/catalog/compiler_spec.rb +0 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +0 -0
- data/spec/integration/indirector/facts/facter_spec.rb +97 -0
- data/spec/integration/indirector/file_content/file_server_spec.rb +1 -0
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -0
- data/spec/integration/indirector/node/ldap_spec.rb +0 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/network/formats_spec.rb +0 -0
- data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
- data/spec/integration/node/environment_spec.rb +34 -0
- data/spec/integration/node/facts_spec.rb +0 -0
- data/spec/integration/node_spec.rb +0 -0
- data/spec/integration/parser/catalog_spec.rb +15 -3
- data/spec/integration/parser/class_spec.rb +6 -6
- data/spec/integration/parser/collection_spec.rb +18 -0
- data/spec/integration/parser/compiler_spec.rb +911 -658
- data/spec/integration/parser/dynamic_scoping_spec.rb +66 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +358 -0
- data/spec/integration/parser/pcore_resource_spec.rb +260 -0
- data/spec/integration/parser/resource_expressions_spec.rb +10 -5
- data/spec/integration/parser/scope_spec.rb +99 -11
- data/spec/integration/parser/undef_param_spec.rb +9 -1
- data/spec/integration/provider/mailalias/aliases_spec.rb +0 -0
- data/spec/integration/provider/mount_spec.rb +23 -36
- data/spec/integration/provider/service/init_spec.rb +0 -0
- data/spec/integration/provider/service/windows_spec.rb +3 -2
- data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -0
- data/spec/integration/provider/yumrepo_spec.rb +4 -1
- data/spec/integration/reference/providers_spec.rb +0 -0
- data/spec/integration/reports_spec.rb +0 -0
- data/spec/integration/resource/catalog_spec.rb +1 -5
- data/spec/integration/resource/type_collection_spec.rb +14 -0
- data/spec/integration/ssl/autosign_spec.rb +18 -3
- data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
- data/spec/integration/ssl/certificate_request_spec.rb +0 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
- data/spec/integration/ssl/host_spec.rb +0 -1
- data/spec/integration/ssl/key_spec.rb +104 -0
- data/spec/integration/test/test_helper_spec.rb +32 -0
- data/spec/integration/transaction/report_spec.rb +683 -1
- data/spec/integration/transaction_spec.rb +128 -4
- data/spec/integration/type/exec_spec.rb +0 -0
- data/spec/integration/type/file_spec.rb +582 -51
- data/spec/integration/type/package_spec.rb +79 -2
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/type/user_spec.rb +13 -6
- data/spec/integration/type_spec.rb +0 -0
- data/spec/integration/util/autoload_spec.rb +0 -0
- data/spec/integration/util/execution_spec.rb +30 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +26 -0
- data/spec/integration/util/windows/adsi_spec.rb +99 -0
- data/spec/integration/util/windows/principal_spec.rb +250 -0
- data/spec/integration/util/windows/process_spec.rb +35 -2
- data/spec/{unit → integration}/util/windows/registry_spec.rb +92 -2
- data/spec/integration/util/windows/security_spec.rb +75 -21
- data/spec/integration/util/windows/user_spec.rb +27 -5
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/matchers/include_in_order.rb +2 -3
- data/spec/lib/matchers/json.rb +3 -3
- data/spec/lib/matchers/resource.rb +22 -1
- data/spec/lib/puppet/face/1.0.0/huzzah.rb +1 -1
- data/spec/lib/puppet/face/basetest.rb +1 -1
- data/spec/lib/puppet/face/huzzah.rb +1 -1
- data/spec/lib/puppet/face/version_matching.rb +1 -1
- data/spec/lib/puppet/indirector_testing.rb +4 -0
- data/spec/lib/puppet_spec/character_encoding.rb +12 -0
- data/spec/lib/puppet_spec/compiler.rb +40 -4
- data/spec/lib/puppet_spec/files.rb +16 -2
- data/spec/lib/puppet_spec/fixtures.rb +0 -0
- data/spec/lib/puppet_spec/language.rb +3 -1
- data/spec/lib/puppet_spec/matchers.rb +6 -4
- 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/modules.rb +2 -2
- data/spec/lib/puppet_spec/network.rb +22 -14
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/lib/puppet_spec/unindent.rb +5 -0
- data/spec/lib/puppet_spec/verbose.rb +0 -0
- data/spec/shared_behaviours/all_parsedfile_providers.rb +0 -0
- data/spec/shared_behaviours/file_server_terminus.rb +0 -0
- data/spec/shared_behaviours/file_serving.rb +0 -0
- data/spec/shared_behaviours/iterative_functions.rb +9 -9
- data/spec/shared_behaviours/memory_terminus.rb +0 -0
- data/spec/shared_behaviours/path_parameters.rb +0 -0
- data/spec/shared_behaviours/things_that_declare_options.rb +0 -0
- data/spec/shared_contexts/types_setup.rb +143 -0
- data/spec/shared_examples/rhel_package_provider.rb +356 -0
- data/spec/spec_helper.rb +23 -13
- data/spec/unit/agent/locker_spec.rb +4 -4
- data/spec/unit/agent_spec.rb +23 -46
- data/spec/unit/application/agent_spec.rb +22 -0
- data/spec/unit/application/apply_spec.rb +59 -14
- data/spec/unit/application/cert_spec.rb +20 -0
- data/spec/unit/application/certificate_spec.rb +0 -0
- data/spec/unit/application/config_spec.rb +0 -0
- data/spec/unit/application/describe_spec.rb +19 -0
- data/spec/unit/application/device_spec.rb +41 -2
- data/spec/unit/application/doc_spec.rb +0 -0
- data/spec/unit/application/face_base_spec.rb +22 -6
- data/spec/unit/application/facts_spec.rb +0 -0
- data/spec/unit/application/filebucket_spec.rb +88 -2
- data/spec/unit/application/indirection_base_spec.rb +0 -0
- data/spec/unit/application/lookup_spec.rb +532 -0
- data/spec/unit/application/master_spec.rb +53 -11
- data/spec/unit/application/resource_spec.rb +39 -1
- data/spec/unit/application_spec.rb +3 -9
- data/spec/unit/capability_spec.rb +412 -0
- data/spec/unit/configurer/downloader_factory_spec.rb +0 -0
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer/fact_handler_spec.rb +76 -20
- data/spec/unit/configurer/plugin_handler_spec.rb +5 -8
- data/spec/unit/configurer_spec.rb +372 -58
- data/spec/unit/confine/exists_spec.rb +0 -0
- data/spec/unit/confine/false_spec.rb +0 -0
- data/spec/unit/confine/feature_spec.rb +0 -0
- data/spec/unit/confine/true_spec.rb +0 -0
- data/spec/unit/confine/variable_spec.rb +0 -0
- data/spec/unit/confine_collection_spec.rb +0 -0
- data/spec/unit/confine_spec.rb +0 -0
- data/spec/unit/confiner_spec.rb +0 -0
- data/spec/unit/context/trusted_information_spec.rb +24 -1
- data/spec/unit/daemon_spec.rb +18 -8
- data/spec/unit/data_providers/function_data_provider_spec.rb +30 -3
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +361 -0
- data/spec/unit/defaults_spec.rb +34 -17
- data/spec/unit/environments_spec.rb +26 -4
- data/spec/unit/etc_spec.rb +442 -0
- data/spec/unit/external/pson_spec.rb +0 -0
- data/spec/unit/face/ca_spec.rb +10 -0
- data/spec/unit/face/catalog_spec.rb +0 -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/certificate_spec.rb +10 -2
- data/spec/unit/face/config_spec.rb +47 -0
- data/spec/unit/face/epp_face_spec.rb +24 -5
- data/spec/unit/face/facts_spec.rb +0 -0
- data/spec/unit/face/generate_spec.rb +230 -0
- data/spec/unit/face/help_spec.rb +70 -0
- data/spec/unit/face/key_spec.rb +10 -0
- data/spec/unit/face/module/list_spec.rb +60 -0
- data/spec/unit/face/module/search_spec.rb +1 -1
- data/spec/unit/face/node_spec.rb +1 -1
- data/spec/unit/face/parser_spec.rb +49 -2
- data/spec/unit/face/plugin_spec.rb +29 -4
- data/spec/unit/face/status_spec.rb +10 -0
- data/spec/unit/face_spec.rb +0 -0
- data/spec/unit/file_bucket/dipper_spec.rb +210 -1
- data/spec/unit/file_bucket/file_spec.rb +3 -3
- data/spec/unit/file_serving/base_spec.rb +0 -0
- data/spec/unit/file_serving/configuration/parser_spec.rb +25 -30
- data/spec/unit/file_serving/configuration_spec.rb +1 -1
- data/spec/unit/file_serving/content_spec.rb +0 -0
- data/spec/unit/file_serving/fileset_spec.rb +0 -0
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +85 -9
- data/spec/unit/file_serving/mount/file_spec.rb +0 -0
- data/spec/unit/file_serving/mount/modules_spec.rb +0 -0
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +0 -0
- data/spec/unit/file_serving/mount/plugins_spec.rb +0 -0
- data/spec/unit/file_serving/mount_spec.rb +0 -0
- data/spec/unit/file_serving/terminus_helper_spec.rb +2 -3
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system/uniquefile_spec.rb +20 -0
- data/spec/unit/file_system_spec.rb +373 -6
- data/spec/unit/forge/forge_spec.rb +112 -0
- data/spec/unit/forge/repository_spec.rb +31 -4
- data/spec/unit/functions/annotate_spec.rb +175 -0
- data/spec/unit/functions/assert_type_spec.rb +48 -8
- data/spec/unit/functions/binary_file_spec.rb +46 -0
- data/spec/unit/functions/break_spec.rb +117 -0
- data/spec/unit/functions/call_spec.rb +77 -0
- data/spec/unit/{parser/functions → functions}/contain_spec.rb +69 -4
- data/spec/unit/functions/defined_spec.rb +289 -0
- data/spec/unit/functions/dig_spec.rb +58 -0
- data/spec/unit/functions/epp_spec.rb +17 -9
- data/spec/unit/functions/filter_spec.rb +18 -0
- data/spec/unit/functions/find_file_spec.rb +69 -0
- data/spec/unit/functions/hiera_spec.rb +451 -49
- data/spec/unit/functions/include_spec.rb +175 -0
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lest_spec.rb +34 -0
- data/spec/unit/functions/logging_spec.rb +54 -0
- data/spec/unit/functions/lookup_fixture_spec.rb +688 -0
- data/spec/unit/functions/lookup_spec.rb +3108 -264
- data/spec/unit/functions/match_spec.rb +2 -2
- data/spec/unit/functions/new_spec.rb +694 -0
- data/spec/unit/functions/next_spec.rb +93 -0
- data/spec/unit/functions/regsubst_spec.rb +30 -9
- data/spec/unit/functions/require_spec.rb +83 -0
- data/spec/unit/functions/return_spec.rb +105 -0
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/scanf_spec.rb +1 -1
- data/spec/unit/{parser/functions → functions}/shared.rb +15 -12
- data/spec/unit/functions/split_spec.rb +11 -3
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/strftime_spec.rb +152 -0
- data/spec/unit/functions/then_spec.rb +40 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions/unique_spec.rb +111 -0
- data/spec/unit/functions/unwrap_spec.rb +29 -0
- data/spec/unit/functions/versioncmp_spec.rb +36 -0
- data/spec/unit/functions4_spec.rb +352 -107
- data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
- data/spec/unit/graph/relationship_graph_spec.rb +0 -0
- data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
- data/spec/unit/graph/simple_graph_spec.rb +59 -56
- data/spec/unit/hiera/scope_spec.rb +6 -3
- data/spec/unit/hiera_puppet_spec.rb +49 -8
- data/spec/unit/indirector/catalog/compiler_spec.rb +887 -83
- data/spec/unit/indirector/catalog/json_spec.rb +50 -1
- data/spec/unit/indirector/catalog/msgpack_spec.rb +0 -0
- data/spec/unit/indirector/catalog/rest_spec.rb +0 -0
- data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -0
- data/spec/unit/indirector/catalog/yaml_spec.rb +0 -0
- data/spec/unit/indirector/certificate/ca_spec.rb +0 -0
- data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -0
- data/spec/unit/indirector/certificate/file_spec.rb +0 -0
- data/spec/unit/indirector/certificate/rest_spec.rb +0 -0
- data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -0
- data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -0
- data/spec/unit/indirector/certificate_request/file_spec.rb +0 -0
- data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -0
- data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -0
- data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -0
- data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -0
- data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -0
- data/spec/unit/indirector/certificate_status/file_spec.rb +0 -0
- data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -0
- data/spec/unit/indirector/code_spec.rb +0 -0
- data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
- data/spec/unit/indirector/direct_file_server_spec.rb +0 -0
- data/spec/unit/indirector/envelope_spec.rb +0 -0
- data/spec/unit/indirector/exec_spec.rb +0 -0
- data/spec/unit/indirector/face_spec.rb +10 -2
- data/spec/unit/indirector/facts/facter_spec.rb +6 -7
- data/spec/unit/indirector/facts/network_device_spec.rb +0 -0
- data/spec/unit/indirector/facts/store_configs_spec.rb +0 -0
- data/spec/unit/indirector/facts/yaml_spec.rb +0 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +86 -4
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +0 -0
- data/spec/unit/indirector/file_content/file_server_spec.rb +0 -0
- data/spec/unit/indirector/file_content/file_spec.rb +0 -0
- data/spec/unit/indirector/file_content/rest_spec.rb +0 -0
- data/spec/unit/indirector/file_metadata/file_server_spec.rb +0 -0
- data/spec/unit/indirector/file_metadata/file_spec.rb +0 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -0
- data/spec/unit/indirector/file_server_spec.rb +17 -2
- data/spec/unit/indirector/indirection_spec.rb +14 -38
- data/spec/unit/indirector/json_spec.rb +27 -6
- data/spec/unit/indirector/key/ca_spec.rb +0 -0
- data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -0
- data/spec/unit/indirector/key/file_spec.rb +1 -1
- data/spec/unit/indirector/ldap_spec.rb +0 -0
- data/spec/unit/indirector/memory_spec.rb +0 -0
- data/spec/unit/indirector/msgpack_spec.rb +11 -1
- data/spec/unit/indirector/node/exec_spec.rb +12 -12
- data/spec/unit/indirector/node/ldap_spec.rb +29 -8
- data/spec/unit/indirector/node/memory_spec.rb +0 -0
- data/spec/unit/indirector/node/msgpack_spec.rb +0 -0
- data/spec/unit/indirector/node/plain_spec.rb +16 -6
- data/spec/unit/indirector/node/rest_spec.rb +0 -0
- data/spec/unit/indirector/node/store_configs_spec.rb +0 -0
- data/spec/unit/indirector/node/write_only_yaml_spec.rb +12 -0
- data/spec/unit/indirector/node/yaml_spec.rb +0 -0
- data/spec/unit/indirector/plain_spec.rb +0 -0
- data/spec/unit/indirector/report/msgpack_spec.rb +0 -0
- data/spec/unit/indirector/report/processor_spec.rb +2 -2
- data/spec/unit/indirector/report/rest_spec.rb +29 -3
- data/spec/unit/indirector/report/yaml_spec.rb +0 -0
- data/spec/unit/indirector/request_spec.rb +32 -12
- data/spec/unit/indirector/resource/ral_spec.rb +0 -0
- data/spec/unit/indirector/resource/store_configs_spec.rb +0 -0
- data/spec/unit/indirector/rest_spec.rb +158 -18
- data/spec/unit/indirector/ssl_file_spec.rb +4 -4
- data/spec/unit/indirector/status/rest_spec.rb +0 -0
- data/spec/unit/indirector/store_configs_spec.rb +0 -0
- data/spec/unit/indirector/terminus_spec.rb +0 -0
- data/spec/unit/indirector/yaml_spec.rb +1 -1
- data/spec/unit/indirector_spec.rb +0 -0
- data/spec/unit/info_service_spec.rb +298 -0
- data/spec/unit/interface/action_builder_spec.rb +0 -0
- data/spec/unit/interface/action_manager_spec.rb +0 -0
- data/spec/unit/interface/action_spec.rb +0 -0
- data/spec/unit/interface/documentation_spec.rb +0 -0
- data/spec/unit/interface/face_collection_spec.rb +7 -7
- data/spec/unit/interface/option_builder_spec.rb +0 -0
- data/spec/unit/interface/option_spec.rb +0 -0
- data/spec/unit/interface_spec.rb +27 -0
- data/spec/unit/man_spec.rb +1 -1
- data/spec/unit/module_spec.rb +126 -74
- data/spec/unit/module_tool/application_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +44 -9
- data/spec/unit/module_tool/applications/installer_spec.rb +11 -3
- data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +9 -2
- data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
- data/spec/unit/module_tool/metadata_spec.rb +31 -2
- data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
- data/spec/unit/module_tool/tar_spec.rb +16 -10
- data/spec/unit/module_tool_spec.rb +3 -3
- data/spec/unit/network/auth_config_parser_spec.rb +16 -0
- data/spec/unit/network/authconfig_spec.rb +62 -32
- data/spec/unit/network/authorization_spec.rb +30 -2
- data/spec/unit/network/authstore_spec.rb +2 -2
- data/spec/unit/network/format_handler_spec.rb +11 -11
- data/spec/unit/network/format_spec.rb +9 -0
- data/spec/unit/network/formats_spec.rb +322 -138
- data/spec/unit/network/http/api/indirected_routes_spec.rb +125 -116
- data/spec/unit/network/http/api/master/v3/environment_spec.rb +186 -0
- data/spec/unit/network/http/api/master/v3_spec.rb +23 -5
- data/spec/unit/network/http/api_spec.rb +1 -1
- data/spec/unit/network/http/compression_spec.rb +132 -84
- data/spec/unit/network/http/connection_spec.rb +25 -19
- data/spec/unit/network/http/error_spec.rb +1 -1
- data/spec/unit/network/http/factory_spec.rb +18 -0
- data/spec/unit/network/http/handler_spec.rb +17 -18
- data/spec/unit/network/http/nocache_pool_spec.rb +0 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/network/http/rack/rest_spec.rb +9 -2
- data/spec/unit/network/http/rack_spec.rb +0 -0
- data/spec/unit/network/http/request_spec.rb +110 -0
- data/spec/unit/network/http/response_spec.rb +108 -0
- data/spec/unit/network/http/session_spec.rb +0 -0
- data/spec/unit/network/http/site_spec.rb +0 -0
- data/spec/unit/network/http/webrick/rest_spec.rb +0 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/network/http_pool_spec.rb +0 -0
- data/spec/unit/network/http_spec.rb +0 -0
- data/spec/unit/network/resolver_spec.rb +0 -0
- data/spec/unit/network/rights_spec.rb +4 -4
- data/spec/unit/network/server_spec.rb +0 -0
- data/spec/unit/node/environment_spec.rb +10 -0
- data/spec/unit/node/facts_spec.rb +13 -13
- data/spec/unit/node_spec.rb +74 -10
- data/spec/unit/other/selinux_spec.rb +0 -0
- data/spec/unit/parameter/path_spec.rb +0 -0
- data/spec/unit/parameter/value_collection_spec.rb +0 -0
- data/spec/unit/parameter/value_spec.rb +0 -0
- data/spec/unit/parameter_spec.rb +84 -5
- data/spec/unit/parser/ast/leaf_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +135 -34
- data/spec/unit/parser/environment_compiler_spec.rb +686 -0
- data/spec/unit/parser/files_spec.rb +0 -0
- data/spec/unit/parser/functions/create_resources_spec.rb +132 -10
- data/spec/unit/parser/functions/digest_spec.rb +0 -0
- data/spec/unit/parser/functions/fail_spec.rb +0 -0
- data/spec/unit/parser/functions/file_spec.rb +7 -1
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -2
- data/spec/unit/parser/functions/generate_spec.rb +3 -12
- data/spec/unit/parser/functions/hiera_array_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_hash_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_spec.rb +1 -1
- data/spec/unit/parser/functions/inline_template_spec.rb +0 -0
- data/spec/unit/parser/functions/lookup_spec.rb +1 -1
- data/spec/unit/parser/functions/realize_spec.rb +0 -0
- data/spec/unit/parser/functions/regsubst_spec.rb +1 -1
- data/spec/unit/parser/functions/scanf_spec.rb +0 -0
- data/spec/unit/parser/functions/shellquote_spec.rb +0 -0
- data/spec/unit/parser/functions/split_spec.rb +1 -1
- data/spec/unit/parser/functions/sprintf_spec.rb +0 -0
- data/spec/unit/parser/functions/tag_spec.rb +0 -0
- data/spec/unit/parser/functions/template_spec.rb +1 -1
- data/spec/unit/parser/functions/versioncmp_spec.rb +0 -0
- data/spec/unit/parser/functions_spec.rb +0 -0
- data/spec/unit/parser/relationship_spec.rb +0 -0
- data/spec/unit/parser/resource/param_spec.rb +0 -0
- data/spec/unit/parser/resource_spec.rb +115 -54
- data/spec/unit/parser/scope_spec.rb +84 -86
- data/spec/unit/parser/templatewrapper_spec.rb +1 -1
- data/spec/unit/parser/type_loader_spec.rb +0 -0
- data/spec/unit/pops/benchmark_spec.rb +8 -26
- data/spec/unit/pops/containment_spec.rb +0 -26
- data/spec/unit/pops/evaluator/access_ops_spec.rb +214 -99
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +223 -0
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +5 -6
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +29 -26
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +218 -47
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +29 -25
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +168 -0
- data/spec/unit/pops/evaluator/string_interpolation_spec.rb +10 -10
- data/spec/unit/pops/evaluator/variables_spec.rb +2 -2
- data/spec/unit/pops/factory_rspec_helper.rb +0 -4
- data/spec/unit/pops/factory_spec.rb +83 -83
- data/spec/unit/pops/issues_spec.rb +16 -16
- data/spec/unit/pops/label_provider_spec.rb +5 -1
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +66 -1
- data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
- data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +541 -57
- data/spec/unit/pops/loaders/module_loaders_spec.rb +63 -2
- data/spec/unit/pops/loaders/static_loader_spec.rb +80 -19
- data/spec/unit/pops/lookup/context_spec.rb +334 -0
- data/spec/unit/pops/lookup/interpolation_spec.rb +373 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +294 -0
- data/spec/unit/pops/merge_strategy_spec.rb +18 -0
- data/spec/unit/pops/migration_spec.rb +53 -0
- data/spec/unit/pops/model/model_spec.rb +10 -10
- data/spec/unit/pops/parser/epp_parser_spec.rb +1 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +380 -10
- data/spec/unit/pops/parser/locator_spec.rb +24 -0
- data/spec/unit/pops/parser/parse_application_spec.rb +32 -0
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +35 -4
- data/spec/unit/pops/parser/parse_calls_spec.rb +25 -0
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +37 -0
- data/spec/unit/pops/parser/parse_containers_spec.rb +17 -19
- data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +26 -0
- data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
- data/spec/unit/pops/parser/parse_site_spec.rb +48 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +6 -0
- data/spec/unit/pops/parser/parser_spec.rb +32 -6
- data/spec/unit/pops/puppet_stack_spec.rb +79 -0
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +109 -0
- data/spec/unit/pops/serialization/packer_spec.rb +154 -0
- data/spec/unit/pops/serialization/serialization_spec.rb +426 -0
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +494 -0
- data/spec/unit/pops/time/timespan_spec.rb +121 -0
- data/spec/unit/pops/time/timestamp_spec.rb +13 -0
- data/spec/unit/pops/types/enumeration_spec.rb +13 -12
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +1253 -0
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +322 -0
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +169 -0
- data/spec/unit/pops/types/p_timespan_type_spec.rb +273 -0
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +311 -0
- data/spec/unit/pops/types/p_type_set_type_spec.rb +445 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +93 -0
- data/spec/unit/pops/types/ruby_generator_spec.rb +662 -0
- data/spec/unit/pops/types/string_converter_spec.rb +1132 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +106 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1249 -901
- data/spec/unit/pops/types/type_factory_spec.rb +137 -96
- data/spec/unit/pops/types/type_formatter_spec.rb +409 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +228 -0
- data/spec/unit/pops/types/type_parser_spec.rb +207 -40
- data/spec/unit/pops/types/types_spec.rb +650 -0
- data/spec/unit/pops/validation_spec.rb +66 -0
- data/spec/unit/pops/validator/validator_spec.rb +395 -21
- data/spec/unit/pops/visitor_spec.rb +1 -1
- data/spec/unit/property/ensure_spec.rb +0 -0
- data/spec/unit/property/keyvalue_spec.rb +0 -0
- data/spec/unit/property/list_spec.rb +2 -2
- data/spec/unit/property/ordered_list_spec.rb +0 -0
- data/spec/unit/property_spec.rb +49 -12
- data/spec/unit/provider/augeas/augeas_spec.rb +60 -1
- data/spec/unit/provider/cisco_spec.rb +0 -0
- data/spec/unit/provider/command_spec.rb +0 -0
- data/spec/unit/provider/cron/crontab_spec.rb +0 -0
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/exec/posix_spec.rb +0 -0
- data/spec/unit/provider/exec/shell_spec.rb +0 -0
- data/spec/unit/provider/exec/windows_spec.rb +0 -0
- data/spec/unit/provider/exec_spec.rb +0 -0
- data/spec/unit/provider/file/posix_spec.rb +0 -0
- data/spec/unit/provider/file/windows_spec.rb +0 -0
- data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
- data/spec/unit/provider/group/groupadd_spec.rb +0 -0
- data/spec/unit/provider/group/ldap_spec.rb +0 -0
- data/spec/unit/provider/group/pw_spec.rb +0 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +88 -18
- data/spec/unit/provider/host/parsed_spec.rb +0 -0
- data/spec/unit/provider/interface/cisco_spec.rb +0 -0
- data/spec/unit/provider/ldap_spec.rb +0 -0
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -0
- data/spec/unit/provider/mount/parsed_spec.rb +31 -5
- data/spec/unit/provider/mount_spec.rb +0 -0
- data/spec/unit/provider/naginator_spec.rb +0 -0
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +16 -19
- data/spec/unit/provider/nameservice_spec.rb +167 -15
- data/spec/unit/provider/network_device_spec.rb +0 -0
- data/spec/unit/provider/package/aix_spec.rb +0 -0
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/apt_spec.rb +5 -0
- data/spec/unit/provider/package/aptitude_spec.rb +0 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +3 -3
- data/spec/unit/provider/package/base_spec.rb +18 -0
- data/spec/unit/provider/package/dnf_spec.rb +30 -0
- data/spec/unit/provider/package/dpkg_spec.rb +0 -0
- data/spec/unit/provider/package/freebsd_spec.rb +0 -0
- data/spec/unit/provider/package/gem_spec.rb +77 -0
- data/spec/unit/provider/package/hpux_spec.rb +0 -0
- data/spec/unit/provider/package/macports_spec.rb +0 -0
- data/spec/unit/provider/package/nim_spec.rb +6 -6
- data/spec/unit/provider/package/openbsd_spec.rb +0 -0
- data/spec/unit/provider/package/opkg_spec.rb +0 -0
- data/spec/unit/provider/package/pacman_spec.rb +55 -0
- data/spec/unit/provider/package/pip3_spec.rb +22 -0
- data/spec/unit/provider/package/pip_spec.rb +173 -46
- data/spec/unit/provider/package/pkg_spec.rb +139 -99
- data/spec/unit/provider/package/pkgdmg_spec.rb +32 -8
- data/spec/unit/provider/package/pkgin_spec.rb +23 -13
- data/spec/unit/provider/package/pkgng_spec.rb +186 -0
- data/spec/unit/provider/package/pkgutil_spec.rb +0 -0
- data/spec/unit/provider/package/portage_spec.rb +150 -8
- data/spec/unit/provider/package/puppet_gem_spec.rb +0 -0
- data/spec/unit/provider/package/rpm_spec.rb +183 -12
- data/spec/unit/provider/package/sun_spec.rb +0 -0
- data/spec/unit/provider/package/tdnf_spec.rb +18 -0
- data/spec/unit/provider/package/windows/exe_package_spec.rb +0 -1
- data/spec/unit/provider/package/windows/msi_package_spec.rb +0 -1
- data/spec/unit/provider/package/windows/package_spec.rb +45 -1
- data/spec/unit/provider/package/windows_spec.rb +8 -2
- data/spec/unit/provider/package/yum_spec.rb +29 -466
- data/spec/unit/provider/package/zypper_spec.rb +64 -19
- data/spec/unit/provider/parsedfile_spec.rb +0 -0
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +523 -70
- data/spec/unit/provider/selboolean_spec.rb +0 -0
- data/spec/unit/provider/selmodule_spec.rb +0 -0
- data/spec/unit/provider/service/base_spec.rb +44 -27
- data/spec/unit/provider/service/bsd_spec.rb +130 -0
- data/spec/unit/provider/service/daemontools_spec.rb +0 -0
- data/spec/unit/provider/service/debian_spec.rb +38 -0
- data/spec/unit/provider/service/freebsd_spec.rb +17 -0
- data/spec/unit/provider/service/gentoo_spec.rb +8 -0
- data/spec/unit/provider/service/init_spec.rb +42 -1
- data/spec/unit/provider/service/launchd_spec.rb +124 -25
- data/spec/unit/provider/service/openbsd_spec.rb +1 -0
- data/spec/unit/provider/service/openrc_spec.rb +7 -0
- data/spec/unit/provider/service/openwrt_spec.rb +0 -0
- data/spec/unit/provider/service/rcng_spec.rb +41 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -1
- data/spec/unit/provider/service/runit_spec.rb +0 -0
- data/spec/unit/provider/service/smf_spec.rb +77 -13
- data/spec/unit/provider/service/src_spec.rb +31 -4
- data/spec/unit/provider/service/systemd_spec.rb +228 -39
- data/spec/unit/provider/service/upstart_spec.rb +64 -0
- data/spec/unit/provider/service/windows_spec.rb +0 -0
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -1
- data/spec/unit/provider/sshkey/parsed_spec.rb +42 -18
- data/spec/unit/provider/user/aix_spec.rb +7 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +171 -90
- data/spec/unit/provider/user/hpux_spec.rb +0 -0
- data/spec/unit/provider/user/ldap_spec.rb +0 -0
- data/spec/unit/provider/user/openbsd_spec.rb +0 -0
- data/spec/unit/provider/user/pw_spec.rb +0 -0
- data/spec/unit/provider/user/user_role_add_spec.rb +0 -0
- data/spec/unit/provider/user/useradd_spec.rb +14 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +160 -7
- data/spec/unit/provider/vlan/cisco_spec.rb +0 -0
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- data/spec/unit/provider/zfs/zfs_spec.rb +0 -0
- data/spec/unit/provider/zone/solaris_spec.rb +64 -12
- data/spec/unit/provider/zpool/zpool_spec.rb +0 -0
- data/spec/unit/provider_spec.rb +0 -0
- data/spec/unit/puppet_spec.rb +16 -3
- data/spec/unit/relationship_spec.rb +15 -36
- data/spec/unit/reports/http_spec.rb +11 -8
- data/spec/unit/reports/store_spec.rb +0 -0
- data/spec/unit/reports_spec.rb +10 -0
- data/spec/unit/resource/capability_finder_spec.rb +147 -0
- data/spec/unit/resource/catalog_spec.rb +294 -41
- data/spec/unit/resource/status_spec.rb +114 -103
- data/spec/unit/resource/type_collection_spec.rb +28 -7
- data/spec/unit/resource/type_spec.rb +172 -82
- data/spec/unit/resource_spec.rb +161 -76
- data/spec/unit/settings/directory_setting_spec.rb +0 -0
- data/spec/unit/settings/duration_setting_spec.rb +0 -0
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/settings/file_setting_spec.rb +37 -0
- data/spec/unit/settings/ini_file_spec.rb +58 -1
- data/spec/unit/settings/path_setting_spec.rb +0 -0
- data/spec/unit/settings/priority_setting_spec.rb +0 -0
- data/spec/unit/settings_spec.rb +120 -5
- data/spec/unit/ssl/base_spec.rb +9 -0
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +180 -13
- data/spec/unit/ssl/certificate_authority_spec.rb +82 -28
- data/spec/unit/ssl/certificate_factory_spec.rb +2 -2
- data/spec/unit/ssl/certificate_request_attributes_spec.rb +6 -0
- data/spec/unit/ssl/certificate_request_spec.rb +4 -5
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/ssl/certificate_spec.rb +1 -1
- data/spec/unit/ssl/configuration_spec.rb +11 -2
- data/spec/unit/ssl/host_spec.rb +37 -37
- data/spec/unit/ssl/inventory_spec.rb +27 -3
- data/spec/unit/ssl/key_spec.rb +7 -7
- data/spec/unit/ssl/oids_spec.rb +24 -13
- data/spec/unit/status_spec.rb +7 -7
- data/spec/unit/transaction/additional_resource_generator_spec.rb +160 -31
- data/spec/unit/transaction/event_manager_spec.rb +0 -0
- data/spec/unit/transaction/event_spec.rb +18 -13
- data/spec/unit/transaction/persistence_spec.rb +178 -0
- data/spec/unit/transaction/report_spec.rb +214 -40
- data/spec/unit/transaction/resource_harness_spec.rb +84 -40
- data/spec/unit/transaction_spec.rb +102 -7
- data/spec/unit/type/augeas_spec.rb +0 -0
- data/spec/unit/type/component_spec.rb +0 -0
- data/spec/unit/type/computer_spec.rb +0 -0
- data/spec/unit/type/cron_spec.rb +0 -0
- data/spec/unit/type/exec_spec.rb +57 -12
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +59 -208
- data/spec/unit/type/file/ctime_spec.rb +0 -0
- data/spec/unit/type/file/ensure_spec.rb +0 -0
- data/spec/unit/type/file/group_spec.rb +2 -2
- data/spec/unit/type/file/mode_spec.rb +9 -9
- data/spec/unit/type/file/mtime_spec.rb +0 -0
- data/spec/unit/type/file/owner_spec.rb +2 -2
- data/spec/unit/type/file/selinux_spec.rb +2 -0
- data/spec/unit/type/file/source_spec.rb +224 -119
- data/spec/unit/type/file/type_spec.rb +0 -0
- data/spec/unit/type/file_spec.rb +211 -35
- data/spec/unit/type/filebucket_spec.rb +0 -0
- data/spec/unit/type/group_spec.rb +0 -0
- data/spec/unit/type/host_spec.rb +4 -4
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/k5login_spec.rb +0 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/mailalias_spec.rb +0 -0
- data/spec/unit/type/maillist_spec.rb +0 -0
- data/spec/unit/type/mcx_spec.rb +0 -0
- data/spec/unit/type/mount_spec.rb +50 -8
- data/spec/unit/type/nagios_spec.rb +0 -0
- data/spec/unit/type/noop_metaparam_spec.rb +0 -0
- data/spec/unit/type/package/package_settings_spec.rb +0 -0
- data/spec/unit/type/package_spec.rb +1 -0
- data/spec/unit/type/resources_spec.rb +0 -0
- data/spec/unit/type/schedule_spec.rb +0 -0
- data/spec/unit/type/selboolean_spec.rb +0 -0
- data/spec/unit/type/selmodule_spec.rb +0 -0
- data/spec/unit/type/service_spec.rb +21 -0
- data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
- data/spec/unit/type/sshkey_spec.rb +0 -0
- data/spec/unit/type/stage_spec.rb +0 -0
- data/spec/unit/type/tidy_spec.rb +4 -4
- data/spec/unit/type/user_spec.rb +38 -7
- data/spec/unit/type/vlan_spec.rb +1 -1
- data/spec/unit/type/whit_spec.rb +0 -0
- data/spec/unit/type/yumrepo_spec.rb +3 -7
- data/spec/unit/type/zfs_spec.rb +0 -0
- data/spec/unit/type/zone_spec.rb +0 -0
- data/spec/unit/type/zpool_spec.rb +0 -0
- data/spec/unit/type_spec.rb +119 -1
- data/spec/unit/util/at_fork_spec.rb +150 -0
- data/spec/unit/util/autoload_spec.rb +0 -0
- data/spec/unit/util/backups_spec.rb +0 -0
- data/spec/unit/util/character_encoding_spec.rb +229 -0
- data/spec/unit/util/checksums_spec.rb +0 -0
- data/spec/unit/util/colors_spec.rb +0 -0
- data/spec/unit/util/command_line_spec.rb +11 -0
- data/spec/unit/util/constant_inflector_spec.rb +0 -0
- data/spec/unit/util/diff_spec.rb +0 -0
- data/spec/unit/util/errors_spec.rb +0 -0
- data/spec/unit/util/execution_spec.rb +44 -3
- data/spec/unit/util/execution_stub_spec.rb +0 -0
- data/spec/unit/util/feature_spec.rb +1 -1
- data/spec/unit/util/filetype_spec.rb +4 -4
- data/spec/unit/util/http_proxy_spec.rb +91 -0
- data/spec/unit/util/ldap/connection_spec.rb +0 -0
- data/spec/unit/util/ldap/generator_spec.rb +1 -1
- data/spec/unit/util/ldap/manager_spec.rb +0 -0
- data/spec/unit/util/log/destinations_spec.rb +5 -8
- data/spec/unit/util/log_spec.rb +187 -18
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/metric_spec.rb +9 -2
- data/spec/unit/util/monkey_patches_spec.rb +37 -127
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/nagios_maker_spec.rb +0 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -0
- data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -0
- data/spec/unit/util/network_device/config_spec.rb +0 -0
- data/spec/unit/util/network_device/ipcalc_spec.rb +0 -0
- data/spec/unit/util/network_device/transport/base_spec.rb +0 -0
- data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/network_device_spec.rb +1 -1
- data/spec/unit/util/package_spec.rb +0 -0
- data/spec/unit/util/plist_spec.rb +135 -0
- data/spec/unit/util/posix_spec.rb +0 -0
- data/spec/unit/util/rdoc_spec.rb +0 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/retry_action_spec.rb +0 -0
- data/spec/unit/util/run_mode_spec.rb +44 -13
- data/spec/unit/util/selinux_spec.rb +0 -0
- data/spec/unit/util/splayer_spec.rb +45 -0
- data/spec/unit/util/storage_spec.rb +8 -1
- data/spec/unit/util/suidmanager_spec.rb +0 -0
- data/spec/unit/util/symbolic_file_mode_spec.rb +0 -0
- data/spec/unit/util/tag_set_spec.rb +2 -2
- data/spec/unit/util/tagging_spec.rb +59 -0
- data/spec/unit/util/user_attr_spec.rb +0 -0
- data/spec/unit/util/warnings_spec.rb +0 -0
- data/spec/unit/util/windows/adsi_spec.rb +196 -60
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/eventlog_spec.rb +123 -0
- data/spec/unit/util/windows/file_spec.rb +89 -0
- data/spec/unit/util/windows/root_certs_spec.rb +0 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +76 -24
- data/spec/unit/util/yaml_spec.rb +13 -1
- data/spec/unit/util_spec.rb +456 -17
- data/spec/unit/version_spec.rb +19 -0
- data/spec/watchr.rb +0 -0
- data/tasks/benchmark.rake +3 -3
- data/tasks/cfpropertylist.rake +15 -0
- data/tasks/generate_ast_model.rake +78 -0
- metadata +3474 -3068
- checksums.yaml +0 -7
- data/bin/extlookup2hiera +0 -56
- data/ext/emacs/puppet-mode-init.el +0 -6
- data/ext/emacs/puppet-mode.el +0 -433
- data/ext/puppet-nm-dispatcher +0 -13
- data/ext/puppetlisten/puppetlisten.rb +0 -77
- data/ext/puppetlisten/puppetrun.rb +0 -38
- data/ext/systemd/puppetmaster.service +0 -11
- data/ext/vim/README +0 -3
- data/ext/vim/ftdetect/puppet.vim +0 -2
- data/ext/vim/ftplugin/puppet.vim +0 -94
- data/ext/vim/indent/puppet.vim +0 -76
- data/ext/vim/syntax/puppet.vim +0 -115
- data/lib/puppet/application/file.rb +0 -4
- data/lib/puppet/application/inspect.rb +0 -179
- data/lib/puppet/application/resource_type.rb +0 -7
- data/lib/puppet/data_providers/data_adapter.rb +0 -91
- data/lib/puppet/data_providers/data_function_support.rb +0 -45
- data/lib/puppet/data_providers/function_env_data_provider.rb +0 -28
- data/lib/puppet/data_providers/function_module_data_provider.rb +0 -39
- data/lib/puppet/data_providers.rb +0 -31
- data/lib/puppet/face/file/download.rb +0 -56
- data/lib/puppet/face/file/store.rb +0 -21
- data/lib/puppet/face/file.rb +0 -47
- data/lib/puppet/face/resource_type.rb +0 -84
- data/lib/puppet/feature/cfacter.rb +0 -14
- data/lib/puppet/feature/external_facts.rb +0 -5
- data/lib/puppet/indirector/catalog/static_compiler.rb +0 -213
- data/lib/puppet/indirector/resource_type/parser.rb +0 -101
- data/lib/puppet/indirector/resource_type/rest.rb +0 -7
- data/lib/puppet/indirector/resource_type.rb +0 -5
- data/lib/puppet/parser/yaml_trimmer.rb +0 -7
- data/lib/puppet/plugins/binding_schemes.rb +0 -140
- data/lib/puppet/plugins/data_providers.rb +0 -90
- data/lib/puppet/pops/binder/binder.rb +0 -394
- data/lib/puppet/pops/binder/binder_issues.rb +0 -122
- data/lib/puppet/pops/binder/bindings_checker.rb +0 -197
- data/lib/puppet/pops/binder/bindings_composer.rb +0 -177
- data/lib/puppet/pops/binder/bindings_factory.rb +0 -809
- data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -43
- data/lib/puppet/pops/binder/bindings_loader.rb +0 -83
- data/lib/puppet/pops/binder/bindings_model.rb +0 -68
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +0 -215
- data/lib/puppet/pops/binder/bindings_model_meta.rb +0 -215
- data/lib/puppet/pops/binder/bindings_validator_factory.rb +0 -28
- data/lib/puppet/pops/binder/config/binder_config.rb +0 -107
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +0 -142
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +0 -32
- data/lib/puppet/pops/binder/config/issues.rb +0 -90
- data/lib/puppet/pops/binder/injector.rb +0 -766
- data/lib/puppet/pops/binder/injector_entry.rb +0 -57
- data/lib/puppet/pops/binder/key_factory.rb +0 -67
- data/lib/puppet/pops/binder/producers.rb +0 -826
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +0 -34
- data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +0 -84
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +0 -53
- data/lib/puppet/pops/binder/system_bindings.rb +0 -60
- data/lib/puppet/pops/containment.rb +0 -104
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
- data/lib/puppet/pops/model/model.rb +0 -114
- data/lib/puppet/pops/model/model_meta.rb +0 -582
- data/lib/puppet/pops/types/types_meta.rb +0 -223
- data/lib/puppet/resource/type_collection_helper.rb +0 -7
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/load_rgen.rb +0 -2
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
- data/lib/puppet/vendor/rgen/CHANGELOG +0 -197
- data/lib/puppet/vendor/rgen/MIT-LICENSE +0 -20
- data/lib/puppet/vendor/rgen/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/rgen/README.rdoc +0 -78
- data/lib/puppet/vendor/rgen/Rakefile +0 -41
- data/lib/puppet/vendor/rgen/TODO +0 -41
- data/lib/puppet/vendor/rgen/anounce.txt +0 -61
- data/lib/puppet/vendor/rgen/design_rationale.txt +0 -71
- data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +0 -54
- data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +0 -32
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +0 -562
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +0 -45
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +0 -43
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +0 -103
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +0 -89
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +0 -559
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +0 -26
- data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +0 -20
- data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +0 -91
- data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +0 -28
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +0 -37
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +0 -172
- data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +0 -45
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +0 -218
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +0 -81
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +0 -69
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +0 -47
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +0 -167
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +0 -91
- data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +0 -129
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +0 -63
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +0 -140
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +0 -289
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +0 -66
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +0 -66
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +0 -117
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +0 -169
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +0 -126
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +0 -331
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +0 -94
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +0 -137
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +0 -97
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +0 -128
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +0 -47
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +0 -168
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +0 -556
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +0 -174
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +0 -89
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +0 -77
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +0 -30
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +0 -168
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +0 -23
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +0 -42
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +0 -224
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +0 -334
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +0 -225
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +0 -156
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +0 -32
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +0 -121
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +0 -18
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +0 -47
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +0 -116
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +0 -71
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +0 -98
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +0 -83
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +0 -87
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +0 -234
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +0 -26
- data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +0 -297
- data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +0 -475
- data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +0 -61
- data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +0 -67
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +0 -124
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +0 -84
- data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +0 -114
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +0 -68
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +0 -142
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +0 -29
- data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +0 -42
- data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +0 -329
- data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +0 -79
- data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +0 -127
- data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +0 -64
- data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +0 -35
- data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +0 -23
- data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +0 -54
- data/lib/puppet/vendor/rgen/test/environment_test.rb +0 -90
- data/lib/puppet/vendor/rgen/test/json_test.rb +0 -171
- data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +0 -1482
- data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +0 -57
- data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +0 -131
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +0 -70
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +0 -42
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +0 -44
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +0 -9
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +0 -98
- data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +0 -178
- data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +0 -59
- data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +0 -242
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +0 -163
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +0 -163
- data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +0 -156
- data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +0 -94
- data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +0 -42
- data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +0 -23
- data/lib/puppet/vendor/rgen/test/model_builder_test.rb +0 -6
- data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +0 -30
- data/lib/puppet/vendor/rgen/test/output_handler_test.rb +0 -58
- data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +0 -48
- data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +0 -102
- data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +0 -117
- data/lib/puppet/vendor/rgen/test/rgen_test.rb +0 -26
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +0 -29
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +0 -9
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +0 -4
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +0 -1
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +0 -1
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +0 -12
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +0 -5
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +0 -11
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +0 -7
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +0 -5
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +0 -8
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +0 -8
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +0 -7
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +0 -12
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +0 -1
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +0 -3
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +0 -5
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +0 -3
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +0 -3
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +0 -24
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +0 -13
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +0 -10
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +0 -17
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +0 -31
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +0 -3
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +0 -9
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +0 -4
- data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +0 -29
- data/lib/puppet/vendor/rgen/test/template_language_test.rb +0 -163
- data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +0 -119
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +0 -1029
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +0 -317
- data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +0 -101
- data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +0 -22
- data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +0 -67
- data/lib/puppet/vendor/rgen/test/transformer_test.rb +0 -254
- data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +0 -99
- data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +0 -97
- data/lib/puppet/vendor/rgen/test/util_test.rb +0 -5
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +0 -94
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +0 -53
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +0 -49
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +0 -75
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +0 -160
- data/lib/puppet/vendor/rgen_patch.rb +0 -132
- 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/version.rb +0 -168
- data/lib/puppet/vendor/semantic/lib/semantic/version_range.rb +0 -424
- 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/lib/semver.rb +0 -123
- data/man/man8/extlookup2hiera.8 +0 -10
- data/man/man8/puppet-file.8 +0 -189
- data/man/man8/puppet-resource_type.8 +0 -188
- data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
- data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +0 -54
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +0 -31
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +0 -32
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +0 -5
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -9
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -3
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -9
- data/spec/integration/data_binding.rb +0 -104
- data/spec/integration/parser/functions/require_spec.rb +0 -43
- data/spec/integration/provider/package_spec.rb +0 -33
- data/spec/unit/application/inspect_spec.rb +0 -287
- data/spec/unit/data_providers/sample_data_provider_spec.rb +0 -52
- data/spec/unit/face/file_spec.rb +0 -10
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -237
- data/spec/unit/indirector/resource_type/parser_spec.rb +0 -254
- data/spec/unit/indirector/resource_type/rest_spec.rb +0 -14
- data/spec/unit/parser/functions/defined_spec.rb +0 -120
- data/spec/unit/parser/functions/include_spec.rb +0 -55
- data/spec/unit/parser/functions/require_spec.rb +0 -68
- data/spec/unit/pops/binder/binder_spec.rb +0 -43
- data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -155
- data/spec/unit/pops/binder/bindings_composer_spec.rb +0 -64
- data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +0 -18
- data/spec/unit/pops/binder/config/binder_config_spec.rb +0 -42
- data/spec/unit/pops/binder/injector_spec.rb +0 -768
- data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +0 -23
- data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
- data/spec/unit/semver_spec.rb +0 -305
- /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/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/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/no_provider/manifests/init.pp +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -1,367 +1,485 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
require 'puppet/pops'
|
|
3
3
|
|
|
4
|
+
module Puppet::Pops
|
|
5
|
+
module Types
|
|
4
6
|
describe 'The type calculator' do
|
|
5
|
-
let(:calculator) {
|
|
7
|
+
let(:calculator) { TypeCalculator.new }
|
|
6
8
|
|
|
7
9
|
def range_t(from, to)
|
|
8
|
-
|
|
9
|
-
t.from = from
|
|
10
|
-
t.to = to
|
|
11
|
-
t
|
|
12
|
-
end
|
|
13
|
-
def constrained_t(t, from, to)
|
|
14
|
-
Puppet::Pops::Types::TypeFactory.constrain_size(t, from, to)
|
|
10
|
+
PIntegerType.new(from, to)
|
|
15
11
|
end
|
|
16
12
|
|
|
17
13
|
def pattern_t(*patterns)
|
|
18
|
-
|
|
14
|
+
TypeFactory.pattern(*patterns)
|
|
19
15
|
end
|
|
20
16
|
|
|
21
17
|
def regexp_t(pattern)
|
|
22
|
-
|
|
18
|
+
TypeFactory.regexp(pattern)
|
|
23
19
|
end
|
|
24
20
|
|
|
25
|
-
def string_t(
|
|
26
|
-
|
|
21
|
+
def string_t(string = nil)
|
|
22
|
+
TypeFactory.string(string)
|
|
27
23
|
end
|
|
28
24
|
|
|
29
|
-
def
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
def all_callables_t(*params)
|
|
33
|
-
Puppet::Pops::Types::TypeFactory.all_callables()
|
|
25
|
+
def constrained_string_t(size_type)
|
|
26
|
+
TypeFactory.string(size_type)
|
|
34
27
|
end
|
|
35
28
|
|
|
36
|
-
def
|
|
37
|
-
|
|
29
|
+
def callable_t(*params)
|
|
30
|
+
TypeFactory.callable(*params)
|
|
38
31
|
end
|
|
39
32
|
|
|
40
|
-
def
|
|
41
|
-
|
|
33
|
+
def all_callables_t
|
|
34
|
+
TypeFactory.all_callables
|
|
42
35
|
end
|
|
43
36
|
|
|
44
37
|
def enum_t(*strings)
|
|
45
|
-
|
|
38
|
+
TypeFactory.enum(*strings)
|
|
46
39
|
end
|
|
47
40
|
|
|
48
41
|
def variant_t(*types)
|
|
49
|
-
|
|
42
|
+
TypeFactory.variant(*types)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def type_alias_t(name, type_string)
|
|
46
|
+
type_expr = Parser::EvaluatingParser.new.parse_string(type_string)
|
|
47
|
+
TypeFactory.type_alias(name, type_expr)
|
|
50
48
|
end
|
|
51
49
|
|
|
52
|
-
def
|
|
53
|
-
|
|
50
|
+
def type_reference_t(type_string)
|
|
51
|
+
TypeFactory.type_reference(type_string)
|
|
54
52
|
end
|
|
55
53
|
|
|
56
|
-
def
|
|
57
|
-
|
|
54
|
+
def integer_t
|
|
55
|
+
TypeFactory.integer
|
|
58
56
|
end
|
|
59
57
|
|
|
60
|
-
def
|
|
61
|
-
|
|
58
|
+
def array_t(t, s = nil)
|
|
59
|
+
TypeFactory.array_of(t, s)
|
|
62
60
|
end
|
|
63
61
|
|
|
64
|
-
def
|
|
65
|
-
|
|
62
|
+
def empty_array_t
|
|
63
|
+
empty_array = array_t(unit_t, range_t(0,0))
|
|
66
64
|
end
|
|
67
65
|
|
|
68
|
-
def
|
|
69
|
-
|
|
66
|
+
def hash_t(k,v,s = nil)
|
|
67
|
+
TypeFactory.hash_of(v, k, s)
|
|
70
68
|
end
|
|
71
69
|
|
|
72
|
-
def
|
|
73
|
-
|
|
70
|
+
def data_t
|
|
71
|
+
TypeFactory.data
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def factory
|
|
75
|
+
TypeFactory
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def collection_t(size_type = nil)
|
|
79
|
+
TypeFactory.collection(size_type)
|
|
74
80
|
end
|
|
75
81
|
|
|
76
82
|
def tuple_t(*types)
|
|
77
|
-
|
|
83
|
+
TypeFactory.tuple(types)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def constrained_tuple_t(size_type, *types)
|
|
87
|
+
TypeFactory.tuple(types, size_type)
|
|
78
88
|
end
|
|
79
89
|
|
|
80
90
|
def struct_t(type_hash)
|
|
81
|
-
|
|
91
|
+
TypeFactory.struct(type_hash)
|
|
82
92
|
end
|
|
83
93
|
|
|
84
|
-
def
|
|
85
|
-
|
|
94
|
+
def any_t
|
|
95
|
+
TypeFactory.any
|
|
86
96
|
end
|
|
87
97
|
|
|
88
98
|
def optional_t(t)
|
|
89
|
-
|
|
99
|
+
TypeFactory.optional(t)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def type_t(t)
|
|
103
|
+
TypeFactory.type_type(t)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def not_undef_t(t = nil)
|
|
107
|
+
TypeFactory.not_undef(t)
|
|
90
108
|
end
|
|
91
109
|
|
|
92
110
|
def undef_t
|
|
93
|
-
|
|
111
|
+
TypeFactory.undef
|
|
94
112
|
end
|
|
95
113
|
|
|
96
114
|
def unit_t
|
|
97
115
|
# Cannot be created via factory, the type is private to the type system
|
|
98
|
-
|
|
116
|
+
PUnitType::DEFAULT
|
|
99
117
|
end
|
|
100
118
|
|
|
101
|
-
def
|
|
102
|
-
|
|
119
|
+
def runtime_t(t, c)
|
|
120
|
+
TypeFactory.runtime(t, c)
|
|
103
121
|
end
|
|
104
122
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
Puppet::Pops::Types::PDataType,
|
|
112
|
-
Puppet::Pops::Types::PScalarType,
|
|
113
|
-
Puppet::Pops::Types::PStringType,
|
|
114
|
-
Puppet::Pops::Types::PNumericType,
|
|
115
|
-
Puppet::Pops::Types::PIntegerType,
|
|
116
|
-
Puppet::Pops::Types::PFloatType,
|
|
117
|
-
Puppet::Pops::Types::PRegexpType,
|
|
118
|
-
Puppet::Pops::Types::PBooleanType,
|
|
119
|
-
Puppet::Pops::Types::PCollectionType,
|
|
120
|
-
Puppet::Pops::Types::PArrayType,
|
|
121
|
-
Puppet::Pops::Types::PHashType,
|
|
122
|
-
Puppet::Pops::Types::PRuntimeType,
|
|
123
|
-
Puppet::Pops::Types::PHostClassType,
|
|
124
|
-
Puppet::Pops::Types::PResourceType,
|
|
125
|
-
Puppet::Pops::Types::PPatternType,
|
|
126
|
-
Puppet::Pops::Types::PEnumType,
|
|
127
|
-
Puppet::Pops::Types::PVariantType,
|
|
128
|
-
Puppet::Pops::Types::PStructType,
|
|
129
|
-
Puppet::Pops::Types::PTupleType,
|
|
130
|
-
Puppet::Pops::Types::PCallableType,
|
|
131
|
-
Puppet::Pops::Types::PType,
|
|
132
|
-
Puppet::Pops::Types::POptionalType,
|
|
133
|
-
Puppet::Pops::Types::PDefaultType,
|
|
134
|
-
]
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
def scalar_types
|
|
138
|
-
# PVariantType is also scalar, if its types are all Scalar
|
|
139
|
-
[
|
|
140
|
-
Puppet::Pops::Types::PScalarType,
|
|
141
|
-
Puppet::Pops::Types::PStringType,
|
|
142
|
-
Puppet::Pops::Types::PNumericType,
|
|
143
|
-
Puppet::Pops::Types::PIntegerType,
|
|
144
|
-
Puppet::Pops::Types::PFloatType,
|
|
145
|
-
Puppet::Pops::Types::PRegexpType,
|
|
146
|
-
Puppet::Pops::Types::PBooleanType,
|
|
147
|
-
Puppet::Pops::Types::PPatternType,
|
|
148
|
-
Puppet::Pops::Types::PEnumType,
|
|
149
|
-
]
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def numeric_types
|
|
153
|
-
# PVariantType is also numeric, if its types are all numeric
|
|
154
|
-
[
|
|
155
|
-
Puppet::Pops::Types::PNumericType,
|
|
156
|
-
Puppet::Pops::Types::PIntegerType,
|
|
157
|
-
Puppet::Pops::Types::PFloatType,
|
|
158
|
-
]
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def string_types
|
|
162
|
-
# PVariantType is also string type, if its types are all compatible
|
|
163
|
-
[
|
|
164
|
-
Puppet::Pops::Types::PStringType,
|
|
165
|
-
Puppet::Pops::Types::PPatternType,
|
|
166
|
-
Puppet::Pops::Types::PEnumType,
|
|
167
|
-
]
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def collection_types
|
|
171
|
-
# PVariantType is also string type, if its types are all compatible
|
|
172
|
-
[
|
|
173
|
-
Puppet::Pops::Types::PCollectionType,
|
|
174
|
-
Puppet::Pops::Types::PHashType,
|
|
175
|
-
Puppet::Pops::Types::PArrayType,
|
|
176
|
-
Puppet::Pops::Types::PStructType,
|
|
177
|
-
Puppet::Pops::Types::PTupleType,
|
|
178
|
-
]
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
def data_compatible_types
|
|
182
|
-
result = scalar_types
|
|
183
|
-
result << Puppet::Pops::Types::PDataType
|
|
184
|
-
result << array_t(types::PDataType.new)
|
|
185
|
-
result << types::TypeFactory.hash_of_data
|
|
186
|
-
result << Puppet::Pops::Types::PUndefType
|
|
187
|
-
tmp = tuple_t(types::PDataType.new)
|
|
188
|
-
result << (tmp)
|
|
189
|
-
tmp.size_type = range_t(0, nil)
|
|
190
|
-
result
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
def type_from_class(c)
|
|
194
|
-
c.is_a?(Class) ? c.new : c
|
|
195
|
-
end
|
|
123
|
+
def object_t(hash)
|
|
124
|
+
TypeFactory.object(hash)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def types
|
|
128
|
+
Types
|
|
196
129
|
end
|
|
197
130
|
|
|
198
131
|
context 'when inferring ruby' do
|
|
199
132
|
|
|
200
133
|
it 'fixnum translates to PIntegerType' do
|
|
201
|
-
expect(calculator.infer(1).class).to eq(
|
|
134
|
+
expect(calculator.infer(1).class).to eq(PIntegerType)
|
|
202
135
|
end
|
|
203
136
|
|
|
204
137
|
it 'large fixnum (or bignum depending on architecture) translates to PIntegerType' do
|
|
205
|
-
expect(calculator.infer(2**33).class).to eq(
|
|
138
|
+
expect(calculator.infer(2**33).class).to eq(PIntegerType)
|
|
206
139
|
end
|
|
207
140
|
|
|
208
141
|
it 'float translates to PFloatType' do
|
|
209
|
-
expect(calculator.infer(1.3).class).to eq(
|
|
142
|
+
expect(calculator.infer(1.3).class).to eq(PFloatType)
|
|
210
143
|
end
|
|
211
144
|
|
|
212
145
|
it 'string translates to PStringType' do
|
|
213
|
-
expect(calculator.infer('foo').class).to eq(
|
|
146
|
+
expect(calculator.infer('foo').class).to eq(PStringType)
|
|
214
147
|
end
|
|
215
148
|
|
|
216
149
|
it 'inferred string type knows the string value' do
|
|
217
150
|
t = calculator.infer('foo')
|
|
218
|
-
expect(t.class).to eq(
|
|
219
|
-
expect(t.
|
|
151
|
+
expect(t.class).to eq(PStringType)
|
|
152
|
+
expect(t.value).to eq('foo')
|
|
220
153
|
end
|
|
221
154
|
|
|
222
155
|
it 'boolean true translates to PBooleanType' do
|
|
223
|
-
expect(calculator.infer(true).class).to eq(
|
|
156
|
+
expect(calculator.infer(true).class).to eq(PBooleanType)
|
|
224
157
|
end
|
|
225
158
|
|
|
226
159
|
it 'boolean false translates to PBooleanType' do
|
|
227
|
-
expect(calculator.infer(false).class).to eq(
|
|
160
|
+
expect(calculator.infer(false).class).to eq(PBooleanType)
|
|
228
161
|
end
|
|
229
162
|
|
|
230
163
|
it 'regexp translates to PRegexpType' do
|
|
231
|
-
expect(calculator.infer(/^a regular expression$/).class).to eq(
|
|
164
|
+
expect(calculator.infer(/^a regular expression$/).class).to eq(PRegexpType)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it 'iterable translates to PIteratorType' do
|
|
168
|
+
expect(calculator.infer(Iterable.on(1))).to be_a(PIteratorType)
|
|
232
169
|
end
|
|
233
170
|
|
|
234
171
|
it 'nil translates to PUndefType' do
|
|
235
|
-
expect(calculator.infer(nil).class).to eq(
|
|
172
|
+
expect(calculator.infer(nil).class).to eq(PUndefType)
|
|
236
173
|
end
|
|
237
174
|
|
|
238
|
-
it ':undef translates to
|
|
239
|
-
expect(calculator.infer(:undef).class).to eq(
|
|
175
|
+
it ':undef translates to PUndefType' do
|
|
176
|
+
expect(calculator.infer(:undef).class).to eq(PUndefType)
|
|
240
177
|
end
|
|
241
178
|
|
|
242
179
|
it 'an instance of class Foo translates to PRuntimeType[ruby, Foo]' do
|
|
243
|
-
|
|
180
|
+
::Foo = Class.new
|
|
181
|
+
begin
|
|
182
|
+
t = calculator.infer(::Foo.new)
|
|
183
|
+
expect(t.class).to eq(PRuntimeType)
|
|
184
|
+
expect(t.runtime).to eq(:ruby)
|
|
185
|
+
expect(t.runtime_type_name).to eq('Foo')
|
|
186
|
+
ensure
|
|
187
|
+
Object.send(:remove_const, :Foo)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it 'Class Foo translates to PType[PRuntimeType[ruby, Foo]]' do
|
|
192
|
+
::Foo = Class.new
|
|
193
|
+
begin
|
|
194
|
+
t = calculator.infer(::Foo)
|
|
195
|
+
expect(t.class).to eq(PType)
|
|
196
|
+
tt = t.type
|
|
197
|
+
expect(tt.class).to eq(PRuntimeType)
|
|
198
|
+
expect(tt.runtime).to eq(:ruby)
|
|
199
|
+
expect(tt.runtime_type_name).to eq('Foo')
|
|
200
|
+
ensure
|
|
201
|
+
Object.send(:remove_const, :Foo)
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it 'Module FooModule translates to PType[PRuntimeType[ruby, FooModule]]' do
|
|
206
|
+
::FooModule = Module.new
|
|
207
|
+
begin
|
|
208
|
+
t = calculator.infer(::FooModule)
|
|
209
|
+
expect(t.class).to eq(PType)
|
|
210
|
+
tt = t.type
|
|
211
|
+
expect(tt.class).to eq(PRuntimeType)
|
|
212
|
+
expect(tt.runtime).to eq(:ruby)
|
|
213
|
+
expect(tt.runtime_type_name).to eq('FooModule')
|
|
214
|
+
ensure
|
|
215
|
+
Object.send(:remove_const, :FooModule)
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
context 'sensitive' do
|
|
220
|
+
it 'translates to PSensitiveType' do
|
|
221
|
+
expect(calculator.infer(PSensitiveType::Sensitive.new("hunter2")).class).to eq(PSensitiveType)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
context 'binary' do
|
|
226
|
+
it 'translates to PBinaryType' do
|
|
227
|
+
expect(calculator.infer(PBinaryType::Binary.from_binary_string("binary")).class).to eq(PBinaryType)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
context 'version' do
|
|
232
|
+
it 'translates to PVersionType' do
|
|
233
|
+
expect(calculator.infer(SemanticPuppet::Version.new(1,0,0)).class).to eq(PSemVerType)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
it 'range translates to PVersionRangeType' do
|
|
237
|
+
expect(calculator.infer(SemanticPuppet::VersionRange.parse('1.x')).class).to eq(PSemVerRangeType)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
it 'translates to a limited PVersionType by infer_set' do
|
|
241
|
+
v = SemanticPuppet::Version.new(1,0,0)
|
|
242
|
+
t = calculator.infer_set(v)
|
|
243
|
+
expect(t.class).to eq(PSemVerType)
|
|
244
|
+
expect(t.ranges.size).to eq(1)
|
|
245
|
+
expect(t.ranges[0].begin).to eq(v)
|
|
246
|
+
expect(t.ranges[0].end).to eq(v)
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
context 'timespan' do
|
|
251
|
+
it 'translates to PTimespanType' do
|
|
252
|
+
expect(calculator.infer(Time::Timespan.from_fields_hash('days' => 2))).to be_a(PTimespanType)
|
|
244
253
|
end
|
|
245
254
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
255
|
+
it 'translates to a limited PTimespanType by infer_set' do
|
|
256
|
+
ts = Time::Timespan.from_fields_hash('days' => 2)
|
|
257
|
+
t = calculator.infer_set(ts)
|
|
258
|
+
expect(t.class).to eq(PTimespanType)
|
|
259
|
+
expect(t.from).to be(ts)
|
|
260
|
+
expect(t.to).to be(ts)
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
context 'timestamp' do
|
|
265
|
+
it 'translates to PTimespanType' do
|
|
266
|
+
expect(calculator.infer(Time::Timestamp.now)).to be_a(PTimestampType)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it 'translates to a limited PTimespanType by infer_set' do
|
|
270
|
+
ts = Time::Timestamp.now
|
|
271
|
+
t = calculator.infer_set(ts)
|
|
272
|
+
expect(t.class).to eq(PTimestampType)
|
|
273
|
+
expect(t.from).to be(ts)
|
|
274
|
+
expect(t.to).to be(ts)
|
|
275
|
+
end
|
|
250
276
|
end
|
|
251
277
|
|
|
252
278
|
context 'array' do
|
|
279
|
+
let(:derived) do
|
|
280
|
+
Class.new(Array).new([1,2])
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
let(:derived_object) do
|
|
284
|
+
Class.new(Array) do
|
|
285
|
+
include PuppetObject
|
|
286
|
+
|
|
287
|
+
def self._pcore_type
|
|
288
|
+
@type ||= TypeFactory.object('name' => 'DerivedObjectArray')
|
|
289
|
+
end
|
|
290
|
+
end.new([1,2])
|
|
291
|
+
end
|
|
292
|
+
|
|
253
293
|
it 'translates to PArrayType' do
|
|
254
|
-
expect(calculator.infer([1,2]).class).to eq(
|
|
294
|
+
expect(calculator.infer([1,2]).class).to eq(PArrayType)
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
it 'translates derived Array to PRuntimeType' do
|
|
298
|
+
expect(calculator.infer(derived).class).to eq(PRuntimeType)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
it 'translates derived Puppet Object Array to PObjectType' do
|
|
302
|
+
expect(calculator.infer(derived_object).class).to eq(PObjectType)
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
it 'Instance of derived Array class is not instance of Array type' do
|
|
306
|
+
expect(PArrayType::DEFAULT).not_to be_instance(derived)
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
it 'Instance of derived Array class is instance of Runtime type' do
|
|
310
|
+
expect(runtime_t('ruby', nil)).to be_instance(derived)
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
it 'Instance of derived Puppet Object Array class is not instance of Array type' do
|
|
314
|
+
expect(PArrayType::DEFAULT).not_to be_instance(derived_object)
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
it 'Instance of derived Puppet Object Array class is instance of Object type' do
|
|
318
|
+
expect(object_t('name' => 'DerivedObjectArray')).to be_instance(derived_object)
|
|
255
319
|
end
|
|
256
320
|
|
|
257
321
|
it 'with fixnum values translates to PArrayType[PIntegerType]' do
|
|
258
|
-
expect(calculator.infer([1,2]).element_type.class).to eq(
|
|
322
|
+
expect(calculator.infer([1,2]).element_type.class).to eq(PIntegerType)
|
|
259
323
|
end
|
|
260
324
|
|
|
261
325
|
it 'with 32 and 64 bit integer values translates to PArrayType[PIntegerType]' do
|
|
262
|
-
expect(calculator.infer([1,2**33]).element_type.class).to eq(
|
|
326
|
+
expect(calculator.infer([1,2**33]).element_type.class).to eq(PIntegerType)
|
|
263
327
|
end
|
|
264
328
|
|
|
265
329
|
it 'Range of integer values are computed' do
|
|
266
330
|
t = calculator.infer([-3,0,42]).element_type
|
|
267
|
-
expect(t.class).to eq(
|
|
331
|
+
expect(t.class).to eq(PIntegerType)
|
|
268
332
|
expect(t.from).to eq(-3)
|
|
269
333
|
expect(t.to).to eq(42)
|
|
270
334
|
end
|
|
271
335
|
|
|
272
|
-
it
|
|
336
|
+
it 'Compound string values are converted to enums' do
|
|
273
337
|
t = calculator.infer(['a','b', 'c']).element_type
|
|
274
|
-
expect(t.class).to eq(
|
|
338
|
+
expect(t.class).to eq(PEnumType)
|
|
275
339
|
expect(t.values).to eq(['a', 'b', 'c'])
|
|
276
340
|
end
|
|
277
341
|
|
|
278
|
-
it 'with
|
|
279
|
-
expect(calculator.infer([1,2.0]).element_type.class).to eq(
|
|
342
|
+
it 'with integer and float values translates to PArrayType[PNumericType]' do
|
|
343
|
+
expect(calculator.infer([1,2.0]).element_type.class).to eq(PNumericType)
|
|
280
344
|
end
|
|
281
345
|
|
|
282
|
-
it 'with
|
|
283
|
-
expect(calculator.infer([1,'two']).element_type.class).to eq(
|
|
346
|
+
it 'with integer and string values translates to PArrayType[PScalarDataType]' do
|
|
347
|
+
expect(calculator.infer([1,'two']).element_type.class).to eq(PScalarDataType)
|
|
284
348
|
end
|
|
285
349
|
|
|
286
|
-
it 'with float and string values translates to PArrayType[
|
|
287
|
-
expect(calculator.infer([1.0,'two']).element_type.class).to eq(
|
|
350
|
+
it 'with float and string values translates to PArrayType[PScalarDataType]' do
|
|
351
|
+
expect(calculator.infer([1.0,'two']).element_type.class).to eq(PScalarDataType)
|
|
288
352
|
end
|
|
289
353
|
|
|
290
|
-
it 'with
|
|
291
|
-
expect(calculator.infer([1, 2.0,'two']).element_type.class).to eq(
|
|
354
|
+
it 'with integer, float, and string values translates to PArrayType[PScalarDataType]' do
|
|
355
|
+
expect(calculator.infer([1, 2.0,'two']).element_type.class).to eq(PScalarDataType)
|
|
292
356
|
end
|
|
293
357
|
|
|
294
|
-
it 'with
|
|
295
|
-
expect(calculator.infer([1, /two/]).element_type.class).to eq(
|
|
358
|
+
it 'with integer and regexp values translates to PArrayType[PScalarType]' do
|
|
359
|
+
expect(calculator.infer([1, /two/]).element_type.class).to eq(PScalarType)
|
|
296
360
|
end
|
|
297
361
|
|
|
298
362
|
it 'with string and regexp values translates to PArrayType[PScalarType]' do
|
|
299
|
-
expect(calculator.infer(['one', /two/]).element_type.class).to eq(
|
|
363
|
+
expect(calculator.infer(['one', /two/]).element_type.class).to eq(PScalarType)
|
|
300
364
|
end
|
|
301
365
|
|
|
302
366
|
it 'with string and symbol values translates to PArrayType[PAnyType]' do
|
|
303
|
-
expect(calculator.infer(['one', :two]).element_type.class).to eq(
|
|
367
|
+
expect(calculator.infer(['one', :two]).element_type.class).to eq(PAnyType)
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
it 'with integer and nil values translates to PArrayType[PIntegerType]' do
|
|
371
|
+
expect(calculator.infer([1, nil]).element_type.class).to eq(PIntegerType)
|
|
304
372
|
end
|
|
305
373
|
|
|
306
|
-
it 'with
|
|
307
|
-
expect(calculator.infer([1,
|
|
374
|
+
it 'with integer value, and array of string values, translates to Array[Data]' do
|
|
375
|
+
expect(calculator.infer([1, ['two']]).element_type.name).to eq('Data')
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
it 'with integer value, and hash of string => string values, translates to Array[Data]' do
|
|
379
|
+
expect(calculator.infer([1, {'two' => 'three'} ]).element_type.name).to eq('Data')
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
it 'with integer value, and hash of integer => string values, translates to Array[RichData]' do
|
|
383
|
+
expect(calculator.infer([1, {2 => 'three'} ]).element_type.name).to eq('RichData')
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
it 'with integer, regexp, and binary values translates to Array[RichData]' do
|
|
387
|
+
expect(calculator.infer([1, /two/, PBinaryType::Binary.from_string('three')]).element_type.name).to eq('RichData')
|
|
308
388
|
end
|
|
309
389
|
|
|
310
390
|
it 'with arrays of string values translates to PArrayType[PArrayType[PStringType]]' do
|
|
311
|
-
et = calculator.infer([['first' 'array'], ['second','array']])
|
|
312
|
-
expect(et.class).to eq(
|
|
391
|
+
et = calculator.infer([['first', 'array'], ['second','array']])
|
|
392
|
+
expect(et.class).to eq(PArrayType)
|
|
313
393
|
et = et.element_type
|
|
314
|
-
expect(et.class).to eq(
|
|
394
|
+
expect(et.class).to eq(PArrayType)
|
|
315
395
|
et = et.element_type
|
|
316
|
-
expect(et.class).to eq(
|
|
396
|
+
expect(et.class).to eq(PEnumType)
|
|
317
397
|
end
|
|
318
398
|
|
|
319
|
-
it 'with array of string values and array of fixnums translates to PArrayType[PArrayType[
|
|
320
|
-
et = calculator.infer([['first' 'array'], [1,2]])
|
|
321
|
-
expect(et.class).to eq(
|
|
399
|
+
it 'with array of string values and array of fixnums translates to PArrayType[PArrayType[PScalarDataType]]' do
|
|
400
|
+
et = calculator.infer([['first', 'array'], [1,2]])
|
|
401
|
+
expect(et.class).to eq(PArrayType)
|
|
322
402
|
et = et.element_type
|
|
323
|
-
expect(et.class).to eq(
|
|
403
|
+
expect(et.class).to eq(PArrayType)
|
|
324
404
|
et = et.element_type
|
|
325
|
-
expect(et.class).to eq(
|
|
405
|
+
expect(et.class).to eq(PScalarDataType)
|
|
326
406
|
end
|
|
327
407
|
|
|
328
|
-
it 'with hashes of string values translates to PArrayType[PHashType[
|
|
408
|
+
it 'with hashes of string values translates to PArrayType[PHashType[PEnumType]]' do
|
|
329
409
|
et = calculator.infer([{:first => 'first', :second => 'second' }, {:first => 'first', :second => 'second' }])
|
|
330
|
-
expect(et.class).to eq(
|
|
410
|
+
expect(et.class).to eq(PArrayType)
|
|
331
411
|
et = et.element_type
|
|
332
|
-
expect(et.class).to eq(
|
|
333
|
-
et = et.
|
|
334
|
-
expect(et.class).to eq(
|
|
412
|
+
expect(et.class).to eq(PHashType)
|
|
413
|
+
et = et.value_type
|
|
414
|
+
expect(et.class).to eq(PEnumType)
|
|
335
415
|
end
|
|
336
416
|
|
|
337
|
-
it 'with hash of string values and hash of fixnums translates to PArrayType[PHashType[
|
|
417
|
+
it 'with hash of string values and hash of fixnums translates to PArrayType[PHashType[PScalarDataType]]' do
|
|
338
418
|
et = calculator.infer([{:first => 'first', :second => 'second' }, {:first => 1, :second => 2 }])
|
|
339
|
-
expect(et.class).to eq(
|
|
340
|
-
et = et.element_type
|
|
341
|
-
expect(et.class).to eq(Puppet::Pops::Types::PHashType)
|
|
419
|
+
expect(et.class).to eq(PArrayType)
|
|
342
420
|
et = et.element_type
|
|
343
|
-
expect(et.class).to eq(
|
|
421
|
+
expect(et.class).to eq(PHashType)
|
|
422
|
+
et = et.value_type
|
|
423
|
+
expect(et.class).to eq(PScalarDataType)
|
|
344
424
|
end
|
|
345
425
|
end
|
|
346
426
|
|
|
347
427
|
context 'hash' do
|
|
428
|
+
let(:derived) do
|
|
429
|
+
Class.new(Hash)[:first => 1, :second => 2]
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
let(:derived_object) do
|
|
433
|
+
Class.new(Hash) do
|
|
434
|
+
include PuppetObject
|
|
435
|
+
|
|
436
|
+
def self._pcore_type
|
|
437
|
+
@type ||= TypeFactory.object('name' => 'DerivedObjectHash')
|
|
438
|
+
end
|
|
439
|
+
end[:first => 1, :second => 2]
|
|
440
|
+
end
|
|
441
|
+
|
|
348
442
|
it 'translates to PHashType' do
|
|
349
|
-
expect(calculator.infer({:first => 1, :second => 2}).class).to eq(
|
|
443
|
+
expect(calculator.infer({:first => 1, :second => 2}).class).to eq(PHashType)
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
it 'translates derived Hash to PRuntimeType' do
|
|
447
|
+
expect(calculator.infer(derived).class).to eq(PRuntimeType)
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
it 'translates derived Puppet Object Hash to PObjectType' do
|
|
451
|
+
expect(calculator.infer(derived_object).class).to eq(PObjectType)
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
it 'Instance of derived Hash class is not instance of Hash type' do
|
|
455
|
+
expect(PHashType::DEFAULT).not_to be_instance(derived)
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
it 'Instance of derived Hash class is instance of Runtime type' do
|
|
459
|
+
expect(runtime_t('ruby', nil)).to be_instance(derived)
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
it 'Instance of derived Puppet Object Hash class is not instance of Hash type' do
|
|
463
|
+
expect(PHashType::DEFAULT).not_to be_instance(derived_object)
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
it 'Instance of derived Puppet Object Hash class is instance of Object type' do
|
|
467
|
+
expect(object_t('name' => 'DerivedObjectHash')).to be_instance(derived_object)
|
|
350
468
|
end
|
|
351
469
|
|
|
352
470
|
it 'with symbolic keys translates to PHashType[PRuntimeType[ruby, Symbol], value]' do
|
|
353
471
|
k = calculator.infer({:first => 1, :second => 2}).key_type
|
|
354
|
-
expect(k.class).to eq(
|
|
472
|
+
expect(k.class).to eq(PRuntimeType)
|
|
355
473
|
expect(k.runtime).to eq(:ruby)
|
|
356
474
|
expect(k.runtime_type_name).to eq('Symbol')
|
|
357
475
|
end
|
|
358
476
|
|
|
359
|
-
it 'with string keys translates to PHashType[
|
|
360
|
-
expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(
|
|
477
|
+
it 'with string keys translates to PHashType[PEnumType, value]' do
|
|
478
|
+
expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(PEnumType)
|
|
361
479
|
end
|
|
362
480
|
|
|
363
481
|
it 'with fixnum values translates to PHashType[key, PIntegerType]' do
|
|
364
|
-
expect(calculator.infer({:first => 1, :second => 2}).
|
|
482
|
+
expect(calculator.infer({:first => 1, :second => 2}).value_type.class).to eq(PIntegerType)
|
|
365
483
|
end
|
|
366
484
|
|
|
367
485
|
it 'when empty infers a type that answers true to is_the_empty_hash?' do
|
|
@@ -374,110 +492,132 @@ describe 'The type calculator' do
|
|
|
374
492
|
end
|
|
375
493
|
|
|
376
494
|
it 'when empty is not assignable to a PHashType with from size > 0' do
|
|
377
|
-
expect(calculator.assignable?(
|
|
495
|
+
expect(calculator.assignable?(hash_t(string_t,string_t,range_t(1, 1)), calculator.infer({}))).to eq(false)
|
|
378
496
|
end
|
|
379
497
|
|
|
380
498
|
context 'using infer_set' do
|
|
381
499
|
it "with 'first' and 'second' keys translates to PStructType[{first=>value,second=>value}]" do
|
|
382
500
|
t = calculator.infer_set({'first' => 1, 'second' => 2})
|
|
383
|
-
expect(t.class).to eq(
|
|
501
|
+
expect(t.class).to eq(PStructType)
|
|
384
502
|
expect(t.elements.size).to eq(2)
|
|
385
503
|
expect(t.elements.map { |e| e.name }.sort).to eq(['first', 'second'])
|
|
386
504
|
end
|
|
387
505
|
|
|
388
506
|
it 'with string keys and string and array values translates to PStructType[{key1=>PStringType,key2=>PTupleType}]' do
|
|
389
507
|
t = calculator.infer_set({ 'mode' => 'read', 'path' => ['foo', 'fee' ] })
|
|
390
|
-
expect(t.class).to eq(
|
|
508
|
+
expect(t.class).to eq(PStructType)
|
|
391
509
|
expect(t.elements.size).to eq(2)
|
|
392
|
-
els = t.elements.map { |e| e.
|
|
393
|
-
expect(els[0].class).to eq(
|
|
394
|
-
expect(els[1].class).to eq(
|
|
510
|
+
els = t.elements.map { |e| e.value_type }.sort {|a,b| a.to_s <=> b.to_s }
|
|
511
|
+
expect(els[0].class).to eq(PStringType)
|
|
512
|
+
expect(els[1].class).to eq(PTupleType)
|
|
395
513
|
end
|
|
396
514
|
|
|
397
515
|
it 'with mixed string and non-string keys translates to PHashType' do
|
|
398
516
|
t = calculator.infer_set({ 1 => 'first', 'second' => 'second' })
|
|
399
|
-
expect(t.class).to eq(
|
|
517
|
+
expect(t.class).to eq(PHashType)
|
|
400
518
|
end
|
|
401
519
|
|
|
402
520
|
it 'with empty string keys translates to PHashType' do
|
|
403
521
|
t = calculator.infer_set({ '' => 'first', 'second' => 'second' })
|
|
404
|
-
expect(t.class).to eq(
|
|
522
|
+
expect(t.class).to eq(PHashType)
|
|
405
523
|
end
|
|
406
524
|
end
|
|
407
525
|
end
|
|
408
526
|
end
|
|
409
527
|
|
|
410
528
|
context 'patterns' do
|
|
411
|
-
it
|
|
529
|
+
it 'constructs a PPatternType' do
|
|
412
530
|
t = pattern_t('a(b)c')
|
|
413
|
-
expect(t.class).to eq(
|
|
531
|
+
expect(t.class).to eq(PPatternType)
|
|
414
532
|
expect(t.patterns.size).to eq(1)
|
|
415
|
-
expect(t.patterns[0].class).to eq(
|
|
533
|
+
expect(t.patterns[0].class).to eq(PRegexpType)
|
|
416
534
|
expect(t.patterns[0].pattern).to eq('a(b)c')
|
|
417
535
|
expect(t.patterns[0].regexp.match('abc')[1]).to eq('b')
|
|
418
536
|
end
|
|
419
537
|
|
|
420
|
-
it
|
|
421
|
-
t =
|
|
422
|
-
expect(t.values).to eq(['a', 'b', 'c', 'abc'])
|
|
538
|
+
it 'constructs a PEnumType with multiple strings' do
|
|
539
|
+
t = enum_t('a', 'b', 'c', 'abc')
|
|
540
|
+
expect(t.values).to eq(['a', 'b', 'c', 'abc'].sort)
|
|
423
541
|
end
|
|
424
542
|
end
|
|
425
543
|
|
|
426
544
|
# Deal with cases not covered by computing common type
|
|
427
545
|
context 'when computing common type' do
|
|
428
546
|
it 'computes given resource type commonality' do
|
|
429
|
-
r1 =
|
|
430
|
-
|
|
431
|
-
r2
|
|
432
|
-
r2.type_name = 'File'
|
|
433
|
-
expect(calculator.string(calculator.common_type(r1, r2))).to eq("File")
|
|
547
|
+
r1 = PResourceType.new('File', nil)
|
|
548
|
+
r2 = PResourceType.new('File', nil)
|
|
549
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('File')
|
|
434
550
|
|
|
435
|
-
r2 = Puppet::Pops::Types::PResourceType.new()
|
|
436
|
-
r2.type_name = 'File'
|
|
437
|
-
r2.title = '/tmp/foo'
|
|
438
|
-
expect(calculator.string(calculator.common_type(r1, r2))).to eq("File")
|
|
439
551
|
|
|
440
|
-
|
|
441
|
-
r1.
|
|
442
|
-
r1.title = '/tmp/foo'
|
|
443
|
-
expect(calculator.string(calculator.common_type(r1, r2))).to eq("File['/tmp/foo']")
|
|
552
|
+
r2 = PResourceType.new('File', '/tmp/foo')
|
|
553
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('File')
|
|
444
554
|
|
|
445
|
-
r1 =
|
|
446
|
-
r1.
|
|
447
|
-
r1.title = '/tmp/bar'
|
|
448
|
-
expect(calculator.string(calculator.common_type(r1, r2))).to eq("File")
|
|
555
|
+
r1 = PResourceType.new('File', '/tmp/foo')
|
|
556
|
+
expect(calculator.common_type(r1, r2).to_s).to eq("File['/tmp/foo']")
|
|
449
557
|
|
|
450
|
-
|
|
451
|
-
r2.
|
|
452
|
-
|
|
453
|
-
|
|
558
|
+
r1 = PResourceType.new('File', '/tmp/bar')
|
|
559
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('File')
|
|
560
|
+
|
|
561
|
+
r2 = PResourceType.new('Package', 'apache')
|
|
562
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Resource')
|
|
454
563
|
end
|
|
455
564
|
|
|
456
565
|
it 'computes given hostclass type commonality' do
|
|
457
|
-
r1 =
|
|
458
|
-
|
|
459
|
-
r2
|
|
460
|
-
|
|
461
|
-
|
|
566
|
+
r1 = PHostClassType.new('foo')
|
|
567
|
+
r2 = PHostClassType.new('foo')
|
|
568
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Class[foo]')
|
|
569
|
+
|
|
570
|
+
r2 = PHostClassType.new('bar')
|
|
571
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
|
572
|
+
|
|
573
|
+
r2 = PHostClassType.new(nil)
|
|
574
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
|
462
575
|
|
|
463
|
-
|
|
464
|
-
r2.
|
|
465
|
-
|
|
576
|
+
r1 = PHostClassType.new(nil)
|
|
577
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
|
578
|
+
end
|
|
579
|
+
|
|
580
|
+
context 'of strings' do
|
|
581
|
+
it 'computes commonality' do
|
|
582
|
+
t1 = string_t('abc')
|
|
583
|
+
t2 = string_t('xyz')
|
|
584
|
+
common_t = calculator.common_type(t1,t2)
|
|
585
|
+
expect(common_t.class).to eq(PEnumType)
|
|
586
|
+
expect(common_t.values).to eq(['abc', 'xyz'])
|
|
587
|
+
end
|
|
466
588
|
|
|
467
|
-
|
|
468
|
-
|
|
589
|
+
it 'computes common size_type' do
|
|
590
|
+
t1 = constrained_string_t(range_t(3,6))
|
|
591
|
+
t2 = constrained_string_t(range_t(2,4))
|
|
592
|
+
common_t = calculator.common_type(t1,t2)
|
|
593
|
+
expect(common_t.class).to eq(PStringType)
|
|
594
|
+
expect(common_t.size_type).to eq(range_t(2,6))
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
it 'computes common size_type to be undef when one of the types has no size_type' do
|
|
598
|
+
t1 = string_t
|
|
599
|
+
t2 = constrained_string_t(range_t(2,4))
|
|
600
|
+
common_t = calculator.common_type(t1,t2)
|
|
601
|
+
expect(common_t.class).to eq(PStringType)
|
|
602
|
+
expect(common_t.size_type).to be_nil
|
|
603
|
+
end
|
|
469
604
|
|
|
470
|
-
|
|
471
|
-
|
|
605
|
+
it 'computes values to be empty if the one has empty values' do
|
|
606
|
+
t1 = string_t('apa')
|
|
607
|
+
t2 = constrained_string_t(range_t(2,4))
|
|
608
|
+
common_t = calculator.common_type(t1,t2)
|
|
609
|
+
expect(common_t.class).to eq(PStringType)
|
|
610
|
+
expect(common_t.value).to be_nil
|
|
611
|
+
end
|
|
472
612
|
end
|
|
473
613
|
|
|
474
614
|
it 'computes pattern commonality' do
|
|
475
615
|
t1 = pattern_t('abc')
|
|
476
616
|
t2 = pattern_t('xyz')
|
|
477
617
|
common_t = calculator.common_type(t1,t2)
|
|
478
|
-
expect(common_t.class).to eq(
|
|
618
|
+
expect(common_t.class).to eq(PPatternType)
|
|
479
619
|
expect(common_t.patterns.map { |pr| pr.pattern }).to eq(['abc', 'xyz'])
|
|
480
|
-
expect(
|
|
620
|
+
expect(common_t.to_s).to eq('Pattern[/abc/, /xyz/]')
|
|
481
621
|
end
|
|
482
622
|
|
|
483
623
|
it 'computes enum commonality to value set sum' do
|
|
@@ -488,131 +628,253 @@ describe 'The type calculator' do
|
|
|
488
628
|
end
|
|
489
629
|
|
|
490
630
|
it 'computed variant commonality to type union where added types are not sub-types' do
|
|
491
|
-
a_t1 = integer_t
|
|
631
|
+
a_t1 = integer_t
|
|
492
632
|
a_t2 = enum_t('b')
|
|
493
633
|
v_a = variant_t(a_t1, a_t2)
|
|
494
|
-
b_t1 =
|
|
495
|
-
|
|
634
|
+
b_t1 = integer_t
|
|
635
|
+
b_t2 = enum_t('a')
|
|
636
|
+
v_b = variant_t(b_t1, b_t2)
|
|
496
637
|
common_t = calculator.common_type(v_a, v_b)
|
|
497
|
-
expect(common_t.class).to eq(
|
|
498
|
-
expect(Set.new(common_t.types)).to eq(Set.new([a_t1, a_t2, b_t1]))
|
|
638
|
+
expect(common_t.class).to eq(PVariantType)
|
|
639
|
+
expect(Set.new(common_t.types)).to eq(Set.new([a_t1, a_t2, b_t1, b_t2]))
|
|
499
640
|
end
|
|
500
641
|
|
|
501
642
|
it 'computed variant commonality to type union where added types are sub-types' do
|
|
502
|
-
a_t1 = integer_t
|
|
503
|
-
a_t2 = string_t
|
|
643
|
+
a_t1 = integer_t
|
|
644
|
+
a_t2 = string_t
|
|
504
645
|
v_a = variant_t(a_t1, a_t2)
|
|
505
|
-
b_t1 =
|
|
506
|
-
|
|
646
|
+
b_t1 = integer_t
|
|
647
|
+
b_t2 = enum_t('a')
|
|
648
|
+
v_b = variant_t(b_t1, b_t2)
|
|
507
649
|
common_t = calculator.common_type(v_a, v_b)
|
|
508
|
-
expect(common_t.class).to eq(
|
|
650
|
+
expect(common_t.class).to eq(PVariantType)
|
|
509
651
|
expect(Set.new(common_t.types)).to eq(Set.new([a_t1, a_t2]))
|
|
510
652
|
end
|
|
511
653
|
|
|
512
|
-
context
|
|
654
|
+
context 'commonality of scalar data types' do
|
|
655
|
+
it 'Numeric and String == ScalarData' do
|
|
656
|
+
expect(calculator.common_type(PNumericType::DEFAULT, PStringType::DEFAULT).class).to eq(PScalarDataType)
|
|
657
|
+
end
|
|
658
|
+
|
|
659
|
+
it 'Numeric and Boolean == ScalarData' do
|
|
660
|
+
expect(calculator.common_type(PNumericType::DEFAULT, PBooleanType::DEFAULT).class).to eq(PScalarDataType)
|
|
661
|
+
end
|
|
662
|
+
|
|
663
|
+
it 'String and Boolean == ScalarData' do
|
|
664
|
+
expect(calculator.common_type(PStringType::DEFAULT, PBooleanType::DEFAULT).class).to eq(PScalarDataType)
|
|
665
|
+
end
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
context 'commonality of scalar types' do
|
|
669
|
+
it 'Regexp and Integer == Scalar' do
|
|
670
|
+
expect(calculator.common_type(PRegexpType::DEFAULT, PScalarDataType::DEFAULT).class).to eq(PScalarType)
|
|
671
|
+
end
|
|
672
|
+
|
|
673
|
+
it 'Regexp and SemVer == ScalarData' do
|
|
674
|
+
expect(calculator.common_type(PRegexpType::DEFAULT, PSemVerType::DEFAULT).class).to eq(PScalarType)
|
|
675
|
+
end
|
|
676
|
+
|
|
677
|
+
it 'Timestamp and Timespan == ScalarData' do
|
|
678
|
+
expect(calculator.common_type(PTimestampType::DEFAULT, PTimespanType::DEFAULT).class).to eq(PScalarType)
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
it 'Timestamp and Boolean == ScalarData' do
|
|
682
|
+
expect(calculator.common_type(PTimestampType::DEFAULT, PBooleanType::DEFAULT).class).to eq(PScalarType)
|
|
683
|
+
end
|
|
684
|
+
end
|
|
685
|
+
|
|
686
|
+
context 'of callables' do
|
|
513
687
|
it 'incompatible instances => generic callable' do
|
|
514
688
|
t1 = callable_t(String)
|
|
515
689
|
t2 = callable_t(Integer)
|
|
516
690
|
common_t = calculator.common_type(t1, t2)
|
|
517
|
-
expect(common_t.class).to be(
|
|
691
|
+
expect(common_t.class).to be(PCallableType)
|
|
518
692
|
expect(common_t.param_types).to be_nil
|
|
519
693
|
expect(common_t.block_type).to be_nil
|
|
520
694
|
end
|
|
521
695
|
|
|
522
696
|
it 'compatible instances => the most specific' do
|
|
523
697
|
t1 = callable_t(String)
|
|
524
|
-
scalar_t =
|
|
698
|
+
scalar_t = PScalarType.new
|
|
525
699
|
t2 = callable_t(scalar_t)
|
|
526
700
|
common_t = calculator.common_type(t1, t2)
|
|
527
|
-
expect(common_t.class).to be(
|
|
528
|
-
expect(common_t.param_types.class).to be(
|
|
701
|
+
expect(common_t.class).to be(PCallableType)
|
|
702
|
+
expect(common_t.param_types.class).to be(PTupleType)
|
|
529
703
|
expect(common_t.param_types.types).to eql([string_t])
|
|
530
704
|
expect(common_t.block_type).to be_nil
|
|
531
705
|
end
|
|
532
706
|
|
|
533
707
|
it 'block_type is included in the check (incompatible block)' do
|
|
534
|
-
|
|
535
|
-
|
|
708
|
+
b1 = callable_t(String)
|
|
709
|
+
b2 = callable_t(Integer)
|
|
710
|
+
t1 = callable_t(String, b1)
|
|
711
|
+
t2 = callable_t(String, b2)
|
|
536
712
|
common_t = calculator.common_type(t1, t2)
|
|
537
|
-
expect(common_t.class).to be(
|
|
713
|
+
expect(common_t.class).to be(PCallableType)
|
|
538
714
|
expect(common_t.param_types).to be_nil
|
|
539
715
|
expect(common_t.block_type).to be_nil
|
|
540
716
|
end
|
|
541
717
|
|
|
542
718
|
it 'block_type is included in the check (compatible block)' do
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
719
|
+
b1 = callable_t(String)
|
|
720
|
+
t1 = callable_t(String, b1)
|
|
721
|
+
scalar_t = PScalarType::DEFAULT
|
|
722
|
+
b2 = callable_t(scalar_t)
|
|
723
|
+
t2 = callable_t(String, b2)
|
|
546
724
|
common_t = calculator.common_type(t1, t2)
|
|
547
|
-
expect(common_t.param_types.class).to be(
|
|
725
|
+
expect(common_t.param_types.class).to be(PTupleType)
|
|
548
726
|
expect(common_t.block_type).to eql(callable_t(scalar_t))
|
|
549
727
|
end
|
|
728
|
+
|
|
729
|
+
it 'return_type is included in the check (incompatible return_type)' do
|
|
730
|
+
t1 = callable_t([String], String)
|
|
731
|
+
t2 = callable_t([String], Integer)
|
|
732
|
+
common_t = calculator.common_type(t1, t2)
|
|
733
|
+
expect(common_t.class).to be(PCallableType)
|
|
734
|
+
expect(common_t.param_types).to be_nil
|
|
735
|
+
expect(common_t.return_type).to be_nil
|
|
736
|
+
end
|
|
737
|
+
|
|
738
|
+
it 'return_type is included in the check (compatible return_type)' do
|
|
739
|
+
t1 = callable_t([String], Numeric)
|
|
740
|
+
t2 = callable_t([String], Integer)
|
|
741
|
+
common_t = calculator.common_type(t1, t2)
|
|
742
|
+
expect(common_t.class).to be(PCallableType)
|
|
743
|
+
expect(common_t.param_types).to be_a(PTupleType)
|
|
744
|
+
expect(common_t.return_type).to eql(PNumericType::DEFAULT)
|
|
745
|
+
end
|
|
550
746
|
end
|
|
551
747
|
end
|
|
552
748
|
|
|
553
749
|
context 'computes assignability' do
|
|
554
|
-
include_context
|
|
750
|
+
include_context 'types_setup'
|
|
751
|
+
|
|
752
|
+
it 'such that all types are assignable to themselves' do
|
|
753
|
+
all_types.each do |tc|
|
|
754
|
+
t = tc::DEFAULT
|
|
755
|
+
expect(t).to be_assignable_to(t)
|
|
756
|
+
end
|
|
757
|
+
end
|
|
555
758
|
|
|
556
759
|
context 'for Unit, such that' do
|
|
557
760
|
it 'all types are assignable to Unit' do
|
|
558
|
-
t =
|
|
559
|
-
all_types.each { |t2| expect(t2
|
|
761
|
+
t = PUnitType::DEFAULT
|
|
762
|
+
all_types.each { |t2| expect(t2::DEFAULT).to be_assignable_to(t) }
|
|
560
763
|
end
|
|
561
764
|
|
|
562
765
|
it 'Unit is assignable to all other types' do
|
|
563
|
-
t =
|
|
564
|
-
all_types.each { |t2| expect(t).to be_assignable_to(t2
|
|
766
|
+
t = PUnitType::DEFAULT
|
|
767
|
+
all_types.each { |t2| expect(t).to be_assignable_to(t2::DEFAULT) }
|
|
565
768
|
end
|
|
566
769
|
|
|
567
770
|
it 'Unit is assignable to Unit' do
|
|
568
|
-
t =
|
|
569
|
-
t2 =
|
|
771
|
+
t = PUnitType::DEFAULT
|
|
772
|
+
t2 = PUnitType::DEFAULT
|
|
570
773
|
expect(t).to be_assignable_to(t2)
|
|
571
774
|
end
|
|
572
775
|
end
|
|
573
776
|
|
|
574
|
-
context
|
|
777
|
+
context 'for Any, such that' do
|
|
575
778
|
it 'all types are assignable to Any' do
|
|
576
|
-
t =
|
|
577
|
-
all_types.each { |t2| expect(t2
|
|
779
|
+
t = PAnyType::DEFAULT
|
|
780
|
+
all_types.each { |t2| expect(t2::DEFAULT).to be_assignable_to(t) }
|
|
578
781
|
end
|
|
579
782
|
|
|
580
|
-
it 'Any is not assignable to anything but Any' do
|
|
581
|
-
tested_types = all_types() - [
|
|
582
|
-
t =
|
|
583
|
-
tested_types.each { |t2| expect(t).not_to be_assignable_to(t2
|
|
783
|
+
it 'Any is not assignable to anything but Any and Optional (implied Optional[Any])' do
|
|
784
|
+
tested_types = all_types() - [PAnyType, POptionalType]
|
|
785
|
+
t = PAnyType::DEFAULT
|
|
786
|
+
tested_types.each { |t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
584
787
|
end
|
|
585
788
|
end
|
|
586
789
|
|
|
587
|
-
context "for
|
|
588
|
-
it 'all
|
|
589
|
-
t =
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
790
|
+
context "for NotUndef, such that" do
|
|
791
|
+
it 'all types except types assignable from Undef are assignable to NotUndef' do
|
|
792
|
+
t = not_undef_t
|
|
793
|
+
tc = TypeCalculator.singleton
|
|
794
|
+
undef_t = PUndefType::DEFAULT
|
|
795
|
+
all_types.each do |c|
|
|
796
|
+
t2 = c::DEFAULT
|
|
797
|
+
if tc.assignable?(t2, undef_t)
|
|
798
|
+
expect(t2).not_to be_assignable_to(t)
|
|
799
|
+
else
|
|
800
|
+
expect(t2).to be_assignable_to(t)
|
|
801
|
+
end
|
|
802
|
+
end
|
|
593
803
|
end
|
|
594
804
|
|
|
595
|
-
it '
|
|
596
|
-
|
|
597
|
-
|
|
805
|
+
it 'type NotUndef[T] is assignable from T unless T is assignable from Undef ' do
|
|
806
|
+
tc = TypeCalculator.singleton
|
|
807
|
+
undef_t = PUndefType::DEFAULT
|
|
808
|
+
all_types().select do |c|
|
|
809
|
+
t2 = c::DEFAULT
|
|
810
|
+
not_undef_t = not_undef_t(t2)
|
|
811
|
+
if tc.assignable?(t2, undef_t)
|
|
812
|
+
expect(t2).not_to be_assignable_to(not_undef_t)
|
|
813
|
+
else
|
|
814
|
+
expect(t2).to be_assignable_to(not_undef_t)
|
|
815
|
+
end
|
|
816
|
+
end
|
|
598
817
|
end
|
|
599
818
|
|
|
600
|
-
it '
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
819
|
+
it 'type T is assignable from NotUndef[T] unless T is assignable from Undef' do
|
|
820
|
+
tc = TypeCalculator.singleton
|
|
821
|
+
undef_t = PUndefType::DEFAULT
|
|
822
|
+
all_types().select do |c|
|
|
823
|
+
t2 = c::DEFAULT
|
|
824
|
+
not_undef_t = not_undef_t(t2)
|
|
825
|
+
unless tc.assignable?(t2, undef_t)
|
|
826
|
+
expect(not_undef_t).to be_assignable_to(t2)
|
|
827
|
+
end
|
|
828
|
+
end
|
|
829
|
+
end
|
|
830
|
+
end
|
|
831
|
+
|
|
832
|
+
context "for TypeReference, such that" do
|
|
833
|
+
it 'no other type is assignable' do
|
|
834
|
+
t = PTypeReferenceType::DEFAULT
|
|
835
|
+
all_instances = (all_types - [
|
|
836
|
+
PTypeReferenceType, # Avoid comparison with t
|
|
837
|
+
PVariantType, # DEFAULT contains no variants, so assignability is never tested and always true
|
|
838
|
+
PTypeAliasType # DEFAULT resolves to PTypeReferenceType::DEFAULT, i.e. t
|
|
839
|
+
]).map {|c| c::DEFAULT }
|
|
840
|
+
|
|
841
|
+
# Add a non-empty variant
|
|
842
|
+
all_instances << variant_t(PAnyType::DEFAULT, PUnitType::DEFAULT)
|
|
843
|
+
# Add a type alias that doesn't resolve to 't'
|
|
844
|
+
all_instances << type_alias_t('MyInt', 'Integer').resolve(TypeParser.singleton, nil)
|
|
845
|
+
|
|
846
|
+
all_instances.each { |i| expect(i).not_to be_assignable_to(t) }
|
|
847
|
+
end
|
|
848
|
+
|
|
849
|
+
it 'a TypeReference to the exact same type is assignable' do
|
|
850
|
+
expect(type_reference_t('Integer[0,10]')).to be_assignable_to(type_reference_t('Integer[0,10]'))
|
|
851
|
+
end
|
|
852
|
+
|
|
853
|
+
it 'a TypeReference to the different type is not assignable' do
|
|
854
|
+
expect(type_reference_t('String')).not_to be_assignable_to(type_reference_t('Integer'))
|
|
855
|
+
end
|
|
856
|
+
|
|
857
|
+
it 'a TypeReference to the different type is not assignable even if the referenced type is' do
|
|
858
|
+
expect(type_reference_t('Integer[1,2]')).not_to be_assignable_to(type_reference_t('Integer[0,3]'))
|
|
859
|
+
end
|
|
860
|
+
end
|
|
861
|
+
|
|
862
|
+
context 'for Data, such that' do
|
|
863
|
+
let(:data) { TypeFactory.data }
|
|
864
|
+
data_compatible_types.map { |t2| type_from_class(t2) }.each do |tc|
|
|
865
|
+
it "#{tc.name} is assignable to Data" do
|
|
866
|
+
expect(tc).to be_assignable_to(data)
|
|
867
|
+
end
|
|
604
868
|
end
|
|
605
869
|
|
|
606
|
-
it 'Data is not assignable to
|
|
607
|
-
|
|
608
|
-
types_to_test
|
|
609
|
-
types_to_test.each { |t2| expect(t).not_to be_assignable_to(variant_t(type_from_class(t2))) }
|
|
870
|
+
it 'Data is not assignable to any of its subtypes' do
|
|
871
|
+
types_to_test = data_compatible_types
|
|
872
|
+
types_to_test.each {|t2| expect(data).not_to be_assignable_to(type_from_class(t2)) }
|
|
610
873
|
end
|
|
611
874
|
|
|
612
875
|
it 'Data is not assignable to any disjunct type' do
|
|
613
|
-
tested_types = all_types - [
|
|
614
|
-
|
|
615
|
-
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
|
|
876
|
+
tested_types = all_types - [PAnyType, POptionalType] - scalar_types
|
|
877
|
+
tested_types.each {|t2| expect(data).not_to be_assignable_to(t2::DEFAULT) }
|
|
616
878
|
end
|
|
617
879
|
end
|
|
618
880
|
|
|
@@ -634,102 +896,130 @@ describe 'The type calculator' do
|
|
|
634
896
|
end
|
|
635
897
|
end
|
|
636
898
|
|
|
637
|
-
context
|
|
638
|
-
it
|
|
639
|
-
t =
|
|
640
|
-
scalar_types.each {|t2| expect(t2
|
|
899
|
+
context 'for Scalar, such that' do
|
|
900
|
+
it 'all scalars are assignable to Scalar' do
|
|
901
|
+
t = PScalarType::DEFAULT
|
|
902
|
+
scalar_types.each {|t2| expect(t2::DEFAULT).to be_assignable_to(t) }
|
|
641
903
|
end
|
|
642
904
|
|
|
643
905
|
it 'Scalar is not assignable to any of its subtypes' do
|
|
644
|
-
t =
|
|
645
|
-
types_to_test = scalar_types - [
|
|
646
|
-
types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2
|
|
906
|
+
t = PScalarType::DEFAULT
|
|
907
|
+
types_to_test = scalar_types - [PScalarType]
|
|
908
|
+
types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
647
909
|
end
|
|
648
910
|
|
|
649
911
|
it 'Scalar is not assignable to any disjunct type' do
|
|
650
|
-
tested_types = all_types - [
|
|
651
|
-
t =
|
|
652
|
-
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2
|
|
912
|
+
tested_types = all_types - [PAnyType, POptionalType, PNotUndefType] - scalar_types
|
|
913
|
+
t = PScalarType::DEFAULT
|
|
914
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
653
915
|
end
|
|
654
916
|
end
|
|
655
917
|
|
|
656
|
-
context
|
|
657
|
-
it
|
|
658
|
-
t =
|
|
659
|
-
numeric_types.each {|t2| expect(t2
|
|
918
|
+
context 'for Numeric, such that' do
|
|
919
|
+
it 'all numerics are assignable to Numeric' do
|
|
920
|
+
t = PNumericType::DEFAULT
|
|
921
|
+
numeric_types.each {|t2| expect(t2::DEFAULT).to be_assignable_to(t) }
|
|
660
922
|
end
|
|
661
923
|
|
|
662
924
|
it 'Numeric is not assignable to any of its subtypes' do
|
|
663
|
-
t =
|
|
664
|
-
types_to_test = numeric_types - [
|
|
665
|
-
types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2
|
|
925
|
+
t = PNumericType::DEFAULT
|
|
926
|
+
types_to_test = numeric_types - [PNumericType]
|
|
927
|
+
types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
666
928
|
end
|
|
667
929
|
|
|
668
930
|
it 'Numeric is not assignable to any disjunct type' do
|
|
669
931
|
tested_types = all_types - [
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
932
|
+
PAnyType,
|
|
933
|
+
POptionalType,
|
|
934
|
+
PNotUndefType,
|
|
935
|
+
PScalarType,
|
|
936
|
+
PScalarDataType,
|
|
673
937
|
] - numeric_types
|
|
674
|
-
t =
|
|
675
|
-
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2
|
|
938
|
+
t = PNumericType::DEFAULT
|
|
939
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
676
940
|
end
|
|
677
941
|
end
|
|
678
942
|
|
|
679
|
-
context
|
|
680
|
-
it
|
|
681
|
-
t =
|
|
682
|
-
collection_types.each {|t2| expect(t2
|
|
943
|
+
context 'for Collection, such that' do
|
|
944
|
+
it 'all collections are assignable to Collection' do
|
|
945
|
+
t = PCollectionType::DEFAULT
|
|
946
|
+
collection_types.each {|t2| expect(t2::DEFAULT).to be_assignable_to(t) }
|
|
683
947
|
end
|
|
684
948
|
|
|
685
949
|
it 'Collection is not assignable to any of its subtypes' do
|
|
686
|
-
t =
|
|
687
|
-
types_to_test = collection_types - [
|
|
688
|
-
types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2
|
|
950
|
+
t = PCollectionType::DEFAULT
|
|
951
|
+
types_to_test = collection_types - [PCollectionType]
|
|
952
|
+
types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
689
953
|
end
|
|
690
954
|
|
|
691
955
|
it 'Collection is not assignable to any disjunct type' do
|
|
692
|
-
tested_types = all_types - [
|
|
693
|
-
|
|
694
|
-
|
|
956
|
+
tested_types = all_types - [
|
|
957
|
+
PAnyType,
|
|
958
|
+
POptionalType,
|
|
959
|
+
PNotUndefType,
|
|
960
|
+
PIterableType] - collection_types
|
|
961
|
+
t = PCollectionType::DEFAULT
|
|
962
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
695
963
|
end
|
|
696
964
|
end
|
|
697
965
|
|
|
698
|
-
context
|
|
699
|
-
it
|
|
700
|
-
t =
|
|
966
|
+
context 'for Array, such that' do
|
|
967
|
+
it 'Array is not assignable to non Array based Collection type' do
|
|
968
|
+
t = PArrayType::DEFAULT
|
|
701
969
|
tested_types = collection_types - [
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
970
|
+
PCollectionType,
|
|
971
|
+
PNotUndefType,
|
|
972
|
+
PArrayType,
|
|
973
|
+
PTupleType]
|
|
974
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
706
975
|
end
|
|
707
976
|
|
|
708
977
|
it 'Array is not assignable to any disjunct type' do
|
|
709
978
|
tested_types = all_types - [
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
979
|
+
PAnyType,
|
|
980
|
+
POptionalType,
|
|
981
|
+
PNotUndefType,
|
|
982
|
+
PIterableType] - collection_types
|
|
983
|
+
t = PArrayType::DEFAULT
|
|
984
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
985
|
+
end
|
|
986
|
+
|
|
987
|
+
it 'Empty Array is assignable to an array that accepts 0 entries' do
|
|
988
|
+
expect(empty_array_t).to be_assignable_to(array_t(string_t))
|
|
989
|
+
expect(empty_array_t).to be_assignable_to(array_t(integer_t))
|
|
990
|
+
end
|
|
991
|
+
|
|
992
|
+
it 'A Tuple is assignable to an array' do
|
|
993
|
+
expect(tuple_t(String)).to be_assignable_to(array_t(String))
|
|
994
|
+
end
|
|
995
|
+
|
|
996
|
+
it 'A Tuple with <n> elements is assignable to an array with min size <n>' do
|
|
997
|
+
expect(tuple_t(String,String)).to be_assignable_to(array_t(String, range_t(2, :default)))
|
|
998
|
+
end
|
|
999
|
+
|
|
1000
|
+
it 'A Tuple with <n> elements where the last 2 are optional is assignable to an array with size <n> - 2' do
|
|
1001
|
+
expect(constrained_tuple_t(range_t(2, :default), String,String,String,String)).to be_assignable_to(array_t(String, range_t(2, :default)))
|
|
714
1002
|
end
|
|
715
1003
|
end
|
|
716
1004
|
|
|
717
|
-
context
|
|
718
|
-
it
|
|
719
|
-
t =
|
|
1005
|
+
context 'for Hash, such that' do
|
|
1006
|
+
it 'Hash is not assignable to any other Collection type' do
|
|
1007
|
+
t = PHashType::DEFAULT
|
|
720
1008
|
tested_types = collection_types - [
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2
|
|
1009
|
+
PCollectionType,
|
|
1010
|
+
PStructType,
|
|
1011
|
+
PHashType]
|
|
1012
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
725
1013
|
end
|
|
726
1014
|
|
|
727
1015
|
it 'Hash is not assignable to any disjunct type' do
|
|
728
1016
|
tested_types = all_types - [
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
1017
|
+
PAnyType,
|
|
1018
|
+
POptionalType,
|
|
1019
|
+
PNotUndefType,
|
|
1020
|
+
PIterableType] - collection_types
|
|
1021
|
+
t = PHashType::DEFAULT
|
|
1022
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
733
1023
|
end
|
|
734
1024
|
|
|
735
1025
|
it 'Struct is assignable to Hash with Pattern that matches all keys' do
|
|
@@ -749,68 +1039,185 @@ describe 'The type calculator' do
|
|
|
749
1039
|
end
|
|
750
1040
|
end
|
|
751
1041
|
|
|
752
|
-
context
|
|
753
|
-
it
|
|
754
|
-
|
|
1042
|
+
context 'for Timespan such that' do
|
|
1043
|
+
it 'Timespan is assignable to less constrained Timespan' do
|
|
1044
|
+
t1 = PTimespanType.new('00:00:10', '00:00:20')
|
|
1045
|
+
t2 = PTimespanType.new('00:00:11', '00:00:19')
|
|
1046
|
+
expect(t2).to be_assignable_to(t1)
|
|
1047
|
+
end
|
|
1048
|
+
|
|
1049
|
+
it 'Timespan is not assignable to more constrained Timespan' do
|
|
1050
|
+
t1 = PTimespanType.new('00:00:10', '00:00:20')
|
|
1051
|
+
t2 = PTimespanType.new('00:00:11', '00:00:19')
|
|
1052
|
+
expect(t1).not_to be_assignable_to(t2)
|
|
1053
|
+
end
|
|
1054
|
+
end
|
|
1055
|
+
|
|
1056
|
+
context 'for Timestamp such that' do
|
|
1057
|
+
it 'Timestamp is assignable to less constrained Timestamp' do
|
|
1058
|
+
t1 = PTimestampType.new('2016-01-01', '2016-12-31')
|
|
1059
|
+
t2 = PTimestampType.new('2016-02-01', '2016-11-30')
|
|
1060
|
+
expect(t2).to be_assignable_to(t1)
|
|
1061
|
+
end
|
|
1062
|
+
|
|
1063
|
+
it 'Timestamp is not assignable to more constrained Timestamp' do
|
|
1064
|
+
t1 = PTimestampType.new('2016-01-01', '2016-12-31')
|
|
1065
|
+
t2 = PTimestampType.new('2016-02-01', '2016-11-30')
|
|
1066
|
+
expect(t1).not_to be_assignable_to(t2)
|
|
1067
|
+
end
|
|
1068
|
+
end
|
|
1069
|
+
|
|
1070
|
+
context 'for Tuple, such that' do
|
|
1071
|
+
it 'Tuple is not assignable to any other non Array based Collection type' do
|
|
1072
|
+
t = PTupleType::DEFAULT
|
|
755
1073
|
tested_types = collection_types - [
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2
|
|
1074
|
+
PCollectionType,
|
|
1075
|
+
PTupleType,
|
|
1076
|
+
PArrayType]
|
|
1077
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
1078
|
+
end
|
|
1079
|
+
|
|
1080
|
+
it 'A tuple with parameters is assignable to the default Tuple' do
|
|
1081
|
+
t = PTupleType::DEFAULT
|
|
1082
|
+
t2 = PTupleType.new([PStringType::DEFAULT])
|
|
1083
|
+
expect(t2).to be_assignable_to(t)
|
|
760
1084
|
end
|
|
761
1085
|
|
|
762
1086
|
it 'Tuple is not assignable to any disjunct type' do
|
|
763
1087
|
tested_types = all_types - [
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
1088
|
+
PAnyType,
|
|
1089
|
+
POptionalType,
|
|
1090
|
+
PNotUndefType,
|
|
1091
|
+
PIterableType] - collection_types
|
|
1092
|
+
t = PTupleType::DEFAULT
|
|
1093
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
768
1094
|
end
|
|
769
1095
|
end
|
|
770
1096
|
|
|
771
|
-
context
|
|
772
|
-
it
|
|
773
|
-
t =
|
|
1097
|
+
context 'for Struct, such that' do
|
|
1098
|
+
it 'Struct is not assignable to any other non Hashed based Collection type' do
|
|
1099
|
+
t = PStructType::DEFAULT
|
|
774
1100
|
tested_types = collection_types - [
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2
|
|
1101
|
+
PCollectionType,
|
|
1102
|
+
PStructType,
|
|
1103
|
+
PHashType]
|
|
1104
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
779
1105
|
end
|
|
780
1106
|
|
|
781
1107
|
it 'Struct is not assignable to any disjunct type' do
|
|
782
1108
|
tested_types = all_types - [
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
1109
|
+
PAnyType,
|
|
1110
|
+
POptionalType,
|
|
1111
|
+
PNotUndefType,
|
|
1112
|
+
PIterableType] - collection_types
|
|
1113
|
+
t = PStructType::DEFAULT
|
|
1114
|
+
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
1115
|
+
end
|
|
1116
|
+
|
|
1117
|
+
it 'Default key optionality is controlled by value assignability to undef' do
|
|
1118
|
+
t1 = struct_t({'member' => string_t})
|
|
1119
|
+
expect(t1.elements[0].key_type).to eq(string_t('member'))
|
|
1120
|
+
t1 = struct_t({'member' => any_t})
|
|
1121
|
+
expect(t1.elements[0].key_type).to eq(optional_t(string_t('member')))
|
|
1122
|
+
end
|
|
1123
|
+
|
|
1124
|
+
it "NotUndef['key'] becomes String['key'] (since its implied that String is required)" do
|
|
1125
|
+
t1 = struct_t({not_undef_t('member') => string_t})
|
|
1126
|
+
expect(t1.elements[0].key_type).to eq(string_t('member'))
|
|
1127
|
+
end
|
|
1128
|
+
|
|
1129
|
+
it "Optional['key'] becomes Optional[String['key']]" do
|
|
1130
|
+
t1 = struct_t({optional_t('member') => string_t})
|
|
1131
|
+
expect(t1.elements[0].key_type).to eq(optional_t(string_t('member')))
|
|
1132
|
+
end
|
|
1133
|
+
|
|
1134
|
+
it 'Optional members are not required' do
|
|
1135
|
+
t1 = struct_t({optional_t('optional_member') => string_t, not_undef_t('other_member') => string_t})
|
|
1136
|
+
t2 = struct_t({not_undef_t('other_member') => string_t})
|
|
1137
|
+
expect(t2).to be_assignable_to(t1)
|
|
1138
|
+
end
|
|
1139
|
+
|
|
1140
|
+
it 'Required members not optional even when value is' do
|
|
1141
|
+
t1 = struct_t({not_undef_t('required_member') => any_t, not_undef_t('other_member') => string_t})
|
|
1142
|
+
t2 = struct_t({not_undef_t('other_member') => string_t})
|
|
1143
|
+
expect(t2).not_to be_assignable_to(t1)
|
|
1144
|
+
end
|
|
1145
|
+
|
|
1146
|
+
it 'A hash of string is not assignable to struct with integer value' do
|
|
1147
|
+
t1 = struct_t({'foo' => integer_t, 'bar' => string_t})
|
|
1148
|
+
t2 = hash_t(string_t, string_t, range_t(2, 2))
|
|
1149
|
+
expect(t1.assignable?(t2)).to eql(false)
|
|
1150
|
+
end
|
|
1151
|
+
|
|
1152
|
+
it 'A hash of with integer key is not assignable to struct with string key' do
|
|
1153
|
+
t1 = struct_t({'foo' => string_t, 'bar' => string_t})
|
|
1154
|
+
t2 = hash_t(integer_t, string_t, range_t(2, 2))
|
|
1155
|
+
expect(t1.assignable?(t2)).to eql(false)
|
|
787
1156
|
end
|
|
788
1157
|
end
|
|
789
1158
|
|
|
790
|
-
context
|
|
791
|
-
it
|
|
792
|
-
t =
|
|
1159
|
+
context 'for Callable, such that' do
|
|
1160
|
+
it 'Callable is not assignable to any disjunct type' do
|
|
1161
|
+
t = PCallableType::DEFAULT
|
|
793
1162
|
tested_types = all_types - [
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
1163
|
+
PCallableType,
|
|
1164
|
+
PAnyType,
|
|
1165
|
+
POptionalType,
|
|
1166
|
+
PNotUndefType]
|
|
1167
|
+
tested_types.each {|t2| expect(t).to_not be_assignable_to(t2::DEFAULT) }
|
|
1168
|
+
end
|
|
1169
|
+
|
|
1170
|
+
it 'a callable with parameter is assignable to the default callable' do
|
|
1171
|
+
expect(callable_t(string_t)).to be_assignable_to(PCallableType::DEFAULT)
|
|
1172
|
+
end
|
|
1173
|
+
|
|
1174
|
+
it 'the default callable is not assignable to a callable with parameter' do
|
|
1175
|
+
expect(PCallableType::DEFAULT).not_to be_assignable_to(callable_t(string_t))
|
|
1176
|
+
end
|
|
1177
|
+
|
|
1178
|
+
it 'a callable with a return type is assignable to the default callable' do
|
|
1179
|
+
expect(callable_t([], string_t)).to be_assignable_to(PCallableType::DEFAULT)
|
|
1180
|
+
end
|
|
1181
|
+
|
|
1182
|
+
it 'the default callable is not assignable to a callable with a return type' do
|
|
1183
|
+
expect(PCallableType::DEFAULT).not_to be_assignable_to(callable_t([],string_t))
|
|
1184
|
+
end
|
|
1185
|
+
|
|
1186
|
+
it 'a callable with a return type Any is assignable to the default callable' do
|
|
1187
|
+
expect(callable_t([], any_t)).to be_assignable_to(PCallableType::DEFAULT)
|
|
1188
|
+
end
|
|
1189
|
+
|
|
1190
|
+
it 'a callable with a return type Any is equal to a callable with the same parameters and no return type' do
|
|
1191
|
+
expect(callable_t([string_t], any_t)).to eql(callable_t(string_t))
|
|
1192
|
+
end
|
|
1193
|
+
|
|
1194
|
+
it 'a callable with a return type different than Any is not equal to a callable with the same parameters and no return type' do
|
|
1195
|
+
expect(callable_t([string_t], string_t)).not_to eql(callable_t(string_t))
|
|
1196
|
+
end
|
|
1197
|
+
|
|
1198
|
+
it 'a callable with a return type is assignable from another callable with an assignable return type' do
|
|
1199
|
+
expect(callable_t([], string_t)).to be_assignable_to(callable_t([], PScalarType::DEFAULT))
|
|
1200
|
+
end
|
|
1201
|
+
|
|
1202
|
+
it 'a callable with a return type is not assignable from another callable unless the return type is assignable' do
|
|
1203
|
+
expect(callable_t([], string_t)).not_to be_assignable_to(callable_t([], integer_t))
|
|
797
1204
|
end
|
|
798
1205
|
end
|
|
799
1206
|
|
|
800
1207
|
it 'should recognize mapped ruby types' do
|
|
801
|
-
{ Integer =>
|
|
802
|
-
Fixnum =>
|
|
803
|
-
Bignum =>
|
|
804
|
-
Float =>
|
|
805
|
-
Numeric =>
|
|
806
|
-
NilClass =>
|
|
807
|
-
TrueClass =>
|
|
808
|
-
FalseClass =>
|
|
809
|
-
String =>
|
|
810
|
-
Regexp =>
|
|
811
|
-
Regexp =>
|
|
812
|
-
Array =>
|
|
813
|
-
Hash =>
|
|
1208
|
+
{ Integer => PIntegerType::DEFAULT,
|
|
1209
|
+
Fixnum => PIntegerType::DEFAULT,
|
|
1210
|
+
Bignum => PIntegerType::DEFAULT,
|
|
1211
|
+
Float => PFloatType::DEFAULT,
|
|
1212
|
+
Numeric => PNumericType::DEFAULT,
|
|
1213
|
+
NilClass => PUndefType::DEFAULT,
|
|
1214
|
+
TrueClass => PBooleanType::DEFAULT,
|
|
1215
|
+
FalseClass => PBooleanType::DEFAULT,
|
|
1216
|
+
String => PStringType::DEFAULT,
|
|
1217
|
+
Regexp => PRegexpType::DEFAULT,
|
|
1218
|
+
Regexp => PRegexpType::DEFAULT,
|
|
1219
|
+
Array => TypeFactory.array_of_any,
|
|
1220
|
+
Hash => TypeFactory.hash_of_any
|
|
814
1221
|
}.each do |ruby_type, puppet_type |
|
|
815
1222
|
expect(ruby_type).to be_assignable_to(puppet_type)
|
|
816
1223
|
end
|
|
@@ -821,35 +1228,18 @@ describe 'The type calculator' do
|
|
|
821
1228
|
expect(calculator.assignable?(range_t(2,5), range_t(2,5))).to eq(true)
|
|
822
1229
|
end
|
|
823
1230
|
|
|
824
|
-
it 'should accept an equal reverse range' do
|
|
825
|
-
expect(calculator.assignable?(range_t(2,5), range_t(5,2))).to eq(true)
|
|
826
|
-
end
|
|
827
|
-
|
|
828
1231
|
it 'should accept a narrower range' do
|
|
829
1232
|
expect(calculator.assignable?(range_t(2,10), range_t(3,5))).to eq(true)
|
|
830
1233
|
end
|
|
831
1234
|
|
|
832
|
-
it 'should accept a narrower reverse range' do
|
|
833
|
-
expect(calculator.assignable?(range_t(2,10), range_t(5,3))).to eq(true)
|
|
834
|
-
end
|
|
835
|
-
|
|
836
1235
|
it 'should reject a wider range' do
|
|
837
1236
|
expect(calculator.assignable?(range_t(3,5), range_t(2,10))).to eq(false)
|
|
838
1237
|
end
|
|
839
1238
|
|
|
840
|
-
it 'should reject a wider reverse range' do
|
|
841
|
-
expect(calculator.assignable?(range_t(3,5), range_t(10,2))).to eq(false)
|
|
842
|
-
end
|
|
843
|
-
|
|
844
1239
|
it 'should reject a partially overlapping range' do
|
|
845
1240
|
expect(calculator.assignable?(range_t(3,5), range_t(2,4))).to eq(false)
|
|
846
1241
|
expect(calculator.assignable?(range_t(3,5), range_t(4,6))).to eq(false)
|
|
847
1242
|
end
|
|
848
|
-
|
|
849
|
-
it 'should reject a partially overlapping reverse range' do
|
|
850
|
-
expect(calculator.assignable?(range_t(3,5), range_t(4,2))).to eq(false)
|
|
851
|
-
expect(calculator.assignable?(range_t(3,5), range_t(6,4))).to eq(false)
|
|
852
|
-
end
|
|
853
1243
|
end
|
|
854
1244
|
|
|
855
1245
|
context 'when dealing with patterns' do
|
|
@@ -885,7 +1275,7 @@ describe 'The type calculator' do
|
|
|
885
1275
|
|
|
886
1276
|
it 'should accept multiple strings if they all match any patterns' do
|
|
887
1277
|
p_t = pattern_t('X', 'Y', 'abc')
|
|
888
|
-
p_s =
|
|
1278
|
+
p_s = enum_t('Xa', 'aY', 'abc')
|
|
889
1279
|
expect(calculator.assignable?(p_t, p_s)).to eq(true)
|
|
890
1280
|
end
|
|
891
1281
|
|
|
@@ -897,7 +1287,7 @@ describe 'The type calculator' do
|
|
|
897
1287
|
|
|
898
1288
|
it 'should reject multiple strings if not all match any patterns' do
|
|
899
1289
|
p_t = pattern_t('abc', 'ab', 'c', 'q')
|
|
900
|
-
p_s =
|
|
1290
|
+
p_s = enum_t('X', 'Y', 'Z')
|
|
901
1291
|
expect(calculator.assignable?(p_t, p_s)).to eq(false)
|
|
902
1292
|
end
|
|
903
1293
|
|
|
@@ -913,18 +1303,18 @@ describe 'The type calculator' do
|
|
|
913
1303
|
end
|
|
914
1304
|
|
|
915
1305
|
it 'pattern representing all patterns should accept any pattern' do
|
|
916
|
-
expect(calculator.assignable?(pattern_t
|
|
917
|
-
expect(calculator.assignable?(pattern_t
|
|
1306
|
+
expect(calculator.assignable?(pattern_t, pattern_t('a'))).to eq(true)
|
|
1307
|
+
expect(calculator.assignable?(pattern_t, pattern_t)).to eq(true)
|
|
918
1308
|
end
|
|
919
1309
|
|
|
920
1310
|
it 'pattern representing all patterns should accept any enum' do
|
|
921
|
-
expect(calculator.assignable?(pattern_t
|
|
922
|
-
expect(calculator.assignable?(pattern_t
|
|
1311
|
+
expect(calculator.assignable?(pattern_t, enum_t('a'))).to eq(true)
|
|
1312
|
+
expect(calculator.assignable?(pattern_t, enum_t)).to eq(true)
|
|
923
1313
|
end
|
|
924
1314
|
|
|
925
1315
|
it 'pattern representing all patterns should accept any string' do
|
|
926
|
-
expect(calculator.assignable?(pattern_t
|
|
927
|
-
expect(calculator.assignable?(pattern_t
|
|
1316
|
+
expect(calculator.assignable?(pattern_t, string_t('a'))).to eq(true)
|
|
1317
|
+
expect(calculator.assignable?(pattern_t, string_t)).to eq(true)
|
|
928
1318
|
end
|
|
929
1319
|
|
|
930
1320
|
end
|
|
@@ -943,8 +1333,8 @@ describe 'The type calculator' do
|
|
|
943
1333
|
end
|
|
944
1334
|
|
|
945
1335
|
it 'non parameterized enum accepts any other enum but not the reverse' do
|
|
946
|
-
expect(calculator.assignable?(enum_t
|
|
947
|
-
expect(calculator.assignable?(enum_t('a'), enum_t
|
|
1336
|
+
expect(calculator.assignable?(enum_t, enum_t('a'))).to eq(true)
|
|
1337
|
+
expect(calculator.assignable?(enum_t('a'), enum_t)).to eq(false)
|
|
948
1338
|
end
|
|
949
1339
|
|
|
950
1340
|
it 'enum should accept a variant where all variants are acceptable' do
|
|
@@ -955,54 +1345,53 @@ describe 'The type calculator' do
|
|
|
955
1345
|
|
|
956
1346
|
context 'when dealing with string and enum combinations' do
|
|
957
1347
|
it 'should accept assigning any enum to unrestricted string' do
|
|
958
|
-
expect(calculator.assignable?(string_t
|
|
959
|
-
expect(calculator.assignable?(string_t
|
|
1348
|
+
expect(calculator.assignable?(string_t, enum_t('blue'))).to eq(true)
|
|
1349
|
+
expect(calculator.assignable?(string_t, enum_t('blue', 'red'))).to eq(true)
|
|
960
1350
|
end
|
|
961
1351
|
|
|
962
1352
|
it 'should not accept assigning longer enum value to size restricted string' do
|
|
963
|
-
expect(calculator.assignable?(
|
|
1353
|
+
expect(calculator.assignable?(constrained_string_t(range_t(2,2)), enum_t('a','blue'))).to eq(false)
|
|
964
1354
|
end
|
|
965
1355
|
|
|
966
1356
|
it 'should accept assigning any string to empty enum' do
|
|
967
|
-
expect(calculator.assignable?(enum_t
|
|
1357
|
+
expect(calculator.assignable?(enum_t, string_t)).to eq(true)
|
|
968
1358
|
end
|
|
969
1359
|
|
|
970
1360
|
it 'should accept assigning empty enum to any string' do
|
|
971
|
-
expect(calculator.assignable?(string_t
|
|
1361
|
+
expect(calculator.assignable?(string_t, enum_t)).to eq(true)
|
|
972
1362
|
end
|
|
973
1363
|
|
|
974
1364
|
it 'should not accept assigning empty enum to size constrained string' do
|
|
975
|
-
expect(calculator.assignable?(
|
|
1365
|
+
expect(calculator.assignable?(constrained_string_t(range_t(2,2)), enum_t)).to eq(false)
|
|
976
1366
|
end
|
|
977
1367
|
end
|
|
978
1368
|
|
|
979
1369
|
context 'when dealing with string/pattern/enum combinations' do
|
|
980
1370
|
it 'any string is equal to any enum is equal to any pattern' do
|
|
981
|
-
expect(calculator.assignable?(string_t
|
|
982
|
-
expect(calculator.assignable?(string_t
|
|
983
|
-
expect(calculator.assignable?(enum_t
|
|
984
|
-
expect(calculator.assignable?(enum_t
|
|
985
|
-
expect(calculator.assignable?(pattern_t
|
|
986
|
-
expect(calculator.assignable?(pattern_t
|
|
1371
|
+
expect(calculator.assignable?(string_t, enum_t)).to eq(true)
|
|
1372
|
+
expect(calculator.assignable?(string_t, pattern_t)).to eq(true)
|
|
1373
|
+
expect(calculator.assignable?(enum_t, string_t)).to eq(true)
|
|
1374
|
+
expect(calculator.assignable?(enum_t, pattern_t)).to eq(true)
|
|
1375
|
+
expect(calculator.assignable?(pattern_t, string_t)).to eq(true)
|
|
1376
|
+
expect(calculator.assignable?(pattern_t, enum_t)).to eq(true)
|
|
987
1377
|
end
|
|
988
1378
|
end
|
|
989
1379
|
|
|
990
1380
|
context 'when dealing with tuples' do
|
|
991
1381
|
it 'matches empty tuples' do
|
|
992
|
-
tuple1 = tuple_t
|
|
993
|
-
tuple2 = tuple_t
|
|
1382
|
+
tuple1 = tuple_t
|
|
1383
|
+
tuple2 = tuple_t
|
|
994
1384
|
|
|
995
1385
|
expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
|
|
996
1386
|
expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
|
|
997
1387
|
end
|
|
998
1388
|
|
|
999
1389
|
it 'accepts an empty tuple as assignable to a tuple with a min size of 0' do
|
|
1000
|
-
tuple1 =
|
|
1001
|
-
factory.constrain_size(tuple1, 0, :default)
|
|
1390
|
+
tuple1 = constrained_tuple_t(range_t(0, :default))
|
|
1002
1391
|
tuple2 = tuple_t()
|
|
1003
1392
|
|
|
1004
1393
|
expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
|
|
1005
|
-
expect(calculator.assignable?(tuple2, tuple1)).to eq(
|
|
1394
|
+
expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
|
|
1006
1395
|
end
|
|
1007
1396
|
|
|
1008
1397
|
it 'should accept matching tuples' do
|
|
@@ -1020,62 +1409,51 @@ describe 'The type calculator' do
|
|
|
1020
1409
|
end
|
|
1021
1410
|
|
|
1022
1411
|
it 'should accept ranged tuples' do
|
|
1023
|
-
tuple1 =
|
|
1024
|
-
factory.constrain_size(tuple1, 5, 5)
|
|
1412
|
+
tuple1 = constrained_tuple_t(range_t(5,5), 1)
|
|
1025
1413
|
tuple2 = tuple_t(Integer,Integer, Integer, Integer, Integer)
|
|
1026
1414
|
expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
|
|
1027
1415
|
expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
|
|
1028
1416
|
end
|
|
1029
1417
|
|
|
1030
1418
|
it 'should reject ranged tuples when ranges does not match' do
|
|
1031
|
-
tuple1 =
|
|
1032
|
-
factory.constrain_size(tuple1, 4, 5)
|
|
1419
|
+
tuple1 = constrained_tuple_t(range_t(4, 5), 1)
|
|
1033
1420
|
tuple2 = tuple_t(Integer,Integer, Integer, Integer, Integer)
|
|
1034
1421
|
expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
|
|
1035
1422
|
expect(calculator.assignable?(tuple2, tuple1)).to eq(false)
|
|
1036
1423
|
end
|
|
1037
1424
|
|
|
1038
1425
|
it 'should reject ranged tuples when ranges does not match (using infinite upper bound)' do
|
|
1039
|
-
tuple1 =
|
|
1040
|
-
factory.constrain_size(tuple1, 4, :default)
|
|
1426
|
+
tuple1 = constrained_tuple_t(range_t(4, :default), 1)
|
|
1041
1427
|
tuple2 = tuple_t(Integer,Integer, Integer, Integer, Integer)
|
|
1042
1428
|
expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
|
|
1043
1429
|
expect(calculator.assignable?(tuple2, tuple1)).to eq(false)
|
|
1044
1430
|
end
|
|
1045
1431
|
|
|
1046
1432
|
it 'should accept matching tuples with optional entries by repeating last' do
|
|
1047
|
-
tuple1 =
|
|
1048
|
-
|
|
1049
|
-
tuple2 = tuple_t(Numeric,Numeric)
|
|
1050
|
-
factory.constrain_size(tuple2, 0, :default)
|
|
1433
|
+
tuple1 = constrained_tuple_t(range_t(0, :default), 1,2)
|
|
1434
|
+
tuple2 = constrained_tuple_t(range_t(0, :default), Numeric,Numeric)
|
|
1051
1435
|
expect(calculator.assignable?(tuple1, tuple2)).to eq(false)
|
|
1052
1436
|
expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
|
|
1053
1437
|
end
|
|
1054
1438
|
|
|
1055
1439
|
it 'should accept matching tuples with optional entries' do
|
|
1056
|
-
tuple1 =
|
|
1057
|
-
|
|
1058
|
-
array2 = factory.constrain_size(array_t(Integer),2,2)
|
|
1440
|
+
tuple1 = constrained_tuple_t(range_t(1, 3), Integer, Integer, String)
|
|
1441
|
+
array2 = array_t(Integer, range_t(2,2))
|
|
1059
1442
|
expect(calculator.assignable?(tuple1, array2)).to eq(true)
|
|
1060
|
-
|
|
1443
|
+
tuple1 = constrained_tuple_t(range_t(3, 3), tuple1.types)
|
|
1061
1444
|
expect(calculator.assignable?(tuple1, array2)).to eq(false)
|
|
1062
1445
|
end
|
|
1063
1446
|
|
|
1064
1447
|
it 'should accept matching array' do
|
|
1065
1448
|
tuple1 = tuple_t(1,2)
|
|
1066
|
-
array = array_t(Integer)
|
|
1067
|
-
factory.constrain_size(array, 2, 2)
|
|
1449
|
+
array = array_t(Integer, range_t(2, 2))
|
|
1068
1450
|
expect(calculator.assignable?(tuple1, array)).to eq(true)
|
|
1069
1451
|
expect(calculator.assignable?(array, tuple1)).to eq(true)
|
|
1070
1452
|
end
|
|
1071
1453
|
|
|
1072
1454
|
it 'should accept empty array when tuple allows min of 0' do
|
|
1073
|
-
tuple1 =
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
array = array_t(Integer)
|
|
1077
|
-
factory.constrain_size(array, 0, 0)
|
|
1078
|
-
|
|
1455
|
+
tuple1 = constrained_tuple_t(range_t(0, 1), Integer)
|
|
1456
|
+
array = array_t(unit_t, range_t(0, 0))
|
|
1079
1457
|
expect(calculator.assignable?(tuple1, array)).to eq(true)
|
|
1080
1458
|
expect(calculator.assignable?(array, tuple1)).to eq(false)
|
|
1081
1459
|
end
|
|
@@ -1122,18 +1500,15 @@ describe 'The type calculator' do
|
|
|
1122
1500
|
|
|
1123
1501
|
it 'should accept matching hash' do
|
|
1124
1502
|
struct1 = struct_t({'a'=>Integer, 'b'=>Integer})
|
|
1125
|
-
non_empty_string =
|
|
1126
|
-
|
|
1127
|
-
hsh = hash_t(non_empty_string, Integer)
|
|
1128
|
-
factory.constrain_size(hsh, 2, 2)
|
|
1503
|
+
non_empty_string = constrained_string_t(range_t(1, nil))
|
|
1504
|
+
hsh = hash_t(non_empty_string, Integer, range_t(2,2))
|
|
1129
1505
|
expect(calculator.assignable?(struct1, hsh)).to eq(true)
|
|
1130
1506
|
expect(calculator.assignable?(hsh, struct1)).to eq(true)
|
|
1131
1507
|
end
|
|
1132
1508
|
|
|
1133
|
-
it 'should accept empty hash with key_type
|
|
1509
|
+
it 'should accept empty hash with key_type unit' do
|
|
1134
1510
|
struct1 = struct_t({'a'=>optional_t(Integer)})
|
|
1135
|
-
hsh = hash_t(
|
|
1136
|
-
factory.constrain_size(hsh, 0, 0)
|
|
1511
|
+
hsh = hash_t(unit_t, unit_t, range_t(0, 0))
|
|
1137
1512
|
expect(calculator.assignable?(struct1, hsh)).to eq(true)
|
|
1138
1513
|
end
|
|
1139
1514
|
end
|
|
@@ -1158,111 +1533,228 @@ describe 'The type calculator' do
|
|
|
1158
1533
|
expect(calculator.assignable?(Bar, fooType)).to eq(false)
|
|
1159
1534
|
end
|
|
1160
1535
|
|
|
1161
|
-
it
|
|
1162
|
-
hc1 =
|
|
1163
|
-
hc2 =
|
|
1536
|
+
it 'should allow host class with same name' do
|
|
1537
|
+
hc1 = TypeFactory.host_class('the_name')
|
|
1538
|
+
hc2 = TypeFactory.host_class('the_name')
|
|
1164
1539
|
expect(calculator.assignable?(hc1, hc2)).to eq(true)
|
|
1165
1540
|
end
|
|
1166
1541
|
|
|
1167
|
-
it
|
|
1168
|
-
hc1 =
|
|
1169
|
-
hc2 =
|
|
1542
|
+
it 'should allow host class with name assigned to hostclass without name' do
|
|
1543
|
+
hc1 = TypeFactory.host_class
|
|
1544
|
+
hc2 = TypeFactory.host_class('the_name')
|
|
1170
1545
|
expect(calculator.assignable?(hc1, hc2)).to eq(true)
|
|
1171
1546
|
end
|
|
1172
1547
|
|
|
1173
|
-
it
|
|
1174
|
-
hc1 =
|
|
1175
|
-
hc2 =
|
|
1548
|
+
it 'should reject host classes with different names' do
|
|
1549
|
+
hc1 = TypeFactory.host_class('the_name')
|
|
1550
|
+
hc2 = TypeFactory.host_class('another_name')
|
|
1176
1551
|
expect(calculator.assignable?(hc1, hc2)).to eq(false)
|
|
1177
1552
|
end
|
|
1178
1553
|
|
|
1179
|
-
it
|
|
1180
|
-
hc1 =
|
|
1181
|
-
hc2 =
|
|
1554
|
+
it 'should reject host classes without name assigned to host class with name' do
|
|
1555
|
+
hc1 = TypeFactory.host_class('the_name')
|
|
1556
|
+
hc2 = TypeFactory.host_class
|
|
1182
1557
|
expect(calculator.assignable?(hc1, hc2)).to eq(false)
|
|
1183
1558
|
end
|
|
1184
1559
|
|
|
1185
|
-
it
|
|
1186
|
-
r1 =
|
|
1187
|
-
r2 =
|
|
1560
|
+
it 'should allow resource with same type_name and title' do
|
|
1561
|
+
r1 = TypeFactory.resource('file', 'foo')
|
|
1562
|
+
r2 = TypeFactory.resource('file', 'foo')
|
|
1188
1563
|
expect(calculator.assignable?(r1, r2)).to eq(true)
|
|
1189
1564
|
end
|
|
1190
1565
|
|
|
1191
|
-
it
|
|
1192
|
-
r1 =
|
|
1193
|
-
r2 =
|
|
1566
|
+
it 'should allow more specific resource assignment' do
|
|
1567
|
+
r1 = TypeFactory.resource
|
|
1568
|
+
r2 = TypeFactory.resource('file')
|
|
1194
1569
|
expect(calculator.assignable?(r1, r2)).to eq(true)
|
|
1195
|
-
r2 =
|
|
1570
|
+
r2 = TypeFactory.resource('file', '/tmp/foo')
|
|
1196
1571
|
expect(calculator.assignable?(r1, r2)).to eq(true)
|
|
1197
|
-
r1 =
|
|
1572
|
+
r1 = TypeFactory.resource('file')
|
|
1198
1573
|
expect(calculator.assignable?(r1, r2)).to eq(true)
|
|
1199
1574
|
end
|
|
1200
1575
|
|
|
1201
|
-
it
|
|
1202
|
-
r1 =
|
|
1203
|
-
r2 =
|
|
1576
|
+
it 'should reject less specific resource assignment' do
|
|
1577
|
+
r1 = TypeFactory.resource('file', '/tmp/foo')
|
|
1578
|
+
r2 = TypeFactory.resource('file')
|
|
1204
1579
|
expect(calculator.assignable?(r1, r2)).to eq(false)
|
|
1205
|
-
r2 =
|
|
1580
|
+
r2 = TypeFactory.resource
|
|
1206
1581
|
expect(calculator.assignable?(r1, r2)).to eq(false)
|
|
1207
1582
|
end
|
|
1208
1583
|
|
|
1584
|
+
context 'for TypeAlias, such that' do
|
|
1585
|
+
let!(:parser) { TypeParser.singleton }
|
|
1586
|
+
|
|
1587
|
+
it 'it is assignable to the type that it is an alias for' do
|
|
1588
|
+
t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
|
|
1589
|
+
expect(calculator.assignable?(integer_t, t)).to be_truthy
|
|
1590
|
+
end
|
|
1591
|
+
|
|
1592
|
+
it 'the type that it is an alias for is assignable to it' do
|
|
1593
|
+
t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
|
|
1594
|
+
expect(calculator.assignable?(t, integer_t)).to be_truthy
|
|
1595
|
+
end
|
|
1596
|
+
|
|
1597
|
+
it 'a recursive alias can be assignable from a conformant type with any depth' do
|
|
1598
|
+
scope = Object.new
|
|
1599
|
+
|
|
1600
|
+
t = type_alias_t('Tree', 'Hash[String,Variant[String,Tree]]')
|
|
1601
|
+
loader = Object.new
|
|
1602
|
+
loader.expects(:load).with(:type, 'tree').returns t
|
|
1603
|
+
|
|
1604
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1605
|
+
|
|
1606
|
+
t.resolve(parser, scope)
|
|
1607
|
+
expect(calculator.assignable?(t, parser.parse('Hash[String,Variant[String,Hash[String,Variant[String,String]]]]'))).to be_truthy
|
|
1608
|
+
end
|
|
1609
|
+
|
|
1610
|
+
|
|
1611
|
+
it 'similar recursive aliases are assignable' do
|
|
1612
|
+
scope = Object.new
|
|
1613
|
+
|
|
1614
|
+
t1 = type_alias_t('Tree1', 'Hash[String,Variant[String,Tree1]]')
|
|
1615
|
+
t2 = type_alias_t('Tree2', 'Hash[String,Variant[String,Tree2]]')
|
|
1616
|
+
loader = Object.new
|
|
1617
|
+
loader.expects(:load).with(:type, 'tree1').returns t1
|
|
1618
|
+
loader.expects(:load).with(:type, 'tree2').returns t2
|
|
1619
|
+
|
|
1620
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1621
|
+
|
|
1622
|
+
t1.resolve(parser, scope)
|
|
1623
|
+
t2.resolve(parser, scope)
|
|
1624
|
+
expect(calculator.assignable?(t1, t2)).to be_truthy
|
|
1625
|
+
end
|
|
1626
|
+
|
|
1627
|
+
it 'crossing recursive aliases are assignable' do
|
|
1628
|
+
t1 = type_alias_t('Tree1', 'Hash[String,Variant[String,Tree2]]')
|
|
1629
|
+
t2 = type_alias_t('Tree2', 'Hash[String,Variant[String,Tree1]]')
|
|
1630
|
+
loader = Object.new
|
|
1631
|
+
loader.expects(:load).with(:type, 'tree1').returns t1
|
|
1632
|
+
loader.expects(:load).with(:type, 'tree2').returns t2
|
|
1633
|
+
|
|
1634
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1635
|
+
|
|
1636
|
+
t1.resolve(parser, loader)
|
|
1637
|
+
t2.resolve(parser, loader)
|
|
1638
|
+
expect(calculator.assignable?(t1, t2)).to be_truthy
|
|
1639
|
+
end
|
|
1640
|
+
|
|
1641
|
+
it 'Type[T] is assignable to Type[AT] when AT is an alias for T' do
|
|
1642
|
+
scope = Object.new
|
|
1643
|
+
|
|
1644
|
+
ta = type_alias_t('PositiveInteger', 'Integer[0,default]')
|
|
1645
|
+
loader = Object.new
|
|
1646
|
+
loader.expects(:load).with(:type, 'positiveinteger').returns ta
|
|
1647
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1648
|
+
|
|
1649
|
+
t1 = type_t(range_t(0, :default))
|
|
1650
|
+
t2 = parser.parse('Type[PositiveInteger]', scope)
|
|
1651
|
+
expect(calculator.assignable?(t2, t1)).to be_truthy
|
|
1652
|
+
end
|
|
1653
|
+
|
|
1654
|
+
it 'Type[T] is assignable to AT when AT is an alias for Type[T]' do
|
|
1655
|
+
scope = Object.new
|
|
1656
|
+
|
|
1657
|
+
ta = type_alias_t('PositiveIntegerType', 'Type[Integer[0,default]]')
|
|
1658
|
+
loader = Object.new
|
|
1659
|
+
loader.expects(:load).with(:type, 'positiveintegertype').returns ta
|
|
1660
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1661
|
+
|
|
1662
|
+
t1 = type_t(range_t(0, :default))
|
|
1663
|
+
t2 = parser.parse('PositiveIntegerType', scope)
|
|
1664
|
+
expect(calculator.assignable?(t2, t1)).to be_truthy
|
|
1665
|
+
end
|
|
1666
|
+
|
|
1667
|
+
it 'Type[Type[T]] is assignable to Type[Type[AT]] when AT is an alias for T' do
|
|
1668
|
+
scope = Object.new
|
|
1669
|
+
|
|
1670
|
+
ta = type_alias_t('PositiveInteger', 'Integer[0,default]')
|
|
1671
|
+
loader = Object.new
|
|
1672
|
+
loader.expects(:load).with(:type, 'positiveinteger').returns ta
|
|
1673
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1674
|
+
|
|
1675
|
+
t1 = type_t(type_t(range_t(0, :default)))
|
|
1676
|
+
t2 = parser.parse('Type[Type[PositiveInteger]]', scope)
|
|
1677
|
+
expect(calculator.assignable?(t2, t1)).to be_truthy
|
|
1678
|
+
end
|
|
1679
|
+
|
|
1680
|
+
it 'Type[Type[T]] is assignable to Type[AT] when AT is an alias for Type[T]' do
|
|
1681
|
+
scope = Object.new
|
|
1682
|
+
|
|
1683
|
+
ta = type_alias_t('PositiveIntegerType', 'Type[Integer[0,default]]')
|
|
1684
|
+
loader = Object.new
|
|
1685
|
+
loader.expects(:load).with(:type, 'positiveintegertype').returns ta
|
|
1686
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1687
|
+
|
|
1688
|
+
t1 = type_t(type_t(range_t(0, :default)))
|
|
1689
|
+
t2 = parser.parse('Type[PositiveIntegerType]', scope)
|
|
1690
|
+
expect(calculator.assignable?(t2, t1)).to be_truthy
|
|
1691
|
+
end
|
|
1692
|
+
end
|
|
1209
1693
|
end
|
|
1210
1694
|
|
|
1211
1695
|
context 'when testing if x is instance of type t' do
|
|
1212
|
-
include_context
|
|
1696
|
+
include_context 'types_setup'
|
|
1213
1697
|
|
|
1214
1698
|
it 'should consider undef to be instance of Any, NilType, and optional' do
|
|
1215
|
-
expect(calculator.instance?(
|
|
1216
|
-
expect(calculator.instance?(
|
|
1217
|
-
expect(calculator.instance?(
|
|
1699
|
+
expect(calculator.instance?(PUndefType::DEFAULT, nil)).to eq(true)
|
|
1700
|
+
expect(calculator.instance?(PAnyType::DEFAULT, nil)).to eq(true)
|
|
1701
|
+
expect(calculator.instance?(POptionalType::DEFAULT, nil)).to eq(true)
|
|
1218
1702
|
end
|
|
1219
1703
|
|
|
1220
1704
|
it 'all types should be (ruby) instance of PAnyType' do
|
|
1221
1705
|
all_types.each do |t|
|
|
1222
|
-
expect(t.
|
|
1706
|
+
expect(t::DEFAULT.is_a?(PAnyType)).to eq(true)
|
|
1223
1707
|
end
|
|
1224
1708
|
end
|
|
1225
1709
|
|
|
1226
|
-
it "should
|
|
1227
|
-
expect(calculator.
|
|
1710
|
+
it "should infer :undef to be Undef" do
|
|
1711
|
+
expect(calculator.infer(:undef)).to be_assignable_to(undef_t)
|
|
1712
|
+
end
|
|
1713
|
+
|
|
1714
|
+
it "should not consider :default to be instance of Runtime['ruby', 'Symbol]" do
|
|
1715
|
+
expect(calculator.instance?(PRuntimeType.new(:ruby, 'Symbol'), :default)).to eq(false)
|
|
1228
1716
|
end
|
|
1229
1717
|
|
|
1230
|
-
it "should consider :undef to be instance of
|
|
1231
|
-
expect(calculator.instance?(
|
|
1718
|
+
it "should not consider :undef to be instance of Runtime['ruby', 'Symbol]" do
|
|
1719
|
+
expect(calculator.instance?(PRuntimeType.new(:ruby, 'Symbol'), :undef)).to eq(false)
|
|
1232
1720
|
end
|
|
1233
1721
|
|
|
1234
|
-
it 'should
|
|
1722
|
+
it 'should consider :undef to be instance of an Optional type' do
|
|
1723
|
+
expect(calculator.instance?(POptionalType::DEFAULT, :undef)).to eq(true)
|
|
1724
|
+
end
|
|
1725
|
+
|
|
1726
|
+
it 'should not consider undef to be an instance of any other type than Any, UndefType and Data' do
|
|
1235
1727
|
types_to_test = all_types - [
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
Puppet::Pops::Types::POptionalType,
|
|
1728
|
+
PAnyType,
|
|
1729
|
+
PUndefType,
|
|
1730
|
+
POptionalType,
|
|
1240
1731
|
]
|
|
1241
1732
|
|
|
1242
|
-
types_to_test.each {|t| expect(calculator.instance?(t
|
|
1243
|
-
types_to_test.each {|t| expect(calculator.instance?(t
|
|
1733
|
+
types_to_test.each {|t| expect(calculator.instance?(t::DEFAULT, nil)).to eq(false) }
|
|
1734
|
+
types_to_test.each {|t| expect(calculator.instance?(t::DEFAULT, :undef)).to eq(false) }
|
|
1244
1735
|
end
|
|
1245
1736
|
|
|
1246
1737
|
it 'should consider default to be instance of Default and Any' do
|
|
1247
|
-
expect(calculator.instance?(
|
|
1248
|
-
expect(calculator.instance?(
|
|
1738
|
+
expect(calculator.instance?(PDefaultType::DEFAULT, :default)).to eq(true)
|
|
1739
|
+
expect(calculator.instance?(PAnyType::DEFAULT, :default)).to eq(true)
|
|
1249
1740
|
end
|
|
1250
1741
|
|
|
1251
|
-
it 'should not consider "default" to be an instance of anything but Default, and Any' do
|
|
1742
|
+
it 'should not consider "default" to be an instance of anything but Default, NotUndef, and Any' do
|
|
1252
1743
|
types_to_test = all_types - [
|
|
1253
|
-
|
|
1254
|
-
|
|
1744
|
+
PAnyType,
|
|
1745
|
+
PNotUndefType,
|
|
1746
|
+
PDefaultType,
|
|
1255
1747
|
]
|
|
1256
1748
|
|
|
1257
|
-
types_to_test.each {|t| expect(calculator.instance?(t
|
|
1749
|
+
types_to_test.each {|t| expect(calculator.instance?(t::DEFAULT, :default)).to eq(false) }
|
|
1258
1750
|
end
|
|
1259
1751
|
|
|
1260
|
-
it 'should consider
|
|
1261
|
-
expect(calculator.instance?(
|
|
1752
|
+
it 'should consider integer instanceof PIntegerType' do
|
|
1753
|
+
expect(calculator.instance?(PIntegerType::DEFAULT, 1)).to eq(true)
|
|
1262
1754
|
end
|
|
1263
1755
|
|
|
1264
|
-
it 'should consider
|
|
1265
|
-
expect(calculator.instance?(
|
|
1756
|
+
it 'should consider integer instanceof Integer' do
|
|
1757
|
+
expect(calculator.instance?(Integer, 1)).to eq(true)
|
|
1266
1758
|
end
|
|
1267
1759
|
|
|
1268
1760
|
it 'should consider integer in range' do
|
|
@@ -1274,15 +1766,21 @@ describe 'The type calculator' do
|
|
|
1274
1766
|
end
|
|
1275
1767
|
|
|
1276
1768
|
it 'should consider string in length range' do
|
|
1277
|
-
range =
|
|
1769
|
+
range = constrained_string_t(range_t(1,3))
|
|
1278
1770
|
expect(calculator.instance?(range, 'a')).to eq(true)
|
|
1279
1771
|
expect(calculator.instance?(range, 'abc')).to eq(true)
|
|
1280
1772
|
expect(calculator.instance?(range, '')).to eq(false)
|
|
1281
1773
|
expect(calculator.instance?(range, 'abcd')).to eq(false)
|
|
1282
1774
|
end
|
|
1283
1775
|
|
|
1776
|
+
it 'should consider string values' do
|
|
1777
|
+
string = string_t('a')
|
|
1778
|
+
expect(calculator.instance?(string, 'a')).to eq(true)
|
|
1779
|
+
expect(calculator.instance?(string, 'c')).to eq(false)
|
|
1780
|
+
end
|
|
1781
|
+
|
|
1284
1782
|
it 'should consider array in length range' do
|
|
1285
|
-
range =
|
|
1783
|
+
range = array_t(integer_t, range_t(1,3))
|
|
1286
1784
|
expect(calculator.instance?(range, [1])).to eq(true)
|
|
1287
1785
|
expect(calculator.instance?(range, [1,2,3])).to eq(true)
|
|
1288
1786
|
expect(calculator.instance?(range, [])).to eq(false)
|
|
@@ -1290,7 +1788,7 @@ describe 'The type calculator' do
|
|
|
1290
1788
|
end
|
|
1291
1789
|
|
|
1292
1790
|
it 'should consider hash in length range' do
|
|
1293
|
-
range =
|
|
1791
|
+
range = hash_t(integer_t, integer_t, range_t(1,2))
|
|
1294
1792
|
expect(calculator.instance?(range, {1=>1})).to eq(true)
|
|
1295
1793
|
expect(calculator.instance?(range, {1=>1, 2=>2})).to eq(true)
|
|
1296
1794
|
expect(calculator.instance?(range, {})).to eq(false)
|
|
@@ -1298,7 +1796,7 @@ describe 'The type calculator' do
|
|
|
1298
1796
|
end
|
|
1299
1797
|
|
|
1300
1798
|
it 'should consider collection in length range for array ' do
|
|
1301
|
-
range =
|
|
1799
|
+
range = collection_t(range_t(1,3))
|
|
1302
1800
|
expect(calculator.instance?(range, [1])).to eq(true)
|
|
1303
1801
|
expect(calculator.instance?(range, [1,2,3])).to eq(true)
|
|
1304
1802
|
expect(calculator.instance?(range, [])).to eq(false)
|
|
@@ -1306,7 +1804,7 @@ describe 'The type calculator' do
|
|
|
1306
1804
|
end
|
|
1307
1805
|
|
|
1308
1806
|
it 'should consider collection in length range for hash' do
|
|
1309
|
-
range =
|
|
1807
|
+
range = collection_t(range_t(1,2))
|
|
1310
1808
|
expect(calculator.instance?(range, {1=>1})).to eq(true)
|
|
1311
1809
|
expect(calculator.instance?(range, {1=>1, 2=>2})).to eq(true)
|
|
1312
1810
|
expect(calculator.instance?(range, {})).to eq(false)
|
|
@@ -1380,6 +1878,26 @@ describe 'The type calculator' do
|
|
|
1380
1878
|
struct = struct_t({'a'=>Integer, 'b'=>String, 'c'=>optional_t(Float)})
|
|
1381
1879
|
expect(calculator.instance?(struct, {'a'=>1, 'b'=>'a', 'c'=>'x'})).to eq(false)
|
|
1382
1880
|
end
|
|
1881
|
+
|
|
1882
|
+
it 'should consider nil to be a valid element value' do
|
|
1883
|
+
struct = struct_t({not_undef_t('a') => any_t, 'b'=>String})
|
|
1884
|
+
expect(calculator.instance?(struct, {'a'=>nil , 'b'=>'a'})).to eq(true)
|
|
1885
|
+
end
|
|
1886
|
+
|
|
1887
|
+
it 'should consider nil to be a valid element value but subject to value type' do
|
|
1888
|
+
struct = struct_t({not_undef_t('a') => String, 'b'=>String})
|
|
1889
|
+
expect(calculator.instance?(struct, {'a'=>nil , 'b'=>'a'})).to eq(false)
|
|
1890
|
+
end
|
|
1891
|
+
|
|
1892
|
+
it 'should consider nil to be a valid element value but subject to value type even when key is optional' do
|
|
1893
|
+
struct = struct_t({optional_t('a') => String, 'b'=>String})
|
|
1894
|
+
expect(calculator.instance?(struct, {'a'=>nil , 'b'=>'a'})).to eq(false)
|
|
1895
|
+
end
|
|
1896
|
+
|
|
1897
|
+
it 'should consider a hash where optional key is missing as assignable even if value of optional key is required' do
|
|
1898
|
+
struct = struct_t({optional_t('a') => String, 'b'=>String})
|
|
1899
|
+
expect(calculator.instance?(struct, {'b'=>'a'})).to eq(true)
|
|
1900
|
+
end
|
|
1383
1901
|
end
|
|
1384
1902
|
|
|
1385
1903
|
context 'and t is Data' do
|
|
@@ -1417,16 +1935,16 @@ describe 'The type calculator' do
|
|
|
1417
1935
|
end
|
|
1418
1936
|
end
|
|
1419
1937
|
|
|
1420
|
-
context
|
|
1938
|
+
context 'and t is something Callable' do
|
|
1421
1939
|
|
|
1422
1940
|
it 'a Closure should be considered a Callable' do
|
|
1423
|
-
factory =
|
|
1941
|
+
factory = Model::Factory
|
|
1424
1942
|
params = [factory.PARAM('a')]
|
|
1425
|
-
the_block = factory.LAMBDA(params,factory.literal(42))
|
|
1426
|
-
the_closure =
|
|
1943
|
+
the_block = factory.LAMBDA(params,factory.literal(42), nil).model
|
|
1944
|
+
the_closure = Evaluator::Closure::Dynamic.new(:fake_evaluator, the_block, :fake_scope)
|
|
1427
1945
|
expect(calculator.instance?(all_callables_t, the_closure)).to be_truthy
|
|
1428
|
-
expect(calculator.instance?(callable_t(
|
|
1429
|
-
expect(calculator.instance?(callable_t(
|
|
1946
|
+
expect(calculator.instance?(callable_t(any_t), the_closure)).to be_truthy
|
|
1947
|
+
expect(calculator.instance?(callable_t(any_t, any_t), the_closure)).to be_falsey
|
|
1430
1948
|
end
|
|
1431
1949
|
|
|
1432
1950
|
it 'a Function instance should be considered a Callable' do
|
|
@@ -1446,456 +1964,288 @@ describe 'The type calculator' do
|
|
|
1446
1964
|
expect(calculator.instance?(callable_t(String), f)).to be_truthy
|
|
1447
1965
|
end
|
|
1448
1966
|
end
|
|
1449
|
-
end
|
|
1450
1967
|
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
[Integer,Fixnum,Bignum].each do |c|
|
|
1454
|
-
expect(calculator.type(c).class).to eq(Puppet::Pops::Types::PIntegerType)
|
|
1455
|
-
end
|
|
1456
|
-
end
|
|
1968
|
+
context 'and t is a TypeAlias' do
|
|
1969
|
+
let!(:parser) { TypeParser.singleton }
|
|
1457
1970
|
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
it 'should yield \'PBooleanType\' for FalseClass and TrueClass' do
|
|
1463
|
-
[FalseClass,TrueClass].each do |c|
|
|
1464
|
-
expect(calculator.type(c).class).to eq(Puppet::Pops::Types::PBooleanType)
|
|
1971
|
+
it 'should consider x an instance of the aliased simple type' do
|
|
1972
|
+
t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
|
|
1973
|
+
expect(calculator.instance?(t, 15)).to be_truthy
|
|
1465
1974
|
end
|
|
1466
|
-
end
|
|
1467
|
-
|
|
1468
|
-
it 'should yield \'PUndefType\' for NilClass' do
|
|
1469
|
-
expect(calculator.type(NilClass).class).to eq(Puppet::Pops::Types::PUndefType)
|
|
1470
|
-
end
|
|
1471
|
-
|
|
1472
|
-
it 'should yield \'PStringType\' for String' do
|
|
1473
|
-
expect(calculator.type(String).class).to eq(Puppet::Pops::Types::PStringType)
|
|
1474
|
-
end
|
|
1475
|
-
|
|
1476
|
-
it 'should yield \'PRegexpType\' for Regexp' do
|
|
1477
|
-
expect(calculator.type(Regexp).class).to eq(Puppet::Pops::Types::PRegexpType)
|
|
1478
|
-
end
|
|
1479
|
-
|
|
1480
|
-
it 'should yield \'PArrayType[PDataType]\' for Array' do
|
|
1481
|
-
t = calculator.type(Array)
|
|
1482
|
-
expect(t.class).to eq(Puppet::Pops::Types::PArrayType)
|
|
1483
|
-
expect(t.element_type.class).to eq(Puppet::Pops::Types::PDataType)
|
|
1484
|
-
end
|
|
1485
|
-
|
|
1486
|
-
it 'should yield \'PHashType[PScalarType,PDataType]\' for Hash' do
|
|
1487
|
-
t = calculator.type(Hash)
|
|
1488
|
-
expect(t.class).to eq(Puppet::Pops::Types::PHashType)
|
|
1489
|
-
expect(t.key_type.class).to eq(Puppet::Pops::Types::PScalarType)
|
|
1490
|
-
expect(t.element_type.class).to eq(Puppet::Pops::Types::PDataType)
|
|
1491
|
-
end
|
|
1492
|
-
end
|
|
1493
|
-
|
|
1494
|
-
context 'when representing the type as string' do
|
|
1495
|
-
it 'should yield \'Type\' for PType' do
|
|
1496
|
-
expect(calculator.string(Puppet::Pops::Types::PType.new())).to eq('Type')
|
|
1497
|
-
end
|
|
1498
|
-
|
|
1499
|
-
it 'should yield \'Object\' for PAnyType' do
|
|
1500
|
-
expect(calculator.string(Puppet::Pops::Types::PAnyType.new())).to eq('Any')
|
|
1501
|
-
end
|
|
1502
|
-
|
|
1503
|
-
it 'should yield \'Scalar\' for PScalarType' do
|
|
1504
|
-
expect(calculator.string(Puppet::Pops::Types::PScalarType.new())).to eq('Scalar')
|
|
1505
|
-
end
|
|
1506
|
-
|
|
1507
|
-
it 'should yield \'Boolean\' for PBooleanType' do
|
|
1508
|
-
expect(calculator.string(Puppet::Pops::Types::PBooleanType.new())).to eq('Boolean')
|
|
1509
|
-
end
|
|
1510
|
-
|
|
1511
|
-
it 'should yield \'Data\' for PDataType' do
|
|
1512
|
-
expect(calculator.string(Puppet::Pops::Types::PDataType.new())).to eq('Data')
|
|
1513
|
-
end
|
|
1514
|
-
|
|
1515
|
-
it 'should yield \'Numeric\' for PNumericType' do
|
|
1516
|
-
expect(calculator.string(Puppet::Pops::Types::PNumericType.new())).to eq('Numeric')
|
|
1517
|
-
end
|
|
1518
|
-
|
|
1519
|
-
it 'should yield \'Integer\' and from/to for PIntegerType' do
|
|
1520
|
-
int_T = Puppet::Pops::Types::PIntegerType
|
|
1521
|
-
expect(calculator.string(int_T.new())).to eq('Integer')
|
|
1522
|
-
int = int_T.new()
|
|
1523
|
-
int.from = 1
|
|
1524
|
-
int.to = 1
|
|
1525
|
-
expect(calculator.string(int)).to eq('Integer[1, 1]')
|
|
1526
|
-
int = int_T.new()
|
|
1527
|
-
int.from = 1
|
|
1528
|
-
int.to = 2
|
|
1529
|
-
expect(calculator.string(int)).to eq('Integer[1, 2]')
|
|
1530
|
-
int = int_T.new()
|
|
1531
|
-
int.from = nil
|
|
1532
|
-
int.to = 2
|
|
1533
|
-
expect(calculator.string(int)).to eq('Integer[default, 2]')
|
|
1534
|
-
int = int_T.new()
|
|
1535
|
-
int.from = 2
|
|
1536
|
-
int.to = nil
|
|
1537
|
-
expect(calculator.string(int)).to eq('Integer[2, default]')
|
|
1538
|
-
end
|
|
1539
|
-
|
|
1540
|
-
it 'should yield \'Float\' for PFloatType' do
|
|
1541
|
-
expect(calculator.string(Puppet::Pops::Types::PFloatType.new())).to eq('Float')
|
|
1542
|
-
end
|
|
1543
|
-
|
|
1544
|
-
it 'should yield \'Regexp\' for PRegexpType' do
|
|
1545
|
-
expect(calculator.string(Puppet::Pops::Types::PRegexpType.new())).to eq('Regexp')
|
|
1546
|
-
end
|
|
1547
|
-
|
|
1548
|
-
it 'should yield \'Regexp[/pat/]\' for parameterized PRegexpType' do
|
|
1549
|
-
t = Puppet::Pops::Types::PRegexpType.new()
|
|
1550
|
-
t.pattern = ('a/b')
|
|
1551
|
-
expect(calculator.string(Puppet::Pops::Types::PRegexpType.new())).to eq('Regexp')
|
|
1552
|
-
end
|
|
1553
|
-
|
|
1554
|
-
it 'should yield \'String\' for PStringType' do
|
|
1555
|
-
expect(calculator.string(Puppet::Pops::Types::PStringType.new())).to eq('String')
|
|
1556
|
-
end
|
|
1557
|
-
|
|
1558
|
-
it 'should yield \'String\' for PStringType with multiple values' do
|
|
1559
|
-
expect(calculator.string(string_t('a', 'b', 'c'))).to eq('String')
|
|
1560
|
-
end
|
|
1561
|
-
|
|
1562
|
-
it 'should yield \'String\' and from/to for PStringType' do
|
|
1563
|
-
string_T = Puppet::Pops::Types::PStringType
|
|
1564
|
-
expect(calculator.string(factory.constrain_size(string_T.new(), 1,1))).to eq('String[1, 1]')
|
|
1565
|
-
expect(calculator.string(factory.constrain_size(string_T.new(), 1,2))).to eq('String[1, 2]')
|
|
1566
|
-
expect(calculator.string(factory.constrain_size(string_T.new(), :default, 2))).to eq('String[default, 2]')
|
|
1567
|
-
expect(calculator.string(factory.constrain_size(string_T.new(), 2, :default))).to eq('String[2, default]')
|
|
1568
|
-
end
|
|
1569
|
-
|
|
1570
|
-
it 'should yield \'Array[Integer]\' for PArrayType[PIntegerType]' do
|
|
1571
|
-
t = Puppet::Pops::Types::PArrayType.new()
|
|
1572
|
-
t.element_type = Puppet::Pops::Types::PIntegerType.new()
|
|
1573
|
-
expect(calculator.string(t)).to eq('Array[Integer]')
|
|
1574
|
-
end
|
|
1575
|
-
|
|
1576
|
-
it 'should yield \'Collection\' and from/to for PCollectionType' do
|
|
1577
|
-
col = collection_t()
|
|
1578
|
-
expect(calculator.string(factory.constrain_size(col.copy, 1,1))).to eq('Collection[1, 1]')
|
|
1579
|
-
expect(calculator.string(factory.constrain_size(col.copy, 1,2))).to eq('Collection[1, 2]')
|
|
1580
|
-
expect(calculator.string(factory.constrain_size(col.copy, :default, 2))).to eq('Collection[default, 2]')
|
|
1581
|
-
expect(calculator.string(factory.constrain_size(col.copy, 2, :default))).to eq('Collection[2, default]')
|
|
1582
|
-
end
|
|
1583
|
-
|
|
1584
|
-
it 'should yield \'Array\' and from/to for PArrayType' do
|
|
1585
|
-
arr = array_t(string_t)
|
|
1586
|
-
expect(calculator.string(factory.constrain_size(arr.copy, 1,1))).to eq('Array[String, 1, 1]')
|
|
1587
|
-
expect(calculator.string(factory.constrain_size(arr.copy, 1,2))).to eq('Array[String, 1, 2]')
|
|
1588
|
-
expect(calculator.string(factory.constrain_size(arr.copy, :default, 2))).to eq('Array[String, default, 2]')
|
|
1589
|
-
expect(calculator.string(factory.constrain_size(arr.copy, 2, :default))).to eq('Array[String, 2, default]')
|
|
1590
|
-
end
|
|
1591
|
-
|
|
1592
|
-
it 'should yield \'Tuple[Integer]\' for PTupleType[PIntegerType]' do
|
|
1593
|
-
t = Puppet::Pops::Types::PTupleType.new()
|
|
1594
|
-
t.addTypes(Puppet::Pops::Types::PIntegerType.new())
|
|
1595
|
-
expect(calculator.string(t)).to eq('Tuple[Integer]')
|
|
1596
|
-
end
|
|
1597
|
-
|
|
1598
|
-
it 'should yield \'Tuple[T, T,..]\' for PTupleType[T, T, ...]' do
|
|
1599
|
-
t = Puppet::Pops::Types::PTupleType.new()
|
|
1600
|
-
t.addTypes(Puppet::Pops::Types::PIntegerType.new())
|
|
1601
|
-
t.addTypes(Puppet::Pops::Types::PIntegerType.new())
|
|
1602
|
-
t.addTypes(Puppet::Pops::Types::PStringType.new())
|
|
1603
|
-
expect(calculator.string(t)).to eq('Tuple[Integer, Integer, String]')
|
|
1604
|
-
end
|
|
1605
|
-
|
|
1606
|
-
it 'should yield \'Tuple\' and from/to for PTupleType' do
|
|
1607
|
-
tuple_t = tuple_t(string_t)
|
|
1608
|
-
expect(calculator.string(factory.constrain_size(tuple_t.copy, 1,1))).to eq('Tuple[String, 1, 1]')
|
|
1609
|
-
expect(calculator.string(factory.constrain_size(tuple_t.copy, 1,2))).to eq('Tuple[String, 1, 2]')
|
|
1610
|
-
expect(calculator.string(factory.constrain_size(tuple_t.copy, :default, 2))).to eq('Tuple[String, default, 2]')
|
|
1611
|
-
expect(calculator.string(factory.constrain_size(tuple_t.copy, 2, :default))).to eq('Tuple[String, 2, default]')
|
|
1612
|
-
end
|
|
1613
|
-
|
|
1614
|
-
it 'should yield \'Struct\' and details for PStructType' do
|
|
1615
|
-
struct_t = struct_t({'a'=>Integer, 'b'=>String})
|
|
1616
|
-
expect(calculator.string(struct_t)).to eq("Struct[{'a'=>Integer, 'b'=>String}]")
|
|
1617
|
-
struct_t = struct_t({})
|
|
1618
|
-
expect(calculator.string(struct_t)).to eq("Struct")
|
|
1619
|
-
end
|
|
1620
|
-
|
|
1621
|
-
it 'should yield \'Hash[String, Integer]\' for PHashType[PStringType, PIntegerType]' do
|
|
1622
|
-
t = Puppet::Pops::Types::PHashType.new()
|
|
1623
|
-
t.key_type = Puppet::Pops::Types::PStringType.new()
|
|
1624
|
-
t.element_type = Puppet::Pops::Types::PIntegerType.new()
|
|
1625
|
-
expect(calculator.string(t)).to eq('Hash[String, Integer]')
|
|
1626
|
-
end
|
|
1627
|
-
|
|
1628
|
-
it 'should yield \'Hash\' and from/to for PHashType' do
|
|
1629
|
-
hsh = hash_t(string_t, string_t)
|
|
1630
|
-
expect(calculator.string(factory.constrain_size(hsh.copy, 1,1))).to eq('Hash[String, String, 1, 1]')
|
|
1631
|
-
expect(calculator.string(factory.constrain_size(hsh.copy, 1,2))).to eq('Hash[String, String, 1, 2]')
|
|
1632
|
-
expect(calculator.string(factory.constrain_size(hsh.copy, :default, 2))).to eq('Hash[String, String, default, 2]')
|
|
1633
|
-
expect(calculator.string(factory.constrain_size(hsh.copy, 2, :default))).to eq('Hash[String, String, 2, default]')
|
|
1634
|
-
end
|
|
1635
1975
|
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1976
|
+
it 'should consider x an instance of the aliased parameterized type' do
|
|
1977
|
+
t = type_alias_t('Alias', 'Integer[0,20]').resolve(parser, nil)
|
|
1978
|
+
expect(calculator.instance?(t, 15)).to be_truthy
|
|
1979
|
+
end
|
|
1640
1980
|
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
end
|
|
1981
|
+
it 'should consider x an instance of the aliased type that uses self recursion' do
|
|
1982
|
+
t = type_alias_t('Tree', 'Hash[String,Variant[String,Tree]]')
|
|
1983
|
+
loader = Object.new
|
|
1984
|
+
loader.expects(:load).with(:type, 'tree').returns t
|
|
1646
1985
|
|
|
1647
|
-
|
|
1648
|
-
t = Puppet::Pops::Types::PResourceType.new()
|
|
1649
|
-
expect(calculator.string(t)).to eq('Resource')
|
|
1650
|
-
end
|
|
1986
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1651
1987
|
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
expect(calculator.string(t)).to eq('File')
|
|
1656
|
-
end
|
|
1988
|
+
t.resolve(parser, loader)
|
|
1989
|
+
expect(calculator.instance?(t, {'a'=>{'aa'=>{'aaa'=>'aaaa'}}, 'b'=>'bb'})).to be_truthy
|
|
1990
|
+
end
|
|
1657
1991
|
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1992
|
+
it 'should consider x an instance of the aliased type that uses contains an alias that causes self recursion' do
|
|
1993
|
+
t1 = type_alias_t('Tree', 'Hash[String,Variant[String,OtherTree]]')
|
|
1994
|
+
t2 = type_alias_t('OtherTree', 'Hash[String,Tree]')
|
|
1995
|
+
loader = Object.new
|
|
1996
|
+
loader.expects(:load).with(:type, 'tree').returns t1
|
|
1997
|
+
loader.expects(:load).with(:type, 'othertree').returns t2
|
|
1664
1998
|
|
|
1665
|
-
|
|
1666
|
-
t = enum_t('a', 'b', 'c')
|
|
1667
|
-
expect(calculator.string(t)).to eq("Enum['a', 'b', 'c']")
|
|
1668
|
-
end
|
|
1999
|
+
Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
|
|
1669
2000
|
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
expect(calculator.string(t)).to eq("Pattern[/a/]")
|
|
1674
|
-
expect(calculator.string(t2)).to eq("Pattern[/a/, /b/, /c/]")
|
|
2001
|
+
t1.resolve(parser, loader)
|
|
2002
|
+
expect(calculator.instance?(t1, {'a'=>{'aa'=>{'aaa'=>'aaaa'}}, 'b'=>'bb'})).to be_truthy
|
|
2003
|
+
end
|
|
1675
2004
|
end
|
|
2005
|
+
end
|
|
1676
2006
|
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
expect(calculator.
|
|
2007
|
+
context 'when converting a ruby class' do
|
|
2008
|
+
it 'should yield \'PIntegerType\' for Fixnum' do
|
|
2009
|
+
expect(calculator.type(Fixnum).class).to eq(PIntegerType)
|
|
1680
2010
|
end
|
|
1681
2011
|
|
|
1682
|
-
it
|
|
1683
|
-
|
|
1684
|
-
t2 = integer_t()
|
|
1685
|
-
t3 = pattern_t('a')
|
|
1686
|
-
t = variant_t(t1, t2, t3)
|
|
1687
|
-
expect(calculator.string(t)).to eq("Variant[String, Integer, Pattern[/a/]]")
|
|
2012
|
+
it 'should yield \'PIntegerType\' for Bignum' do
|
|
2013
|
+
expect(calculator.type(Bignum).class).to eq(PIntegerType)
|
|
1688
2014
|
end
|
|
1689
2015
|
|
|
1690
|
-
it
|
|
1691
|
-
expect(calculator.
|
|
2016
|
+
it 'should yield \'PIntegerType\' for Integer' do
|
|
2017
|
+
expect(calculator.type(Integer).class).to eq(PIntegerType)
|
|
1692
2018
|
end
|
|
1693
2019
|
|
|
1694
|
-
it
|
|
1695
|
-
expect(calculator.
|
|
2020
|
+
it 'should yield \'PFloatType\' for Float' do
|
|
2021
|
+
expect(calculator.type(Float).class).to eq(PFloatType)
|
|
1696
2022
|
end
|
|
1697
2023
|
|
|
1698
|
-
it
|
|
1699
|
-
|
|
2024
|
+
it 'should yield \'PBooleanType\' for FalseClass and TrueClass' do
|
|
2025
|
+
[FalseClass,TrueClass].each do |c|
|
|
2026
|
+
expect(calculator.type(c).class).to eq(PBooleanType)
|
|
2027
|
+
end
|
|
1700
2028
|
end
|
|
1701
2029
|
|
|
1702
|
-
it
|
|
1703
|
-
expect(calculator.
|
|
2030
|
+
it 'should yield \'PUndefType\' for NilClass' do
|
|
2031
|
+
expect(calculator.type(NilClass).class).to eq(PUndefType)
|
|
1704
2032
|
end
|
|
1705
2033
|
|
|
1706
|
-
it
|
|
1707
|
-
expect(calculator.
|
|
2034
|
+
it 'should yield \'PStringType\' for String' do
|
|
2035
|
+
expect(calculator.type(String).class).to eq(PStringType)
|
|
1708
2036
|
end
|
|
1709
2037
|
|
|
1710
|
-
it
|
|
1711
|
-
expect(calculator.
|
|
1712
|
-
expect(calculator.string(callable_t(0, 1))).to eql("Callable[0, 1]")
|
|
1713
|
-
expect(calculator.string(callable_t(0, :default))).to eql("Callable[0, default]")
|
|
2038
|
+
it 'should yield \'PRegexpType\' for Regexp' do
|
|
2039
|
+
expect(calculator.type(Regexp).class).to eq(PRegexpType)
|
|
1714
2040
|
end
|
|
1715
2041
|
|
|
1716
|
-
it
|
|
1717
|
-
|
|
1718
|
-
expect(
|
|
1719
|
-
expect(
|
|
2042
|
+
it 'should yield \'PArrayType[PAnyType]\' for Array' do
|
|
2043
|
+
t = calculator.type(Array)
|
|
2044
|
+
expect(t.class).to eq(PArrayType)
|
|
2045
|
+
expect(t.element_type.class).to eq(PAnyType)
|
|
1720
2046
|
end
|
|
1721
2047
|
|
|
1722
|
-
it
|
|
1723
|
-
|
|
2048
|
+
it 'should yield \'PHashType[PAnyType,PAnyType]\' for Hash' do
|
|
2049
|
+
t = calculator.type(Hash)
|
|
2050
|
+
expect(t.class).to eq(PHashType)
|
|
2051
|
+
expect(t.key_type.class).to eq(PAnyType)
|
|
2052
|
+
expect(t.value_type.class).to eq(PAnyType)
|
|
1724
2053
|
end
|
|
1725
2054
|
end
|
|
1726
2055
|
|
|
1727
2056
|
context 'when processing meta type' do
|
|
1728
2057
|
it 'should infer PType as the type of all other types' do
|
|
1729
|
-
ptype =
|
|
1730
|
-
expect(calculator.infer(
|
|
1731
|
-
expect(calculator.infer(
|
|
1732
|
-
expect(calculator.infer(
|
|
1733
|
-
expect(calculator.infer(
|
|
1734
|
-
expect(calculator.infer(
|
|
1735
|
-
expect(calculator.infer(
|
|
1736
|
-
expect(calculator.infer(
|
|
1737
|
-
expect(calculator.infer(
|
|
1738
|
-
expect(calculator.infer(
|
|
1739
|
-
expect(calculator.infer(
|
|
1740
|
-
expect(calculator.infer(
|
|
1741
|
-
expect(calculator.infer(
|
|
1742
|
-
expect(calculator.infer(
|
|
1743
|
-
expect(calculator.infer(
|
|
1744
|
-
expect(calculator.infer(
|
|
1745
|
-
expect(calculator.infer(
|
|
1746
|
-
expect(calculator.infer(
|
|
1747
|
-
expect(calculator.infer(
|
|
1748
|
-
expect(calculator.infer(
|
|
1749
|
-
expect(calculator.infer(
|
|
1750
|
-
expect(calculator.infer(
|
|
2058
|
+
ptype = PType
|
|
2059
|
+
expect(calculator.infer(PUndefType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2060
|
+
expect(calculator.infer(PScalarType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2061
|
+
expect(calculator.infer(PScalarDataType::DEFAULT).is_a?(ptype)).to eq(true)
|
|
2062
|
+
expect(calculator.infer(PStringType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2063
|
+
expect(calculator.infer(PNumericType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2064
|
+
expect(calculator.infer(PIntegerType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2065
|
+
expect(calculator.infer(PFloatType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2066
|
+
expect(calculator.infer(PRegexpType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2067
|
+
expect(calculator.infer(PBooleanType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2068
|
+
expect(calculator.infer(PCollectionType::DEFAULT).is_a?(ptype)).to eq(true)
|
|
2069
|
+
expect(calculator.infer(PArrayType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2070
|
+
expect(calculator.infer(PHashType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2071
|
+
expect(calculator.infer(PIterableType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2072
|
+
expect(calculator.infer(PRuntimeType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2073
|
+
expect(calculator.infer(PHostClassType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2074
|
+
expect(calculator.infer(PResourceType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2075
|
+
expect(calculator.infer(PEnumType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2076
|
+
expect(calculator.infer(PPatternType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2077
|
+
expect(calculator.infer(PVariantType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2078
|
+
expect(calculator.infer(PTupleType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2079
|
+
expect(calculator.infer(POptionalType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
2080
|
+
expect(calculator.infer(PCallableType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
1751
2081
|
end
|
|
1752
2082
|
|
|
1753
2083
|
it 'should infer PType as the type of all other types' do
|
|
1754
|
-
|
|
1755
|
-
expect(calculator.
|
|
1756
|
-
expect(calculator.
|
|
1757
|
-
expect(calculator.
|
|
1758
|
-
expect(calculator.
|
|
1759
|
-
expect(calculator.
|
|
1760
|
-
expect(calculator.
|
|
1761
|
-
expect(calculator.
|
|
1762
|
-
expect(calculator.
|
|
1763
|
-
expect(calculator.
|
|
1764
|
-
expect(calculator.
|
|
1765
|
-
expect(calculator.
|
|
1766
|
-
expect(calculator.
|
|
1767
|
-
expect(calculator.
|
|
1768
|
-
expect(calculator.
|
|
1769
|
-
expect(calculator.
|
|
1770
|
-
expect(calculator.
|
|
1771
|
-
expect(calculator.
|
|
1772
|
-
expect(calculator.
|
|
1773
|
-
expect(calculator.
|
|
1774
|
-
expect(calculator.
|
|
1775
|
-
expect(calculator.
|
|
1776
|
-
|
|
1777
|
-
expect(calculator.infer(
|
|
1778
|
-
expect(calculator.
|
|
1779
|
-
expect(calculator.infer(
|
|
2084
|
+
expect(calculator.infer(PUndefType::DEFAULT ).to_s).to eq('Type[Undef]')
|
|
2085
|
+
expect(calculator.infer(PScalarType::DEFAULT ).to_s).to eq('Type[Scalar]')
|
|
2086
|
+
expect(calculator.infer(PScalarDataType::DEFAULT).to_s).to eq('Type[ScalarData]')
|
|
2087
|
+
expect(calculator.infer(PStringType::DEFAULT ).to_s).to eq('Type[String]')
|
|
2088
|
+
expect(calculator.infer(PNumericType::DEFAULT ).to_s).to eq('Type[Numeric]')
|
|
2089
|
+
expect(calculator.infer(PIntegerType::DEFAULT ).to_s).to eq('Type[Integer]')
|
|
2090
|
+
expect(calculator.infer(PFloatType::DEFAULT ).to_s).to eq('Type[Float]')
|
|
2091
|
+
expect(calculator.infer(PRegexpType::DEFAULT ).to_s).to eq('Type[Regexp]')
|
|
2092
|
+
expect(calculator.infer(PBooleanType::DEFAULT ).to_s).to eq('Type[Boolean]')
|
|
2093
|
+
expect(calculator.infer(PCollectionType::DEFAULT).to_s).to eq('Type[Collection]')
|
|
2094
|
+
expect(calculator.infer(PArrayType::DEFAULT ).to_s).to eq('Type[Array]')
|
|
2095
|
+
expect(calculator.infer(PHashType::DEFAULT ).to_s).to eq('Type[Hash]')
|
|
2096
|
+
expect(calculator.infer(PIterableType::DEFAULT ).to_s).to eq('Type[Iterable]')
|
|
2097
|
+
expect(calculator.infer(PRuntimeType::DEFAULT ).to_s).to eq('Type[Runtime[?, ?]]')
|
|
2098
|
+
expect(calculator.infer(PHostClassType::DEFAULT ).to_s).to eq('Type[Class]')
|
|
2099
|
+
expect(calculator.infer(PResourceType::DEFAULT ).to_s).to eq('Type[Resource]')
|
|
2100
|
+
expect(calculator.infer(PEnumType::DEFAULT ).to_s).to eq('Type[Enum]')
|
|
2101
|
+
expect(calculator.infer(PVariantType::DEFAULT ).to_s).to eq('Type[Variant]')
|
|
2102
|
+
expect(calculator.infer(PPatternType::DEFAULT ).to_s).to eq('Type[Pattern]')
|
|
2103
|
+
expect(calculator.infer(PTupleType::DEFAULT ).to_s).to eq('Type[Tuple]')
|
|
2104
|
+
expect(calculator.infer(POptionalType::DEFAULT ).to_s).to eq('Type[Optional]')
|
|
2105
|
+
expect(calculator.infer(PCallableType::DEFAULT ).to_s).to eq('Type[Callable]')
|
|
2106
|
+
|
|
2107
|
+
expect(calculator.infer(PResourceType.new('foo::fee::fum')).to_s).to eq('Type[Foo::Fee::Fum]')
|
|
2108
|
+
expect(calculator.infer(PResourceType.new('foo::fee::fum')).to_s).to eq('Type[Foo::Fee::Fum]')
|
|
2109
|
+
expect(calculator.infer(PResourceType.new('Foo::Fee::Fum')).to_s).to eq('Type[Foo::Fee::Fum]')
|
|
1780
2110
|
end
|
|
1781
2111
|
|
|
1782
2112
|
it "computes the common type of PType's type parameter" do
|
|
1783
|
-
int_t =
|
|
1784
|
-
string_t =
|
|
1785
|
-
expect(calculator.
|
|
1786
|
-
expect(calculator.
|
|
2113
|
+
int_t = PIntegerType::DEFAULT
|
|
2114
|
+
string_t = PStringType::DEFAULT
|
|
2115
|
+
expect(calculator.infer([int_t]).to_s).to eq('Array[Type[Integer], 1, 1]')
|
|
2116
|
+
expect(calculator.infer([int_t, string_t]).to_s).to eq('Array[Type[ScalarData], 2, 2]')
|
|
1787
2117
|
end
|
|
1788
2118
|
|
|
1789
2119
|
it 'should infer PType as the type of ruby classes' do
|
|
1790
2120
|
class Foo
|
|
1791
2121
|
end
|
|
1792
2122
|
[Object, Numeric, Integer, Fixnum, Bignum, Float, String, Regexp, Array, Hash, Foo].each do |c|
|
|
1793
|
-
expect(calculator.infer(c).is_a?(
|
|
2123
|
+
expect(calculator.infer(c).is_a?(PType)).to eq(true)
|
|
1794
2124
|
end
|
|
1795
2125
|
end
|
|
1796
2126
|
|
|
1797
2127
|
it 'should infer PType as the type of PType (meta regression short-circuit)' do
|
|
1798
|
-
expect(calculator.infer(
|
|
2128
|
+
expect(calculator.infer(PType::DEFAULT).is_a?(PType)).to eq(true)
|
|
1799
2129
|
end
|
|
1800
2130
|
|
|
1801
2131
|
it 'computes instance? to be true if parameterized and type match' do
|
|
1802
|
-
int_t =
|
|
1803
|
-
type_t =
|
|
1804
|
-
type_type_t =
|
|
2132
|
+
int_t = PIntegerType::DEFAULT
|
|
2133
|
+
type_t = TypeFactory.type_type(int_t)
|
|
2134
|
+
type_type_t = TypeFactory.type_type(type_t)
|
|
1805
2135
|
expect(calculator.instance?(type_type_t, type_t)).to eq(true)
|
|
1806
2136
|
end
|
|
1807
2137
|
|
|
1808
2138
|
it 'computes instance? to be false if parameterized and type do not match' do
|
|
1809
|
-
int_t =
|
|
1810
|
-
string_t =
|
|
1811
|
-
type_t =
|
|
1812
|
-
type_t2 =
|
|
1813
|
-
type_type_t =
|
|
2139
|
+
int_t = PIntegerType::DEFAULT
|
|
2140
|
+
string_t = PStringType::DEFAULT
|
|
2141
|
+
type_t = TypeFactory.type_type(int_t)
|
|
2142
|
+
type_t2 = TypeFactory.type_type(string_t)
|
|
2143
|
+
type_type_t = TypeFactory.type_type(type_t)
|
|
1814
2144
|
# i.e. Type[Integer] =~ Type[Type[Integer]] # false
|
|
1815
2145
|
expect(calculator.instance?(type_type_t, type_t2)).to eq(false)
|
|
1816
2146
|
end
|
|
1817
2147
|
|
|
1818
2148
|
it 'computes instance? to be true if unparameterized and matched against a type[?]' do
|
|
1819
|
-
int_t =
|
|
1820
|
-
type_t =
|
|
1821
|
-
expect(calculator.instance?(
|
|
2149
|
+
int_t = PIntegerType::DEFAULT
|
|
2150
|
+
type_t = TypeFactory.type_type(int_t)
|
|
2151
|
+
expect(calculator.instance?(PType::DEFAULT, type_t)).to eq(true)
|
|
1822
2152
|
end
|
|
1823
2153
|
end
|
|
1824
2154
|
|
|
1825
|
-
context
|
|
1826
|
-
it
|
|
1827
|
-
t =
|
|
1828
|
-
t.
|
|
1829
|
-
t.to = 10
|
|
1830
|
-
expect(calculator.enumerable(t).respond_to?(:each)).to eq(true)
|
|
2155
|
+
context 'when asking for an iterable ' do
|
|
2156
|
+
it 'should produce an iterable for an Integer range that is finite' do
|
|
2157
|
+
t = PIntegerType.new(1, 10)
|
|
2158
|
+
expect(calculator.iterable(t).respond_to?(:each)).to eq(true)
|
|
1831
2159
|
end
|
|
1832
2160
|
|
|
1833
|
-
it
|
|
1834
|
-
t =
|
|
1835
|
-
t.
|
|
1836
|
-
t.to = 10
|
|
1837
|
-
expect(calculator.enumerable(t)).to eq(nil)
|
|
2161
|
+
it 'should not produce an iterable for an Integer range that has an infinite side' do
|
|
2162
|
+
t = PIntegerType.new(nil, 10)
|
|
2163
|
+
expect(calculator.iterable(t)).to eq(nil)
|
|
1838
2164
|
|
|
1839
|
-
t =
|
|
1840
|
-
t.
|
|
1841
|
-
t.to = nil
|
|
1842
|
-
expect(calculator.enumerable(t)).to eq(nil)
|
|
2165
|
+
t = PIntegerType.new(1, nil)
|
|
2166
|
+
expect(calculator.iterable(t)).to eq(nil)
|
|
1843
2167
|
end
|
|
1844
2168
|
|
|
1845
|
-
it
|
|
2169
|
+
it 'all but Integer range are not iterable' do
|
|
1846
2170
|
[Object, Numeric, Float, String, Regexp, Array, Hash].each do |t|
|
|
1847
|
-
expect(calculator.
|
|
2171
|
+
expect(calculator.iterable(calculator.type(t))).to eq(nil)
|
|
1848
2172
|
end
|
|
1849
2173
|
end
|
|
1850
2174
|
end
|
|
1851
2175
|
|
|
1852
|
-
context
|
|
1853
|
-
it
|
|
2176
|
+
context 'when dealing with different types of inference' do
|
|
2177
|
+
it 'an instance specific inference is produced by infer' do
|
|
1854
2178
|
expect(calculator.infer(['a','b']).element_type.values).to eq(['a', 'b'])
|
|
1855
2179
|
end
|
|
1856
2180
|
|
|
1857
|
-
it
|
|
1858
|
-
expect(calculator.infer_generic(['a','b']).element_type
|
|
2181
|
+
it 'a generic inference is produced using infer_generic' do
|
|
2182
|
+
expect(calculator.infer_generic(['a','b']).element_type).to eql(string_t(range_t(1,1)))
|
|
1859
2183
|
end
|
|
1860
2184
|
|
|
1861
|
-
it
|
|
2185
|
+
it 'a generic result is created by generalize given an instance specific result for an Array' do
|
|
1862
2186
|
generic = calculator.infer(['a','b'])
|
|
1863
|
-
expect(generic.element_type.values).to eq(['a',
|
|
1864
|
-
|
|
1865
|
-
expect(generic.element_type
|
|
2187
|
+
expect(generic.element_type.values).to eq(['a','b'])
|
|
2188
|
+
generic = generic.generalize
|
|
2189
|
+
expect(generic.element_type).to eql(string_t(range_t(1,1)))
|
|
1866
2190
|
end
|
|
1867
2191
|
|
|
1868
|
-
it
|
|
1869
|
-
generic = calculator.infer({'a' =>1,'
|
|
1870
|
-
expect(generic.key_type.values.sort).to eq(['a', '
|
|
1871
|
-
expect(generic.
|
|
1872
|
-
expect(generic.
|
|
1873
|
-
|
|
1874
|
-
expect(generic.key_type.
|
|
1875
|
-
expect(generic.
|
|
1876
|
-
expect(generic.
|
|
2192
|
+
it 'a generic result is created by generalize given an instance specific result for a Hash' do
|
|
2193
|
+
generic = calculator.infer({'a' =>1,'bcd' => 2})
|
|
2194
|
+
expect(generic.key_type.values.sort).to eq(['a', 'bcd'])
|
|
2195
|
+
expect(generic.value_type.from).to eq(1)
|
|
2196
|
+
expect(generic.value_type.to).to eq(2)
|
|
2197
|
+
generic = generic.generalize
|
|
2198
|
+
expect(generic.key_type.size_type).to eq(range_t(1,3))
|
|
2199
|
+
expect(generic.value_type.from).to eq(nil)
|
|
2200
|
+
expect(generic.value_type.to).to eq(nil)
|
|
2201
|
+
end
|
|
2202
|
+
|
|
2203
|
+
it 'ensures that Struct key types are not generalized' do
|
|
2204
|
+
generic = struct_t({'a' => any_t}).generalize
|
|
2205
|
+
expect(generic.to_s).to eq("Struct[{'a' => Any}]")
|
|
2206
|
+
generic = struct_t({not_undef_t('a') => any_t}).generalize
|
|
2207
|
+
expect(generic.to_s).to eq("Struct[{NotUndef['a'] => Any}]")
|
|
2208
|
+
generic = struct_t({optional_t('a') => string_t}).generalize
|
|
2209
|
+
expect(generic.to_s).to eq("Struct[{Optional['a'] => String}]")
|
|
2210
|
+
end
|
|
2211
|
+
|
|
2212
|
+
it 'ensures that Struct value types are generalized' do
|
|
2213
|
+
generic = struct_t({'a' => range_t(1, 3)}).generalize
|
|
2214
|
+
expect(generic.to_s).to eq("Struct[{'a' => Integer}]")
|
|
1877
2215
|
end
|
|
1878
2216
|
|
|
1879
2217
|
it "does not reduce by combining types when using infer_set" do
|
|
1880
2218
|
element_type = calculator.infer(['a','b',1,2]).element_type
|
|
1881
|
-
expect(element_type.class).to eq(
|
|
2219
|
+
expect(element_type.class).to eq(PScalarDataType)
|
|
1882
2220
|
inferred_type = calculator.infer_set(['a','b',1,2])
|
|
1883
|
-
expect(inferred_type.class).to eq(
|
|
2221
|
+
expect(inferred_type.class).to eq(PTupleType)
|
|
1884
2222
|
element_types = inferred_type.types
|
|
1885
|
-
expect(element_types[0].class).to eq(
|
|
1886
|
-
expect(element_types[1].class).to eq(
|
|
1887
|
-
expect(element_types[2].class).to eq(
|
|
1888
|
-
expect(element_types[3].class).to eq(
|
|
2223
|
+
expect(element_types[0].class).to eq(PStringType)
|
|
2224
|
+
expect(element_types[1].class).to eq(PStringType)
|
|
2225
|
+
expect(element_types[2].class).to eq(PIntegerType)
|
|
2226
|
+
expect(element_types[3].class).to eq(PIntegerType)
|
|
1889
2227
|
end
|
|
1890
2228
|
|
|
1891
|
-
it
|
|
2229
|
+
it 'does not reduce by combining types when using infer_set and values are undef' do
|
|
1892
2230
|
element_type = calculator.infer(['a',nil]).element_type
|
|
1893
|
-
expect(element_type.class).to eq(
|
|
2231
|
+
expect(element_type.class).to eq(PStringType)
|
|
1894
2232
|
inferred_type = calculator.infer_set(['a',nil])
|
|
1895
|
-
expect(inferred_type.class).to eq(
|
|
2233
|
+
expect(inferred_type.class).to eq(PTupleType)
|
|
1896
2234
|
element_types = inferred_type.types
|
|
1897
|
-
expect(element_types[0].class).to eq(
|
|
1898
|
-
expect(element_types[1].class).to eq(
|
|
2235
|
+
expect(element_types[0].class).to eq(PStringType)
|
|
2236
|
+
expect(element_types[1].class).to eq(PUndefType)
|
|
2237
|
+
end
|
|
2238
|
+
|
|
2239
|
+
it 'infers on an empty Array produces Array[Unit,0,0]' do
|
|
2240
|
+
inferred_type = calculator.infer([])
|
|
2241
|
+
expect(inferred_type.element_type.class).to eq(PUnitType)
|
|
2242
|
+
expect(inferred_type.size_range).to eq([0, 0])
|
|
2243
|
+
end
|
|
2244
|
+
|
|
2245
|
+
it 'infer_set on an empty Array produces Array[Unit,0,0]' do
|
|
2246
|
+
inferred_type = calculator.infer_set([])
|
|
2247
|
+
expect(inferred_type.element_type.class).to eq(PUnitType)
|
|
2248
|
+
expect(inferred_type.size_range).to eq([0, 0])
|
|
1899
2249
|
end
|
|
1900
2250
|
end
|
|
1901
2251
|
|
|
@@ -1921,8 +2271,7 @@ describe 'The type calculator' do
|
|
|
1921
2271
|
|
|
1922
2272
|
it 'with args array' do
|
|
1923
2273
|
required = callable_t(string_t)
|
|
1924
|
-
given = array_t(string_t)
|
|
1925
|
-
factory.constrain_size(given, 1, 1)
|
|
2274
|
+
given = array_t(string_t, range_t(1, 1))
|
|
1926
2275
|
expect(calculator.callable?(required, given)).to eq(true)
|
|
1927
2276
|
end
|
|
1928
2277
|
end
|
|
@@ -1930,50 +2279,50 @@ describe 'The type calculator' do
|
|
|
1930
2279
|
context 'and given is more generic' do
|
|
1931
2280
|
it 'with callable' do
|
|
1932
2281
|
required = callable_t(string_t)
|
|
1933
|
-
given = callable_t(
|
|
2282
|
+
given = callable_t(any_t)
|
|
1934
2283
|
expect(calculator.callable?(required, given)).to eq(true)
|
|
1935
2284
|
end
|
|
1936
2285
|
|
|
1937
2286
|
it 'with args tuple' do
|
|
1938
2287
|
required = callable_t(string_t)
|
|
1939
|
-
given = tuple_t(
|
|
2288
|
+
given = tuple_t(any_t)
|
|
1940
2289
|
expect(calculator.callable?(required, given)).to eq(false)
|
|
1941
2290
|
end
|
|
1942
2291
|
|
|
1943
2292
|
it 'with args tuple having a block' do
|
|
1944
2293
|
required = callable_t(string_t, callable_t(string_t))
|
|
1945
|
-
given = tuple_t(string_t, callable_t(
|
|
2294
|
+
given = tuple_t(string_t, callable_t(any_t))
|
|
1946
2295
|
expect(calculator.callable?(required, given)).to eq(true)
|
|
1947
2296
|
end
|
|
1948
2297
|
|
|
1949
2298
|
it 'with args tuple having a block with captures rest' do
|
|
1950
2299
|
required = callable_t(string_t, callable_t(string_t))
|
|
1951
|
-
given = tuple_t(string_t, callable_t(
|
|
2300
|
+
given = tuple_t(string_t, callable_t(any_t, 0, :default))
|
|
1952
2301
|
expect(calculator.callable?(required, given)).to eq(true)
|
|
1953
2302
|
end
|
|
1954
2303
|
end
|
|
1955
2304
|
|
|
1956
2305
|
context 'and given is more specific' do
|
|
1957
2306
|
it 'with callable' do
|
|
1958
|
-
required = callable_t(
|
|
2307
|
+
required = callable_t(any_t)
|
|
1959
2308
|
given = callable_t(string_t)
|
|
1960
2309
|
expect(calculator.callable?(required, given)).to eq(false)
|
|
1961
2310
|
end
|
|
1962
2311
|
|
|
1963
2312
|
it 'with args tuple' do
|
|
1964
|
-
required = callable_t(
|
|
2313
|
+
required = callable_t(any_t)
|
|
1965
2314
|
given = tuple_t(string_t)
|
|
1966
2315
|
expect(calculator.callable?(required, given)).to eq(true)
|
|
1967
2316
|
end
|
|
1968
2317
|
|
|
1969
2318
|
it 'with args tuple having a block' do
|
|
1970
|
-
required = callable_t(string_t, callable_t(
|
|
2319
|
+
required = callable_t(string_t, callable_t(any_t))
|
|
1971
2320
|
given = tuple_t(string_t, callable_t(string_t))
|
|
1972
2321
|
expect(calculator.callable?(required, given)).to eq(false)
|
|
1973
2322
|
end
|
|
1974
2323
|
|
|
1975
2324
|
it 'with args tuple having a block with captures rest' do
|
|
1976
|
-
required = callable_t(string_t, callable_t(
|
|
2325
|
+
required = callable_t(string_t, callable_t(any_t))
|
|
1977
2326
|
given = tuple_t(string_t, callable_t(string_t, 0, :default))
|
|
1978
2327
|
expect(calculator.callable?(required, given)).to eq(false)
|
|
1979
2328
|
end
|
|
@@ -1981,19 +2330,18 @@ describe 'The type calculator' do
|
|
|
1981
2330
|
end
|
|
1982
2331
|
|
|
1983
2332
|
matcher :be_assignable_to do |type|
|
|
1984
|
-
calc = Puppet::Pops::Types::TypeCalculator.new
|
|
1985
|
-
|
|
1986
2333
|
match do |actual|
|
|
1987
|
-
|
|
2334
|
+
type.is_a?(PAnyType) && type.assignable?(actual)
|
|
1988
2335
|
end
|
|
1989
2336
|
|
|
1990
2337
|
failure_message do |actual|
|
|
1991
|
-
"#{
|
|
2338
|
+
"#{TypeFormatter.string(actual)} should be assignable to #{TypeFormatter.string(type)}"
|
|
1992
2339
|
end
|
|
1993
2340
|
|
|
1994
2341
|
failure_message_when_negated do |actual|
|
|
1995
|
-
"#{
|
|
2342
|
+
"#{TypeFormatter.string(actual)} is assignable to #{TypeFormatter.string(type)} when it should not"
|
|
1996
2343
|
end
|
|
1997
2344
|
end
|
|
1998
|
-
|
|
2345
|
+
end
|
|
2346
|
+
end
|
|
1999
2347
|
end
|