puppet 4.3.0 → 4.4.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.
- checksums.yaml +7 -0
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- 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/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/hiera/scope.rb +1 -1
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +45 -47
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +6 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +16 -8
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +140 -387
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +16 -9
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +65 -28
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +17 -0
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -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/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_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/hiera.yaml +7 -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/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- 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/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 +81 -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/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -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/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/collection_spec.rb +8 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/epp_face_spec.rb +2 -2
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/indirector/json_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +88 -47
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +99 -50
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- 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 +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +46 -38
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- data/lib/puppet/vendor/load_plist.rb +0 -1
- 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/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
|
@@ -40,6 +40,15 @@ describe 'The type calculator' do
|
|
|
40
40
|
Puppet::Pops::Types::TypeFactory.variant(*types)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
def type_alias_t(name, type_string)
|
|
44
|
+
type_expr = Puppet::Pops::Parser::EvaluatingParser.new.parse_string(type_string).current
|
|
45
|
+
Puppet::Pops::Types::TypeFactory.type_alias(name, type_expr)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def type_reference_t(name, *args)
|
|
49
|
+
Puppet::Pops::Types::TypeFactory.type_reference(name, args)
|
|
50
|
+
end
|
|
51
|
+
|
|
43
52
|
def integer_t
|
|
44
53
|
Puppet::Pops::Types::TypeFactory.integer
|
|
45
54
|
end
|
|
@@ -88,6 +97,10 @@ describe 'The type calculator' do
|
|
|
88
97
|
Puppet::Pops::Types::TypeFactory.optional(t)
|
|
89
98
|
end
|
|
90
99
|
|
|
100
|
+
def type_t(t)
|
|
101
|
+
Puppet::Pops::Types::TypeFactory.type_type(t)
|
|
102
|
+
end
|
|
103
|
+
|
|
91
104
|
def not_undef_t(t = nil)
|
|
92
105
|
Puppet::Pops::Types::TypeFactory.not_undef(t)
|
|
93
106
|
end
|
|
@@ -105,99 +118,6 @@ describe 'The type calculator' do
|
|
|
105
118
|
Puppet::Pops::Types
|
|
106
119
|
end
|
|
107
120
|
|
|
108
|
-
shared_context 'types_setup' do
|
|
109
|
-
|
|
110
|
-
# Do not include the special type Unit in this list
|
|
111
|
-
def all_types
|
|
112
|
-
[ Puppet::Pops::Types::PAnyType,
|
|
113
|
-
Puppet::Pops::Types::PUndefType,
|
|
114
|
-
Puppet::Pops::Types::PNotUndefType,
|
|
115
|
-
Puppet::Pops::Types::PDataType,
|
|
116
|
-
Puppet::Pops::Types::PScalarType,
|
|
117
|
-
Puppet::Pops::Types::PStringType,
|
|
118
|
-
Puppet::Pops::Types::PNumericType,
|
|
119
|
-
Puppet::Pops::Types::PIntegerType,
|
|
120
|
-
Puppet::Pops::Types::PFloatType,
|
|
121
|
-
Puppet::Pops::Types::PRegexpType,
|
|
122
|
-
Puppet::Pops::Types::PBooleanType,
|
|
123
|
-
Puppet::Pops::Types::PCollectionType,
|
|
124
|
-
Puppet::Pops::Types::PArrayType,
|
|
125
|
-
Puppet::Pops::Types::PHashType,
|
|
126
|
-
Puppet::Pops::Types::PRuntimeType,
|
|
127
|
-
Puppet::Pops::Types::PHostClassType,
|
|
128
|
-
Puppet::Pops::Types::PResourceType,
|
|
129
|
-
Puppet::Pops::Types::PPatternType,
|
|
130
|
-
Puppet::Pops::Types::PEnumType,
|
|
131
|
-
Puppet::Pops::Types::PVariantType,
|
|
132
|
-
Puppet::Pops::Types::PStructType,
|
|
133
|
-
Puppet::Pops::Types::PTupleType,
|
|
134
|
-
Puppet::Pops::Types::PCallableType,
|
|
135
|
-
Puppet::Pops::Types::PType,
|
|
136
|
-
Puppet::Pops::Types::POptionalType,
|
|
137
|
-
Puppet::Pops::Types::PDefaultType,
|
|
138
|
-
]
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def scalar_types
|
|
142
|
-
# PVariantType is also scalar, if its types are all Scalar
|
|
143
|
-
[
|
|
144
|
-
Puppet::Pops::Types::PScalarType,
|
|
145
|
-
Puppet::Pops::Types::PStringType,
|
|
146
|
-
Puppet::Pops::Types::PNumericType,
|
|
147
|
-
Puppet::Pops::Types::PIntegerType,
|
|
148
|
-
Puppet::Pops::Types::PFloatType,
|
|
149
|
-
Puppet::Pops::Types::PRegexpType,
|
|
150
|
-
Puppet::Pops::Types::PBooleanType,
|
|
151
|
-
Puppet::Pops::Types::PPatternType,
|
|
152
|
-
Puppet::Pops::Types::PEnumType,
|
|
153
|
-
]
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
def numeric_types
|
|
157
|
-
# PVariantType is also numeric, if its types are all numeric
|
|
158
|
-
[
|
|
159
|
-
Puppet::Pops::Types::PNumericType,
|
|
160
|
-
Puppet::Pops::Types::PIntegerType,
|
|
161
|
-
Puppet::Pops::Types::PFloatType,
|
|
162
|
-
]
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def string_types
|
|
166
|
-
# PVariantType is also string type, if its types are all compatible
|
|
167
|
-
[
|
|
168
|
-
Puppet::Pops::Types::PStringType,
|
|
169
|
-
Puppet::Pops::Types::PPatternType,
|
|
170
|
-
Puppet::Pops::Types::PEnumType,
|
|
171
|
-
]
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def collection_types
|
|
175
|
-
# PVariantType is also string type, if its types are all compatible
|
|
176
|
-
[
|
|
177
|
-
Puppet::Pops::Types::PCollectionType,
|
|
178
|
-
Puppet::Pops::Types::PHashType,
|
|
179
|
-
Puppet::Pops::Types::PArrayType,
|
|
180
|
-
Puppet::Pops::Types::PStructType,
|
|
181
|
-
Puppet::Pops::Types::PTupleType,
|
|
182
|
-
]
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
def data_compatible_types
|
|
186
|
-
result = scalar_types
|
|
187
|
-
result << Puppet::Pops::Types::PDataType
|
|
188
|
-
result << array_t(types::PDataType::DEFAULT)
|
|
189
|
-
result << types::TypeFactory.hash_of_data
|
|
190
|
-
result << Puppet::Pops::Types::PUndefType
|
|
191
|
-
result << not_undef_t(types::PDataType.new)
|
|
192
|
-
result << constrained_tuple_t(range_t(0, nil), types::PDataType::DEFAULT)
|
|
193
|
-
result
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
def type_from_class(c)
|
|
197
|
-
c.is_a?(Class) ? c::DEFAULT : c
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
|
|
201
121
|
context 'when inferring ruby' do
|
|
202
122
|
|
|
203
123
|
it 'fixnum translates to PIntegerType' do
|
|
@@ -234,12 +154,16 @@ describe 'The type calculator' do
|
|
|
234
154
|
expect(calculator.infer(/^a regular expression$/).class).to eq(Puppet::Pops::Types::PRegexpType)
|
|
235
155
|
end
|
|
236
156
|
|
|
157
|
+
it 'iterable translates to PIteratorType' do
|
|
158
|
+
expect(calculator.infer(Puppet::Pops::Types::Iterable.on(1))).to be_a(Puppet::Pops::Types::PIteratorType)
|
|
159
|
+
end
|
|
160
|
+
|
|
237
161
|
it 'nil translates to PUndefType' do
|
|
238
162
|
expect(calculator.infer(nil).class).to eq(Puppet::Pops::Types::PUndefType)
|
|
239
163
|
end
|
|
240
164
|
|
|
241
|
-
it ':undef translates to
|
|
242
|
-
expect(calculator.infer(:undef).class).to eq(Puppet::Pops::Types::
|
|
165
|
+
it ':undef translates to PUndefType' do
|
|
166
|
+
expect(calculator.infer(:undef).class).to eq(Puppet::Pops::Types::PUndefType)
|
|
243
167
|
end
|
|
244
168
|
|
|
245
169
|
it 'an instance of class Foo translates to PRuntimeType[ruby, Foo]' do
|
|
@@ -455,35 +379,35 @@ describe 'The type calculator' do
|
|
|
455
379
|
it 'computes given resource type commonality' do
|
|
456
380
|
r1 = Puppet::Pops::Types::PResourceType.new('File', nil)
|
|
457
381
|
r2 = Puppet::Pops::Types::PResourceType.new('File', nil)
|
|
458
|
-
expect(calculator.
|
|
382
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('File')
|
|
459
383
|
|
|
460
384
|
|
|
461
385
|
r2 = Puppet::Pops::Types::PResourceType.new('File', '/tmp/foo')
|
|
462
|
-
expect(calculator.
|
|
386
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('File')
|
|
463
387
|
|
|
464
388
|
r1 = Puppet::Pops::Types::PResourceType.new('File', '/tmp/foo')
|
|
465
|
-
expect(calculator.
|
|
389
|
+
expect(calculator.common_type(r1, r2).to_s).to eq("File['/tmp/foo']")
|
|
466
390
|
|
|
467
391
|
r1 = Puppet::Pops::Types::PResourceType.new('File', '/tmp/bar')
|
|
468
|
-
expect(calculator.
|
|
392
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('File')
|
|
469
393
|
|
|
470
394
|
r2 = Puppet::Pops::Types::PResourceType.new('Package', 'apache')
|
|
471
|
-
expect(calculator.
|
|
395
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Resource')
|
|
472
396
|
end
|
|
473
397
|
|
|
474
398
|
it 'computes given hostclass type commonality' do
|
|
475
399
|
r1 = Puppet::Pops::Types::PHostClassType.new('foo')
|
|
476
400
|
r2 = Puppet::Pops::Types::PHostClassType.new('foo')
|
|
477
|
-
expect(calculator.
|
|
401
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Class[foo]')
|
|
478
402
|
|
|
479
403
|
r2 = Puppet::Pops::Types::PHostClassType.new('bar')
|
|
480
|
-
expect(calculator.
|
|
404
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
|
481
405
|
|
|
482
406
|
r2 = Puppet::Pops::Types::PHostClassType.new(nil)
|
|
483
|
-
expect(calculator.
|
|
407
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
|
484
408
|
|
|
485
409
|
r1 = Puppet::Pops::Types::PHostClassType.new(nil)
|
|
486
|
-
expect(calculator.
|
|
410
|
+
expect(calculator.common_type(r1, r2).to_s).to eq('Class')
|
|
487
411
|
end
|
|
488
412
|
|
|
489
413
|
context 'of strings' do
|
|
@@ -526,7 +450,7 @@ describe 'The type calculator' do
|
|
|
526
450
|
common_t = calculator.common_type(t1,t2)
|
|
527
451
|
expect(common_t.class).to eq(Puppet::Pops::Types::PPatternType)
|
|
528
452
|
expect(common_t.patterns.map { |pr| pr.pattern }).to eq(['abc', 'xyz'])
|
|
529
|
-
expect(
|
|
453
|
+
expect(common_t.to_s).to eq('Pattern[/abc/, /xyz/]')
|
|
530
454
|
end
|
|
531
455
|
|
|
532
456
|
it 'computes enum commonality to value set sum' do
|
|
@@ -686,6 +610,36 @@ describe 'The type calculator' do
|
|
|
686
610
|
end
|
|
687
611
|
end
|
|
688
612
|
|
|
613
|
+
context "for TypeReference, such that" do
|
|
614
|
+
it 'no other type is assignable' do
|
|
615
|
+
t = Puppet::Pops::Types::PTypeReferenceType::DEFAULT
|
|
616
|
+
all_instances = (all_types - [
|
|
617
|
+
Puppet::Pops::Types::PTypeReferenceType, # Avoid comparison with t
|
|
618
|
+
Puppet::Pops::Types::PVariantType, # DEFAULT contains no variants, so assignability is never tested and always true
|
|
619
|
+
Puppet::Pops::Types::PTypeAliasType # DEFAULT resolves to PTypeReferenceType::DEFAULT, i.e. t
|
|
620
|
+
]).map {|c| c::DEFAULT }
|
|
621
|
+
|
|
622
|
+
# Add a non-empty variant
|
|
623
|
+
all_instances << variant_t(Puppet::Pops::Types::PAnyType::DEFAULT)
|
|
624
|
+
# Add a type alias that doesn't resolve to 't'
|
|
625
|
+
all_instances << type_alias_t('MyInt', 'Integer').resolve(Puppet::Pops::Types::TypeParser.new, nil)
|
|
626
|
+
|
|
627
|
+
all_instances.each { |i| expect(i).not_to be_assignable_to(t) }
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
it 'a TypeReference to the exact same type is assignable' do
|
|
631
|
+
expect(type_reference_t('Integer[0,10]')).to be_assignable_to(type_reference_t('Integer[0,10]'))
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
it 'a TypeReference to the different type is not assignable' do
|
|
635
|
+
expect(type_reference_t('String')).not_to be_assignable_to(type_reference_t('Integer'))
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
it 'a TypeReference to the different type is not assignable even if the referenced type is' do
|
|
639
|
+
expect(type_reference_t('Integer[1,2]')).not_to be_assignable_to(type_reference_t('Integer[0,3]'))
|
|
640
|
+
end
|
|
641
|
+
end
|
|
642
|
+
|
|
689
643
|
context 'for Data, such that' do
|
|
690
644
|
it 'all scalars + array and hash are assignable to Data' do
|
|
691
645
|
t = Puppet::Pops::Types::PDataType::DEFAULT
|
|
@@ -793,7 +747,11 @@ describe 'The type calculator' do
|
|
|
793
747
|
end
|
|
794
748
|
|
|
795
749
|
it 'Collection is not assignable to any disjunct type' do
|
|
796
|
-
tested_types = all_types - [
|
|
750
|
+
tested_types = all_types - [
|
|
751
|
+
Puppet::Pops::Types::PAnyType,
|
|
752
|
+
Puppet::Pops::Types::POptionalType,
|
|
753
|
+
Puppet::Pops::Types::PNotUndefType,
|
|
754
|
+
Puppet::Pops::Types::PIterableType] - collection_types
|
|
797
755
|
t = Puppet::Pops::Types::PCollectionType::DEFAULT
|
|
798
756
|
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
799
757
|
end
|
|
@@ -815,6 +773,7 @@ describe 'The type calculator' do
|
|
|
815
773
|
Puppet::Pops::Types::PAnyType,
|
|
816
774
|
Puppet::Pops::Types::POptionalType,
|
|
817
775
|
Puppet::Pops::Types::PNotUndefType,
|
|
776
|
+
Puppet::Pops::Types::PIterableType,
|
|
818
777
|
Puppet::Pops::Types::PDataType] - collection_types
|
|
819
778
|
t = Puppet::Pops::Types::PArrayType::DEFAULT
|
|
820
779
|
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
@@ -841,6 +800,7 @@ describe 'The type calculator' do
|
|
|
841
800
|
Puppet::Pops::Types::PAnyType,
|
|
842
801
|
Puppet::Pops::Types::POptionalType,
|
|
843
802
|
Puppet::Pops::Types::PNotUndefType,
|
|
803
|
+
Puppet::Pops::Types::PIterableType,
|
|
844
804
|
Puppet::Pops::Types::PDataType] - collection_types
|
|
845
805
|
t = Puppet::Pops::Types::PHashType::DEFAULT
|
|
846
806
|
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
@@ -878,6 +838,7 @@ describe 'The type calculator' do
|
|
|
878
838
|
Puppet::Pops::Types::PAnyType,
|
|
879
839
|
Puppet::Pops::Types::POptionalType,
|
|
880
840
|
Puppet::Pops::Types::PNotUndefType,
|
|
841
|
+
Puppet::Pops::Types::PIterableType,
|
|
881
842
|
Puppet::Pops::Types::PDataType] - collection_types
|
|
882
843
|
t = Puppet::Pops::Types::PTupleType::DEFAULT
|
|
883
844
|
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
@@ -899,6 +860,7 @@ describe 'The type calculator' do
|
|
|
899
860
|
Puppet::Pops::Types::PAnyType,
|
|
900
861
|
Puppet::Pops::Types::POptionalType,
|
|
901
862
|
Puppet::Pops::Types::PNotUndefType,
|
|
863
|
+
Puppet::Pops::Types::PIterableType,
|
|
902
864
|
Puppet::Pops::Types::PDataType] - collection_types
|
|
903
865
|
t = Puppet::Pops::Types::PStructType::DEFAULT
|
|
904
866
|
tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
|
|
@@ -970,35 +932,18 @@ describe 'The type calculator' do
|
|
|
970
932
|
expect(calculator.assignable?(range_t(2,5), range_t(2,5))).to eq(true)
|
|
971
933
|
end
|
|
972
934
|
|
|
973
|
-
it 'should accept an equal reverse range' do
|
|
974
|
-
expect(calculator.assignable?(range_t(2,5), range_t(5,2))).to eq(true)
|
|
975
|
-
end
|
|
976
|
-
|
|
977
935
|
it 'should accept a narrower range' do
|
|
978
936
|
expect(calculator.assignable?(range_t(2,10), range_t(3,5))).to eq(true)
|
|
979
937
|
end
|
|
980
938
|
|
|
981
|
-
it 'should accept a narrower reverse range' do
|
|
982
|
-
expect(calculator.assignable?(range_t(2,10), range_t(5,3))).to eq(true)
|
|
983
|
-
end
|
|
984
|
-
|
|
985
939
|
it 'should reject a wider range' do
|
|
986
940
|
expect(calculator.assignable?(range_t(3,5), range_t(2,10))).to eq(false)
|
|
987
941
|
end
|
|
988
942
|
|
|
989
|
-
it 'should reject a wider reverse range' do
|
|
990
|
-
expect(calculator.assignable?(range_t(3,5), range_t(10,2))).to eq(false)
|
|
991
|
-
end
|
|
992
|
-
|
|
993
943
|
it 'should reject a partially overlapping range' do
|
|
994
944
|
expect(calculator.assignable?(range_t(3,5), range_t(2,4))).to eq(false)
|
|
995
945
|
expect(calculator.assignable?(range_t(3,5), range_t(4,6))).to eq(false)
|
|
996
946
|
end
|
|
997
|
-
|
|
998
|
-
it 'should reject a partially overlapping reverse range' do
|
|
999
|
-
expect(calculator.assignable?(range_t(3,5), range_t(4,2))).to eq(false)
|
|
1000
|
-
expect(calculator.assignable?(range_t(3,5), range_t(6,4))).to eq(false)
|
|
1001
|
-
end
|
|
1002
947
|
end
|
|
1003
948
|
|
|
1004
949
|
context 'when dealing with patterns' do
|
|
@@ -1340,6 +1285,122 @@ describe 'The type calculator' do
|
|
|
1340
1285
|
expect(calculator.assignable?(r1, r2)).to eq(false)
|
|
1341
1286
|
end
|
|
1342
1287
|
|
|
1288
|
+
context 'for TypeAlias, such that' do
|
|
1289
|
+
let!(:parser) { Puppet::Pops::Types::TypeParser.new }
|
|
1290
|
+
|
|
1291
|
+
it 'it is assignable to the type that it is an alias for' do
|
|
1292
|
+
t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
|
|
1293
|
+
expect(calculator.assignable?(integer_t, t)).to be_truthy
|
|
1294
|
+
end
|
|
1295
|
+
|
|
1296
|
+
it 'the type that it is an alias for is assignable to it' do
|
|
1297
|
+
t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
|
|
1298
|
+
expect(calculator.assignable?(t, integer_t)).to be_truthy
|
|
1299
|
+
end
|
|
1300
|
+
|
|
1301
|
+
it 'a recursive alias can be assignable from a conformant type with any depth' do
|
|
1302
|
+
scope = mock
|
|
1303
|
+
|
|
1304
|
+
t = type_alias_t('Tree', 'Hash[String,Variant[String,Tree]]')
|
|
1305
|
+
loader = mock
|
|
1306
|
+
loader.expects(:load).with(:type, 'tree').returns t
|
|
1307
|
+
|
|
1308
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).at_most_once.returns loader
|
|
1309
|
+
|
|
1310
|
+
t.resolve(parser, scope)
|
|
1311
|
+
expect(calculator.assignable?(t, parser.parse('Hash[String,Variant[String,Hash[String,Variant[String,String]]]]'))).to be_truthy
|
|
1312
|
+
end
|
|
1313
|
+
|
|
1314
|
+
|
|
1315
|
+
it 'similar recursive aliases are assignable' do
|
|
1316
|
+
scope = mock
|
|
1317
|
+
|
|
1318
|
+
t1 = type_alias_t('Tree1', 'Hash[String,Variant[String,Tree1]]')
|
|
1319
|
+
t2 = type_alias_t('Tree2', 'Hash[String,Variant[String,Tree2]]')
|
|
1320
|
+
loader = mock
|
|
1321
|
+
loader.expects(:load).with(:type, 'tree1').returns t1
|
|
1322
|
+
loader.expects(:load).with(:type, 'tree2').returns t2
|
|
1323
|
+
|
|
1324
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).at_least_once.returns loader
|
|
1325
|
+
|
|
1326
|
+
t1.resolve(parser, scope)
|
|
1327
|
+
t2.resolve(parser, scope)
|
|
1328
|
+
expect(calculator.assignable?(t1, t2)).to be_truthy
|
|
1329
|
+
end
|
|
1330
|
+
|
|
1331
|
+
it 'crossing recursive aliases are assignable' do
|
|
1332
|
+
scope = mock
|
|
1333
|
+
|
|
1334
|
+
t1 = type_alias_t('Tree1', 'Hash[String,Variant[String,Tree2]]')
|
|
1335
|
+
t2 = type_alias_t('Tree2', 'Hash[String,Variant[String,Tree1]]')
|
|
1336
|
+
loader = mock
|
|
1337
|
+
loader.expects(:load).with(:type, 'tree1').returns t1
|
|
1338
|
+
loader.expects(:load).with(:type, 'tree2').returns t2
|
|
1339
|
+
loader.expects(:is_a?).with(Puppet::Pops::Loader::Loader).returns true
|
|
1340
|
+
|
|
1341
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).at_least_once.returns loader
|
|
1342
|
+
|
|
1343
|
+
t1.resolve(parser, scope)
|
|
1344
|
+
t2.resolve(parser, scope)
|
|
1345
|
+
expect(calculator.assignable?(t1, t2)).to be_truthy
|
|
1346
|
+
end
|
|
1347
|
+
|
|
1348
|
+
it 'Type[T] is assignable to Type[AT] when AT is an alias for T' do
|
|
1349
|
+
scope = mock
|
|
1350
|
+
|
|
1351
|
+
ta = type_alias_t('PositiveInteger', 'Integer[0,default]')
|
|
1352
|
+
loader = mock
|
|
1353
|
+
loader.expects(:load).with(:type, 'positiveinteger').returns ta
|
|
1354
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object)
|
|
1355
|
+
.with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).returns loader
|
|
1356
|
+
|
|
1357
|
+
t1 = type_t(range_t(0, :default))
|
|
1358
|
+
t2 = parser.parse('Type[PositiveInteger]', scope)
|
|
1359
|
+
expect(calculator.assignable?(t2, t1)).to be_truthy
|
|
1360
|
+
end
|
|
1361
|
+
|
|
1362
|
+
it 'Type[T] is assignable to AT when AT is an alias for Type[T]' do
|
|
1363
|
+
scope = mock
|
|
1364
|
+
|
|
1365
|
+
ta = type_alias_t('PositiveIntegerType', 'Type[Integer[0,default]]')
|
|
1366
|
+
loader = mock
|
|
1367
|
+
loader.expects(:load).with(:type, 'positiveintegertype').returns ta
|
|
1368
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object)
|
|
1369
|
+
.with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).returns loader
|
|
1370
|
+
|
|
1371
|
+
t1 = type_t(range_t(0, :default))
|
|
1372
|
+
t2 = parser.parse('PositiveIntegerType', scope)
|
|
1373
|
+
expect(calculator.assignable?(t2, t1)).to be_truthy
|
|
1374
|
+
end
|
|
1375
|
+
|
|
1376
|
+
it 'Type[Type[T]] is assignable to Type[Type[AT]] when AT is an alias for T' do
|
|
1377
|
+
scope = mock
|
|
1378
|
+
|
|
1379
|
+
ta = type_alias_t('PositiveInteger', 'Integer[0,default]')
|
|
1380
|
+
loader = mock
|
|
1381
|
+
loader.expects(:load).with(:type, 'positiveinteger').returns ta
|
|
1382
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object)
|
|
1383
|
+
.with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).returns loader
|
|
1384
|
+
|
|
1385
|
+
t1 = type_t(type_t(range_t(0, :default)))
|
|
1386
|
+
t2 = parser.parse('Type[Type[PositiveInteger]]', scope)
|
|
1387
|
+
expect(calculator.assignable?(t2, t1)).to be_truthy
|
|
1388
|
+
end
|
|
1389
|
+
|
|
1390
|
+
it 'Type[Type[T]] is assignable to Type[AT] when AT is an alias for Type[T]' do
|
|
1391
|
+
scope = mock
|
|
1392
|
+
|
|
1393
|
+
ta = type_alias_t('PositiveIntegerType', 'Type[Integer[0,default]]')
|
|
1394
|
+
loader = mock
|
|
1395
|
+
loader.expects(:load).with(:type, 'positiveintegertype').returns ta
|
|
1396
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object)
|
|
1397
|
+
.with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).returns loader
|
|
1398
|
+
|
|
1399
|
+
t1 = type_t(type_t(range_t(0, :default)))
|
|
1400
|
+
t2 = parser.parse('Type[PositiveIntegerType]', scope)
|
|
1401
|
+
expect(calculator.assignable?(t2, t1)).to be_truthy
|
|
1402
|
+
end
|
|
1403
|
+
end
|
|
1343
1404
|
end
|
|
1344
1405
|
|
|
1345
1406
|
context 'when testing if x is instance of type t' do
|
|
@@ -1357,8 +1418,16 @@ describe 'The type calculator' do
|
|
|
1357
1418
|
end
|
|
1358
1419
|
end
|
|
1359
1420
|
|
|
1360
|
-
it "should
|
|
1361
|
-
expect(calculator.
|
|
1421
|
+
it "should infer :undef to be Undef" do
|
|
1422
|
+
expect(calculator.infer(:undef)).to be_assignable_to(undef_t)
|
|
1423
|
+
end
|
|
1424
|
+
|
|
1425
|
+
it "should not consider :default to be instance of Runtime['ruby', 'Symbol]" do
|
|
1426
|
+
expect(calculator.instance?(Puppet::Pops::Types::PRuntimeType.new(:ruby, 'Symbol'), :default)).to eq(false)
|
|
1427
|
+
end
|
|
1428
|
+
|
|
1429
|
+
it "should not consider :undef to be instance of Runtime['ruby', 'Symbol]" do
|
|
1430
|
+
expect(calculator.instance?(Puppet::Pops::Types::PRuntimeType.new(:ruby, 'Symbol'), :undef)).to eq(false)
|
|
1362
1431
|
end
|
|
1363
1432
|
|
|
1364
1433
|
it 'should consider :undef to be instance of an Optional type' do
|
|
@@ -1608,6 +1677,49 @@ describe 'The type calculator' do
|
|
|
1608
1677
|
expect(calculator.instance?(callable_t(String), f)).to be_truthy
|
|
1609
1678
|
end
|
|
1610
1679
|
end
|
|
1680
|
+
|
|
1681
|
+
context 'and t is a TypeAlias' do
|
|
1682
|
+
let!(:parser) { Puppet::Pops::Types::TypeParser.new }
|
|
1683
|
+
|
|
1684
|
+
it 'should consider x an instance of the aliased simple type' do
|
|
1685
|
+
t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
|
|
1686
|
+
expect(calculator.instance?(t, 15)).to be_truthy
|
|
1687
|
+
end
|
|
1688
|
+
|
|
1689
|
+
it 'should consider x an instance of the aliased parameterized type' do
|
|
1690
|
+
t = type_alias_t('Alias', 'Integer[0,20]').resolve(parser, nil)
|
|
1691
|
+
expect(calculator.instance?(t, 15)).to be_truthy
|
|
1692
|
+
end
|
|
1693
|
+
|
|
1694
|
+
it 'should consider x an instance of the aliased type that uses self recursion' do
|
|
1695
|
+
scope = mock
|
|
1696
|
+
|
|
1697
|
+
t = type_alias_t('Tree', 'Hash[String,Variant[String,Tree]]')
|
|
1698
|
+
loader = mock
|
|
1699
|
+
loader.expects(:load).with(:type, 'tree').returns t
|
|
1700
|
+
|
|
1701
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).at_most_once.returns loader
|
|
1702
|
+
|
|
1703
|
+
t.resolve(parser, scope)
|
|
1704
|
+
expect(calculator.instance?(t, {'a'=>{'aa'=>{'aaa'=>'aaaa'}}, 'b'=>'bb'})).to be_truthy
|
|
1705
|
+
end
|
|
1706
|
+
|
|
1707
|
+
it 'should consider x an instance of the aliased type that uses contains an alias that causes self recursion' do
|
|
1708
|
+
scope = mock
|
|
1709
|
+
|
|
1710
|
+
t1 = type_alias_t('Tree', 'Hash[String,Variant[String,OtherTree]]')
|
|
1711
|
+
t2 = type_alias_t('OtherTree', 'Hash[String,Tree]')
|
|
1712
|
+
loader = mock
|
|
1713
|
+
loader.expects(:load).with(:type, 'tree').returns t1
|
|
1714
|
+
loader.expects(:load).with(:type, 'othertree').returns t2
|
|
1715
|
+
loader.expects(:is_a?).with(Puppet::Pops::Loader::Loader).returns true
|
|
1716
|
+
|
|
1717
|
+
Puppet::Pops::Adapters::LoaderAdapter.expects(:loader_for_model_object).with(instance_of(Puppet::Pops::Model::QualifiedReference), scope).at_least_once.returns loader
|
|
1718
|
+
|
|
1719
|
+
t1.resolve(parser, scope)
|
|
1720
|
+
expect(calculator.instance?(t1, {'a'=>{'aa'=>{'aaa'=>'aaaa'}}, 'b'=>'bb'})).to be_truthy
|
|
1721
|
+
end
|
|
1722
|
+
end
|
|
1611
1723
|
end
|
|
1612
1724
|
|
|
1613
1725
|
context 'when converting a ruby class' do
|
|
@@ -1653,235 +1765,6 @@ describe 'The type calculator' do
|
|
|
1653
1765
|
end
|
|
1654
1766
|
end
|
|
1655
1767
|
|
|
1656
|
-
context 'when representing the type as string' do
|
|
1657
|
-
it 'should yield \'Type\' for PType' do
|
|
1658
|
-
expect(calculator.string(Puppet::Pops::Types::PType::DEFAULT)).to eq('Type')
|
|
1659
|
-
end
|
|
1660
|
-
|
|
1661
|
-
it 'should yield \'Object\' for PAnyType' do
|
|
1662
|
-
expect(calculator.string(Puppet::Pops::Types::PAnyType::DEFAULT)).to eq('Any')
|
|
1663
|
-
end
|
|
1664
|
-
|
|
1665
|
-
it 'should yield \'Scalar\' for PScalarType' do
|
|
1666
|
-
expect(calculator.string(Puppet::Pops::Types::PScalarType::DEFAULT)).to eq('Scalar')
|
|
1667
|
-
end
|
|
1668
|
-
|
|
1669
|
-
it 'should yield \'Boolean\' for PBooleanType' do
|
|
1670
|
-
expect(calculator.string(Puppet::Pops::Types::PBooleanType::DEFAULT)).to eq('Boolean')
|
|
1671
|
-
end
|
|
1672
|
-
|
|
1673
|
-
it 'should yield \'Data\' for PDataType' do
|
|
1674
|
-
expect(calculator.string(Puppet::Pops::Types::PDataType::DEFAULT)).to eq('Data')
|
|
1675
|
-
end
|
|
1676
|
-
|
|
1677
|
-
it 'should yield \'Numeric\' for PNumericType' do
|
|
1678
|
-
expect(calculator.string(Puppet::Pops::Types::PNumericType::DEFAULT)).to eq('Numeric')
|
|
1679
|
-
end
|
|
1680
|
-
|
|
1681
|
-
it 'should yield \'Integer\' and from/to for PIntegerType' do
|
|
1682
|
-
int_T = Puppet::Pops::Types::PIntegerType
|
|
1683
|
-
expect(calculator.string(int_T::DEFAULT)).to eq('Integer')
|
|
1684
|
-
int = int_T.new(1, 1)
|
|
1685
|
-
expect(calculator.string(int)).to eq('Integer[1, 1]')
|
|
1686
|
-
int = int_T.new(1, 2)
|
|
1687
|
-
expect(calculator.string(int)).to eq('Integer[1, 2]')
|
|
1688
|
-
int = int_T.new(nil, 2)
|
|
1689
|
-
expect(calculator.string(int)).to eq('Integer[default, 2]')
|
|
1690
|
-
int = int_T.new(2, nil)
|
|
1691
|
-
expect(calculator.string(int)).to eq('Integer[2, default]')
|
|
1692
|
-
end
|
|
1693
|
-
|
|
1694
|
-
it 'should yield \'Float\' for PFloatType' do
|
|
1695
|
-
expect(calculator.string(Puppet::Pops::Types::PFloatType::DEFAULT)).to eq('Float')
|
|
1696
|
-
end
|
|
1697
|
-
|
|
1698
|
-
it 'should yield \'Regexp\' for PRegexpType' do
|
|
1699
|
-
expect(calculator.string(Puppet::Pops::Types::PRegexpType::DEFAULT)).to eq('Regexp')
|
|
1700
|
-
end
|
|
1701
|
-
|
|
1702
|
-
it 'should yield \'Regexp[/pat/]\' for parameterized PRegexpType' do
|
|
1703
|
-
t = Puppet::Pops::Types::PRegexpType.new('a/b')
|
|
1704
|
-
expect(calculator.string(t)).to eq('Regexp[/a\/b/]')
|
|
1705
|
-
end
|
|
1706
|
-
|
|
1707
|
-
it 'should yield \'String\' for PStringType' do
|
|
1708
|
-
expect(calculator.string(Puppet::Pops::Types::PStringType::DEFAULT)).to eq('String')
|
|
1709
|
-
end
|
|
1710
|
-
|
|
1711
|
-
it 'should yield \'String\' for PStringType with multiple values' do
|
|
1712
|
-
expect(calculator.string(string_t('a', 'b', 'c'))).to eq('String')
|
|
1713
|
-
end
|
|
1714
|
-
|
|
1715
|
-
it 'should yield \'String\' and from/to for PStringType' do
|
|
1716
|
-
string_T = Puppet::Pops::Types::PStringType
|
|
1717
|
-
expect(calculator.string(string_T.new(range_t(1,1)))).to eq('String[1, 1]')
|
|
1718
|
-
expect(calculator.string(string_T.new(range_t(1,2)))).to eq('String[1, 2]')
|
|
1719
|
-
expect(calculator.string(string_T.new(range_t(:default, 2)))).to eq('String[default, 2]')
|
|
1720
|
-
expect(calculator.string(string_T.new(range_t(2, :default)))).to eq('String[2, default]')
|
|
1721
|
-
end
|
|
1722
|
-
|
|
1723
|
-
it 'should yield \'Array[Integer]\' for PArrayType[PIntegerType]' do
|
|
1724
|
-
t = Puppet::Pops::Types::PArrayType.new(Puppet::Pops::Types::PIntegerType::DEFAULT)
|
|
1725
|
-
expect(calculator.string(t)).to eq('Array[Integer]')
|
|
1726
|
-
end
|
|
1727
|
-
|
|
1728
|
-
it 'should yield \'Array[Unit, 0, 0]\' for an empty array' do
|
|
1729
|
-
t = empty_array_t
|
|
1730
|
-
expect(calculator.string(t)).to eq('Array[Unit, 0, 0]')
|
|
1731
|
-
end
|
|
1732
|
-
|
|
1733
|
-
it 'should yield \'Collection\' and from/to for PCollectionType' do
|
|
1734
|
-
expect(calculator.string(collection_t(range_t(1,1)))).to eq('Collection[1, 1]')
|
|
1735
|
-
expect(calculator.string(collection_t(range_t(1,2)))).to eq('Collection[1, 2]')
|
|
1736
|
-
expect(calculator.string(collection_t(range_t(:default, 2)))).to eq('Collection[default, 2]')
|
|
1737
|
-
expect(calculator.string(collection_t(range_t(2, :default)))).to eq('Collection[2, default]')
|
|
1738
|
-
end
|
|
1739
|
-
|
|
1740
|
-
it 'should yield \'Array\' and from/to for PArrayType' do
|
|
1741
|
-
expect(calculator.string(array_t(string_t, range_t(1,1)))).to eq('Array[String, 1, 1]')
|
|
1742
|
-
expect(calculator.string(array_t(string_t, range_t(1,2)))).to eq('Array[String, 1, 2]')
|
|
1743
|
-
expect(calculator.string(array_t(string_t, range_t(:default, 2)))).to eq('Array[String, default, 2]')
|
|
1744
|
-
expect(calculator.string(array_t(string_t, range_t(2, :default)))).to eq('Array[String, 2, default]')
|
|
1745
|
-
end
|
|
1746
|
-
|
|
1747
|
-
it 'should yield \'Tuple[Integer]\' for PTupleType[PIntegerType]' do
|
|
1748
|
-
t = Puppet::Pops::Types::PTupleType.new([Puppet::Pops::Types::PIntegerType::DEFAULT])
|
|
1749
|
-
expect(calculator.string(t)).to eq('Tuple[Integer]')
|
|
1750
|
-
end
|
|
1751
|
-
|
|
1752
|
-
it 'should yield \'Tuple[T, T,..]\' for PTupleType[T, T, ...]' do
|
|
1753
|
-
t = Puppet::Pops::Types::PTupleType.new([Puppet::Pops::Types::PIntegerType::DEFAULT, Puppet::Pops::Types::PIntegerType::DEFAULT, Puppet::Pops::Types::PStringType::DEFAULT])
|
|
1754
|
-
expect(calculator.string(t)).to eq('Tuple[Integer, Integer, String]')
|
|
1755
|
-
end
|
|
1756
|
-
|
|
1757
|
-
it 'should yield \'Tuple\' and from/to for PTupleType' do
|
|
1758
|
-
expect(calculator.string(constrained_tuple_t(range_t(1,1), string_t))).to eq('Tuple[String, 1, 1]')
|
|
1759
|
-
expect(calculator.string(constrained_tuple_t(range_t(1,2), string_t))).to eq('Tuple[String, 1, 2]')
|
|
1760
|
-
expect(calculator.string(constrained_tuple_t(range_t(:default, 2), string_t))).to eq('Tuple[String, 0, 2]')
|
|
1761
|
-
expect(calculator.string(constrained_tuple_t(range_t(2, :default), string_t))).to eq('Tuple[String, 2, default]')
|
|
1762
|
-
end
|
|
1763
|
-
|
|
1764
|
-
it 'should yield \'Struct\' and details for PStructType' do
|
|
1765
|
-
struct_t = struct_t({'a'=>Integer, 'b'=>String})
|
|
1766
|
-
expect(calculator.string(struct_t)).to eq("Struct[{'a'=>Integer, 'b'=>String}]")
|
|
1767
|
-
struct_t = struct_t({})
|
|
1768
|
-
expect(calculator.string(struct_t)).to eq('Struct')
|
|
1769
|
-
end
|
|
1770
|
-
|
|
1771
|
-
it 'should yield \'Hash[String, Integer]\' for PHashType[PStringType, PIntegerType]' do
|
|
1772
|
-
t = Puppet::Pops::Types::PHashType.new(Puppet::Pops::Types::PStringType::DEFAULT, Puppet::Pops::Types::PIntegerType::DEFAULT)
|
|
1773
|
-
expect(calculator.string(t)).to eq('Hash[String, Integer]')
|
|
1774
|
-
end
|
|
1775
|
-
|
|
1776
|
-
it 'should yield \'Hash\' and from/to for PHashType' do
|
|
1777
|
-
expect(calculator.string(hash_t(string_t, string_t, range_t(1,1)))).to eq('Hash[String, String, 1, 1]')
|
|
1778
|
-
expect(calculator.string(hash_t(string_t, string_t, range_t(1,2)))).to eq('Hash[String, String, 1, 2]')
|
|
1779
|
-
expect(calculator.string(hash_t(string_t, string_t, range_t(:default, 2)))).to eq('Hash[String, String, default, 2]')
|
|
1780
|
-
expect(calculator.string(hash_t(string_t, string_t, range_t(2, :default)))).to eq('Hash[String, String, 2, default]')
|
|
1781
|
-
end
|
|
1782
|
-
|
|
1783
|
-
it "should yield 'Class' for a PHostClassType" do
|
|
1784
|
-
t = Puppet::Pops::Types::PHostClassType::DEFAULT
|
|
1785
|
-
expect(calculator.string(t)).to eq('Class')
|
|
1786
|
-
end
|
|
1787
|
-
|
|
1788
|
-
it "should yield 'Class[x]' for a PHostClassType[x]" do
|
|
1789
|
-
t = Puppet::Pops::Types::PHostClassType.new('x')
|
|
1790
|
-
expect(calculator.string(t)).to eq('Class[x]')
|
|
1791
|
-
end
|
|
1792
|
-
|
|
1793
|
-
it "should yield 'Resource' for a PResourceType" do
|
|
1794
|
-
t = Puppet::Pops::Types::PResourceType::DEFAULT
|
|
1795
|
-
expect(calculator.string(t)).to eq('Resource')
|
|
1796
|
-
end
|
|
1797
|
-
|
|
1798
|
-
it 'should yield \'File\' for a PResourceType[\'File\']' do
|
|
1799
|
-
t = Puppet::Pops::Types::PResourceType.new('File')
|
|
1800
|
-
expect(calculator.string(t)).to eq('File')
|
|
1801
|
-
end
|
|
1802
|
-
|
|
1803
|
-
it "should yield 'File['/tmp/foo']' for a PResourceType['File', '/tmp/foo']" do
|
|
1804
|
-
t = Puppet::Pops::Types::PResourceType.new('File', '/tmp/foo')
|
|
1805
|
-
expect(calculator.string(t)).to eq("File['/tmp/foo']")
|
|
1806
|
-
end
|
|
1807
|
-
|
|
1808
|
-
it "should yield 'Enum[s,...]' for a PEnumType[s,...]" do
|
|
1809
|
-
t = enum_t('a', 'b', 'c')
|
|
1810
|
-
expect(calculator.string(t)).to eq("Enum['a', 'b', 'c']")
|
|
1811
|
-
end
|
|
1812
|
-
|
|
1813
|
-
it "should yield 'Pattern[/pat/,...]' for a PPatternType['pat',...]" do
|
|
1814
|
-
t = pattern_t('a')
|
|
1815
|
-
t2 = pattern_t('a', 'b', 'c')
|
|
1816
|
-
expect(calculator.string(t)).to eq('Pattern[/a/]')
|
|
1817
|
-
expect(calculator.string(t2)).to eq('Pattern[/a/, /b/, /c/]')
|
|
1818
|
-
end
|
|
1819
|
-
|
|
1820
|
-
it "should escape special characters in the string for a PPatternType['pat',...]" do
|
|
1821
|
-
t = pattern_t('a/b')
|
|
1822
|
-
expect(calculator.string(t)).to eq("Pattern[/a\\/b/]")
|
|
1823
|
-
end
|
|
1824
|
-
|
|
1825
|
-
it "should yield 'Variant[t1,t2,...]' for a PVariantType[t1, t2,...]" do
|
|
1826
|
-
t1 = string_t
|
|
1827
|
-
t2 = integer_t
|
|
1828
|
-
t3 = pattern_t('a')
|
|
1829
|
-
t = variant_t(t1, t2, t3)
|
|
1830
|
-
expect(calculator.string(t)).to eq('Variant[String, Integer, Pattern[/a/]]')
|
|
1831
|
-
end
|
|
1832
|
-
|
|
1833
|
-
it "should yield 'Callable' for generic callable" do
|
|
1834
|
-
expect(calculator.string(all_callables_t)).to eql('Callable')
|
|
1835
|
-
end
|
|
1836
|
-
|
|
1837
|
-
it "should yield 'Callable[0,0]' for callable without params" do
|
|
1838
|
-
expect(calculator.string(callable_t)).to eql('Callable[0, 0]')
|
|
1839
|
-
end
|
|
1840
|
-
|
|
1841
|
-
it "should yield 'Callable[t,t]' for callable with typed parameters" do
|
|
1842
|
-
expect(calculator.string(callable_t(String, Integer))).to eql('Callable[String, Integer]')
|
|
1843
|
-
end
|
|
1844
|
-
|
|
1845
|
-
it "should yield 'Callable[t,min,max]' for callable with size constraint (infinite max)" do
|
|
1846
|
-
expect(calculator.string(callable_t(String, 0))).to eql('Callable[String, 0, default]')
|
|
1847
|
-
end
|
|
1848
|
-
|
|
1849
|
-
it "should yield 'Callable[t,min,max]' for callable with size constraint (capped max)" do
|
|
1850
|
-
expect(calculator.string(callable_t(String, 0, 3))).to eql('Callable[String, 0, 3]')
|
|
1851
|
-
end
|
|
1852
|
-
|
|
1853
|
-
it "should yield 'Callable[min,max]' callable with size > 0" do
|
|
1854
|
-
expect(calculator.string(callable_t(0, 0))).to eql('Callable[0, 0]')
|
|
1855
|
-
expect(calculator.string(callable_t(0, 1))).to eql('Callable[0, 1]')
|
|
1856
|
-
expect(calculator.string(callable_t(0, :default))).to eql('Callable[0, default]')
|
|
1857
|
-
end
|
|
1858
|
-
|
|
1859
|
-
it "should yield 'Callable[Callable]' for callable with block" do
|
|
1860
|
-
expect(calculator.string(callable_t(all_callables_t))).to eql('Callable[0, 0, Callable]')
|
|
1861
|
-
expect(calculator.string(callable_t(string_t, all_callables_t))).to eql('Callable[String, Callable]')
|
|
1862
|
-
expect(calculator.string(callable_t(string_t, 1,1, all_callables_t))).to eql('Callable[String, 1, 1, Callable]')
|
|
1863
|
-
end
|
|
1864
|
-
|
|
1865
|
-
it 'should yield Unit for a Unit type' do
|
|
1866
|
-
expect(calculator.string(unit_t)).to eql('Unit')
|
|
1867
|
-
end
|
|
1868
|
-
|
|
1869
|
-
it "should yield 'NotUndef' for a PNotUndefType" do
|
|
1870
|
-
t = not_undef_t
|
|
1871
|
-
expect(calculator.string(t)).to eq('NotUndef')
|
|
1872
|
-
end
|
|
1873
|
-
|
|
1874
|
-
it "should yield 'NotUndef[T]' for a PNotUndefType[T]" do
|
|
1875
|
-
t = not_undef_t(data_t)
|
|
1876
|
-
expect(calculator.string(t)).to eq('NotUndef[Data]')
|
|
1877
|
-
end
|
|
1878
|
-
|
|
1879
|
-
it "should yield 'NotUndef['string']' for a PNotUndefType['string']" do
|
|
1880
|
-
t = not_undef_t('hey')
|
|
1881
|
-
expect(calculator.string(t)).to eq("NotUndef['hey']")
|
|
1882
|
-
end
|
|
1883
|
-
end
|
|
1884
|
-
|
|
1885
1768
|
context 'when processing meta type' do
|
|
1886
1769
|
it 'should infer PType as the type of all other types' do
|
|
1887
1770
|
ptype = Puppet::Pops::Types::PType
|
|
@@ -1897,6 +1780,7 @@ describe 'The type calculator' do
|
|
|
1897
1780
|
expect(calculator.infer(Puppet::Pops::Types::PCollectionType::DEFAULT).is_a?(ptype)).to eq(true)
|
|
1898
1781
|
expect(calculator.infer(Puppet::Pops::Types::PArrayType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
1899
1782
|
expect(calculator.infer(Puppet::Pops::Types::PHashType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
1783
|
+
expect(calculator.infer(Puppet::Pops::Types::PIterableType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
1900
1784
|
expect(calculator.infer(Puppet::Pops::Types::PRuntimeType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
1901
1785
|
expect(calculator.infer(Puppet::Pops::Types::PHostClassType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
1902
1786
|
expect(calculator.infer(Puppet::Pops::Types::PResourceType::DEFAULT ).is_a?(ptype)).to eq(true)
|
|
@@ -1909,38 +1793,39 @@ describe 'The type calculator' do
|
|
|
1909
1793
|
end
|
|
1910
1794
|
|
|
1911
1795
|
it 'should infer PType as the type of all other types' do
|
|
1912
|
-
expect(calculator.
|
|
1913
|
-
expect(calculator.
|
|
1914
|
-
expect(calculator.
|
|
1915
|
-
expect(calculator.
|
|
1916
|
-
expect(calculator.
|
|
1917
|
-
expect(calculator.
|
|
1918
|
-
expect(calculator.
|
|
1919
|
-
expect(calculator.
|
|
1920
|
-
expect(calculator.
|
|
1921
|
-
expect(calculator.
|
|
1922
|
-
expect(calculator.
|
|
1923
|
-
expect(calculator.
|
|
1924
|
-
expect(calculator.
|
|
1925
|
-
expect(calculator.
|
|
1926
|
-
expect(calculator.
|
|
1927
|
-
expect(calculator.
|
|
1928
|
-
expect(calculator.
|
|
1929
|
-
expect(calculator.
|
|
1930
|
-
expect(calculator.
|
|
1931
|
-
expect(calculator.
|
|
1932
|
-
expect(calculator.
|
|
1796
|
+
expect(calculator.infer(Puppet::Pops::Types::PUndefType::DEFAULT ).to_s).to eq('Type[Undef]')
|
|
1797
|
+
expect(calculator.infer(Puppet::Pops::Types::PDataType::DEFAULT ).to_s).to eq('Type[Data]')
|
|
1798
|
+
expect(calculator.infer(Puppet::Pops::Types::PScalarType::DEFAULT ).to_s).to eq('Type[Scalar]')
|
|
1799
|
+
expect(calculator.infer(Puppet::Pops::Types::PStringType::DEFAULT ).to_s).to eq('Type[String]')
|
|
1800
|
+
expect(calculator.infer(Puppet::Pops::Types::PNumericType::DEFAULT ).to_s).to eq('Type[Numeric]')
|
|
1801
|
+
expect(calculator.infer(Puppet::Pops::Types::PIntegerType::DEFAULT ).to_s).to eq('Type[Integer]')
|
|
1802
|
+
expect(calculator.infer(Puppet::Pops::Types::PFloatType::DEFAULT ).to_s).to eq('Type[Float]')
|
|
1803
|
+
expect(calculator.infer(Puppet::Pops::Types::PRegexpType::DEFAULT ).to_s).to eq('Type[Regexp]')
|
|
1804
|
+
expect(calculator.infer(Puppet::Pops::Types::PBooleanType::DEFAULT ).to_s).to eq('Type[Boolean]')
|
|
1805
|
+
expect(calculator.infer(Puppet::Pops::Types::PCollectionType::DEFAULT).to_s).to eq('Type[Collection]')
|
|
1806
|
+
expect(calculator.infer(Puppet::Pops::Types::PArrayType::DEFAULT ).to_s).to eq('Type[Array[?]]')
|
|
1807
|
+
expect(calculator.infer(Puppet::Pops::Types::PHashType::DEFAULT ).to_s).to eq('Type[Hash[?, ?]]')
|
|
1808
|
+
expect(calculator.infer(Puppet::Pops::Types::PIterableType::DEFAULT ).to_s).to eq('Type[Iterable]')
|
|
1809
|
+
expect(calculator.infer(Puppet::Pops::Types::PRuntimeType::DEFAULT ).to_s).to eq('Type[Runtime[?, ?]]')
|
|
1810
|
+
expect(calculator.infer(Puppet::Pops::Types::PHostClassType::DEFAULT ).to_s).to eq('Type[Class]')
|
|
1811
|
+
expect(calculator.infer(Puppet::Pops::Types::PResourceType::DEFAULT ).to_s).to eq('Type[Resource]')
|
|
1812
|
+
expect(calculator.infer(Puppet::Pops::Types::PEnumType::DEFAULT ).to_s).to eq('Type[Enum]')
|
|
1813
|
+
expect(calculator.infer(Puppet::Pops::Types::PVariantType::DEFAULT ).to_s).to eq('Type[Variant]')
|
|
1814
|
+
expect(calculator.infer(Puppet::Pops::Types::PPatternType::DEFAULT ).to_s).to eq('Type[Pattern]')
|
|
1815
|
+
expect(calculator.infer(Puppet::Pops::Types::PTupleType::DEFAULT ).to_s).to eq('Type[Tuple]')
|
|
1816
|
+
expect(calculator.infer(Puppet::Pops::Types::POptionalType::DEFAULT ).to_s).to eq('Type[Optional]')
|
|
1817
|
+
expect(calculator.infer(Puppet::Pops::Types::PCallableType::DEFAULT ).to_s).to eq('Type[Callable]')
|
|
1933
1818
|
|
|
1934
1819
|
expect(calculator.infer(Puppet::Pops::Types::PResourceType.new('foo::fee::fum')).to_s).to eq('Type[Foo::Fee::Fum]')
|
|
1935
|
-
expect(calculator.
|
|
1820
|
+
expect(calculator.infer(Puppet::Pops::Types::PResourceType.new('foo::fee::fum')).to_s).to eq('Type[Foo::Fee::Fum]')
|
|
1936
1821
|
expect(calculator.infer(Puppet::Pops::Types::PResourceType.new('Foo::Fee::Fum')).to_s).to eq('Type[Foo::Fee::Fum]')
|
|
1937
1822
|
end
|
|
1938
1823
|
|
|
1939
1824
|
it "computes the common type of PType's type parameter" do
|
|
1940
1825
|
int_t = Puppet::Pops::Types::PIntegerType::DEFAULT
|
|
1941
1826
|
string_t = Puppet::Pops::Types::PStringType::DEFAULT
|
|
1942
|
-
expect(calculator.
|
|
1943
|
-
expect(calculator.
|
|
1827
|
+
expect(calculator.infer([int_t]).to_s).to eq('Array[Type[Integer], 1, 1]')
|
|
1828
|
+
expect(calculator.infer([int_t, string_t]).to_s).to eq('Array[Type[Scalar], 2, 2]')
|
|
1944
1829
|
end
|
|
1945
1830
|
|
|
1946
1831
|
it 'should infer PType as the type of ruby classes' do
|
|
@@ -1979,23 +1864,23 @@ describe 'The type calculator' do
|
|
|
1979
1864
|
end
|
|
1980
1865
|
end
|
|
1981
1866
|
|
|
1982
|
-
context 'when asking for an
|
|
1983
|
-
it 'should produce an
|
|
1867
|
+
context 'when asking for an iterable ' do
|
|
1868
|
+
it 'should produce an iterable for an Integer range that is finite' do
|
|
1984
1869
|
t = Puppet::Pops::Types::PIntegerType.new(1, 10)
|
|
1985
|
-
expect(calculator.
|
|
1870
|
+
expect(calculator.iterable(t).respond_to?(:each)).to eq(true)
|
|
1986
1871
|
end
|
|
1987
1872
|
|
|
1988
|
-
it 'should not produce an
|
|
1873
|
+
it 'should not produce an iterable for an Integer range that has an infinite side' do
|
|
1989
1874
|
t = Puppet::Pops::Types::PIntegerType.new(nil, 10)
|
|
1990
|
-
expect(calculator.
|
|
1875
|
+
expect(calculator.iterable(t)).to eq(nil)
|
|
1991
1876
|
|
|
1992
1877
|
t = Puppet::Pops::Types::PIntegerType.new(1, nil)
|
|
1993
|
-
expect(calculator.
|
|
1878
|
+
expect(calculator.iterable(t)).to eq(nil)
|
|
1994
1879
|
end
|
|
1995
1880
|
|
|
1996
|
-
it 'all but Integer range are not
|
|
1881
|
+
it 'all but Integer range are not iterable' do
|
|
1997
1882
|
[Object, Numeric, Float, String, Regexp, Array, Hash].each do |t|
|
|
1998
|
-
expect(calculator.
|
|
1883
|
+
expect(calculator.iterable(calculator.type(t))).to eq(nil)
|
|
1999
1884
|
end
|
|
2000
1885
|
end
|
|
2001
1886
|
end
|
|
@@ -2029,16 +1914,16 @@ describe 'The type calculator' do
|
|
|
2029
1914
|
|
|
2030
1915
|
it 'ensures that Struct key types are not generalized' do
|
|
2031
1916
|
generic = struct_t({'a' => object_t}).generalize
|
|
2032
|
-
expect(
|
|
1917
|
+
expect(generic.to_s).to eq("Struct[{'a' => Any}]")
|
|
2033
1918
|
generic = struct_t({not_undef_t('a') => object_t}).generalize
|
|
2034
|
-
expect(
|
|
1919
|
+
expect(generic.to_s).to eq("Struct[{NotUndef['a'] => Any}]")
|
|
2035
1920
|
generic = struct_t({optional_t('a') => string_t}).generalize
|
|
2036
|
-
expect(
|
|
1921
|
+
expect(generic.to_s).to eq("Struct[{Optional['a'] => String}]")
|
|
2037
1922
|
end
|
|
2038
1923
|
|
|
2039
1924
|
it 'ensures that Struct value types are generalized' do
|
|
2040
1925
|
generic = struct_t({'a' => range_t(1, 3)}).generalize
|
|
2041
|
-
expect(
|
|
1926
|
+
expect(generic.to_s).to eq("Struct[{'a' => Integer}]")
|
|
2042
1927
|
end
|
|
2043
1928
|
|
|
2044
1929
|
it "does not reduce by combining types when using infer_set" do
|