puppet 3.6.2-x86-mingw32 → 3.7.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +2 -3
- data/Gemfile +14 -10
- data/README.md +1 -1
- data/ext/build_defaults.yaml +16 -1
- data/ext/debian/control +3 -2
- data/ext/debian/puppet-common.dirs +1 -0
- data/ext/debian/puppet-common.postinst +8 -8
- data/ext/debian/puppet-common.postrm +2 -1
- data/ext/project_data.yaml +16 -12
- data/ext/rack/example-passenger-vhost.conf +2 -2
- data/ext/redhat/puppet.spec.erb +6 -3
- data/ext/windows/service/daemon.rb +47 -41
- data/install.rb +1 -1
- data/lib/puppet.rb +34 -24
- data/lib/puppet/application.rb +34 -1
- data/lib/puppet/application/agent.rb +9 -8
- data/lib/puppet/application/apply.rb +14 -5
- data/lib/puppet/application/doc.rb +4 -11
- data/lib/puppet/application/master.rb +19 -17
- data/lib/puppet/application/queue.rb +1 -1
- data/lib/puppet/application/resource.rb +0 -1
- data/lib/puppet/configurer.rb +39 -2
- data/lib/puppet/configurer/downloader.rb +5 -10
- data/lib/puppet/configurer/downloader_factory.rb +34 -0
- data/lib/puppet/configurer/plugin_handler.rb +11 -17
- data/lib/puppet/defaults.rb +244 -119
- data/lib/puppet/environments.rb +8 -0
- data/lib/puppet/external/nagios/base.rb +1 -1
- data/lib/puppet/external/pson/pure/generator.rb +1 -8
- data/lib/puppet/face/ca.rb +7 -0
- data/lib/puppet/face/file/download.rb +5 -2
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/instrumentation_data.rb +2 -1
- data/lib/puppet/face/instrumentation_listener.rb +2 -1
- data/lib/puppet/face/instrumentation_probe.rb +2 -1
- data/lib/puppet/face/module/build.rb +2 -2
- data/lib/puppet/face/module/generate.rb +20 -12
- data/lib/puppet/face/module/install.rb +4 -3
- data/lib/puppet/face/module/uninstall.rb +7 -0
- data/lib/puppet/face/module/upgrade.rb +11 -3
- data/lib/puppet/face/node/clean.rb +1 -1
- data/lib/puppet/face/parser.rb +99 -7
- data/lib/puppet/feature/base.rb +18 -12
- data/lib/puppet/feature/cfacter.rb +14 -0
- data/lib/puppet/feature/pe_license.rb +4 -0
- data/lib/puppet/file_bucket/dipper.rb +19 -12
- data/lib/puppet/file_bucket/file.rb +73 -10
- data/lib/puppet/file_serving/configuration/parser.rb +3 -3
- data/lib/puppet/file_system.rb +1 -1
- data/lib/puppet/file_system/file19.rb +41 -0
- data/lib/puppet/file_system/file19windows.rb +0 -1
- data/lib/puppet/file_system/uniquefile.rb +190 -0
- data/lib/puppet/forge.rb +34 -7
- data/lib/puppet/forge/errors.rb +5 -6
- data/lib/puppet/forge/repository.rb +14 -2
- data/lib/puppet/functions.rb +19 -12
- data/lib/puppet/functions/assert_type.rb +27 -10
- data/lib/puppet/functions/each.rb +111 -0
- data/lib/puppet/functions/epp.rb +54 -0
- data/lib/puppet/functions/filter.rb +113 -0
- data/lib/puppet/functions/inline_epp.rb +88 -0
- data/lib/puppet/functions/map.rb +97 -0
- data/lib/puppet/functions/match.rb +102 -0
- data/lib/puppet/functions/reduce.rb +94 -0
- data/lib/puppet/functions/slice.rb +126 -0
- data/lib/puppet/functions/with.rb +23 -0
- data/lib/puppet/indirector/catalog/compiler.rb +4 -4
- data/lib/puppet/indirector/data_binding/hiera.rb +2 -45
- data/lib/puppet/indirector/facts/couch.rb +3 -1
- data/lib/puppet/indirector/facts/facter.rb +52 -65
- data/lib/puppet/indirector/file_bucket_file/file.rb +6 -3
- data/lib/puppet/indirector/hiera.rb +48 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/request.rb +9 -3
- data/lib/puppet/indirector/resource/ral.rb +1 -1
- data/lib/puppet/indirector/rest.rb +7 -3
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/module.rb +2 -1
- data/lib/puppet/module_tool.rb +2 -0
- data/lib/puppet/module_tool/applications/application.rb +4 -5
- data/lib/puppet/module_tool/applications/builder.rb +64 -5
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -2
- data/lib/puppet/module_tool/applications/unpacker.rb +14 -0
- data/lib/puppet/module_tool/applications/upgrader.rb +23 -13
- data/lib/puppet/module_tool/dependency.rb +12 -0
- data/lib/puppet/module_tool/errors/shared.rb +1 -1
- data/lib/puppet/module_tool/errors/upgrader.rb +20 -0
- data/lib/puppet/module_tool/installed_modules.rb +6 -1
- data/lib/puppet/module_tool/metadata.rb +53 -3
- data/lib/puppet/module_tool/modulefile.rb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +7 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -17
- data/lib/puppet/module_tool/tar/mini.rb +20 -2
- data/lib/puppet/network/http.rb +5 -0
- data/lib/puppet/network/http/api/v1.rb +2 -2
- data/lib/puppet/network/http/api/v2/environments.rb +15 -1
- data/lib/puppet/network/http/connection.rb +54 -68
- data/lib/puppet/network/http/factory.rb +44 -0
- data/lib/puppet/network/http/handler.rb +12 -6
- data/lib/puppet/network/http/nocache_pool.rb +21 -0
- data/lib/puppet/network/http/pool.rb +120 -0
- data/lib/puppet/network/http/rack/rest.rb +3 -1
- data/lib/puppet/network/http/session.rb +17 -0
- data/lib/puppet/network/http/site.rb +39 -0
- data/lib/puppet/network/http/webrick/rest.rb +3 -1
- data/lib/puppet/network/http_pool.rb +3 -4
- data/lib/puppet/node.rb +19 -6
- data/lib/puppet/node/environment.rb +34 -8
- data/lib/puppet/parser/ast/collection.rb +4 -0
- data/lib/puppet/parser/ast/collexpr.rb +1 -1
- data/lib/puppet/parser/ast/node.rb +5 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +49 -6
- data/lib/puppet/parser/compiler.rb +66 -38
- data/lib/puppet/parser/e4_parser_adapter.rb +2 -2
- data/lib/puppet/parser/files.rb +76 -33
- data/lib/puppet/parser/functions.rb +1 -7
- data/lib/puppet/parser/functions/assert_type.rb +31 -0
- data/lib/puppet/parser/functions/contain.rb +15 -5
- data/lib/puppet/parser/functions/create_resources.rb +5 -1
- data/lib/puppet/parser/functions/digest.rb +5 -0
- data/lib/puppet/parser/functions/each.rb +46 -107
- data/lib/puppet/parser/functions/epp.rb +13 -9
- data/lib/puppet/parser/functions/file.rb +20 -12
- data/lib/puppet/parser/functions/filter.rb +32 -88
- data/lib/puppet/parser/functions/include.rb +12 -24
- data/lib/puppet/parser/functions/inline_epp.rb +9 -12
- data/lib/puppet/parser/functions/lookup.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +30 -83
- data/lib/puppet/parser/functions/match.rb +28 -0
- data/lib/puppet/parser/functions/reduce.rb +69 -98
- data/lib/puppet/parser/functions/require.rb +13 -5
- data/lib/puppet/parser/functions/search.rb +6 -1
- data/lib/puppet/parser/functions/slice.rb +35 -103
- data/lib/puppet/parser/functions/template.rb +12 -5
- data/lib/puppet/parser/functions/with.rb +21 -0
- data/lib/puppet/parser/lexer.rb +1 -1
- data/lib/puppet/parser/parser_factory.rb +21 -33
- data/lib/puppet/parser/resource.rb +2 -3
- data/lib/puppet/parser/scope.rb +85 -15
- data/lib/puppet/pops.rb +9 -11
- data/lib/puppet/pops/adapters.rb +2 -1
- data/lib/puppet/pops/binder/bindings_checker.rb +4 -4
- data/lib/puppet/pops/binder/bindings_factory.rb +6 -6
- data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
- data/lib/puppet/pops/binder/bindings_loader.rb +2 -2
- data/lib/puppet/pops/binder/bindings_model.rb +58 -191
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +1 -1
- data/lib/puppet/pops/binder/bindings_model_meta.rb +215 -0
- data/lib/puppet/pops/binder/injector.rb +9 -9
- data/lib/puppet/pops/binder/key_factory.rb +2 -2
- data/lib/puppet/pops/binder/lookup.rb +14 -6
- data/lib/puppet/pops/binder/producers.rb +9 -12
- data/lib/puppet/pops/evaluator/access_operator.rb +35 -29
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +175 -0
- data/lib/puppet/pops/evaluator/callable_signature.rb +1 -2
- data/lib/puppet/pops/evaluator/closure.rb +151 -35
- data/lib/puppet/pops/evaluator/compare_operator.rb +26 -22
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -15
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +277 -229
- data/lib/puppet/pops/evaluator/relationship_operator.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +86 -53
- data/lib/puppet/pops/functions/dispatch.rb +9 -4
- data/lib/puppet/pops/functions/dispatcher.rb +2 -169
- data/lib/puppet/pops/issue_reporter.rb +14 -6
- data/lib/puppet/pops/issues.rb +96 -21
- data/lib/puppet/pops/loader/base_loader.rb +3 -3
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +2 -21
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
- data/lib/puppet/pops/loader/static_loader.rb +12 -2
- data/lib/puppet/pops/model/ast_transformer.rb +4 -24
- data/lib/puppet/pops/model/factory.rb +72 -10
- data/lib/puppet/pops/model/model.rb +82 -574
- data/lib/puppet/pops/model/model_label_provider.rb +4 -2
- data/lib/puppet/pops/model/model_meta.rb +576 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +27 -5
- data/lib/puppet/pops/parser/egrammar.ra +209 -221
- data/lib/puppet/pops/parser/eparser.rb +1459 -1431
- data/lib/puppet/pops/parser/evaluating_parser.rb +15 -75
- data/lib/puppet/pops/parser/lexer2.rb +14 -10
- data/lib/puppet/pops/parser/lexer_support.rb +6 -0
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/parser_support.rb +31 -49
- data/lib/puppet/pops/patterns.rb +10 -10
- data/lib/puppet/pops/semantic_error.rb +1 -1
- data/lib/puppet/pops/types/class_loader.rb +24 -13
- data/lib/puppet/pops/types/type_calculator.rb +188 -87
- data/lib/puppet/pops/types/type_factory.rb +79 -53
- data/lib/puppet/pops/types/type_parser.rb +22 -16
- data/lib/puppet/pops/types/types.rb +283 -392
- data/lib/puppet/pops/types/types_meta.rb +223 -0
- data/lib/puppet/pops/utils.rb +16 -14
- data/lib/puppet/pops/validation/checker4_0.rb +264 -18
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
- data/lib/puppet/pops/visitor.rb +0 -103
- data/lib/puppet/provider/exec.rb +10 -1
- data/lib/puppet/provider/file/windows.rb +3 -4
- data/lib/puppet/provider/group/windows_adsi.rb +10 -10
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -4
- data/lib/puppet/provider/package/apt.rb +5 -1
- data/lib/puppet/provider/package/gem.rb +7 -3
- data/lib/puppet/provider/package/openbsd.rb +84 -7
- data/lib/puppet/provider/package/pacman.rb +29 -4
- data/lib/puppet/provider/package/rpm.rb +5 -7
- data/lib/puppet/provider/package/sun.rb +5 -1
- data/lib/puppet/provider/package/windows.rb +6 -1
- data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
- data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +13 -1
- data/lib/puppet/provider/package/yum.rb +7 -3
- data/lib/puppet/provider/package/zypper.rb +5 -1
- data/lib/puppet/provider/parsedfile.rb +17 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +6 -12
- data/lib/puppet/provider/service/freebsd.rb +12 -12
- data/lib/puppet/provider/service/init.rb +5 -0
- data/lib/puppet/provider/service/launchd.rb +0 -3
- data/lib/puppet/provider/service/openbsd.rb +8 -7
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
- data/lib/puppet/provider/sshkey/parsed.rb +5 -0
- data/lib/puppet/provider/user/user_role_add.rb +5 -4
- data/lib/puppet/provider/user/windows_adsi.rb +8 -8
- data/lib/puppet/provider/zone/solaris.rb +1 -1
- data/lib/puppet/reference/metaparameter.rb +8 -6
- data/lib/puppet/reports/store.rb +4 -9
- data/lib/puppet/resource.rb +75 -11
- data/lib/puppet/resource/catalog.rb +9 -7
- data/lib/puppet/resource/type.rb +27 -0
- data/lib/puppet/settings.rb +61 -41
- data/lib/puppet/settings/base_setting.rb +9 -3
- data/lib/puppet/settings/environment_conf.rb +32 -4
- data/lib/puppet/settings/file_setting.rb +9 -1
- data/lib/puppet/settings/priority_setting.rb +5 -5
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate_authority.rb +15 -6
- data/lib/puppet/ssl/certificate_authority/autosign_command.rb +2 -1
- data/lib/puppet/ssl/host.rb +3 -2
- data/lib/puppet/ssl/inventory.rb +11 -6
- data/lib/puppet/ssl/validator/default_validator.rb +1 -0
- data/lib/puppet/ssl/validator/no_validator.rb +3 -0
- data/lib/puppet/transaction.rb +29 -0
- data/lib/puppet/transaction/resource_harness.rb +16 -3
- data/lib/puppet/type.rb +71 -49
- data/lib/puppet/type/exec.rb +36 -8
- data/lib/puppet/type/file.rb +56 -16
- data/lib/puppet/type/file/content.rb +3 -3
- data/lib/puppet/type/file/mode.rb +12 -3
- data/lib/puppet/type/file/source.rb +4 -1
- data/lib/puppet/type/group.rb +1 -1
- data/lib/puppet/type/mount.rb +1 -3
- data/lib/puppet/type/resources.rb +59 -35
- data/lib/puppet/type/ssh_authorized_key.rb +54 -16
- data/lib/puppet/type/sshkey.rb +1 -1
- data/lib/puppet/type/user.rb +17 -11
- data/lib/puppet/type/yumrepo.rb +59 -8
- data/lib/puppet/type/zone.rb +3 -6
- data/lib/puppet/util.rb +64 -55
- data/lib/puppet/util/autoload.rb +2 -2
- data/lib/puppet/util/colors.rb +61 -19
- data/lib/puppet/util/command_line.rb +21 -4
- data/lib/puppet/util/execution.rb +41 -29
- data/lib/puppet/util/feature.rb +15 -4
- data/lib/puppet/util/filetype.rb +6 -2
- data/lib/puppet/util/http_proxy.rb +29 -2
- data/lib/puppet/util/lockfile.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +7 -3
- data/lib/puppet/util/logging.rb +44 -14
- data/lib/puppet/util/pidlock.rb +11 -5
- data/lib/puppet/util/posix.rb +21 -31
- data/lib/puppet/util/profiler.rb +17 -9
- data/lib/puppet/util/profiler/aggregate.rb +85 -0
- data/lib/puppet/util/profiler/around_profiler.rb +67 -0
- data/lib/puppet/util/profiler/logging.rb +12 -11
- data/lib/puppet/util/profiler/wall_clock.rb +7 -6
- data/lib/puppet/util/rdoc.rb +8 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
- data/lib/puppet/util/suidmanager.rb +1 -8
- data/lib/puppet/util/windows.rb +14 -3
- data/lib/puppet/util/windows/access_control_list.rb +4 -4
- data/lib/puppet/util/{adsi.rb → windows/adsi.rb} +99 -37
- data/lib/puppet/util/windows/api_types.rb +255 -0
- data/lib/puppet/util/windows/com.rb +224 -0
- data/lib/puppet/util/windows/error.rb +72 -5
- data/lib/puppet/util/windows/file.rb +254 -132
- data/lib/puppet/util/windows/process.rb +293 -177
- data/lib/puppet/util/windows/registry.rb +12 -2
- data/lib/puppet/util/windows/root_certs.rb +16 -9
- data/lib/puppet/util/windows/security.rb +501 -232
- data/lib/puppet/util/windows/sid.rb +80 -36
- data/lib/puppet/util/windows/string.rb +2 -0
- data/lib/puppet/util/windows/taskscheduler.rb +1241 -0
- data/lib/puppet/util/windows/user.rb +241 -57
- data/lib/puppet/vendor.rb +3 -1
- data/lib/puppet/vendor/load_pathspec.rb +1 -0
- data/lib/puppet/vendor/load_rgen.rb +1 -0
- data/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
- data/lib/puppet/vendor/pathspec/LICENSE +201 -0
- data/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/pathspec/README.md +53 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +121 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
- data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
- data/lib/puppet/vendor/require_vendored.rb +2 -0
- data/lib/puppet/vendor/rgen/CHANGELOG +197 -0
- data/lib/puppet/vendor/rgen/MIT-LICENSE +20 -0
- data/lib/puppet/vendor/rgen/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/rgen/README.rdoc +78 -0
- data/lib/puppet/vendor/rgen/Rakefile +41 -0
- data/lib/puppet/vendor/rgen/TODO +41 -0
- data/lib/puppet/vendor/rgen/anounce.txt +61 -0
- data/lib/puppet/vendor/rgen/design_rationale.txt +71 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +54 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +32 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +562 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +45 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +43 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +103 -0
- data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +89 -0
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +559 -0
- data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +26 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +20 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +91 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +28 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +37 -0
- data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +172 -0
- data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +45 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +218 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +81 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +69 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +167 -0
- data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +91 -0
- data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +129 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +63 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +140 -0
- data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +289 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +66 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +66 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +169 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +126 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +331 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +94 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +137 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +97 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +128 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +168 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +224 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +556 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +174 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +89 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +77 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +168 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
- data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +42 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +32 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +334 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +225 -0
- data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +156 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +121 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +18 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +47 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +116 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +71 -0
- data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +98 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +297 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +83 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +87 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +234 -0
- data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +26 -0
- data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +475 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +61 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +67 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +124 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +84 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +114 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +68 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +142 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +29 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +42 -0
- data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +329 -0
- data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +79 -0
- data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +127 -0
- data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +64 -0
- data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +35 -0
- data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +23 -0
- data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +54 -0
- data/lib/puppet/vendor/rgen/test/environment_test.rb +90 -0
- data/lib/puppet/vendor/rgen/test/json_test.rb +171 -0
- data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +1482 -0
- data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +57 -0
- data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +131 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +98 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +70 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +42 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +44 -0
- data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +9 -0
- data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +178 -0
- data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +59 -0
- data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +242 -0
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +163 -0
- data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +163 -0
- data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +156 -0
- data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +94 -0
- data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +42 -0
- data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +23 -0
- data/lib/puppet/vendor/rgen/test/model_builder_test.rb +6 -0
- data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +30 -0
- data/lib/puppet/vendor/rgen/test/output_handler_test.rb +58 -0
- data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +48 -0
- data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +102 -0
- data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +117 -0
- data/lib/puppet/vendor/rgen/test/rgen_test.rb +26 -0
- data/lib/puppet/vendor/rgen/test/template_language_test.rb +163 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +29 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +9 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +4 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +12 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +11 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +7 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +8 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +8 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +7 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +12 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +1 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +5 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +24 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +13 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +10 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +17 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +31 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +9 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +3 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +4 -0
- data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +29 -0
- data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +119 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +1029 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +317 -0
- data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +101 -0
- data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +22 -0
- data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +67 -0
- data/lib/puppet/vendor/rgen/test/transformer_test.rb +254 -0
- data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +99 -0
- data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +97 -0
- data/lib/puppet/vendor/rgen/test/util_test.rb +5 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +160 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
- data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
- data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +6 -0
- data/lib/puppet/vendor/semantic/PUPPET_README.md +6 -0
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
- data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
- data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
- data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
- data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +1 -1
- data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
- data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
- data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
- data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
- data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/casestatement.pp +14 -14
- data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/classincludes.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/classpathtest.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/collection_override.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/componentrequire.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +5 -5
- data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/filecreate.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/ifexpression.pp +1 -1
- data/spec/fixtures/unit/parser/lexer/implicititeration.pp +4 -4
- data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +3 -3
- data/spec/fixtures/unit/parser/lexer/multisubs.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/namevartest.pp +2 -2
- data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +14 -14
- data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +5 -5
- data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +1 -1
- data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +4 -4
- data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +3 -3
- data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +2 -2
- data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +1 -1
- data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
- data/spec/fixtures/unit/type/user/authorized_keys +1 -1
- data/spec/integration/agent/logging_spec.rb +4 -0
- data/spec/integration/application/doc_spec.rb +4 -3
- data/spec/integration/configurer_spec.rb +0 -14
- data/spec/integration/defaults_spec.rb +26 -0
- data/spec/integration/environments/default_manifest_spec.rb +274 -0
- data/spec/integration/faces/documentation_spec.rb +0 -4
- data/spec/integration/file_bucket/file_spec.rb +21 -0
- data/spec/integration/indirector/catalog/compiler_spec.rb +0 -2
- data/spec/integration/indirector/catalog/queue_spec.rb +0 -2
- data/spec/integration/indirector/facts/facter_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
- data/spec/integration/node/environment_spec.rb +24 -8
- data/spec/integration/parser/catalog_spec.rb +10 -10
- data/spec/integration/parser/class_spec.rb +37 -0
- data/spec/integration/parser/collector_spec.rb +234 -75
- data/spec/integration/parser/compiler_spec.rb +385 -401
- data/spec/integration/parser/conditionals_spec.rb +117 -0
- data/spec/integration/parser/future_compiler_spec.rb +359 -8
- data/spec/integration/parser/node_spec.rb +185 -0
- data/spec/integration/parser/resource_expressions_spec.rb +286 -0
- data/spec/integration/parser/ruby_manifest_spec.rb +0 -4
- data/spec/integration/parser/scope_spec.rb +94 -151
- data/spec/integration/provider/cron/crontab_spec.rb +137 -148
- data/spec/integration/ssl/certificate_authority_spec.rb +26 -0
- data/spec/integration/ssl/certificate_request_spec.rb +0 -6
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -2
- data/spec/integration/ssl/host_spec.rb +0 -2
- data/spec/integration/transaction_spec.rb +16 -0
- data/spec/integration/type/file_spec.rb +14 -13
- data/spec/integration/type/nagios_spec.rb +6 -15
- data/spec/integration/type/sshkey_spec.rb +22 -0
- data/spec/integration/type/tidy_spec.rb +3 -0
- data/spec/integration/type/user_spec.rb +8 -3
- data/spec/integration/util/autoload_spec.rb +6 -6
- data/spec/integration/util/rdoc/parser_spec.rb +7 -0
- data/spec/integration/util/windows/process_spec.rb +12 -0
- data/spec/integration/util/windows/security_spec.rb +36 -35
- data/spec/integration/util/windows/user_spec.rb +75 -9
- data/spec/integration/util_spec.rb +2 -2
- data/spec/lib/matchers/resource.rb +1 -0
- data/spec/lib/puppet_spec/compiler.rb +15 -2
- data/spec/lib/puppet_spec/files.rb +10 -0
- data/spec/lib/puppet_spec/language.rb +74 -0
- data/spec/lib/puppet_spec/matchers.rb +59 -32
- data/spec/lib/puppet_spec/module_tool/stub_source.rb +3 -0
- data/spec/shared_behaviours/hiera_indirections.rb +99 -0
- data/spec/shared_behaviours/iterative_functions.rb +69 -0
- data/spec/unit/application/apply_spec.rb +4 -2
- data/spec/unit/application/doc_spec.rb +17 -13
- data/spec/unit/application/master_spec.rb +35 -27
- data/spec/unit/application/resource_spec.rb +0 -5
- data/spec/unit/configurer/downloader_factory_spec.rb +96 -0
- data/spec/unit/configurer/downloader_spec.rb +3 -24
- data/spec/unit/configurer/plugin_handler_spec.rb +22 -22
- data/spec/unit/configurer_spec.rb +0 -4
- data/spec/unit/defaults_spec.rb +30 -0
- data/spec/unit/face/config_spec.rb +2 -1
- data/spec/unit/face/module/build_spec.rb +2 -2
- data/spec/unit/face/module/install_spec.rb +8 -8
- data/spec/unit/face/parser_spec.rb +71 -33
- data/spec/unit/file_bucket/file_spec.rb +2 -2
- data/spec/unit/file_system/uniquefile_spec.rb +184 -0
- data/spec/unit/forge/errors_spec.rb +4 -6
- data/spec/unit/forge/module_release_spec.rb +178 -89
- data/spec/unit/forge/repository_spec.rb +110 -2
- data/spec/unit/forge_spec.rb +39 -3
- data/spec/unit/functions/assert_type_spec.rb +22 -3
- data/spec/unit/{parser/methods → functions}/each_spec.rb +21 -1
- data/spec/unit/{parser/functions → functions}/epp_spec.rb +61 -9
- data/spec/unit/{parser/methods → functions}/filter_spec.rb +34 -38
- data/spec/unit/{parser/functions → functions}/inline_epp_spec.rb +18 -3
- data/spec/unit/functions/map_spec.rb +169 -0
- data/spec/unit/functions/match_spec.rb +57 -0
- data/spec/unit/{parser/methods → functions}/reduce_spec.rb +23 -5
- data/spec/unit/{parser/methods → functions}/slice_spec.rb +34 -21
- data/spec/unit/functions/with_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +7 -8
- data/spec/unit/indirector/catalog/compiler_spec.rb +0 -2
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +11 -0
- data/spec/unit/indirector/data_binding/hiera_spec.rb +1 -96
- data/spec/unit/indirector/facts/facter_spec.rb +69 -102
- data/spec/unit/indirector/hiera_spec.rb +17 -0
- data/spec/unit/indirector/request_spec.rb +2 -4
- data/spec/unit/indirector/resource/ral_spec.rb +5 -0
- data/spec/unit/indirector/resource_type/parser_spec.rb +17 -12
- data/spec/unit/indirector/rest_spec.rb +36 -6
- data/spec/unit/interface/face_collection_spec.rb +2 -2
- data/spec/unit/module_tool/applications/builder_spec.rb +364 -14
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +22 -0
- data/spec/unit/module_tool/applications/unpacker_spec.rb +40 -0
- data/spec/unit/module_tool/applications/upgrader_spec.rb +22 -0
- data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
- data/spec/unit/module_tool/metadata_spec.rb +72 -4
- data/spec/unit/module_tool/tar/mini_spec.rb +2 -1
- data/spec/unit/network/authentication_spec.rb +4 -0
- data/spec/unit/network/http/api/v2/environments_spec.rb +24 -3
- data/spec/unit/network/http/connection_spec.rb +127 -92
- data/spec/unit/network/http/factory_spec.rb +82 -0
- data/spec/unit/network/http/handler_spec.rb +23 -13
- data/spec/unit/network/http/nocache_pool_spec.rb +43 -0
- data/spec/unit/network/http/pool_spec.rb +269 -0
- data/spec/unit/network/http/rack/rest_spec.rb +1 -1
- data/spec/unit/network/http/session_spec.rb +43 -0
- data/spec/unit/network/http/site_spec.rb +90 -0
- data/spec/unit/network/http/webrick_spec.rb +1 -1
- data/spec/unit/network/http_pool_spec.rb +9 -6
- data/spec/unit/network/http_spec.rb +10 -0
- data/spec/unit/node/environment_spec.rb +54 -0
- data/spec/unit/node_spec.rb +3 -5
- data/spec/unit/parser/compiler_spec.rb +9 -2
- data/spec/unit/parser/files_spec.rb +19 -0
- data/spec/unit/parser/functions/contain_spec.rb +51 -0
- data/spec/unit/parser/functions/create_resources_spec.rb +8 -1
- data/spec/unit/parser/functions/digest_spec.rb +31 -0
- data/spec/unit/parser/functions/file_spec.rb +48 -5
- data/spec/unit/parser/functions/include_spec.rb +15 -1
- data/spec/unit/parser/functions/realize_spec.rb +43 -35
- data/spec/unit/parser/functions/require_spec.rb +19 -5
- data/spec/unit/parser/functions/search_spec.rb +5 -0
- data/spec/unit/parser/functions/shared.rb +82 -0
- data/spec/unit/parser/functions_spec.rb +1 -1
- data/spec/unit/parser/lexer_spec.rb +10 -1
- data/spec/unit/parser/type_loader_spec.rb +0 -1
- data/spec/unit/pops/benchmark_spec.rb +1 -1
- data/spec/unit/pops/binder/bindings_composer_spec.rb +24 -22
- data/spec/unit/pops/binder/injector_spec.rb +8 -6
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +7 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +250 -30
- data/spec/unit/pops/evaluator/logical_ops_spec.rb +2 -2
- data/spec/unit/pops/evaluator/variables_spec.rb +0 -105
- data/spec/unit/pops/issues_spec.rb +170 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +17 -0
- data/spec/unit/pops/loaders/loader_paths_spec.rb +4 -15
- data/spec/unit/pops/loaders/loaders_spec.rb +31 -11
- data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -29
- data/spec/unit/pops/loaders/static_loader_spec.rb +6 -0
- data/spec/unit/pops/parser/epp_parser_spec.rb +38 -9
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +0 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +21 -4
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +5 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +6 -3
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -5
- data/spec/unit/pops/parser/parse_containers_spec.rb +62 -7
- data/spec/unit/pops/parser/parse_resource_spec.rb +155 -73
- data/spec/unit/pops/parser/parser_spec.rb +16 -0
- data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +72 -0
- data/spec/unit/pops/transformer/transform_calls_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +254 -57
- data/spec/unit/pops/types/type_factory_spec.rb +8 -3
- data/spec/unit/pops/types/type_parser_spec.rb +26 -5
- data/spec/unit/pops/validator/validator_spec.rb +143 -27
- data/spec/unit/provider/exec/posix_spec.rb +22 -14
- data/spec/unit/provider/exec/shell_spec.rb +2 -2
- data/spec/unit/provider/file/windows_spec.rb +7 -7
- data/spec/unit/provider/group/windows_adsi_spec.rb +17 -17
- data/spec/unit/provider/package/gem_spec.rb +10 -0
- data/spec/unit/provider/package/openbsd_spec.rb +66 -9
- data/spec/unit/provider/package/pacman_spec.rb +90 -71
- data/spec/unit/provider/package/windows/package_spec.rb +21 -6
- data/spec/unit/provider/package/yum_spec.rb +1 -0
- data/spec/unit/provider/parsedfile_spec.rb +1 -1
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +9 -9
- data/spec/unit/provider/service/openbsd_spec.rb +26 -2
- data/spec/unit/provider/service/upstart_spec.rb +12 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +6 -0
- data/spec/unit/provider/user/user_role_add_spec.rb +23 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +17 -17
- data/spec/unit/reports/store_spec.rb +0 -16
- data/spec/unit/resource/catalog_spec.rb +0 -5
- data/spec/unit/resource_spec.rb +2 -2
- data/spec/unit/settings/autosign_setting_spec.rb +2 -2
- data/spec/unit/settings/environment_conf_spec.rb +77 -10
- data/spec/unit/settings/file_setting_spec.rb +5 -4
- data/spec/unit/settings/priority_setting_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +41 -3
- data/spec/unit/ssl/certificate_authority_spec.rb +25 -2
- data/spec/unit/ssl/inventory_spec.rb +13 -0
- data/spec/unit/ssl/validator_spec.rb +0 -1
- data/spec/unit/transaction/resource_harness_spec.rb +64 -0
- data/spec/unit/transaction_spec.rb +98 -47
- data/spec/unit/type/cron_spec.rb +3 -3
- data/spec/unit/type/exec_spec.rb +9 -0
- data/spec/unit/type/file/content_spec.rb +54 -71
- data/spec/unit/type/file/mode_spec.rb +26 -1
- data/spec/unit/type/file/source_spec.rb +26 -4
- data/spec/unit/type/file_spec.rb +3 -3
- data/spec/unit/type/nagios_spec.rb +12 -3
- data/spec/unit/type/resources_spec.rb +64 -30
- data/spec/unit/type/user_spec.rb +1 -1
- data/spec/unit/type/yumrepo_spec.rb +136 -0
- data/spec/unit/type/zone_spec.rb +44 -1
- data/spec/unit/type_spec.rb +20 -0
- data/spec/unit/util/colors_spec.rb +14 -8
- data/spec/unit/util/command_line_spec.rb +11 -7
- data/spec/unit/util/execution_spec.rb +35 -42
- data/spec/unit/util/feature_spec.rb +12 -0
- data/spec/unit/util/http_proxy_spec.rb +43 -1
- data/spec/unit/util/log/destinations_spec.rb +45 -1
- data/spec/unit/util/logging_spec.rb +38 -0
- data/spec/unit/util/pidlock_spec.rb +37 -1
- data/spec/unit/util/profiler/aggregate_spec.rb +59 -0
- data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
- data/spec/unit/util/profiler/logging_spec.rb +18 -29
- data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
- data/spec/unit/util/profiler_spec.rb +55 -0
- data/spec/unit/util/queue_spec.rb +0 -1
- data/spec/unit/util/rdoc/parser_spec.rb +14 -6
- data/spec/unit/util/tagging_spec.rb +1 -1
- data/spec/unit/util/windows/access_control_entry_spec.rb +1 -1
- data/spec/unit/util/{adsi_spec.rb → windows/adsi_spec.rb} +111 -108
- data/spec/unit/util/windows/api_types_spec.rb +28 -0
- data/spec/unit/util/windows/registry_spec.rb +7 -6
- data/spec/unit/util/windows/sid_spec.rb +3 -6
- data/spec/unit/util/windows/string_spec.rb +4 -0
- data/spec/unit/util/zaml_spec.rb +5 -1
- data/tasks/benchmark.rake +40 -5
- data/tasks/parser.rake +16 -2
- data/tasks/yard.rake +1 -1
- metadata +308 -150
- data/lib/puppet/file_system/tempfile.rb +0 -20
- data/lib/puppet/parser/e_parser_adapter.rb +0 -119
- data/lib/puppet/parser/functions/collect.rb +0 -15
- data/lib/puppet/parser/functions/select.rb +0 -15
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +0 -109
- data/lib/puppet/pops/parser/lexer.rb +0 -753
- data/lib/puppet/pops/parser/makefile +0 -6
- data/lib/puppet/pops/validation/checker3_1.rb +0 -558
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +0 -31
- data/lib/puppet/util/profiler/none.rb +0 -8
- data/spec/unit/face/certificate_request_spec.rb +0 -7
- data/spec/unit/face/certificate_revocation_list_spec.rb +0 -7
- data/spec/unit/face/key_spec.rb +0 -7
- data/spec/unit/face/report_spec.rb +0 -7
- data/spec/unit/face/resource_spec.rb +0 -7
- data/spec/unit/face/resource_type_spec.rb +0 -7
- data/spec/unit/file_system/tempfile_spec.rb +0 -48
- data/spec/unit/parser/eparser_adapter_spec.rb +0 -407
- data/spec/unit/parser/methods/map_spec.rb +0 -184
- data/spec/unit/parser/methods/shared.rb +0 -45
- data/spec/unit/pops/parser/lexer_spec.rb +0 -840
- data/spec/unit/pops/transformer/transform_resource_spec.rb +0 -185
- data/spec/unit/util/profiler/none_spec.rb +0 -12
@@ -1,184 +0,0 @@
|
|
1
|
-
require 'puppet'
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'puppet_spec/compiler'
|
4
|
-
|
5
|
-
require 'unit/parser/methods/shared'
|
6
|
-
|
7
|
-
describe 'the map method' do
|
8
|
-
include PuppetSpec::Compiler
|
9
|
-
|
10
|
-
before :each do
|
11
|
-
Puppet[:parser] = "future"
|
12
|
-
end
|
13
|
-
|
14
|
-
context "using future parser" do
|
15
|
-
it 'map on an array (multiplying each value by 2)' do
|
16
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
17
|
-
$a = [1,2,3]
|
18
|
-
$a.map |$x|{ $x*2}.each |$v|{
|
19
|
-
file { "/file_$v": ensure => present }
|
20
|
-
}
|
21
|
-
MANIFEST
|
22
|
-
|
23
|
-
catalog.resource(:file, "/file_2")['ensure'].should == 'present'
|
24
|
-
catalog.resource(:file, "/file_4")['ensure'].should == 'present'
|
25
|
-
catalog.resource(:file, "/file_6")['ensure'].should == 'present'
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'map on an enumerable type (multiplying each value by 2)' do
|
29
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
30
|
-
$a = Integer[1,3]
|
31
|
-
$a.map |$x|{ $x*2}.each |$v|{
|
32
|
-
file { "/file_$v": ensure => present }
|
33
|
-
}
|
34
|
-
MANIFEST
|
35
|
-
|
36
|
-
catalog.resource(:file, "/file_2")['ensure'].should == 'present'
|
37
|
-
catalog.resource(:file, "/file_4")['ensure'].should == 'present'
|
38
|
-
catalog.resource(:file, "/file_6")['ensure'].should == 'present'
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'map on an integer (multiply each by 3)' do
|
42
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
43
|
-
3.map |$x|{ $x*3}.each |$v|{
|
44
|
-
file { "/file_$v": ensure => present }
|
45
|
-
}
|
46
|
-
MANIFEST
|
47
|
-
|
48
|
-
catalog.resource(:file, "/file_0")['ensure'].should == 'present'
|
49
|
-
catalog.resource(:file, "/file_3")['ensure'].should == 'present'
|
50
|
-
catalog.resource(:file, "/file_6")['ensure'].should == 'present'
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'map on a string' do
|
54
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
55
|
-
$a = {a=>x, b=>y}
|
56
|
-
"ab".map |$x|{$a[$x]}.each |$v|{
|
57
|
-
file { "/file_$v": ensure => present }
|
58
|
-
}
|
59
|
-
MANIFEST
|
60
|
-
|
61
|
-
catalog.resource(:file, "/file_x")['ensure'].should == 'present'
|
62
|
-
catalog.resource(:file, "/file_y")['ensure'].should == 'present'
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'map on an array (multiplying value by 10 in even index position)' do
|
66
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
67
|
-
$a = [1,2,3]
|
68
|
-
$a.map |$i, $x|{ if $i % 2 == 0 {$x} else {$x*10}}.each |$v|{
|
69
|
-
file { "/file_$v": ensure => present }
|
70
|
-
}
|
71
|
-
MANIFEST
|
72
|
-
|
73
|
-
catalog.resource(:file, "/file_1")['ensure'].should == 'present'
|
74
|
-
catalog.resource(:file, "/file_20")['ensure'].should == 'present'
|
75
|
-
catalog.resource(:file, "/file_3")['ensure'].should == 'present'
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'map on a hash selecting keys' do
|
79
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
80
|
-
$a = {'a'=>1,'b'=>2,'c'=>3}
|
81
|
-
$a.map |$x|{ $x[0]}.each |$k|{
|
82
|
-
file { "/file_$k": ensure => present }
|
83
|
-
}
|
84
|
-
MANIFEST
|
85
|
-
|
86
|
-
catalog.resource(:file, "/file_a")['ensure'].should == 'present'
|
87
|
-
catalog.resource(:file, "/file_b")['ensure'].should == 'present'
|
88
|
-
catalog.resource(:file, "/file_c")['ensure'].should == 'present'
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'map on a hash selecting keys - using two block parameters' do
|
92
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
93
|
-
$a = {'a'=>1,'b'=>2,'c'=>3}
|
94
|
-
$a.map |$k,$v|{ file { "/file_$k": ensure => present }
|
95
|
-
}
|
96
|
-
MANIFEST
|
97
|
-
|
98
|
-
catalog.resource(:file, "/file_a")['ensure'].should == 'present'
|
99
|
-
catalog.resource(:file, "/file_b")['ensure'].should == 'present'
|
100
|
-
catalog.resource(:file, "/file_c")['ensure'].should == 'present'
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'each on a hash selecting value' do
|
104
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
105
|
-
$a = {'a'=>1,'b'=>2,'c'=>3}
|
106
|
-
$a.map |$x|{ $x[1]}.each |$k|{ file { "/file_$k": ensure => present } }
|
107
|
-
MANIFEST
|
108
|
-
|
109
|
-
catalog.resource(:file, "/file_1")['ensure'].should == 'present'
|
110
|
-
catalog.resource(:file, "/file_2")['ensure'].should == 'present'
|
111
|
-
catalog.resource(:file, "/file_3")['ensure'].should == 'present'
|
112
|
-
end
|
113
|
-
|
114
|
-
it 'each on a hash selecting value - using two bloc parameters' do
|
115
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
116
|
-
$a = {'a'=>1,'b'=>2,'c'=>3}
|
117
|
-
$a.map |$k,$v|{ file { "/file_$v": ensure => present } }
|
118
|
-
MANIFEST
|
119
|
-
|
120
|
-
catalog.resource(:file, "/file_1")['ensure'].should == 'present'
|
121
|
-
catalog.resource(:file, "/file_2")['ensure'].should == 'present'
|
122
|
-
catalog.resource(:file, "/file_3")['ensure'].should == 'present'
|
123
|
-
end
|
124
|
-
|
125
|
-
context "handles data type corner cases" do
|
126
|
-
it "map gets values that are false" do
|
127
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
128
|
-
$a = [false,false]
|
129
|
-
$a.map |$x| { $x }.each |$i, $v| {
|
130
|
-
file { "/file_$i.$v": ensure => present }
|
131
|
-
}
|
132
|
-
MANIFEST
|
133
|
-
|
134
|
-
catalog.resource(:file, "/file_0.false")['ensure'].should == 'present'
|
135
|
-
catalog.resource(:file, "/file_1.false")['ensure'].should == 'present'
|
136
|
-
end
|
137
|
-
|
138
|
-
it "map gets values that are nil" do
|
139
|
-
Puppet::Parser::Functions.newfunction(:nil_array, :type => :rvalue) do |args|
|
140
|
-
[nil]
|
141
|
-
end
|
142
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
143
|
-
$a = nil_array()
|
144
|
-
$a.map |$x| { $x }.each |$i, $v| {
|
145
|
-
file { "/file_$i.$v": ensure => present }
|
146
|
-
}
|
147
|
-
MANIFEST
|
148
|
-
|
149
|
-
catalog.resource(:file, "/file_0.")['ensure'].should == 'present'
|
150
|
-
end
|
151
|
-
|
152
|
-
it "map gets values that are undef" do
|
153
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
154
|
-
$a = [$does_not_exist]
|
155
|
-
$a.map |$x = "something"| { $x }.each |$i, $v| {
|
156
|
-
file { "/file_$i.$v": ensure => present }
|
157
|
-
}
|
158
|
-
MANIFEST
|
159
|
-
catalog.resource(:file, "/file_0.something")['ensure'].should == 'present'
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context 'map checks arguments and' do
|
164
|
-
it 'raises an error when block has more than 2 argument' do
|
165
|
-
expect do
|
166
|
-
compile_to_catalog(<<-MANIFEST)
|
167
|
-
[1].map |$index, $x, $yikes|{ }
|
168
|
-
MANIFEST
|
169
|
-
end.to raise_error(Puppet::Error, /block must define at most two parameters/)
|
170
|
-
end
|
171
|
-
|
172
|
-
it 'raises an error when block has fewer than 1 argument' do
|
173
|
-
expect do
|
174
|
-
compile_to_catalog(<<-MANIFEST)
|
175
|
-
[1].map || { }
|
176
|
-
MANIFEST
|
177
|
-
end.to raise_error(Puppet::Error, /block must define at least one parameter/)
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
it_should_behave_like 'all iterative functions argument checks', 'map'
|
182
|
-
it_should_behave_like 'all iterative functions hash handling', 'map'
|
183
|
-
end
|
184
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
|
2
|
-
shared_examples_for 'all iterative functions hash handling' do |func|
|
3
|
-
it 'passes a hash entry as an array of the key and value' do
|
4
|
-
catalog = compile_to_catalog(<<-MANIFEST)
|
5
|
-
{a=>1}.#{func} |$v| { notify { "${v[0]} ${v[1]}": } }
|
6
|
-
MANIFEST
|
7
|
-
|
8
|
-
catalog.resource(:notify, "a 1").should_not be_nil
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
shared_examples_for 'all iterative functions argument checks' do |func|
|
13
|
-
|
14
|
-
it 'raises an error when used against an unsupported type' do
|
15
|
-
expect do
|
16
|
-
compile_to_catalog(<<-MANIFEST)
|
17
|
-
3.14.#{func} |$v| { }
|
18
|
-
MANIFEST
|
19
|
-
end.to raise_error(Puppet::Error, /must be something enumerable/)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'raises an error when called with any parameters besides a block' do
|
23
|
-
expect do
|
24
|
-
compile_to_catalog(<<-MANIFEST)
|
25
|
-
[1].#{func}(1) |$v| { }
|
26
|
-
MANIFEST
|
27
|
-
end.to raise_error(Puppet::Error, /Wrong number of arguments/)
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'raises an error when called without a block' do
|
31
|
-
expect do
|
32
|
-
compile_to_catalog(<<-MANIFEST)
|
33
|
-
[1].#{func}()
|
34
|
-
MANIFEST
|
35
|
-
end.to raise_error(Puppet::Error, /Wrong number of arguments/)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'raises an error when called without a block' do
|
39
|
-
expect do
|
40
|
-
compile_to_catalog(<<-MANIFEST)
|
41
|
-
[1].#{func}(1)
|
42
|
-
MANIFEST
|
43
|
-
end.to raise_error(Puppet::Error, /must be a parameterized block/)
|
44
|
-
end
|
45
|
-
end
|
@@ -1,840 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
require 'puppet/pops'
|
5
|
-
|
6
|
-
# This is a special matcher to match easily lexer output
|
7
|
-
RSpec::Matchers.define :be_like do |*expected|
|
8
|
-
match do |actual|
|
9
|
-
diffable
|
10
|
-
expected.zip(actual).all? { |e,a| !e or a[0] == e or (e.is_a? Array and a[0] == e[0] and (a[1] == e[1] or (a[1].is_a?(Hash) and a[1][:value] == e[1]))) }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
__ = nil
|
14
|
-
|
15
|
-
module EgrammarLexerSpec
|
16
|
-
def self.tokens_scanned_from(s)
|
17
|
-
lexer = Puppet::Pops::Parser::Lexer.new
|
18
|
-
lexer.string = s
|
19
|
-
tokens = lexer.fullscan[0..-2]
|
20
|
-
tokens.map do |t|
|
21
|
-
key = t[0]
|
22
|
-
options = t[1]
|
23
|
-
if options[:locator]
|
24
|
-
# unresolved locations needs to be resolved for tests that check positioning
|
25
|
-
[key,
|
26
|
-
options[:locator].to_location_hash(
|
27
|
-
options[:offset],
|
28
|
-
options[:end_offset]).merge({:value => options[:value]}) ]
|
29
|
-
else
|
30
|
-
t
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe Puppet::Pops::Parser::Lexer do
|
37
|
-
include EgrammarLexerSpec
|
38
|
-
|
39
|
-
describe "when reading strings" do
|
40
|
-
before { @lexer = Puppet::Pops::Parser::Lexer.new }
|
41
|
-
|
42
|
-
it "should increment the line count for every carriage return in the string" do
|
43
|
-
@lexer.string = "'this\nis\natest'"
|
44
|
-
@lexer.fullscan[0..-2]
|
45
|
-
|
46
|
-
line = @lexer.line
|
47
|
-
line.should == 3
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should not increment the line count for escapes in the string" do
|
51
|
-
@lexer.string = "'this\\nis\\natest'"
|
52
|
-
@lexer.fullscan[0..-2]
|
53
|
-
|
54
|
-
@lexer.line.should == 1
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should not think the terminator is escaped, when preceeded by an even number of backslashes" do
|
58
|
-
@lexer.string = "'here\nis\nthe\nstring\\\\'with\nextra\njunk"
|
59
|
-
@lexer.fullscan[0..-2]
|
60
|
-
|
61
|
-
@lexer.line.should == 6
|
62
|
-
end
|
63
|
-
|
64
|
-
{
|
65
|
-
'r' => "\r",
|
66
|
-
'n' => "\n",
|
67
|
-
't' => "\t",
|
68
|
-
's' => " "
|
69
|
-
}.each do |esc, expected_result|
|
70
|
-
it "should recognize \\#{esc} sequence" do
|
71
|
-
@lexer.string = "\\#{esc}'"
|
72
|
-
@lexer.slurpstring("'")[0].should == expected_result
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe Puppet::Pops::Parser::Lexer::Token, "when initializing" do
|
79
|
-
it "should create a regex if the first argument is a string" do
|
80
|
-
Puppet::Pops::Parser::Lexer::Token.new("something", :NAME).regex.should == %r{something}
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should set the string if the first argument is one" do
|
84
|
-
Puppet::Pops::Parser::Lexer::Token.new("something", :NAME).string.should == "something"
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should set the regex if the first argument is one" do
|
88
|
-
Puppet::Pops::Parser::Lexer::Token.new(%r{something}, :NAME).regex.should == %r{something}
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe Puppet::Pops::Parser::Lexer::TokenList do
|
93
|
-
before do
|
94
|
-
@list = Puppet::Pops::Parser::Lexer::TokenList.new
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should have a method for retrieving tokens by the name" do
|
98
|
-
token = @list.add_token :name, "whatever"
|
99
|
-
@list[:name].should equal(token)
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should have a method for retrieving string tokens by the string" do
|
103
|
-
token = @list.add_token :name, "whatever"
|
104
|
-
@list.lookup("whatever").should equal(token)
|
105
|
-
end
|
106
|
-
|
107
|
-
it "should add tokens to the list when directed" do
|
108
|
-
token = @list.add_token :name, "whatever"
|
109
|
-
@list[:name].should equal(token)
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should have a method for adding multiple tokens at once" do
|
113
|
-
@list.add_tokens "whatever" => :name, "foo" => :bar
|
114
|
-
@list[:name].should_not be_nil
|
115
|
-
@list[:bar].should_not be_nil
|
116
|
-
end
|
117
|
-
|
118
|
-
it "should fail to add tokens sharing a name with an existing token" do
|
119
|
-
@list.add_token :name, "whatever"
|
120
|
-
expect { @list.add_token :name, "whatever" }.to raise_error(ArgumentError)
|
121
|
-
end
|
122
|
-
|
123
|
-
it "should set provided options on tokens being added" do
|
124
|
-
token = @list.add_token :name, "whatever", :skip_text => true
|
125
|
-
token.skip_text.should == true
|
126
|
-
end
|
127
|
-
|
128
|
-
it "should define any provided blocks as a :convert method" do
|
129
|
-
token = @list.add_token(:name, "whatever") do "foo" end
|
130
|
-
token.convert.should == "foo"
|
131
|
-
end
|
132
|
-
|
133
|
-
it "should store all string tokens in the :string_tokens list" do
|
134
|
-
one = @list.add_token(:name, "1")
|
135
|
-
@list.string_tokens.should be_include(one)
|
136
|
-
end
|
137
|
-
|
138
|
-
it "should store all regex tokens in the :regex_tokens list" do
|
139
|
-
one = @list.add_token(:name, %r{one})
|
140
|
-
@list.regex_tokens.should be_include(one)
|
141
|
-
end
|
142
|
-
|
143
|
-
it "should not store string tokens in the :regex_tokens list" do
|
144
|
-
one = @list.add_token(:name, "1")
|
145
|
-
@list.regex_tokens.should_not be_include(one)
|
146
|
-
end
|
147
|
-
|
148
|
-
it "should not store regex tokens in the :string_tokens list" do
|
149
|
-
one = @list.add_token(:name, %r{one})
|
150
|
-
@list.string_tokens.should_not be_include(one)
|
151
|
-
end
|
152
|
-
|
153
|
-
it "should sort the string tokens inversely by length when asked" do
|
154
|
-
one = @list.add_token(:name, "1")
|
155
|
-
two = @list.add_token(:other, "12")
|
156
|
-
@list.sort_tokens
|
157
|
-
@list.string_tokens.should == [two, one]
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS do
|
162
|
-
before do
|
163
|
-
@lexer = Puppet::Pops::Parser::Lexer.new
|
164
|
-
end
|
165
|
-
|
166
|
-
{
|
167
|
-
:LBRACK => '[',
|
168
|
-
:RBRACK => ']',
|
169
|
-
# :LBRACE => '{',
|
170
|
-
# :RBRACE => '}',
|
171
|
-
:LPAREN => '(',
|
172
|
-
:RPAREN => ')',
|
173
|
-
:EQUALS => '=',
|
174
|
-
:ISEQUAL => '==',
|
175
|
-
:GREATEREQUAL => '>=',
|
176
|
-
:GREATERTHAN => '>',
|
177
|
-
:LESSTHAN => '<',
|
178
|
-
:LESSEQUAL => '<=',
|
179
|
-
:NOTEQUAL => '!=',
|
180
|
-
:NOT => '!',
|
181
|
-
:COMMA => ',',
|
182
|
-
:DOT => '.',
|
183
|
-
:COLON => ':',
|
184
|
-
:AT => '@',
|
185
|
-
:LLCOLLECT => '<<|',
|
186
|
-
:RRCOLLECT => '|>>',
|
187
|
-
:LCOLLECT => '<|',
|
188
|
-
:RCOLLECT => '|>',
|
189
|
-
:SEMIC => ';',
|
190
|
-
:QMARK => '?',
|
191
|
-
:BACKSLASH => '\\',
|
192
|
-
:FARROW => '=>',
|
193
|
-
:PARROW => '+>',
|
194
|
-
:APPENDS => '+=',
|
195
|
-
:DELETES => '-=',
|
196
|
-
:PLUS => '+',
|
197
|
-
:MINUS => '-',
|
198
|
-
:DIV => '/',
|
199
|
-
:TIMES => '*',
|
200
|
-
:LSHIFT => '<<',
|
201
|
-
:RSHIFT => '>>',
|
202
|
-
:MATCH => '=~',
|
203
|
-
:NOMATCH => '!~',
|
204
|
-
:IN_EDGE => '->',
|
205
|
-
:OUT_EDGE => '<-',
|
206
|
-
:IN_EDGE_SUB => '~>',
|
207
|
-
:OUT_EDGE_SUB => '<~',
|
208
|
-
:PIPE => '|',
|
209
|
-
}.each do |name, string|
|
210
|
-
it "should have a token named #{name.to_s}" do
|
211
|
-
Puppet::Pops::Parser::Lexer::TOKENS[name].should_not be_nil
|
212
|
-
end
|
213
|
-
|
214
|
-
it "should match '#{string}' for the token #{name.to_s}" do
|
215
|
-
Puppet::Pops::Parser::Lexer::TOKENS[name].string.should == string
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
{
|
220
|
-
"case" => :CASE,
|
221
|
-
"class" => :CLASS,
|
222
|
-
"default" => :DEFAULT,
|
223
|
-
"define" => :DEFINE,
|
224
|
-
# "import" => :IMPORT, # done as a function in egrammar
|
225
|
-
"if" => :IF,
|
226
|
-
"elsif" => :ELSIF,
|
227
|
-
"else" => :ELSE,
|
228
|
-
"inherits" => :INHERITS,
|
229
|
-
"node" => :NODE,
|
230
|
-
"and" => :AND,
|
231
|
-
"or" => :OR,
|
232
|
-
"undef" => :UNDEF,
|
233
|
-
"false" => :FALSE,
|
234
|
-
"true" => :TRUE,
|
235
|
-
"in" => :IN,
|
236
|
-
"unless" => :UNLESS,
|
237
|
-
}.each do |string, name|
|
238
|
-
it "should have a keyword named #{name.to_s}" do
|
239
|
-
Puppet::Pops::Parser::Lexer::KEYWORDS[name].should_not be_nil
|
240
|
-
end
|
241
|
-
|
242
|
-
it "should have the keyword for #{name.to_s} set to #{string}" do
|
243
|
-
Puppet::Pops::Parser::Lexer::KEYWORDS[name].string.should == string
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
# These tokens' strings don't matter, just that the tokens exist.
|
248
|
-
[:STRING, :DQPRE, :DQMID, :DQPOST, :BOOLEAN, :NAME, :NUMBER, :COMMENT, :MLCOMMENT,
|
249
|
-
:LBRACE, :RBRACE,
|
250
|
-
:RETURN, :SQUOTE, :DQUOTE, :VARIABLE].each do |name|
|
251
|
-
it "should have a token named #{name.to_s}" do
|
252
|
-
Puppet::Pops::Parser::Lexer::TOKENS[name].should_not be_nil
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end
|
256
|
-
|
257
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:CLASSREF] do
|
258
|
-
before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:CLASSREF] }
|
259
|
-
|
260
|
-
it "should match against single upper-case alpha-numeric terms" do
|
261
|
-
@token.regex.should =~ "One"
|
262
|
-
end
|
263
|
-
|
264
|
-
it "should match against upper-case alpha-numeric terms separated by double colons" do
|
265
|
-
@token.regex.should =~ "One::Two"
|
266
|
-
end
|
267
|
-
|
268
|
-
it "should match against many upper-case alpha-numeric terms separated by double colons" do
|
269
|
-
@token.regex.should =~ "One::Two::Three::Four::Five"
|
270
|
-
end
|
271
|
-
|
272
|
-
it "should match against upper-case alpha-numeric terms prefixed by double colons" do
|
273
|
-
@token.regex.should =~ "::One"
|
274
|
-
end
|
275
|
-
end
|
276
|
-
|
277
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:NAME] do
|
278
|
-
before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:NAME] }
|
279
|
-
|
280
|
-
it "should match against lower-case alpha-numeric terms" do
|
281
|
-
@token.regex.should =~ "one-two"
|
282
|
-
end
|
283
|
-
|
284
|
-
it "should return itself and the value if the matched term is not a keyword" do
|
285
|
-
Puppet::Pops::Parser::Lexer::KEYWORDS.expects(:lookup).returns(nil)
|
286
|
-
@token.convert(stub("lexer"), "myval").should == [Puppet::Pops::Parser::Lexer::TOKENS[:NAME], "myval"]
|
287
|
-
end
|
288
|
-
|
289
|
-
it "should return the keyword token and the value if the matched term is a keyword" do
|
290
|
-
keyword = stub 'keyword', :name => :testing
|
291
|
-
Puppet::Pops::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
|
292
|
-
@token.convert(stub("lexer"), "myval").should == [keyword, "myval"]
|
293
|
-
end
|
294
|
-
|
295
|
-
it "should return the BOOLEAN token and 'true' if the matched term is the string 'true'" do
|
296
|
-
keyword = stub 'keyword', :name => :TRUE
|
297
|
-
Puppet::Pops::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
|
298
|
-
@token.convert(stub('lexer'), "true").should == [Puppet::Pops::Parser::Lexer::TOKENS[:BOOLEAN], true]
|
299
|
-
end
|
300
|
-
|
301
|
-
it "should return the BOOLEAN token and 'false' if the matched term is the string 'false'" do
|
302
|
-
keyword = stub 'keyword', :name => :FALSE
|
303
|
-
Puppet::Pops::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
|
304
|
-
@token.convert(stub('lexer'), "false").should == [Puppet::Pops::Parser::Lexer::TOKENS[:BOOLEAN], false]
|
305
|
-
end
|
306
|
-
|
307
|
-
it "should match against lower-case alpha-numeric terms separated by double colons" do
|
308
|
-
@token.regex.should =~ "one::two"
|
309
|
-
end
|
310
|
-
|
311
|
-
it "should match against many lower-case alpha-numeric terms separated by double colons" do
|
312
|
-
@token.regex.should =~ "one::two::three::four::five"
|
313
|
-
end
|
314
|
-
|
315
|
-
it "should match against lower-case alpha-numeric terms prefixed by double colons" do
|
316
|
-
@token.regex.should =~ "::one"
|
317
|
-
end
|
318
|
-
|
319
|
-
it "should match against nested terms starting with numbers" do
|
320
|
-
@token.regex.should =~ "::1one::2two::3three"
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:NUMBER] do
|
325
|
-
before do
|
326
|
-
@token = Puppet::Pops::Parser::Lexer::TOKENS[:NUMBER]
|
327
|
-
@regex = @token.regex
|
328
|
-
end
|
329
|
-
|
330
|
-
it "should match against numeric terms" do
|
331
|
-
@regex.should =~ "2982383139"
|
332
|
-
end
|
333
|
-
|
334
|
-
it "should match against float terms" do
|
335
|
-
@regex.should =~ "29823.235"
|
336
|
-
end
|
337
|
-
|
338
|
-
it "should match against hexadecimal terms" do
|
339
|
-
@regex.should =~ "0xBEEF0023"
|
340
|
-
end
|
341
|
-
|
342
|
-
it "should match against float with exponent terms" do
|
343
|
-
@regex.should =~ "10e23"
|
344
|
-
end
|
345
|
-
|
346
|
-
it "should match against float terms with negative exponents" do
|
347
|
-
@regex.should =~ "10e-23"
|
348
|
-
end
|
349
|
-
|
350
|
-
it "should match against float terms with fractional parts and exponent" do
|
351
|
-
@regex.should =~ "1.234e23"
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:COMMENT] do
|
356
|
-
before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:COMMENT] }
|
357
|
-
|
358
|
-
it "should match against lines starting with '#'" do
|
359
|
-
@token.regex.should =~ "# this is a comment"
|
360
|
-
end
|
361
|
-
|
362
|
-
it "should be marked to get skipped" do
|
363
|
-
@token.skip?.should be_true
|
364
|
-
end
|
365
|
-
|
366
|
-
it "'s block should return the comment without any text" do
|
367
|
-
# This is a silly test, the original tested that the comments was processed, but
|
368
|
-
# all comments are skipped anyway, and never collected for documentation.
|
369
|
-
#
|
370
|
-
@token.convert(@lexer,"# this is a comment")[1].should == ""
|
371
|
-
end
|
372
|
-
end
|
373
|
-
|
374
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:MLCOMMENT] do
|
375
|
-
before do
|
376
|
-
@token = Puppet::Pops::Parser::Lexer::TOKENS[:MLCOMMENT]
|
377
|
-
@lexer = stub 'lexer', :line => 0
|
378
|
-
end
|
379
|
-
|
380
|
-
it "should match against lines enclosed with '/*' and '*/'" do
|
381
|
-
@token.regex.should =~ "/* this is a comment */"
|
382
|
-
end
|
383
|
-
|
384
|
-
it "should match multiple lines enclosed with '/*' and '*/'" do
|
385
|
-
@token.regex.should =~ """/*
|
386
|
-
this is a comment
|
387
|
-
*/"""
|
388
|
-
end
|
389
|
-
|
390
|
-
# # TODO: REWRITE THIS TEST TO NOT BE BASED ON INTERNALS
|
391
|
-
# it "should increase the lexer current line number by the amount of lines spanned by the comment" do
|
392
|
-
# @lexer.expects(:line=).with(2)
|
393
|
-
# @token.convert(@lexer, "1\n2\n3")
|
394
|
-
# end
|
395
|
-
|
396
|
-
it "should not greedily match comments" do
|
397
|
-
match = @token.regex.match("/* first */ word /* second */")
|
398
|
-
match[1].should == " first "
|
399
|
-
end
|
400
|
-
|
401
|
-
it "'s block should return the comment without the comment marks" do
|
402
|
-
# This is a silly test, the original tested that the comments was processed, but
|
403
|
-
# all comments are skipped anyway, and never collected for documentation.
|
404
|
-
#
|
405
|
-
@lexer.stubs(:line=).with(0)
|
406
|
-
|
407
|
-
@token.convert(@lexer,"/* this is a comment */")[1].should == ""
|
408
|
-
end
|
409
|
-
end
|
410
|
-
|
411
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:RETURN] do
|
412
|
-
before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:RETURN] }
|
413
|
-
|
414
|
-
it "should match against carriage returns" do
|
415
|
-
@token.regex.should =~ "\n"
|
416
|
-
end
|
417
|
-
|
418
|
-
it "should be marked to initiate text skipping" do
|
419
|
-
@token.skip_text.should be_true
|
420
|
-
end
|
421
|
-
end
|
422
|
-
|
423
|
-
shared_examples_for "handling `-` in standard variable names for egrammar" do |prefix|
|
424
|
-
# Watch out - a regex might match a *prefix* on these, not just the whole
|
425
|
-
# word, so make sure you don't have false positive or negative results based
|
426
|
-
# on that.
|
427
|
-
legal = %w{f foo f::b foo::b f::bar foo::bar 3 foo3 3foo}
|
428
|
-
illegal = %w{f- f-o -f f::-o f::o- f::o-o}
|
429
|
-
|
430
|
-
["", "::"].each do |global_scope|
|
431
|
-
legal.each do |name|
|
432
|
-
var = prefix + global_scope + name
|
433
|
-
it "should accept #{var.inspect} as a valid variable name" do
|
434
|
-
(subject.regex.match(var) || [])[0].should == var
|
435
|
-
end
|
436
|
-
end
|
437
|
-
|
438
|
-
illegal.each do |name|
|
439
|
-
var = prefix + global_scope + name
|
440
|
-
it "when `variable_with_dash` is disabled it should NOT accept #{var.inspect} as a valid variable name" do
|
441
|
-
Puppet[:allow_variables_with_dashes] = false
|
442
|
-
(subject.regex.match(var) || [])[0].should_not == var
|
443
|
-
end
|
444
|
-
|
445
|
-
it "when `variable_with_dash` is enabled it should NOT accept #{var.inspect} as a valid variable name" do
|
446
|
-
Puppet[:allow_variables_with_dashes] = true
|
447
|
-
(subject.regex.match(var) || [])[0].should_not == var
|
448
|
-
end
|
449
|
-
end
|
450
|
-
end
|
451
|
-
end
|
452
|
-
|
453
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:DOLLAR_VAR] do
|
454
|
-
its(:skip_text) { should be_false }
|
455
|
-
|
456
|
-
it_should_behave_like "handling `-` in standard variable names for egrammar", '$'
|
457
|
-
end
|
458
|
-
|
459
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:VARIABLE] do
|
460
|
-
its(:skip_text) { should be_false }
|
461
|
-
|
462
|
-
it_should_behave_like "handling `-` in standard variable names for egrammar", ''
|
463
|
-
end
|
464
|
-
|
465
|
-
describe "the horrible deprecation / compatibility variables with dashes" do
|
466
|
-
|
467
|
-
context "deprecation warnings" do
|
468
|
-
before :each do Puppet[:allow_variables_with_dashes] = true end
|
469
|
-
|
470
|
-
it "does not warn about a variable without a dash" do
|
471
|
-
Puppet.expects(:deprecation_warning).never
|
472
|
-
|
473
|
-
EgrammarLexerSpec.tokens_scanned_from('$c').should == [
|
474
|
-
[:VARIABLE, {:value=>"c", :line=>1, :pos=>1, :offset=>0, :length=>2}]
|
475
|
-
]
|
476
|
-
end
|
477
|
-
|
478
|
-
it "does not warn about referencing a class name that contains a dash" do
|
479
|
-
Puppet.expects(:deprecation_warning).never
|
480
|
-
|
481
|
-
EgrammarLexerSpec.tokens_scanned_from('foo-bar').should == [
|
482
|
-
[:NAME, {:value=>"foo-bar", :line=>1, :pos=>1, :offset=>0, :length=>7}]
|
483
|
-
]
|
484
|
-
end
|
485
|
-
end
|
486
|
-
end
|
487
|
-
|
488
|
-
|
489
|
-
describe Puppet::Pops::Parser::Lexer,"when lexing strings" do
|
490
|
-
{
|
491
|
-
%q{'single quoted string')} => [[:STRING,'single quoted string']],
|
492
|
-
%q{"double quoted string"} => [[:STRING,'double quoted string']],
|
493
|
-
%q{'single quoted string with an escaped "\\'"'} => [[:STRING,'single quoted string with an escaped "\'"']],
|
494
|
-
%q{'single quoted string with an escaped "\$"'} => [[:STRING,'single quoted string with an escaped "\$"']],
|
495
|
-
%q{'single quoted string with an escaped "\."'} => [[:STRING,'single quoted string with an escaped "\."']],
|
496
|
-
%q{'single quoted string with an escaped "\r\n"'} => [[:STRING,'single quoted string with an escaped "\r\n"']],
|
497
|
-
%q{'single quoted string with an escaped "\n"'} => [[:STRING,'single quoted string with an escaped "\n"']],
|
498
|
-
%q{'single quoted string with an escaped "\\\\"'} => [[:STRING,'single quoted string with an escaped "\\\\"']],
|
499
|
-
%q{"string with an escaped '\\"'"} => [[:STRING,"string with an escaped '\"'"]],
|
500
|
-
%q{"string with an escaped '\\$'"} => [[:STRING,"string with an escaped '$'"]],
|
501
|
-
%Q{"string with a line ending with a backslash: \\\nfoo"} => [[:STRING,"string with a line ending with a backslash: foo"]],
|
502
|
-
%q{"string with $v (but no braces)"} => [[:DQPRE,"string with "],[:VARIABLE,'v'],[:DQPOST,' (but no braces)']],
|
503
|
-
%q["string with ${v} in braces"] => [[:DQPRE,"string with "],[:VARIABLE,'v'],[:DQPOST,' in braces']],
|
504
|
-
%q["string with ${qualified::var} in braces"] => [[:DQPRE,"string with "],[:VARIABLE,'qualified::var'],[:DQPOST,' in braces']],
|
505
|
-
%q{"string with $v and $v (but no braces)"} => [[:DQPRE,"string with "],[:VARIABLE,"v"],[:DQMID," and "],[:VARIABLE,"v"],[:DQPOST," (but no braces)"]],
|
506
|
-
%q["string with ${v} and ${v} in braces"] => [[:DQPRE,"string with "],[:VARIABLE,"v"],[:DQMID," and "],[:VARIABLE,"v"],[:DQPOST," in braces"]],
|
507
|
-
%q["string with ${'a nested single quoted string'} inside it."] => [[:DQPRE,"string with "],[:STRING,'a nested single quoted string'],[:DQPOST,' inside it.']],
|
508
|
-
%q["string with ${['an array ',$v2]} in it."] => [[:DQPRE,"string with "],:LBRACK,[:STRING,"an array "],:COMMA,[:VARIABLE,"v2"],:RBRACK,[:DQPOST," in it."]],
|
509
|
-
%q{a simple "scanner" test} => [[:NAME,"a"],[:NAME,"simple"], [:STRING,"scanner"],[:NAME,"test"]],
|
510
|
-
%q{a simple 'single quote scanner' test} => [[:NAME,"a"],[:NAME,"simple"], [:STRING,"single quote scanner"],[:NAME,"test"]],
|
511
|
-
%q{a harder 'a $b \c"'} => [[:NAME,"a"],[:NAME,"harder"], [:STRING,'a $b \c"']],
|
512
|
-
%q{a harder "scanner test"} => [[:NAME,"a"],[:NAME,"harder"], [:STRING,"scanner test"]],
|
513
|
-
%q{a hardest "scanner \"test\""} => [[:NAME,"a"],[:NAME,"hardest"],[:STRING,'scanner "test"']],
|
514
|
-
%Q{a hardestest "scanner \\"test\\"\n"} => [[:NAME,"a"],[:NAME,"hardestest"],[:STRING,%Q{scanner "test"\n}]],
|
515
|
-
%q{function("call")} => [[:NAME,"function"],[:LPAREN,"("],[:STRING,'call'],[:RPAREN,")"]],
|
516
|
-
%q["string with ${(3+5)/4} nested math."] => [[:DQPRE,"string with "],:LPAREN,[:NAME,"3"],:PLUS,[:NAME,"5"],:RPAREN,:DIV,[:NAME,"4"],[:DQPOST," nested math."]],
|
517
|
-
%q["$$$$"] => [[:STRING,"$$$$"]],
|
518
|
-
%q["$variable"] => [[:DQPRE,""],[:VARIABLE,"variable"],[:DQPOST,""]],
|
519
|
-
%q["$var$other"] => [[:DQPRE,""],[:VARIABLE,"var"],[:DQMID,""],[:VARIABLE,"other"],[:DQPOST,""]],
|
520
|
-
%q["foo$bar$"] => [[:DQPRE,"foo"],[:VARIABLE,"bar"],[:DQPOST,"$"]],
|
521
|
-
%q["foo$$bar"] => [[:DQPRE,"foo$"],[:VARIABLE,"bar"],[:DQPOST,""]],
|
522
|
-
%q[""] => [[:STRING,""]],
|
523
|
-
%q["123 456 789 0"] => [[:STRING,"123 456 789 0"]],
|
524
|
-
%q["${123} 456 $0"] => [[:DQPRE,""],[:VARIABLE,"123"],[:DQMID," 456 "],[:VARIABLE,"0"],[:DQPOST,""]],
|
525
|
-
%q["$foo::::bar"] => [[:DQPRE,""],[:VARIABLE,"foo"],[:DQPOST,"::::bar"]],
|
526
|
-
# Keyword variables
|
527
|
-
%q["$true"] => [[:DQPRE,""],[:VARIABLE, "true"],[:DQPOST,""]],
|
528
|
-
%q["$false"] => [[:DQPRE,""],[:VARIABLE, "false"],[:DQPOST,""]],
|
529
|
-
%q["$if"] => [[:DQPRE,""],[:VARIABLE, "if"],[:DQPOST,""]],
|
530
|
-
%q["$case"] => [[:DQPRE,""],[:VARIABLE, "case"],[:DQPOST,""]],
|
531
|
-
%q["$unless"] => [[:DQPRE,""],[:VARIABLE, "unless"],[:DQPOST,""]],
|
532
|
-
%q["$undef"] => [[:DQPRE,""],[:VARIABLE, "undef"],[:DQPOST,""]],
|
533
|
-
# Expressions
|
534
|
-
%q["${true}"] => [[:DQPRE,""],[:BOOLEAN, true],[:DQPOST,""]],
|
535
|
-
%q["${false}"] => [[:DQPRE,""],[:BOOLEAN, false],[:DQPOST,""]],
|
536
|
-
%q["${undef}"] => [[:DQPRE,""],:UNDEF,[:DQPOST,""]],
|
537
|
-
%q["${if true {false}}"] => [[:DQPRE,""],:IF,[:BOOLEAN, true], :LBRACE, [:BOOLEAN, false], :RBRACE, [:DQPOST,""]],
|
538
|
-
%q["${unless true {false}}"] => [[:DQPRE,""],:UNLESS,[:BOOLEAN, true], :LBRACE, [:BOOLEAN, false], :RBRACE, [:DQPOST,""]],
|
539
|
-
%q["${case true {true:{false}}}"] => [
|
540
|
-
[:DQPRE,""],:CASE,[:BOOLEAN, true], :LBRACE, [:BOOLEAN, true], :COLON, :LBRACE, [:BOOLEAN, false],
|
541
|
-
:RBRACE, :RBRACE, [:DQPOST,""]],
|
542
|
-
%q[{ "${a}" => 1 }] => [ :LBRACE, [:DQPRE,""], [:VARIABLE,"a"], [:DQPOST,""], :FARROW, [:NAME,"1"], :RBRACE ],
|
543
|
-
}.each { |src,expected_result|
|
544
|
-
it "should handle #{src} correctly" do
|
545
|
-
EgrammarLexerSpec.tokens_scanned_from(src).should be_like(*expected_result)
|
546
|
-
end
|
547
|
-
}
|
548
|
-
end
|
549
|
-
|
550
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:DOLLAR_VAR] do
|
551
|
-
before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:DOLLAR_VAR] }
|
552
|
-
|
553
|
-
it "should match against alpha words prefixed with '$'" do
|
554
|
-
@token.regex.should =~ '$this_var'
|
555
|
-
end
|
556
|
-
|
557
|
-
it "should return the VARIABLE token and the variable name stripped of the '$'" do
|
558
|
-
@token.convert(stub("lexer"), "$myval").should == [Puppet::Pops::Parser::Lexer::TOKENS[:VARIABLE], "myval"]
|
559
|
-
end
|
560
|
-
end
|
561
|
-
|
562
|
-
describe Puppet::Pops::Parser::Lexer::TOKENS[:REGEX] do
|
563
|
-
before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:REGEX] }
|
564
|
-
|
565
|
-
it "should match against any expression enclosed in //" do
|
566
|
-
@token.regex.should =~ '/this is a regex/'
|
567
|
-
end
|
568
|
-
|
569
|
-
it 'should not match if there is \n in the regex' do
|
570
|
-
@token.regex.should_not =~ "/this is \n a regex/"
|
571
|
-
end
|
572
|
-
|
573
|
-
describe "when scanning" do
|
574
|
-
it "should not consider escaped slashes to be the end of a regex" do
|
575
|
-
EgrammarLexerSpec.tokens_scanned_from("$x =~ /this \\/ foo/").should be_like(__,__,[:REGEX,%r{this / foo}])
|
576
|
-
end
|
577
|
-
|
578
|
-
it "should not lex chained division as a regex" do
|
579
|
-
EgrammarLexerSpec.tokens_scanned_from("$x = $a/$b/$c").collect { |name, data| name }.should_not be_include( :REGEX )
|
580
|
-
end
|
581
|
-
|
582
|
-
it "should accept a regular expression after NODE" do
|
583
|
-
EgrammarLexerSpec.tokens_scanned_from("node /www.*\.mysite\.org/").should be_like(__,[:REGEX,Regexp.new("www.*\.mysite\.org")])
|
584
|
-
end
|
585
|
-
|
586
|
-
it "should accept regular expressions in a CASE" do
|
587
|
-
s = %q{case $variable {
|
588
|
-
"something": {$othervar = 4096 / 2}
|
589
|
-
/regex/: {notice("this notably sucks")}
|
590
|
-
}
|
591
|
-
}
|
592
|
-
EgrammarLexerSpec.tokens_scanned_from(s).should be_like(
|
593
|
-
:CASE,:VARIABLE,:LBRACE,:STRING,:COLON,:LBRACE,:VARIABLE,:EQUALS,:NAME,:DIV,:NAME,:RBRACE,[:REGEX,/regex/],:COLON,:LBRACE,:NAME,:LPAREN,:STRING,:RPAREN,:RBRACE,:RBRACE
|
594
|
-
)
|
595
|
-
end
|
596
|
-
end
|
597
|
-
|
598
|
-
it "should return the REGEX token and a Regexp" do
|
599
|
-
@token.convert(stub("lexer"), "/myregex/").should == [Puppet::Pops::Parser::Lexer::TOKENS[:REGEX], Regexp.new(/myregex/)]
|
600
|
-
end
|
601
|
-
end
|
602
|
-
|
603
|
-
describe Puppet::Pops::Parser::Lexer, "when lexing comments" do
|
604
|
-
before { @lexer = Puppet::Pops::Parser::Lexer.new }
|
605
|
-
|
606
|
-
it "should skip whitespace before lexing the next token after a non-token" do
|
607
|
-
EgrammarLexerSpec.tokens_scanned_from("/* 1\n\n */ \ntest").should be_like([:NAME, "test"])
|
608
|
-
end
|
609
|
-
end
|
610
|
-
|
611
|
-
# FIXME: We need to rewrite all of these tests, but I just don't want to take the time right now.
|
612
|
-
describe "Puppet::Pops::Parser::Lexer in the old tests" do
|
613
|
-
before { @lexer = Puppet::Pops::Parser::Lexer.new }
|
614
|
-
|
615
|
-
it "should do simple lexing" do
|
616
|
-
{
|
617
|
-
%q{\\} => [[:BACKSLASH,"\\"]],
|
618
|
-
%q{simplest scanner test} => [[:NAME,"simplest"],[:NAME,"scanner"],[:NAME,"test"]],
|
619
|
-
%Q{returned scanner test\n} => [[:NAME,"returned"],[:NAME,"scanner"],[:NAME,"test"]]
|
620
|
-
}.each { |source,expected|
|
621
|
-
EgrammarLexerSpec.tokens_scanned_from(source).should be_like(*expected)
|
622
|
-
}
|
623
|
-
end
|
624
|
-
|
625
|
-
it "should fail usefully" do
|
626
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('^') }.to raise_error(RuntimeError)
|
627
|
-
end
|
628
|
-
|
629
|
-
it "should fail if the string is not set" do
|
630
|
-
expect { @lexer.fullscan }.to raise_error(Puppet::LexError)
|
631
|
-
end
|
632
|
-
|
633
|
-
it "should correctly identify keywords" do
|
634
|
-
EgrammarLexerSpec.tokens_scanned_from("case").should be_like([:CASE, "case"])
|
635
|
-
end
|
636
|
-
|
637
|
-
it "should correctly parse class references" do
|
638
|
-
%w{Many Different Words A Word}.each { |t| EgrammarLexerSpec.tokens_scanned_from(t).should be_like([:CLASSREF,t])}
|
639
|
-
end
|
640
|
-
|
641
|
-
# #774
|
642
|
-
it "should correctly parse namespaced class refernces token" do
|
643
|
-
%w{Foo ::Foo Foo::Bar ::Foo::Bar}.each { |t| EgrammarLexerSpec.tokens_scanned_from(t).should be_like([:CLASSREF, t]) }
|
644
|
-
end
|
645
|
-
|
646
|
-
it "should correctly parse names" do
|
647
|
-
%w{this is a bunch of names}.each { |t| EgrammarLexerSpec.tokens_scanned_from(t).should be_like([:NAME,t]) }
|
648
|
-
end
|
649
|
-
|
650
|
-
it "should correctly parse names with numerals" do
|
651
|
-
%w{1name name1 11names names11}.each { |t| EgrammarLexerSpec.tokens_scanned_from(t).should be_like([:NAME,t]) }
|
652
|
-
end
|
653
|
-
|
654
|
-
it "should correctly parse empty strings" do
|
655
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = ""') }.to_not raise_error
|
656
|
-
end
|
657
|
-
|
658
|
-
it "should correctly parse virtual resources" do
|
659
|
-
EgrammarLexerSpec.tokens_scanned_from("@type {").should be_like([:AT, "@"], [:NAME, "type"], [:LBRACE, "{"])
|
660
|
-
end
|
661
|
-
|
662
|
-
it "should correctly deal with namespaces" do
|
663
|
-
@lexer.string = %{class myclass}
|
664
|
-
@lexer.fullscan
|
665
|
-
@lexer.namespace.should == "myclass"
|
666
|
-
|
667
|
-
@lexer.namepop
|
668
|
-
@lexer.namespace.should == ""
|
669
|
-
|
670
|
-
@lexer.string = "class base { class sub { class more"
|
671
|
-
@lexer.fullscan
|
672
|
-
@lexer.namespace.should == "base::sub::more"
|
673
|
-
|
674
|
-
@lexer.namepop
|
675
|
-
@lexer.namespace.should == "base::sub"
|
676
|
-
end
|
677
|
-
|
678
|
-
it "should not put class instantiation on the namespace" do
|
679
|
-
@lexer.string = "class base { class sub { class { mode"
|
680
|
-
@lexer.fullscan
|
681
|
-
@lexer.namespace.should == "base::sub"
|
682
|
-
end
|
683
|
-
|
684
|
-
it "should correctly handle fully qualified names" do
|
685
|
-
@lexer.string = "class base { class sub::more {"
|
686
|
-
@lexer.fullscan
|
687
|
-
@lexer.namespace.should == "base::sub::more"
|
688
|
-
|
689
|
-
@lexer.namepop
|
690
|
-
@lexer.namespace.should == "base"
|
691
|
-
end
|
692
|
-
|
693
|
-
it "should correctly lex variables" do
|
694
|
-
["$variable", "$::variable", "$qualified::variable", "$further::qualified::variable"].each do |string|
|
695
|
-
EgrammarLexerSpec.tokens_scanned_from(string).should be_like([:VARIABLE,string.sub(/^\$/,'')])
|
696
|
-
end
|
697
|
-
end
|
698
|
-
|
699
|
-
it "should end variables at `-`" do
|
700
|
-
EgrammarLexerSpec.tokens_scanned_from('$hyphenated-variable').
|
701
|
-
should be_like([:VARIABLE, "hyphenated"], [:MINUS, '-'], [:NAME, 'variable'])
|
702
|
-
end
|
703
|
-
|
704
|
-
it "should not include whitespace in a variable" do
|
705
|
-
EgrammarLexerSpec.tokens_scanned_from("$foo bar").should_not be_like([:VARIABLE, "foo bar"])
|
706
|
-
end
|
707
|
-
it "should not include excess colons in a variable" do
|
708
|
-
EgrammarLexerSpec.tokens_scanned_from("$foo::::bar").should_not be_like([:VARIABLE, "foo::::bar"])
|
709
|
-
end
|
710
|
-
end
|
711
|
-
|
712
|
-
describe "Puppet::Pops::Parser::Lexer in the old tests when lexing example files" do
|
713
|
-
my_fixtures('*.pp') do |file|
|
714
|
-
it "should correctly lex #{file}" do
|
715
|
-
lexer = Puppet::Pops::Parser::Lexer.new
|
716
|
-
lexer.file = file
|
717
|
-
expect { lexer.fullscan }.to_not raise_error
|
718
|
-
end
|
719
|
-
end
|
720
|
-
end
|
721
|
-
|
722
|
-
describe "when trying to lex a non-existent file" do
|
723
|
-
include PuppetSpec::Files
|
724
|
-
|
725
|
-
it "should return an empty list of tokens" do
|
726
|
-
lexer = Puppet::Pops::Parser::Lexer.new
|
727
|
-
lexer.file = nofile = tmpfile('lexer')
|
728
|
-
Puppet::FileSystem.exist?(nofile).should == false
|
729
|
-
|
730
|
-
lexer.fullscan.should == [[false,false]]
|
731
|
-
end
|
732
|
-
end
|
733
|
-
|
734
|
-
describe "when string quotes are not closed" do
|
735
|
-
it "should report with message including an \" opening quote" do
|
736
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = "') }.to raise_error(/after '"'/)
|
737
|
-
end
|
738
|
-
|
739
|
-
it "should report with message including an \' opening quote" do
|
740
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = \'') }.to raise_error(/after "'"/)
|
741
|
-
end
|
742
|
-
|
743
|
-
it "should report <eof> if immediately followed by eof" do
|
744
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = "') }.to raise_error(/followed by '<eof>'/)
|
745
|
-
end
|
746
|
-
|
747
|
-
it "should report max 5 chars following quote" do
|
748
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = "123456') }.to raise_error(/followed by '12345...'/)
|
749
|
-
end
|
750
|
-
|
751
|
-
it "should escape control chars" do
|
752
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = "12\n3456') }.to raise_error(/followed by '12\\n3...'/)
|
753
|
-
end
|
754
|
-
|
755
|
-
it "should resport position of opening quote" do
|
756
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = "123456') }.to raise_error(/at line 1:8/)
|
757
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = "123456') }.to raise_error(/at line 1:9/)
|
758
|
-
end
|
759
|
-
end
|
760
|
-
|
761
|
-
describe "when lexing number, bad input should not go unpunished" do
|
762
|
-
it "should slap bad octal as such" do
|
763
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = 0778') }.to raise_error(/Not a valid octal/)
|
764
|
-
end
|
765
|
-
|
766
|
-
it "should slap bad hex as such" do
|
767
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = 0xFG') }.to raise_error(/Not a valid hex/)
|
768
|
-
expect { EgrammarLexerSpec.tokens_scanned_from('$var = 0xfg') }.to raise_error(/Not a valid hex/)
|
769
|
-
end
|
770
|
-
# Note, bad decimals are probably impossible to enter, as they are not recognized as complete numbers, instead,
|
771
|
-
# the error will be something else, depending on what follows some initial digit.
|
772
|
-
#
|
773
|
-
end
|
774
|
-
|
775
|
-
describe "when lexing interpolation detailed positioning should be correct" do
|
776
|
-
it "should correctly position a string without interpolation" do
|
777
|
-
EgrammarLexerSpec.tokens_scanned_from('"not interpolated"').should be_like(
|
778
|
-
[:STRING, {:value=>"not interpolated", :line=>1, :offset=>0, :pos=>1, :length=>18}])
|
779
|
-
end
|
780
|
-
|
781
|
-
it "should correctly position a string with false start in interpolation" do
|
782
|
-
EgrammarLexerSpec.tokens_scanned_from('"not $$$ rpolated"').should be_like(
|
783
|
-
[:STRING, {:value=>"not $$$ rpolated", :line=>1, :offset=>0, :pos=>1, :length=>18}])
|
784
|
-
end
|
785
|
-
|
786
|
-
it "should correctly position pre-mid-end interpolation " do
|
787
|
-
EgrammarLexerSpec.tokens_scanned_from('"pre $x mid $y end"').should be_like(
|
788
|
-
[:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>6}],
|
789
|
-
[:VARIABLE, {:value=>"x", :line=>1, :offset=>6, :pos=>7, :length=>1}],
|
790
|
-
[:DQMID, {:value=>" mid ", :line=>1, :offset=>7, :pos=>8, :length=>6}],
|
791
|
-
[:VARIABLE, {:value=>"y", :line=>1, :offset=>13, :pos=>14, :length=>1}],
|
792
|
-
[:DQPOST, {:value=>" end", :line=>1, :offset=>14, :pos=>15, :length=>5}]
|
793
|
-
)
|
794
|
-
end
|
795
|
-
|
796
|
-
it "should correctly position pre-mid-end interpolation using ${} " do
|
797
|
-
EgrammarLexerSpec.tokens_scanned_from('"pre ${x} mid ${y} end"').should be_like(
|
798
|
-
[:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>7}],
|
799
|
-
[:VARIABLE, {:value=>"x", :line=>1, :offset=>7, :pos=>8, :length=>1}],
|
800
|
-
[:DQMID, {:value=>" mid ", :line=>1, :offset=>8, :pos=>9, :length=>8}],
|
801
|
-
[:VARIABLE, {:value=>"y", :line=>1, :offset=>16, :pos=>17, :length=>1}],
|
802
|
-
[:DQPOST, {:value=>" end", :line=>1, :offset=>17, :pos=>18, :length=>6}]
|
803
|
-
)
|
804
|
-
end
|
805
|
-
|
806
|
-
it "should correctly position pre-end interpolation using ${} with f call" do
|
807
|
-
EgrammarLexerSpec.tokens_scanned_from('"pre ${x()} end"').should be_like(
|
808
|
-
[:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>7}],
|
809
|
-
[:NAME, {:value=>"x", :line=>1, :offset=>7, :pos=>8, :length=>1}],
|
810
|
-
[:LPAREN, {:value=>"(", :line=>1, :offset=>8, :pos=>9, :length=>1}],
|
811
|
-
[:RPAREN, {:value=>")", :line=>1, :offset=>9, :pos=>10, :length=>1}],
|
812
|
-
[:DQPOST, {:value=>" end", :line=>1, :offset=>10, :pos=>11, :length=>6}]
|
813
|
-
)
|
814
|
-
end
|
815
|
-
|
816
|
-
it "should correctly position pre-end interpolation using ${} with $x" do
|
817
|
-
EgrammarLexerSpec.tokens_scanned_from('"pre ${$x} end"').should be_like(
|
818
|
-
[:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>7}],
|
819
|
-
[:VARIABLE, {:value=>"x", :line=>1, :offset=>7, :pos=>8, :length=>2}],
|
820
|
-
[:DQPOST, {:value=>" end", :line=>1, :offset=>9, :pos=>10, :length=>6}]
|
821
|
-
)
|
822
|
-
end
|
823
|
-
|
824
|
-
it "should correctly position pre-end interpolation across lines" do
|
825
|
-
EgrammarLexerSpec.tokens_scanned_from(%Q["pre ${\n$x} end"]).should be_like(
|
826
|
-
[:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>7}],
|
827
|
-
[:VARIABLE, {:value=>"x", :line=>2, :offset=>8, :pos=>1, :length=>2}],
|
828
|
-
[:DQPOST, {:value=>" end", :line=>2, :offset=>10, :pos=>3, :length=>6}]
|
829
|
-
)
|
830
|
-
end
|
831
|
-
|
832
|
-
it "should correctly position interpolation across lines when strings have embedded newlines" do
|
833
|
-
EgrammarLexerSpec.tokens_scanned_from(%Q["pre \n\n${$x}\n mid$y"]).should be_like(
|
834
|
-
[:DQPRE, {:value=>"pre \n\n", :line=>1, :offset=>0, :pos=>1, :length=>9}],
|
835
|
-
[:VARIABLE, {:value=>"x", :line=>3, :offset=>9, :pos=>3, :length=>2}],
|
836
|
-
[:DQMID, {:value=>"\n mid", :line=>3, :offset=>11, :pos=>5, :length=>7}],
|
837
|
-
[:VARIABLE, {:value=>"y", :line=>4, :offset=>18, :pos=>6, :length=>1}]
|
838
|
-
)
|
839
|
-
end
|
840
|
-
end
|