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
|
@@ -598,6 +598,11 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
|
598
598
|
expect(result).to include(['b', 20])
|
|
599
599
|
end
|
|
600
600
|
|
|
601
|
+
it "should create an array from an Iterator" do
|
|
602
|
+
expect(parser.evaluate_string(scope, '[1,2,3].reverse_each', __FILE__).is_a?(Array)).to be(false)
|
|
603
|
+
result = parser.evaluate_string(scope, '*[1,2,3].reverse_each', __FILE__)
|
|
604
|
+
expect(result).to eql([3,2,1])
|
|
605
|
+
end
|
|
601
606
|
end
|
|
602
607
|
|
|
603
608
|
context "When evaluator performs [] operations" do
|
|
@@ -861,7 +866,8 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
|
861
866
|
# NOTE: these meta-esque parameters are not recognized as such
|
|
862
867
|
"notify { id: message=>explicit} Notify[id][title]" => /does not have a parameter called 'title'/,
|
|
863
868
|
"notify { id: message=>explicit} Notify[id]['type']" => /does not have a parameter called 'type'/,
|
|
864
|
-
"notify { id: message=>explicit } Notify[id]{message=>override}" => /'message' is already set on Notify\[id\]
|
|
869
|
+
"notify { id: message=>explicit } Notify[id]{message=>override}" => /'message' is already set on Notify\[id\]/,
|
|
870
|
+
"notify { id: message => 'once', message => 'twice' }" => /'message' has already been set/
|
|
865
871
|
}.each do |source, result|
|
|
866
872
|
it "should parse '#{source}' and raise error matching #{result}" do
|
|
867
873
|
expect { parser.evaluate_string(scope, source, __FILE__)}.to raise_error(result)
|
|
@@ -960,7 +966,7 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
|
|
|
960
966
|
end
|
|
961
967
|
|
|
962
968
|
it "provides location information on error in unparenthesized call logic" do
|
|
963
|
-
expect{parser.evaluate_string(scope, "include non_existing_class", __FILE__)}.to raise_error(Puppet::ParseError,
|
|
969
|
+
expect{parser.evaluate_string(scope, "include non_existing_class", __FILE__)}.to raise_error(Puppet::ParseError, /:1:1/)
|
|
964
970
|
end
|
|
965
971
|
|
|
966
972
|
it 'defaults can be given in a lambda and used only when arg is missing' do
|
|
@@ -55,10 +55,10 @@ module EvaluatorRspecHelper
|
|
|
55
55
|
result = evaluator.evaluate(in_top_scope.current, top_scope)
|
|
56
56
|
if in_local_scope
|
|
57
57
|
# This is really bad in 3.x scope
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
top_scope.with_guarded_scope do
|
|
59
|
+
top_scope.new_ephemeral(true)
|
|
60
|
+
result = evaluator.evaluate(in_local_scope.current, top_scope)
|
|
61
|
+
end
|
|
62
62
|
end
|
|
63
63
|
if in_top_scope_again
|
|
64
64
|
result = evaluator.evaluate(in_top_scope_again.current, top_scope)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'puppet/pops'
|
|
4
|
+
require 'puppet/pops/evaluator/json_strict_literal_evaluator'
|
|
5
|
+
|
|
6
|
+
describe "Puppet::Pops::Evaluator::JsonStrictLiteralEvaluator" do
|
|
7
|
+
let(:parser) { Puppet::Pops::Parser::EvaluatingParser.new }
|
|
8
|
+
let(:leval) { Puppet::Pops::Evaluator::JsonStrictLiteralEvaluator.new }
|
|
9
|
+
|
|
10
|
+
{ "1" => 1,
|
|
11
|
+
"3.14" => 3.14,
|
|
12
|
+
"true" => true,
|
|
13
|
+
"false" => false,
|
|
14
|
+
"'1'" => '1',
|
|
15
|
+
"'a'" => 'a',
|
|
16
|
+
'"a"' => 'a',
|
|
17
|
+
'a' => 'a',
|
|
18
|
+
'a::b' => 'a::b',
|
|
19
|
+
'undef' => nil,
|
|
20
|
+
|
|
21
|
+
# collections
|
|
22
|
+
'[1,2,3]' => [1,2,3],
|
|
23
|
+
'{a=>1,b=>2}' => {'a' => 1, 'b' => 2},
|
|
24
|
+
'[undef]' => [nil],
|
|
25
|
+
'{a=>undef}' => { 'a' => nil }
|
|
26
|
+
|
|
27
|
+
}.each do |source, result|
|
|
28
|
+
it "evaluates '#{source}' to #{result}" do
|
|
29
|
+
expect(leval.literal(parser.parse_string(source))).to eq(result)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
[ '1+1',
|
|
34
|
+
'File',
|
|
35
|
+
'[1,2, 1+2]',
|
|
36
|
+
'{a=>1+1}',
|
|
37
|
+
'Integer[1]',
|
|
38
|
+
'"x$y"',
|
|
39
|
+
'"x${y}z"'
|
|
40
|
+
].each do |source|
|
|
41
|
+
it "throws :not_literal for non literal expression '#{source}'" do
|
|
42
|
+
expect{leval.literal(parser.parse_string('1+1'))}.to throw_symbol(:not_literal)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
[ 'default',
|
|
47
|
+
'/.*/',
|
|
48
|
+
'{1=>100}',
|
|
49
|
+
'{undef => 10}',
|
|
50
|
+
'{default => 10}',
|
|
51
|
+
'{/.*/ => 10}',
|
|
52
|
+
'{"ok" => {1 => 100}}',
|
|
53
|
+
'[default]',
|
|
54
|
+
'[[default]]',
|
|
55
|
+
'[/.*/]',
|
|
56
|
+
'[[/.*/]]',
|
|
57
|
+
'[{1 => 100}]',
|
|
58
|
+
].each do |source|
|
|
59
|
+
it "throws :not_literal for values not representable as pure JSON '#{source}'" do
|
|
60
|
+
expect{leval.literal(parser.parse_string('1+1'))}.to throw_symbol(:not_literal)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -16,4 +16,10 @@ describe 'when converting to 3.x' do
|
|
|
16
16
|
converted = Puppet::Pops::Evaluator::Runtime3Converter.instance.catalog_type_to_split_type_title(t)
|
|
17
17
|
expect(converted).to eql(['class', 'kermit'])
|
|
18
18
|
end
|
|
19
|
+
|
|
20
|
+
it "errors on attempts to convert an 'Iterator'" do
|
|
21
|
+
expect {
|
|
22
|
+
Puppet::Pops::Evaluator::Runtime3Converter.convert(Puppet::Pops::Types::Iterable.on((1..3)), {}, nil)
|
|
23
|
+
}.to raise_error(Puppet::Error, /Use of an Iterator is not supported here/)
|
|
24
|
+
end
|
|
19
25
|
end
|
|
@@ -53,6 +53,59 @@ describe 'dependency loader' do
|
|
|
53
53
|
expect(function.class.name).to eq('testmodule::foo')
|
|
54
54
|
expect(function.is_a?(Puppet::Functions::Function)).to eq(true)
|
|
55
55
|
end
|
|
56
|
+
|
|
57
|
+
describe "when parsing files from disk" do
|
|
58
|
+
|
|
59
|
+
# First line of Rune version of Rune poem at http://www.columbia.edu/~fdc/utf8/
|
|
60
|
+
# characters chosen since they will not parse on Windows with codepage 437 or 1252
|
|
61
|
+
# Section 3.2.1.3 of Ruby spec guarantees that \u strings are encoded as UTF-8
|
|
62
|
+
let (:node) { Puppet::Node.new('node') }
|
|
63
|
+
let (:rune_utf8) { "\u16A0\u16C7\u16BB" } # ᚠᛇᚻ
|
|
64
|
+
let (:code_utf8) do <<-CODE
|
|
65
|
+
Puppet::Functions.create_function('testmodule::foo') {
|
|
66
|
+
def foo
|
|
67
|
+
return \"#{rune_utf8}\"
|
|
68
|
+
end
|
|
69
|
+
}
|
|
70
|
+
CODE
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
context 'when loading files from disk' do
|
|
74
|
+
it 'should always read files as UTF-8' do
|
|
75
|
+
if Puppet.features.microsoft_windows? && Encoding.default_external == Encoding::UTF_8
|
|
76
|
+
raise 'This test must be run in a codepage other than 65001 to validate behavior'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
module_dir = dir_containing('testmodule', {
|
|
80
|
+
'lib' => { 'puppet' => { 'functions' => { 'testmodule' => {
|
|
81
|
+
'foo.rb' => code_utf8
|
|
82
|
+
}}}}})
|
|
83
|
+
|
|
84
|
+
loader = loader_for('testmodule', module_dir)
|
|
85
|
+
|
|
86
|
+
function = loader.load_typed(typed_name(:function, 'testmodule::foo')).value
|
|
87
|
+
expect(function.call({})).to eq(rune_utf8)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'currently ignores the UTF-8 BOM (Byte Order Mark) when loading module files' do
|
|
91
|
+
bom = "\uFEFF"
|
|
92
|
+
|
|
93
|
+
if Puppet.features.microsoft_windows? && Encoding.default_external == Encoding::UTF_8
|
|
94
|
+
raise 'This test must be run in a codepage other than 65001 to validate behavior'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
module_dir = dir_containing('testmodule', {
|
|
98
|
+
'lib' => { 'puppet' => { 'functions' => { 'testmodule' => {
|
|
99
|
+
'foo.rb' => "#{bom}#{code_utf8}"
|
|
100
|
+
}}}}})
|
|
101
|
+
|
|
102
|
+
loader = loader_for('testmodule', module_dir)
|
|
103
|
+
|
|
104
|
+
function = loader.load_typed(typed_name(:function, 'testmodule::foo')).value
|
|
105
|
+
expect(function.call({})).to eq(rune_utf8)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
56
109
|
end
|
|
57
110
|
|
|
58
111
|
def loader_for(name, dir)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
require 'puppet_spec/files'
|
|
3
|
+
require 'puppet_spec/compiler'
|
|
3
4
|
|
|
4
5
|
require 'puppet/pops'
|
|
5
6
|
require 'puppet/loaders'
|
|
@@ -25,12 +26,15 @@ end
|
|
|
25
26
|
|
|
26
27
|
describe 'loaders' do
|
|
27
28
|
include PuppetSpec::Files
|
|
29
|
+
include PuppetSpec::Compiler
|
|
28
30
|
|
|
29
31
|
let(:module_without_metadata) { File.join(config_dir('wo_metadata_module'), 'modules') }
|
|
30
32
|
let(:module_without_lib) { File.join(config_dir('module_no_lib'), 'modules') }
|
|
31
33
|
let(:mix_4x_and_3x_functions) { config_dir('mix_4x_and_3x_functions') }
|
|
32
34
|
let(:module_with_metadata) { File.join(config_dir('single_module'), 'modules') }
|
|
33
35
|
let(:dependent_modules_with_metadata) { config_dir('dependent_modules_with_metadata') }
|
|
36
|
+
let(:user_metadata_path) { File.join(dependent_modules_with_metadata, 'modules/user/metadata.json') }
|
|
37
|
+
|
|
34
38
|
let(:empty_test_env) { environment_for() }
|
|
35
39
|
|
|
36
40
|
# Loaders caches the puppet_system_loader, must reset between tests
|
|
@@ -103,7 +107,9 @@ describe 'loaders' do
|
|
|
103
107
|
end
|
|
104
108
|
|
|
105
109
|
it 'loader allows loading a function more than once' do
|
|
106
|
-
|
|
110
|
+
File.stubs(:read).with(user_metadata_path).returns ''
|
|
111
|
+
|
|
112
|
+
env = environment_for(File.join(dependent_modules_with_metadata, 'modules'))
|
|
107
113
|
loaders = Puppet::Pops::Loaders.new(env)
|
|
108
114
|
|
|
109
115
|
moduleb_loader = loaders.private_loader_for_module('user')
|
|
@@ -116,13 +122,132 @@ describe 'loaders' do
|
|
|
116
122
|
end
|
|
117
123
|
|
|
118
124
|
context 'when loading from a module with metadata' do
|
|
125
|
+
let(:env) { environment_for(File.join(dependent_modules_with_metadata, 'modules')) }
|
|
126
|
+
let(:scope) { Puppet::Parser::Compiler.new(Puppet::Node.new("test", :environment => env)).newscope(nil) }
|
|
127
|
+
|
|
128
|
+
let(:environmentpath) { my_fixture_dir }
|
|
129
|
+
let(:node) { Puppet::Node.new('test', :facts => Puppet::Node::Facts.new('facts', {}), :environment => 'dependent_modules_with_metadata') }
|
|
130
|
+
let(:compiler) { Puppet::Parser::Compiler.new(node) }
|
|
131
|
+
|
|
132
|
+
let(:user_metadata) {
|
|
133
|
+
{
|
|
134
|
+
'name' => 'test-user',
|
|
135
|
+
'author' => 'test',
|
|
136
|
+
'description' => '',
|
|
137
|
+
'license' => '',
|
|
138
|
+
'source' => '',
|
|
139
|
+
'version' => '1.0.0',
|
|
140
|
+
'dependencies' => []
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
def compile_and_get_notifications(code)
|
|
145
|
+
Puppet[:code] = code
|
|
146
|
+
catalog = block_given? ? compiler.compile { |catalog| yield(compiler.topscope); catalog } : compiler.compile
|
|
147
|
+
catalog.resources.map(&:ref).select { |r| r.start_with?('Notify[') }.map { |r| r[7..-2] }
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
around(:each) do |example|
|
|
151
|
+
# Initialize settings to get a full compile as close as possible to a real
|
|
152
|
+
# environment load
|
|
153
|
+
Puppet.settings.initialize_global_settings
|
|
154
|
+
|
|
155
|
+
# Initialize loaders based on the environmentpath. It does not work to
|
|
156
|
+
# just set the setting environmentpath for some reason - this achieves the same:
|
|
157
|
+
# - first a loader is created, loading directory environments from the fixture (there is
|
|
158
|
+
# one environment, 'sample', which will be loaded since the node references this
|
|
159
|
+
# environment by name).
|
|
160
|
+
# - secondly, the created env loader is set as 'environments' in the puppet context.
|
|
161
|
+
#
|
|
162
|
+
environments = Puppet::Environments::Directories.new(environmentpath, [])
|
|
163
|
+
Puppet.override(:environments => environments) do
|
|
164
|
+
example.run
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
119
168
|
it 'all dependent modules are visible' do
|
|
120
|
-
|
|
169
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'}, { 'name' => 'test-usee2'} ]).to_pson
|
|
121
170
|
loaders = Puppet::Pops::Loaders.new(env)
|
|
122
171
|
|
|
123
172
|
moduleb_loader = loaders.private_loader_for_module('user')
|
|
124
173
|
function = moduleb_loader.load_typed(typed_name(:function, 'user::caller')).value
|
|
125
174
|
expect(function.call({})).to eql("usee::callee() was told 'passed value' + I am user::caller()")
|
|
175
|
+
|
|
176
|
+
function = moduleb_loader.load_typed(typed_name(:function, 'user::caller2')).value
|
|
177
|
+
expect(function.call({})).to eql("usee2::callee() was told 'passed value' + I am user::caller2()")
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
[ 'outside a function', 'a puppet function declared under functions', 'a puppet function declared in init.pp', 'a ruby function'].each_with_index do |from, from_idx|
|
|
181
|
+
[ {:from => from, :called => 'a puppet function declared under functions', :expects => "I'm the function usee::usee_puppet()"},
|
|
182
|
+
{:from => from, :called => 'a puppet function declared in init.pp', :expects => "I'm the function usee::usee_puppet_init()"},
|
|
183
|
+
{:from => from, :called => 'a ruby function', :expects => "I'm the function usee::usee_ruby()"} ].each_with_index do |desc, called_idx|
|
|
184
|
+
case_number = from_idx * 3 + called_idx + 1
|
|
185
|
+
it "can call #{desc[:called]} from #{desc[:from]} when dependency is present in metadata.json" do
|
|
186
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
|
187
|
+
Puppet[:code] = "$case_number = #{case_number}\ninclude ::user"
|
|
188
|
+
catalog = compiler.compile
|
|
189
|
+
resource = catalog.resource('Notify', "case_#{case_number}")
|
|
190
|
+
expect(resource).not_to be_nil
|
|
191
|
+
expect(resource['message']).to eq(desc[:expects])
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it "can call #{desc[:called]} from #{desc[:from]} when no metadata is present" do
|
|
195
|
+
Puppet::Module.any_instance.expects('has_metadata?').at_least_once.returns(false)
|
|
196
|
+
Puppet[:code] = "$case_number = #{case_number}\ninclude ::user"
|
|
197
|
+
catalog = compiler.compile
|
|
198
|
+
resource = catalog.resource('Notify', "case_#{case_number}")
|
|
199
|
+
expect(resource).not_to be_nil
|
|
200
|
+
expect(resource['message']).to eq(desc[:expects])
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it 'can not call ruby function in a dependent module from outside a function if dependency is missing in existing metadata.json' do
|
|
204
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => []).to_pson
|
|
205
|
+
Puppet[:code] = "$case_number = #{case_number}\ninclude ::user"
|
|
206
|
+
expect { catalog = compiler.compile }.to raise_error(Puppet::Error, /Unknown function/)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it "a type can reference an autoloaded type alias from another module when dependency is present in metadata.json" do
|
|
212
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
|
213
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
|
214
|
+
assert_type(Usee::Zero, 0)
|
|
215
|
+
notice(ok)
|
|
216
|
+
CODE
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "a type can reference an autoloaded type alias from another module when no metadata is present" do
|
|
220
|
+
Puppet::Module.any_instance.expects('has_metadata?').at_least_once.returns(false)
|
|
221
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
|
222
|
+
assert_type(Usee::Zero, 0)
|
|
223
|
+
notice(ok)
|
|
224
|
+
CODE
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
it "a type can reference a type alias from another module when other module has it declared in init.pp" do
|
|
228
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
|
229
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
|
230
|
+
include 'usee'
|
|
231
|
+
assert_type(Usee::One, 1)
|
|
232
|
+
notice(ok)
|
|
233
|
+
CODE
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
it "an autoloaded type can reference an autoloaded type alias from another module when dependency is present in metadata.json" do
|
|
237
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
|
238
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
|
239
|
+
assert_type(User::WithUseeZero, [0])
|
|
240
|
+
notice(ok)
|
|
241
|
+
CODE
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it "an autoloaded type can reference an autoloaded type alias from another module when other module has it declared in init.pp" do
|
|
245
|
+
File.stubs(:read).with(user_metadata_path).returns user_metadata.merge('dependencies' => [ { 'name' => 'test-usee'} ]).to_pson
|
|
246
|
+
expect(eval_and_collect_notices(<<-CODE, node)).to eq(['ok'])
|
|
247
|
+
include 'usee'
|
|
248
|
+
assert_type(User::WithUseeOne, [1])
|
|
249
|
+
notice(ok)
|
|
250
|
+
CODE
|
|
126
251
|
end
|
|
127
252
|
end
|
|
128
253
|
|
|
@@ -329,13 +329,19 @@ describe 'Lexer2' do
|
|
|
329
329
|
end
|
|
330
330
|
end
|
|
331
331
|
|
|
332
|
+
it 'detects unterminated multiline comment' do
|
|
333
|
+
expect { tokens_scanned_from("/* not terminated\nmultiline\ncomment") }.to raise_error(Puppet::ParseErrorWithIssue) { |e|
|
|
334
|
+
expect(e.issue_code).to be(Puppet::Pops::Issues::UNCLOSED_MLCOMMENT.issue_code)
|
|
335
|
+
}
|
|
336
|
+
end
|
|
337
|
+
|
|
332
338
|
{ "=~" => [:MATCH, "=~ /./"],
|
|
333
339
|
"!~" => [:NOMATCH, "!~ /./"],
|
|
334
340
|
"," => [:COMMA, ", /./"],
|
|
335
341
|
"(" => [:LPAREN, "( /./"],
|
|
336
|
-
"["
|
|
337
|
-
"["
|
|
338
|
-
"[" => [[:NAME, :LISTSTART], "a [ /./"],
|
|
342
|
+
"[ (liststart)" => [:LISTSTART, "[ /./"],
|
|
343
|
+
"[ (LBRACK)" => [[:NAME, :LBRACK], "a[ /./"],
|
|
344
|
+
"[ (liststart after name)" => [[:NAME, :LISTSTART], "a [ /./"],
|
|
339
345
|
"{" => [:LBRACE, "{ /./"],
|
|
340
346
|
"+" => [:PLUS, "+ /./"],
|
|
341
347
|
"-" => [:MINUS, "- /./"],
|
|
@@ -471,6 +477,18 @@ describe 'Lexer2' do
|
|
|
471
477
|
end
|
|
472
478
|
end
|
|
473
479
|
end
|
|
480
|
+
context 'when not given multi byte characters' do
|
|
481
|
+
it 'produces byte offsets for tokens' do
|
|
482
|
+
code = <<-"CODE"
|
|
483
|
+
1 2\n3
|
|
484
|
+
CODE
|
|
485
|
+
expect(tokens_scanned_from(code)).to match_tokens2(
|
|
486
|
+
[:NUMBER, '1', {:line => 1, :offset => 0, :length=>1}],
|
|
487
|
+
[:NUMBER, '2', {:line => 1, :offset => 2, :length=>1}],
|
|
488
|
+
[:NUMBER, '3', {:line => 2, :offset => 4, :length=>1}]
|
|
489
|
+
)
|
|
490
|
+
end
|
|
491
|
+
end
|
|
474
492
|
|
|
475
493
|
context 'when dealing with multi byte characters' do
|
|
476
494
|
it 'should support unicode characters' do
|
|
@@ -480,6 +498,7 @@ describe 'Lexer2' do
|
|
|
480
498
|
# >= Ruby 1.9.3 reports \u
|
|
481
499
|
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713y"])
|
|
482
500
|
end
|
|
501
|
+
|
|
483
502
|
it 'should support unicode characters in long form' do
|
|
484
503
|
code = <<-CODE
|
|
485
504
|
"x\\u{1f452}y"
|
|
@@ -487,6 +506,23 @@ describe 'Lexer2' do
|
|
|
487
506
|
expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u{1f452}y"])
|
|
488
507
|
end
|
|
489
508
|
|
|
509
|
+
it 'produces byte offsets that counts each byte in a comment' do
|
|
510
|
+
code = <<-"CODE"
|
|
511
|
+
# \u{0400}\na
|
|
512
|
+
CODE
|
|
513
|
+
expect(tokens_scanned_from(code.strip)).to match_tokens2([:NAME, 'a', {:line => 2, :offset => 5, :length=>1}])
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
it 'produces byte offsets that counts each byte in value token' do
|
|
517
|
+
code = <<-"CODE"
|
|
518
|
+
'\u{0400}'\na
|
|
519
|
+
CODE
|
|
520
|
+
expect(tokens_scanned_from(code.strip)).to match_tokens2(
|
|
521
|
+
[:STRING, "\u{400}", {:line => 1, :offset => 0, :length=>4}],
|
|
522
|
+
[:NAME, 'a', {:line => 2, :offset => 5, :length=>1}]
|
|
523
|
+
)
|
|
524
|
+
end
|
|
525
|
+
|
|
490
526
|
it 'should not select LISTSTART token when preceded by multibyte chars' do
|
|
491
527
|
# This test is sensitive to the number of multibyte characters and position of the expressions
|
|
492
528
|
# within the string - it is designed to fail if the position is calculated on the byte offset of the '['
|
|
@@ -696,4 +732,83 @@ describe 'Lexer2' do
|
|
|
696
732
|
expect_issue('"asd', Puppet::Pops::Issues::UNCLOSED_QUOTE)
|
|
697
733
|
end
|
|
698
734
|
end
|
|
735
|
+
|
|
736
|
+
context 'when dealing with non UTF-8 and Byte Order Marks (BOMs)' do
|
|
737
|
+
{
|
|
738
|
+
'UTF_8' => [0xEF, 0xBB, 0xBF],
|
|
739
|
+
'UTF_16_1' => [0xFE, 0xFF],
|
|
740
|
+
'UTF_16_2' => [0xFF, 0xFE],
|
|
741
|
+
'UTF_32_1' => [0x00, 0x00, 0xFE, 0xFF],
|
|
742
|
+
'UTF_32_2' => [0xFF, 0xFE, 0x00, 0x00],
|
|
743
|
+
'UTF_1' => [0xF7, 0x64, 0x4C],
|
|
744
|
+
'UTF_EBCDIC' => [0xDD, 0x73, 0x66, 0x73],
|
|
745
|
+
'SCSU' => [0x0E, 0xFE, 0xFF],
|
|
746
|
+
'BOCU' => [0xFB, 0xEE, 0x28],
|
|
747
|
+
'GB_18030' => [0x84, 0x31, 0x95, 0x33]
|
|
748
|
+
}.each do |key, bytes|
|
|
749
|
+
it "errors on the byte order mark for #{key} '[#{bytes.map() {|b| '%X' % b}.join(' ')}]'" do
|
|
750
|
+
format_name = key.split('_')[0,2].join('-')
|
|
751
|
+
bytes_str = "\\[#{bytes.map {|b| '%X' % b}.join(' ')}\\]"
|
|
752
|
+
fix = " - remove these from the puppet source"
|
|
753
|
+
expect {
|
|
754
|
+
tokens_scanned_from(bytes.pack('C*'))
|
|
755
|
+
}.to raise_error(Puppet::ParseErrorWithIssue,
|
|
756
|
+
/Illegal #{format_name} .* at beginning of input: #{bytes_str}#{fix}/)
|
|
757
|
+
end
|
|
758
|
+
|
|
759
|
+
it "can use a possibly 'broken' UTF-16 string without problems for #{key}" do
|
|
760
|
+
format_name = key.split('_')[0,2].join('-')
|
|
761
|
+
string = bytes.pack('C*').force_encoding('UTF-16')
|
|
762
|
+
bytes_str = "\\[#{string.bytes.map {|b| '%X' % b}.join(' ')}\\]"
|
|
763
|
+
fix = " - remove these from the puppet source"
|
|
764
|
+
expect {
|
|
765
|
+
tokens_scanned_from(string)
|
|
766
|
+
}.to raise_error(Puppet::ParseErrorWithIssue,
|
|
767
|
+
/Illegal #{format_name} .* at beginning of input: #{bytes_str}#{fix}/)
|
|
768
|
+
end
|
|
769
|
+
end
|
|
770
|
+
end
|
|
771
|
+
end
|
|
772
|
+
|
|
773
|
+
describe Puppet::Pops::Parser::Lexer2 do
|
|
774
|
+
|
|
775
|
+
include PuppetSpec::Files
|
|
776
|
+
|
|
777
|
+
# First line of Rune version of Rune poem at http://www.columbia.edu/~fdc/utf8/
|
|
778
|
+
# characters chosen since they will not parse on Windows with codepage 437 or 1252
|
|
779
|
+
# Section 3.2.1.3 of Ruby spec guarantees that \u strings are encoded as UTF-8
|
|
780
|
+
# Runes (may show up as garbage if font is not available): ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ
|
|
781
|
+
let (:rune_utf8) {
|
|
782
|
+
"\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2"
|
|
783
|
+
"\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA"
|
|
784
|
+
"\u16B3\u16A2\u16D7"
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
context 'when lexing files from disk' do
|
|
788
|
+
it 'should always read files as UTF-8' do
|
|
789
|
+
if Puppet.features.microsoft_windows? && Encoding.default_external == Encoding::UTF_8
|
|
790
|
+
raise 'This test must be run in a codepage other than 65001 to validate behavior'
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
manifest_code = "notify { '#{rune_utf8}': }"
|
|
794
|
+
manifest = file_containing('manifest.pp', manifest_code)
|
|
795
|
+
lexed_file = described_class.new.lex_file(manifest)
|
|
796
|
+
|
|
797
|
+
expect(lexed_file.string.encoding).to eq(Encoding::UTF_8)
|
|
798
|
+
expect(lexed_file.string).to eq(manifest_code)
|
|
799
|
+
end
|
|
800
|
+
|
|
801
|
+
it 'currently errors when the UTF-8 BOM (Byte Order Mark) is present when lexing files' do
|
|
802
|
+
bom = "\uFEFF"
|
|
803
|
+
|
|
804
|
+
manifest_code = "#{bom}notify { '#{rune_utf8}': }"
|
|
805
|
+
manifest = file_containing('manifest.pp', manifest_code)
|
|
806
|
+
|
|
807
|
+
expect {
|
|
808
|
+
lexed_file = described_class.new.lex_file(manifest)
|
|
809
|
+
}.to raise_error(Puppet::ParseErrorWithIssue,
|
|
810
|
+
'Illegal UTF-8 Byte Order mark at beginning of input: [EF BB BF] - remove these from the puppet source')
|
|
811
|
+
end
|
|
812
|
+
end
|
|
813
|
+
|
|
699
814
|
end
|
|
@@ -26,6 +26,10 @@ describe "egrammar parsing function calls" do
|
|
|
26
26
|
expect(dump(parse("foo(bar)"))).to eq("(invoke foo bar)")
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
it "notice {a=>2}" do
|
|
30
|
+
expect(dump(parse("notice {a => 2}"))).to eq("(invoke notice ({} ('a' 2)))")
|
|
31
|
+
end
|
|
32
|
+
|
|
29
33
|
it "foo(bar,)" do
|
|
30
34
|
expect(dump(parse("foo(bar,)"))).to eq("(invoke foo bar)")
|
|
31
35
|
end
|
|
@@ -37,6 +41,10 @@ describe "egrammar parsing function calls" do
|
|
|
37
41
|
it "notice fqdn_rand(30)" do
|
|
38
42
|
expect(dump(parse("notice fqdn_rand(30)"))).to eq('(invoke notice (call fqdn_rand 30))')
|
|
39
43
|
end
|
|
44
|
+
|
|
45
|
+
it "notice type(42)" do
|
|
46
|
+
expect(dump(parse("notice type(42)"))).to eq('(invoke notice (call type 42))')
|
|
47
|
+
end
|
|
40
48
|
end
|
|
41
49
|
|
|
42
50
|
context "in nested scopes" do
|
|
@@ -31,6 +31,16 @@ describe Puppet::Pops::Parser::Parser do
|
|
|
31
31
|
expect(adapter.length).to eq(0)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
it "multi byte characters in a comment are counted as individual bytes" do
|
|
35
|
+
parser = Puppet::Pops::Parser::Parser.new()
|
|
36
|
+
model = parser.parse_string("# \u{0400}comment\n").current
|
|
37
|
+
expect(model.class).to eq(Puppet::Pops::Model::Program)
|
|
38
|
+
expect(model.body.class).to eq(Puppet::Pops::Model::Nop)
|
|
39
|
+
adapter = Puppet::Pops::Adapters::SourcePosAdapter.adapt(model.body)
|
|
40
|
+
expect(adapter.offset).to eq(12)
|
|
41
|
+
expect(adapter.length).to eq(0)
|
|
42
|
+
end
|
|
43
|
+
|
|
34
44
|
it "should raise an error with position information when error is raised from within parser" do
|
|
35
45
|
parser = Puppet::Pops::Parser::Parser.new()
|
|
36
46
|
the_error = nil
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'puppet/pops'
|
|
3
|
+
|
|
4
|
+
describe Puppet::Pops::Adapters::SourcePosAdapter do
|
|
5
|
+
|
|
6
|
+
it "multi byte characters in a comment does not interfere with AST node text extraction" do
|
|
7
|
+
parser = Puppet::Pops::Parser::Parser.new()
|
|
8
|
+
model = parser.parse_string("# \u{0400}comment\nabcdef#XXXXXXXXXX").current
|
|
9
|
+
expect(model.class).to eq(Puppet::Pops::Model::Program)
|
|
10
|
+
adapter = Puppet::Pops::Adapters::SourcePosAdapter.adapt(model.body)
|
|
11
|
+
expect(adapter.offset).to eq(12)
|
|
12
|
+
expect(adapter.length).to eq(6)
|
|
13
|
+
expect(adapter.extract_text).to eq('abcdef')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "multi byte characters in a comment does not interfere with AST node text extraction" do
|
|
17
|
+
parser = Puppet::Pops::Parser::Parser.new()
|
|
18
|
+
model = parser.parse_string("# \u{0400}comment\n1 + 2#XXXXXXXXXX").current
|
|
19
|
+
expect(model.class).to eq(Puppet::Pops::Model::Program)
|
|
20
|
+
adapter = Puppet::Pops::Adapters::SourcePosAdapter.adapt(model.body)
|
|
21
|
+
expect(adapter.offset).to eq(14) # The '+'
|
|
22
|
+
expect(adapter.length).to eq(1)
|
|
23
|
+
expect(adapter.extract_tree_text).to eq('1 + 2')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|