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.

Files changed (751) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +2 -3
  3. data/Gemfile +14 -10
  4. data/README.md +1 -1
  5. data/ext/build_defaults.yaml +16 -1
  6. data/ext/debian/control +3 -2
  7. data/ext/debian/puppet-common.dirs +1 -0
  8. data/ext/debian/puppet-common.postinst +8 -8
  9. data/ext/debian/puppet-common.postrm +2 -1
  10. data/ext/project_data.yaml +16 -12
  11. data/ext/rack/example-passenger-vhost.conf +2 -2
  12. data/ext/redhat/puppet.spec.erb +6 -3
  13. data/ext/windows/service/daemon.rb +47 -41
  14. data/install.rb +1 -1
  15. data/lib/puppet.rb +34 -24
  16. data/lib/puppet/application.rb +34 -1
  17. data/lib/puppet/application/agent.rb +9 -8
  18. data/lib/puppet/application/apply.rb +14 -5
  19. data/lib/puppet/application/doc.rb +4 -11
  20. data/lib/puppet/application/master.rb +19 -17
  21. data/lib/puppet/application/queue.rb +1 -1
  22. data/lib/puppet/application/resource.rb +0 -1
  23. data/lib/puppet/configurer.rb +39 -2
  24. data/lib/puppet/configurer/downloader.rb +5 -10
  25. data/lib/puppet/configurer/downloader_factory.rb +34 -0
  26. data/lib/puppet/configurer/plugin_handler.rb +11 -17
  27. data/lib/puppet/defaults.rb +244 -119
  28. data/lib/puppet/environments.rb +8 -0
  29. data/lib/puppet/external/nagios/base.rb +1 -1
  30. data/lib/puppet/external/pson/pure/generator.rb +1 -8
  31. data/lib/puppet/face/ca.rb +7 -0
  32. data/lib/puppet/face/file/download.rb +5 -2
  33. data/lib/puppet/face/file/store.rb +1 -1
  34. data/lib/puppet/face/instrumentation_data.rb +2 -1
  35. data/lib/puppet/face/instrumentation_listener.rb +2 -1
  36. data/lib/puppet/face/instrumentation_probe.rb +2 -1
  37. data/lib/puppet/face/module/build.rb +2 -2
  38. data/lib/puppet/face/module/generate.rb +20 -12
  39. data/lib/puppet/face/module/install.rb +4 -3
  40. data/lib/puppet/face/module/uninstall.rb +7 -0
  41. data/lib/puppet/face/module/upgrade.rb +11 -3
  42. data/lib/puppet/face/node/clean.rb +1 -1
  43. data/lib/puppet/face/parser.rb +99 -7
  44. data/lib/puppet/feature/base.rb +18 -12
  45. data/lib/puppet/feature/cfacter.rb +14 -0
  46. data/lib/puppet/feature/pe_license.rb +4 -0
  47. data/lib/puppet/file_bucket/dipper.rb +19 -12
  48. data/lib/puppet/file_bucket/file.rb +73 -10
  49. data/lib/puppet/file_serving/configuration/parser.rb +3 -3
  50. data/lib/puppet/file_system.rb +1 -1
  51. data/lib/puppet/file_system/file19.rb +41 -0
  52. data/lib/puppet/file_system/file19windows.rb +0 -1
  53. data/lib/puppet/file_system/uniquefile.rb +190 -0
  54. data/lib/puppet/forge.rb +34 -7
  55. data/lib/puppet/forge/errors.rb +5 -6
  56. data/lib/puppet/forge/repository.rb +14 -2
  57. data/lib/puppet/functions.rb +19 -12
  58. data/lib/puppet/functions/assert_type.rb +27 -10
  59. data/lib/puppet/functions/each.rb +111 -0
  60. data/lib/puppet/functions/epp.rb +54 -0
  61. data/lib/puppet/functions/filter.rb +113 -0
  62. data/lib/puppet/functions/inline_epp.rb +88 -0
  63. data/lib/puppet/functions/map.rb +97 -0
  64. data/lib/puppet/functions/match.rb +102 -0
  65. data/lib/puppet/functions/reduce.rb +94 -0
  66. data/lib/puppet/functions/slice.rb +126 -0
  67. data/lib/puppet/functions/with.rb +23 -0
  68. data/lib/puppet/indirector/catalog/compiler.rb +4 -4
  69. data/lib/puppet/indirector/data_binding/hiera.rb +2 -45
  70. data/lib/puppet/indirector/facts/couch.rb +3 -1
  71. data/lib/puppet/indirector/facts/facter.rb +52 -65
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +6 -3
  73. data/lib/puppet/indirector/hiera.rb +48 -0
  74. data/lib/puppet/indirector/indirection.rb +1 -1
  75. data/lib/puppet/indirector/request.rb +9 -3
  76. data/lib/puppet/indirector/resource/ral.rb +1 -1
  77. data/lib/puppet/indirector/rest.rb +7 -3
  78. data/lib/puppet/loaders.rb +0 -1
  79. data/lib/puppet/module.rb +2 -1
  80. data/lib/puppet/module_tool.rb +2 -0
  81. data/lib/puppet/module_tool/applications/application.rb +4 -5
  82. data/lib/puppet/module_tool/applications/builder.rb +64 -5
  83. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -2
  84. data/lib/puppet/module_tool/applications/unpacker.rb +14 -0
  85. data/lib/puppet/module_tool/applications/upgrader.rb +23 -13
  86. data/lib/puppet/module_tool/dependency.rb +12 -0
  87. data/lib/puppet/module_tool/errors/shared.rb +1 -1
  88. data/lib/puppet/module_tool/errors/upgrader.rb +20 -0
  89. data/lib/puppet/module_tool/installed_modules.rb +6 -1
  90. data/lib/puppet/module_tool/metadata.rb +53 -3
  91. data/lib/puppet/module_tool/modulefile.rb +1 -1
  92. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +7 -0
  93. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
  94. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -17
  95. data/lib/puppet/module_tool/tar/mini.rb +20 -2
  96. data/lib/puppet/network/http.rb +5 -0
  97. data/lib/puppet/network/http/api/v1.rb +2 -2
  98. data/lib/puppet/network/http/api/v2/environments.rb +15 -1
  99. data/lib/puppet/network/http/connection.rb +54 -68
  100. data/lib/puppet/network/http/factory.rb +44 -0
  101. data/lib/puppet/network/http/handler.rb +12 -6
  102. data/lib/puppet/network/http/nocache_pool.rb +21 -0
  103. data/lib/puppet/network/http/pool.rb +120 -0
  104. data/lib/puppet/network/http/rack/rest.rb +3 -1
  105. data/lib/puppet/network/http/session.rb +17 -0
  106. data/lib/puppet/network/http/site.rb +39 -0
  107. data/lib/puppet/network/http/webrick/rest.rb +3 -1
  108. data/lib/puppet/network/http_pool.rb +3 -4
  109. data/lib/puppet/node.rb +19 -6
  110. data/lib/puppet/node/environment.rb +34 -8
  111. data/lib/puppet/parser/ast/collection.rb +4 -0
  112. data/lib/puppet/parser/ast/collexpr.rb +1 -1
  113. data/lib/puppet/parser/ast/node.rb +5 -0
  114. data/lib/puppet/parser/ast/pops_bridge.rb +49 -6
  115. data/lib/puppet/parser/compiler.rb +66 -38
  116. data/lib/puppet/parser/e4_parser_adapter.rb +2 -2
  117. data/lib/puppet/parser/files.rb +76 -33
  118. data/lib/puppet/parser/functions.rb +1 -7
  119. data/lib/puppet/parser/functions/assert_type.rb +31 -0
  120. data/lib/puppet/parser/functions/contain.rb +15 -5
  121. data/lib/puppet/parser/functions/create_resources.rb +5 -1
  122. data/lib/puppet/parser/functions/digest.rb +5 -0
  123. data/lib/puppet/parser/functions/each.rb +46 -107
  124. data/lib/puppet/parser/functions/epp.rb +13 -9
  125. data/lib/puppet/parser/functions/file.rb +20 -12
  126. data/lib/puppet/parser/functions/filter.rb +32 -88
  127. data/lib/puppet/parser/functions/include.rb +12 -24
  128. data/lib/puppet/parser/functions/inline_epp.rb +9 -12
  129. data/lib/puppet/parser/functions/lookup.rb +1 -1
  130. data/lib/puppet/parser/functions/map.rb +30 -83
  131. data/lib/puppet/parser/functions/match.rb +28 -0
  132. data/lib/puppet/parser/functions/reduce.rb +69 -98
  133. data/lib/puppet/parser/functions/require.rb +13 -5
  134. data/lib/puppet/parser/functions/search.rb +6 -1
  135. data/lib/puppet/parser/functions/slice.rb +35 -103
  136. data/lib/puppet/parser/functions/template.rb +12 -5
  137. data/lib/puppet/parser/functions/with.rb +21 -0
  138. data/lib/puppet/parser/lexer.rb +1 -1
  139. data/lib/puppet/parser/parser_factory.rb +21 -33
  140. data/lib/puppet/parser/resource.rb +2 -3
  141. data/lib/puppet/parser/scope.rb +85 -15
  142. data/lib/puppet/pops.rb +9 -11
  143. data/lib/puppet/pops/adapters.rb +2 -1
  144. data/lib/puppet/pops/binder/bindings_checker.rb +4 -4
  145. data/lib/puppet/pops/binder/bindings_factory.rb +6 -6
  146. data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/bindings_loader.rb +2 -2
  148. data/lib/puppet/pops/binder/bindings_model.rb +58 -191
  149. data/lib/puppet/pops/binder/bindings_model_dumper.rb +1 -1
  150. data/lib/puppet/pops/binder/bindings_model_meta.rb +215 -0
  151. data/lib/puppet/pops/binder/injector.rb +9 -9
  152. data/lib/puppet/pops/binder/key_factory.rb +2 -2
  153. data/lib/puppet/pops/binder/lookup.rb +14 -6
  154. data/lib/puppet/pops/binder/producers.rb +9 -12
  155. data/lib/puppet/pops/evaluator/access_operator.rb +35 -29
  156. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +175 -0
  157. data/lib/puppet/pops/evaluator/callable_signature.rb +1 -2
  158. data/lib/puppet/pops/evaluator/closure.rb +151 -35
  159. data/lib/puppet/pops/evaluator/compare_operator.rb +26 -22
  160. data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -15
  161. data/lib/puppet/pops/evaluator/evaluator_impl.rb +277 -229
  162. data/lib/puppet/pops/evaluator/relationship_operator.rb +3 -2
  163. data/lib/puppet/pops/evaluator/runtime3_support.rb +86 -53
  164. data/lib/puppet/pops/functions/dispatch.rb +9 -4
  165. data/lib/puppet/pops/functions/dispatcher.rb +2 -169
  166. data/lib/puppet/pops/issue_reporter.rb +14 -6
  167. data/lib/puppet/pops/issues.rb +96 -21
  168. data/lib/puppet/pops/loader/base_loader.rb +3 -3
  169. data/lib/puppet/pops/loader/loader.rb +1 -1
  170. data/lib/puppet/pops/loader/loader_paths.rb +2 -21
  171. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
  172. data/lib/puppet/pops/loader/static_loader.rb +12 -2
  173. data/lib/puppet/pops/model/ast_transformer.rb +4 -24
  174. data/lib/puppet/pops/model/factory.rb +72 -10
  175. data/lib/puppet/pops/model/model.rb +82 -574
  176. data/lib/puppet/pops/model/model_label_provider.rb +4 -2
  177. data/lib/puppet/pops/model/model_meta.rb +576 -0
  178. data/lib/puppet/pops/model/model_tree_dumper.rb +27 -5
  179. data/lib/puppet/pops/parser/egrammar.ra +209 -221
  180. data/lib/puppet/pops/parser/eparser.rb +1459 -1431
  181. data/lib/puppet/pops/parser/evaluating_parser.rb +15 -75
  182. data/lib/puppet/pops/parser/lexer2.rb +14 -10
  183. data/lib/puppet/pops/parser/lexer_support.rb +6 -0
  184. data/lib/puppet/pops/parser/locator.rb +1 -1
  185. data/lib/puppet/pops/parser/parser_support.rb +31 -49
  186. data/lib/puppet/pops/patterns.rb +10 -10
  187. data/lib/puppet/pops/semantic_error.rb +1 -1
  188. data/lib/puppet/pops/types/class_loader.rb +24 -13
  189. data/lib/puppet/pops/types/type_calculator.rb +188 -87
  190. data/lib/puppet/pops/types/type_factory.rb +79 -53
  191. data/lib/puppet/pops/types/type_parser.rb +22 -16
  192. data/lib/puppet/pops/types/types.rb +283 -392
  193. data/lib/puppet/pops/types/types_meta.rb +223 -0
  194. data/lib/puppet/pops/utils.rb +16 -14
  195. data/lib/puppet/pops/validation/checker4_0.rb +264 -18
  196. data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
  197. data/lib/puppet/pops/visitor.rb +0 -103
  198. data/lib/puppet/provider/exec.rb +10 -1
  199. data/lib/puppet/provider/file/windows.rb +3 -4
  200. data/lib/puppet/provider/group/windows_adsi.rb +10 -10
  201. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -4
  202. data/lib/puppet/provider/package/apt.rb +5 -1
  203. data/lib/puppet/provider/package/gem.rb +7 -3
  204. data/lib/puppet/provider/package/openbsd.rb +84 -7
  205. data/lib/puppet/provider/package/pacman.rb +29 -4
  206. data/lib/puppet/provider/package/rpm.rb +5 -7
  207. data/lib/puppet/provider/package/sun.rb +5 -1
  208. data/lib/puppet/provider/package/windows.rb +6 -1
  209. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  210. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  211. data/lib/puppet/provider/package/windows/package.rb +13 -1
  212. data/lib/puppet/provider/package/yum.rb +7 -3
  213. data/lib/puppet/provider/package/zypper.rb +5 -1
  214. data/lib/puppet/provider/parsedfile.rb +17 -1
  215. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +6 -12
  216. data/lib/puppet/provider/service/freebsd.rb +12 -12
  217. data/lib/puppet/provider/service/init.rb +5 -0
  218. data/lib/puppet/provider/service/launchd.rb +0 -3
  219. data/lib/puppet/provider/service/openbsd.rb +8 -7
  220. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  221. data/lib/puppet/provider/sshkey/parsed.rb +5 -0
  222. data/lib/puppet/provider/user/user_role_add.rb +5 -4
  223. data/lib/puppet/provider/user/windows_adsi.rb +8 -8
  224. data/lib/puppet/provider/zone/solaris.rb +1 -1
  225. data/lib/puppet/reference/metaparameter.rb +8 -6
  226. data/lib/puppet/reports/store.rb +4 -9
  227. data/lib/puppet/resource.rb +75 -11
  228. data/lib/puppet/resource/catalog.rb +9 -7
  229. data/lib/puppet/resource/type.rb +27 -0
  230. data/lib/puppet/settings.rb +61 -41
  231. data/lib/puppet/settings/base_setting.rb +9 -3
  232. data/lib/puppet/settings/environment_conf.rb +32 -4
  233. data/lib/puppet/settings/file_setting.rb +9 -1
  234. data/lib/puppet/settings/priority_setting.rb +5 -5
  235. data/lib/puppet/ssl.rb +1 -0
  236. data/lib/puppet/ssl/certificate_authority.rb +15 -6
  237. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +2 -1
  238. data/lib/puppet/ssl/host.rb +3 -2
  239. data/lib/puppet/ssl/inventory.rb +11 -6
  240. data/lib/puppet/ssl/validator/default_validator.rb +1 -0
  241. data/lib/puppet/ssl/validator/no_validator.rb +3 -0
  242. data/lib/puppet/transaction.rb +29 -0
  243. data/lib/puppet/transaction/resource_harness.rb +16 -3
  244. data/lib/puppet/type.rb +71 -49
  245. data/lib/puppet/type/exec.rb +36 -8
  246. data/lib/puppet/type/file.rb +56 -16
  247. data/lib/puppet/type/file/content.rb +3 -3
  248. data/lib/puppet/type/file/mode.rb +12 -3
  249. data/lib/puppet/type/file/source.rb +4 -1
  250. data/lib/puppet/type/group.rb +1 -1
  251. data/lib/puppet/type/mount.rb +1 -3
  252. data/lib/puppet/type/resources.rb +59 -35
  253. data/lib/puppet/type/ssh_authorized_key.rb +54 -16
  254. data/lib/puppet/type/sshkey.rb +1 -1
  255. data/lib/puppet/type/user.rb +17 -11
  256. data/lib/puppet/type/yumrepo.rb +59 -8
  257. data/lib/puppet/type/zone.rb +3 -6
  258. data/lib/puppet/util.rb +64 -55
  259. data/lib/puppet/util/autoload.rb +2 -2
  260. data/lib/puppet/util/colors.rb +61 -19
  261. data/lib/puppet/util/command_line.rb +21 -4
  262. data/lib/puppet/util/execution.rb +41 -29
  263. data/lib/puppet/util/feature.rb +15 -4
  264. data/lib/puppet/util/filetype.rb +6 -2
  265. data/lib/puppet/util/http_proxy.rb +29 -2
  266. data/lib/puppet/util/lockfile.rb +1 -1
  267. data/lib/puppet/util/log/destinations.rb +7 -3
  268. data/lib/puppet/util/logging.rb +44 -14
  269. data/lib/puppet/util/pidlock.rb +11 -5
  270. data/lib/puppet/util/posix.rb +21 -31
  271. data/lib/puppet/util/profiler.rb +17 -9
  272. data/lib/puppet/util/profiler/aggregate.rb +85 -0
  273. data/lib/puppet/util/profiler/around_profiler.rb +67 -0
  274. data/lib/puppet/util/profiler/logging.rb +12 -11
  275. data/lib/puppet/util/profiler/wall_clock.rb +7 -6
  276. data/lib/puppet/util/rdoc.rb +8 -1
  277. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  278. data/lib/puppet/util/suidmanager.rb +1 -8
  279. data/lib/puppet/util/windows.rb +14 -3
  280. data/lib/puppet/util/windows/access_control_list.rb +4 -4
  281. data/lib/puppet/util/{adsi.rb → windows/adsi.rb} +99 -37
  282. data/lib/puppet/util/windows/api_types.rb +255 -0
  283. data/lib/puppet/util/windows/com.rb +224 -0
  284. data/lib/puppet/util/windows/error.rb +72 -5
  285. data/lib/puppet/util/windows/file.rb +254 -132
  286. data/lib/puppet/util/windows/process.rb +293 -177
  287. data/lib/puppet/util/windows/registry.rb +12 -2
  288. data/lib/puppet/util/windows/root_certs.rb +16 -9
  289. data/lib/puppet/util/windows/security.rb +501 -232
  290. data/lib/puppet/util/windows/sid.rb +80 -36
  291. data/lib/puppet/util/windows/string.rb +2 -0
  292. data/lib/puppet/util/windows/taskscheduler.rb +1241 -0
  293. data/lib/puppet/util/windows/user.rb +241 -57
  294. data/lib/puppet/vendor.rb +3 -1
  295. data/lib/puppet/vendor/load_pathspec.rb +1 -0
  296. data/lib/puppet/vendor/load_rgen.rb +1 -0
  297. data/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
  298. data/lib/puppet/vendor/pathspec/LICENSE +201 -0
  299. data/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
  300. data/lib/puppet/vendor/pathspec/README.md +53 -0
  301. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +121 -0
  302. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
  303. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
  304. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
  305. data/lib/puppet/vendor/require_vendored.rb +2 -0
  306. data/lib/puppet/vendor/rgen/CHANGELOG +197 -0
  307. data/lib/puppet/vendor/rgen/MIT-LICENSE +20 -0
  308. data/lib/puppet/vendor/rgen/PUPPET_README.md +6 -0
  309. data/lib/puppet/vendor/rgen/README.rdoc +78 -0
  310. data/lib/puppet/vendor/rgen/Rakefile +41 -0
  311. data/lib/puppet/vendor/rgen/TODO +41 -0
  312. data/lib/puppet/vendor/rgen/anounce.txt +61 -0
  313. data/lib/puppet/vendor/rgen/design_rationale.txt +71 -0
  314. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +54 -0
  315. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +32 -0
  316. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +562 -0
  317. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +45 -0
  318. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +43 -0
  319. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +103 -0
  320. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +89 -0
  321. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +559 -0
  322. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +26 -0
  323. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +20 -0
  324. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +91 -0
  325. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +28 -0
  326. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +37 -0
  327. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +172 -0
  328. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +45 -0
  329. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +218 -0
  330. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +81 -0
  331. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +69 -0
  332. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +47 -0
  333. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +167 -0
  334. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +91 -0
  335. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +129 -0
  336. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +63 -0
  337. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +140 -0
  338. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +289 -0
  339. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +66 -0
  340. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +66 -0
  341. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
  342. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +169 -0
  343. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +126 -0
  344. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +331 -0
  345. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +94 -0
  346. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +137 -0
  347. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +97 -0
  348. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +128 -0
  349. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +47 -0
  350. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +168 -0
  351. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +224 -0
  352. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +556 -0
  353. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +174 -0
  354. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +89 -0
  355. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +77 -0
  356. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
  357. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +168 -0
  358. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
  359. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +42 -0
  360. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +32 -0
  361. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +334 -0
  362. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +225 -0
  363. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +156 -0
  364. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +121 -0
  365. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +18 -0
  366. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +47 -0
  367. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +116 -0
  368. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +71 -0
  369. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +98 -0
  370. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +297 -0
  371. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +83 -0
  372. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +87 -0
  373. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +234 -0
  374. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +26 -0
  375. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +475 -0
  376. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +61 -0
  377. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +67 -0
  378. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +124 -0
  379. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +84 -0
  380. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +114 -0
  381. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +68 -0
  382. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +142 -0
  383. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +29 -0
  384. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +42 -0
  385. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +329 -0
  386. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +79 -0
  387. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +127 -0
  388. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +64 -0
  389. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +35 -0
  390. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +23 -0
  391. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +54 -0
  392. data/lib/puppet/vendor/rgen/test/environment_test.rb +90 -0
  393. data/lib/puppet/vendor/rgen/test/json_test.rb +171 -0
  394. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +1482 -0
  395. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +57 -0
  396. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +131 -0
  397. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +98 -0
  398. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +70 -0
  399. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +42 -0
  400. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +44 -0
  401. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +9 -0
  402. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +178 -0
  403. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +59 -0
  404. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +242 -0
  405. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +163 -0
  406. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +163 -0
  407. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +156 -0
  408. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +94 -0
  409. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +42 -0
  410. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +23 -0
  411. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +6 -0
  412. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +30 -0
  413. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +58 -0
  414. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +48 -0
  415. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +102 -0
  416. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +117 -0
  417. data/lib/puppet/vendor/rgen/test/rgen_test.rb +26 -0
  418. data/lib/puppet/vendor/rgen/test/template_language_test.rb +163 -0
  419. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +29 -0
  420. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +9 -0
  421. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +4 -0
  422. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
  423. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +1 -0
  424. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +12 -0
  425. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +5 -0
  426. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +11 -0
  427. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +7 -0
  428. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +5 -0
  429. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +8 -0
  430. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +8 -0
  431. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +7 -0
  432. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +12 -0
  433. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +1 -0
  434. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +3 -0
  435. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +5 -0
  436. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +3 -0
  437. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +3 -0
  438. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +24 -0
  439. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +13 -0
  440. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +10 -0
  441. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +17 -0
  442. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +31 -0
  443. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +9 -0
  444. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +3 -0
  445. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +4 -0
  446. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +29 -0
  447. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +119 -0
  448. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  449. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +1029 -0
  450. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +317 -0
  451. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +101 -0
  452. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +22 -0
  453. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +67 -0
  454. data/lib/puppet/vendor/rgen/test/transformer_test.rb +254 -0
  455. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +99 -0
  456. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +97 -0
  457. data/lib/puppet/vendor/rgen/test/util_test.rb +5 -0
  458. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +160 -0
  459. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
  460. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
  461. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
  462. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
  463. data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +6 -0
  464. data/lib/puppet/vendor/semantic/PUPPET_README.md +6 -0
  465. data/lib/puppet/version.rb +1 -1
  466. data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
  467. data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
  468. data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
  469. data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
  470. data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +1 -1
  471. data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
  472. data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
  473. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
  474. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
  475. data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +2 -2
  476. data/spec/fixtures/unit/parser/lexer/casestatement.pp +14 -14
  477. data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +3 -3
  478. data/spec/fixtures/unit/parser/lexer/classincludes.pp +3 -3
  479. data/spec/fixtures/unit/parser/lexer/classpathtest.pp +1 -1
  480. data/spec/fixtures/unit/parser/lexer/collection_override.pp +1 -1
  481. data/spec/fixtures/unit/parser/lexer/componentrequire.pp +2 -2
  482. data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +5 -5
  483. data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +2 -2
  484. data/spec/fixtures/unit/parser/lexer/filecreate.pp +2 -2
  485. data/spec/fixtures/unit/parser/lexer/ifexpression.pp +1 -1
  486. data/spec/fixtures/unit/parser/lexer/implicititeration.pp +4 -4
  487. data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +3 -3
  488. data/spec/fixtures/unit/parser/lexer/multisubs.pp +2 -2
  489. data/spec/fixtures/unit/parser/lexer/namevartest.pp +2 -2
  490. data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +1 -1
  491. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +1 -1
  492. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +14 -14
  493. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +3 -3
  494. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +3 -3
  495. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +1 -1
  496. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +1 -1
  497. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +2 -2
  498. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +5 -5
  499. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +2 -2
  500. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +2 -2
  501. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +1 -1
  502. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +4 -4
  503. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +3 -3
  504. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +2 -2
  505. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +2 -2
  506. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +1 -1
  507. data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
  508. data/spec/fixtures/unit/type/user/authorized_keys +1 -1
  509. data/spec/integration/agent/logging_spec.rb +4 -0
  510. data/spec/integration/application/doc_spec.rb +4 -3
  511. data/spec/integration/configurer_spec.rb +0 -14
  512. data/spec/integration/defaults_spec.rb +26 -0
  513. data/spec/integration/environments/default_manifest_spec.rb +274 -0
  514. data/spec/integration/faces/documentation_spec.rb +0 -4
  515. data/spec/integration/file_bucket/file_spec.rb +21 -0
  516. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -2
  517. data/spec/integration/indirector/catalog/queue_spec.rb +0 -2
  518. data/spec/integration/indirector/facts/facter_spec.rb +1 -1
  519. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  520. data/spec/integration/node/environment_spec.rb +24 -8
  521. data/spec/integration/parser/catalog_spec.rb +10 -10
  522. data/spec/integration/parser/class_spec.rb +37 -0
  523. data/spec/integration/parser/collector_spec.rb +234 -75
  524. data/spec/integration/parser/compiler_spec.rb +385 -401
  525. data/spec/integration/parser/conditionals_spec.rb +117 -0
  526. data/spec/integration/parser/future_compiler_spec.rb +359 -8
  527. data/spec/integration/parser/node_spec.rb +185 -0
  528. data/spec/integration/parser/resource_expressions_spec.rb +286 -0
  529. data/spec/integration/parser/ruby_manifest_spec.rb +0 -4
  530. data/spec/integration/parser/scope_spec.rb +94 -151
  531. data/spec/integration/provider/cron/crontab_spec.rb +137 -148
  532. data/spec/integration/ssl/certificate_authority_spec.rb +26 -0
  533. data/spec/integration/ssl/certificate_request_spec.rb +0 -6
  534. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -2
  535. data/spec/integration/ssl/host_spec.rb +0 -2
  536. data/spec/integration/transaction_spec.rb +16 -0
  537. data/spec/integration/type/file_spec.rb +14 -13
  538. data/spec/integration/type/nagios_spec.rb +6 -15
  539. data/spec/integration/type/sshkey_spec.rb +22 -0
  540. data/spec/integration/type/tidy_spec.rb +3 -0
  541. data/spec/integration/type/user_spec.rb +8 -3
  542. data/spec/integration/util/autoload_spec.rb +6 -6
  543. data/spec/integration/util/rdoc/parser_spec.rb +7 -0
  544. data/spec/integration/util/windows/process_spec.rb +12 -0
  545. data/spec/integration/util/windows/security_spec.rb +36 -35
  546. data/spec/integration/util/windows/user_spec.rb +75 -9
  547. data/spec/integration/util_spec.rb +2 -2
  548. data/spec/lib/matchers/resource.rb +1 -0
  549. data/spec/lib/puppet_spec/compiler.rb +15 -2
  550. data/spec/lib/puppet_spec/files.rb +10 -0
  551. data/spec/lib/puppet_spec/language.rb +74 -0
  552. data/spec/lib/puppet_spec/matchers.rb +59 -32
  553. data/spec/lib/puppet_spec/module_tool/stub_source.rb +3 -0
  554. data/spec/shared_behaviours/hiera_indirections.rb +99 -0
  555. data/spec/shared_behaviours/iterative_functions.rb +69 -0
  556. data/spec/unit/application/apply_spec.rb +4 -2
  557. data/spec/unit/application/doc_spec.rb +17 -13
  558. data/spec/unit/application/master_spec.rb +35 -27
  559. data/spec/unit/application/resource_spec.rb +0 -5
  560. data/spec/unit/configurer/downloader_factory_spec.rb +96 -0
  561. data/spec/unit/configurer/downloader_spec.rb +3 -24
  562. data/spec/unit/configurer/plugin_handler_spec.rb +22 -22
  563. data/spec/unit/configurer_spec.rb +0 -4
  564. data/spec/unit/defaults_spec.rb +30 -0
  565. data/spec/unit/face/config_spec.rb +2 -1
  566. data/spec/unit/face/module/build_spec.rb +2 -2
  567. data/spec/unit/face/module/install_spec.rb +8 -8
  568. data/spec/unit/face/parser_spec.rb +71 -33
  569. data/spec/unit/file_bucket/file_spec.rb +2 -2
  570. data/spec/unit/file_system/uniquefile_spec.rb +184 -0
  571. data/spec/unit/forge/errors_spec.rb +4 -6
  572. data/spec/unit/forge/module_release_spec.rb +178 -89
  573. data/spec/unit/forge/repository_spec.rb +110 -2
  574. data/spec/unit/forge_spec.rb +39 -3
  575. data/spec/unit/functions/assert_type_spec.rb +22 -3
  576. data/spec/unit/{parser/methods → functions}/each_spec.rb +21 -1
  577. data/spec/unit/{parser/functions → functions}/epp_spec.rb +61 -9
  578. data/spec/unit/{parser/methods → functions}/filter_spec.rb +34 -38
  579. data/spec/unit/{parser/functions → functions}/inline_epp_spec.rb +18 -3
  580. data/spec/unit/functions/map_spec.rb +169 -0
  581. data/spec/unit/functions/match_spec.rb +57 -0
  582. data/spec/unit/{parser/methods → functions}/reduce_spec.rb +23 -5
  583. data/spec/unit/{parser/methods → functions}/slice_spec.rb +34 -21
  584. data/spec/unit/functions/with_spec.rb +35 -0
  585. data/spec/unit/functions4_spec.rb +7 -8
  586. data/spec/unit/indirector/catalog/compiler_spec.rb +0 -2
  587. data/spec/unit/indirector/catalog/static_compiler_spec.rb +11 -0
  588. data/spec/unit/indirector/data_binding/hiera_spec.rb +1 -96
  589. data/spec/unit/indirector/facts/facter_spec.rb +69 -102
  590. data/spec/unit/indirector/hiera_spec.rb +17 -0
  591. data/spec/unit/indirector/request_spec.rb +2 -4
  592. data/spec/unit/indirector/resource/ral_spec.rb +5 -0
  593. data/spec/unit/indirector/resource_type/parser_spec.rb +17 -12
  594. data/spec/unit/indirector/rest_spec.rb +36 -6
  595. data/spec/unit/interface/face_collection_spec.rb +2 -2
  596. data/spec/unit/module_tool/applications/builder_spec.rb +364 -14
  597. data/spec/unit/module_tool/applications/uninstaller_spec.rb +22 -0
  598. data/spec/unit/module_tool/applications/unpacker_spec.rb +40 -0
  599. data/spec/unit/module_tool/applications/upgrader_spec.rb +22 -0
  600. data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
  601. data/spec/unit/module_tool/metadata_spec.rb +72 -4
  602. data/spec/unit/module_tool/tar/mini_spec.rb +2 -1
  603. data/spec/unit/network/authentication_spec.rb +4 -0
  604. data/spec/unit/network/http/api/v2/environments_spec.rb +24 -3
  605. data/spec/unit/network/http/connection_spec.rb +127 -92
  606. data/spec/unit/network/http/factory_spec.rb +82 -0
  607. data/spec/unit/network/http/handler_spec.rb +23 -13
  608. data/spec/unit/network/http/nocache_pool_spec.rb +43 -0
  609. data/spec/unit/network/http/pool_spec.rb +269 -0
  610. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  611. data/spec/unit/network/http/session_spec.rb +43 -0
  612. data/spec/unit/network/http/site_spec.rb +90 -0
  613. data/spec/unit/network/http/webrick_spec.rb +1 -1
  614. data/spec/unit/network/http_pool_spec.rb +9 -6
  615. data/spec/unit/network/http_spec.rb +10 -0
  616. data/spec/unit/node/environment_spec.rb +54 -0
  617. data/spec/unit/node_spec.rb +3 -5
  618. data/spec/unit/parser/compiler_spec.rb +9 -2
  619. data/spec/unit/parser/files_spec.rb +19 -0
  620. data/spec/unit/parser/functions/contain_spec.rb +51 -0
  621. data/spec/unit/parser/functions/create_resources_spec.rb +8 -1
  622. data/spec/unit/parser/functions/digest_spec.rb +31 -0
  623. data/spec/unit/parser/functions/file_spec.rb +48 -5
  624. data/spec/unit/parser/functions/include_spec.rb +15 -1
  625. data/spec/unit/parser/functions/realize_spec.rb +43 -35
  626. data/spec/unit/parser/functions/require_spec.rb +19 -5
  627. data/spec/unit/parser/functions/search_spec.rb +5 -0
  628. data/spec/unit/parser/functions/shared.rb +82 -0
  629. data/spec/unit/parser/functions_spec.rb +1 -1
  630. data/spec/unit/parser/lexer_spec.rb +10 -1
  631. data/spec/unit/parser/type_loader_spec.rb +0 -1
  632. data/spec/unit/pops/benchmark_spec.rb +1 -1
  633. data/spec/unit/pops/binder/bindings_composer_spec.rb +24 -22
  634. data/spec/unit/pops/binder/injector_spec.rb +8 -6
  635. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  636. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +7 -4
  637. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +250 -30
  638. data/spec/unit/pops/evaluator/logical_ops_spec.rb +2 -2
  639. data/spec/unit/pops/evaluator/variables_spec.rb +0 -105
  640. data/spec/unit/pops/issues_spec.rb +170 -0
  641. data/spec/unit/pops/loaders/dependency_loader_spec.rb +17 -0
  642. data/spec/unit/pops/loaders/loader_paths_spec.rb +4 -15
  643. data/spec/unit/pops/loaders/loaders_spec.rb +31 -11
  644. data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -29
  645. data/spec/unit/pops/loaders/static_loader_spec.rb +6 -0
  646. data/spec/unit/pops/parser/epp_parser_spec.rb +38 -9
  647. data/spec/unit/pops/parser/evaluating_parser_spec.rb +0 -1
  648. data/spec/unit/pops/parser/lexer2_spec.rb +21 -4
  649. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +5 -0
  650. data/spec/unit/pops/parser/parse_calls_spec.rb +6 -3
  651. data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -5
  652. data/spec/unit/pops/parser/parse_containers_spec.rb +62 -7
  653. data/spec/unit/pops/parser/parse_resource_spec.rb +155 -73
  654. data/spec/unit/pops/parser/parser_spec.rb +16 -0
  655. data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +72 -0
  656. data/spec/unit/pops/transformer/transform_calls_spec.rb +1 -1
  657. data/spec/unit/pops/types/type_calculator_spec.rb +254 -57
  658. data/spec/unit/pops/types/type_factory_spec.rb +8 -3
  659. data/spec/unit/pops/types/type_parser_spec.rb +26 -5
  660. data/spec/unit/pops/validator/validator_spec.rb +143 -27
  661. data/spec/unit/provider/exec/posix_spec.rb +22 -14
  662. data/spec/unit/provider/exec/shell_spec.rb +2 -2
  663. data/spec/unit/provider/file/windows_spec.rb +7 -7
  664. data/spec/unit/provider/group/windows_adsi_spec.rb +17 -17
  665. data/spec/unit/provider/package/gem_spec.rb +10 -0
  666. data/spec/unit/provider/package/openbsd_spec.rb +66 -9
  667. data/spec/unit/provider/package/pacman_spec.rb +90 -71
  668. data/spec/unit/provider/package/windows/package_spec.rb +21 -6
  669. data/spec/unit/provider/package/yum_spec.rb +1 -0
  670. data/spec/unit/provider/parsedfile_spec.rb +1 -1
  671. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +9 -9
  672. data/spec/unit/provider/service/openbsd_spec.rb +26 -2
  673. data/spec/unit/provider/service/upstart_spec.rb +12 -1
  674. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +6 -0
  675. data/spec/unit/provider/user/user_role_add_spec.rb +23 -1
  676. data/spec/unit/provider/user/windows_adsi_spec.rb +17 -17
  677. data/spec/unit/reports/store_spec.rb +0 -16
  678. data/spec/unit/resource/catalog_spec.rb +0 -5
  679. data/spec/unit/resource_spec.rb +2 -2
  680. data/spec/unit/settings/autosign_setting_spec.rb +2 -2
  681. data/spec/unit/settings/environment_conf_spec.rb +77 -10
  682. data/spec/unit/settings/file_setting_spec.rb +5 -4
  683. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  684. data/spec/unit/settings_spec.rb +41 -3
  685. data/spec/unit/ssl/certificate_authority_spec.rb +25 -2
  686. data/spec/unit/ssl/inventory_spec.rb +13 -0
  687. data/spec/unit/ssl/validator_spec.rb +0 -1
  688. data/spec/unit/transaction/resource_harness_spec.rb +64 -0
  689. data/spec/unit/transaction_spec.rb +98 -47
  690. data/spec/unit/type/cron_spec.rb +3 -3
  691. data/spec/unit/type/exec_spec.rb +9 -0
  692. data/spec/unit/type/file/content_spec.rb +54 -71
  693. data/spec/unit/type/file/mode_spec.rb +26 -1
  694. data/spec/unit/type/file/source_spec.rb +26 -4
  695. data/spec/unit/type/file_spec.rb +3 -3
  696. data/spec/unit/type/nagios_spec.rb +12 -3
  697. data/spec/unit/type/resources_spec.rb +64 -30
  698. data/spec/unit/type/user_spec.rb +1 -1
  699. data/spec/unit/type/yumrepo_spec.rb +136 -0
  700. data/spec/unit/type/zone_spec.rb +44 -1
  701. data/spec/unit/type_spec.rb +20 -0
  702. data/spec/unit/util/colors_spec.rb +14 -8
  703. data/spec/unit/util/command_line_spec.rb +11 -7
  704. data/spec/unit/util/execution_spec.rb +35 -42
  705. data/spec/unit/util/feature_spec.rb +12 -0
  706. data/spec/unit/util/http_proxy_spec.rb +43 -1
  707. data/spec/unit/util/log/destinations_spec.rb +45 -1
  708. data/spec/unit/util/logging_spec.rb +38 -0
  709. data/spec/unit/util/pidlock_spec.rb +37 -1
  710. data/spec/unit/util/profiler/aggregate_spec.rb +59 -0
  711. data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
  712. data/spec/unit/util/profiler/logging_spec.rb +18 -29
  713. data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
  714. data/spec/unit/util/profiler_spec.rb +55 -0
  715. data/spec/unit/util/queue_spec.rb +0 -1
  716. data/spec/unit/util/rdoc/parser_spec.rb +14 -6
  717. data/spec/unit/util/tagging_spec.rb +1 -1
  718. data/spec/unit/util/windows/access_control_entry_spec.rb +1 -1
  719. data/spec/unit/util/{adsi_spec.rb → windows/adsi_spec.rb} +111 -108
  720. data/spec/unit/util/windows/api_types_spec.rb +28 -0
  721. data/spec/unit/util/windows/registry_spec.rb +7 -6
  722. data/spec/unit/util/windows/sid_spec.rb +3 -6
  723. data/spec/unit/util/windows/string_spec.rb +4 -0
  724. data/spec/unit/util/zaml_spec.rb +5 -1
  725. data/tasks/benchmark.rake +40 -5
  726. data/tasks/parser.rake +16 -2
  727. data/tasks/yard.rake +1 -1
  728. metadata +308 -150
  729. data/lib/puppet/file_system/tempfile.rb +0 -20
  730. data/lib/puppet/parser/e_parser_adapter.rb +0 -119
  731. data/lib/puppet/parser/functions/collect.rb +0 -15
  732. data/lib/puppet/parser/functions/select.rb +0 -15
  733. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +0 -109
  734. data/lib/puppet/pops/parser/lexer.rb +0 -753
  735. data/lib/puppet/pops/parser/makefile +0 -6
  736. data/lib/puppet/pops/validation/checker3_1.rb +0 -558
  737. data/lib/puppet/pops/validation/validator_factory_3_1.rb +0 -31
  738. data/lib/puppet/util/profiler/none.rb +0 -8
  739. data/spec/unit/face/certificate_request_spec.rb +0 -7
  740. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -7
  741. data/spec/unit/face/key_spec.rb +0 -7
  742. data/spec/unit/face/report_spec.rb +0 -7
  743. data/spec/unit/face/resource_spec.rb +0 -7
  744. data/spec/unit/face/resource_type_spec.rb +0 -7
  745. data/spec/unit/file_system/tempfile_spec.rb +0 -48
  746. data/spec/unit/parser/eparser_adapter_spec.rb +0 -407
  747. data/spec/unit/parser/methods/map_spec.rb +0 -184
  748. data/spec/unit/parser/methods/shared.rb +0 -45
  749. data/spec/unit/pops/parser/lexer_spec.rb +0 -840
  750. data/spec/unit/pops/transformer/transform_resource_spec.rb +0 -185
  751. data/spec/unit/util/profiler/none_spec.rb +0 -12
@@ -14,4 +14,20 @@ describe Puppet::Pops::Parser::Parser do
14
14
  model.body.class.should == Puppet::Pops::Model::AssignmentExpression
15
15
  end
16
16
 
17
+ it "should accept empty input and return a model" do
18
+ parser = Puppet::Pops::Parser::Parser.new()
19
+ model = parser.parse_string("").current
20
+ model.class.should == Puppet::Pops::Model::Program
21
+ model.body.class.should == Puppet::Pops::Model::Nop
22
+ end
23
+
24
+ it "should accept empty input containing only comments and report location at end of input" do
25
+ parser = Puppet::Pops::Parser::Parser.new()
26
+ model = parser.parse_string("# comment\n").current
27
+ model.class.should == Puppet::Pops::Model::Program
28
+ model.body.class.should == Puppet::Pops::Model::Nop
29
+ adapter = Puppet::Pops::Adapters::SourcePosAdapter.adapt(model.body)
30
+ expect(adapter.offset).to eq(10)
31
+ expect(adapter.length).to eq(0)
32
+ end
17
33
  end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ require 'puppet/pops'
4
+ require 'puppet/pops/evaluator/evaluator_impl'
5
+ require 'puppet_spec/pops'
6
+ require 'puppet_spec/scope'
7
+ require 'puppet/parser/e4_parser_adapter'
8
+
9
+
10
+ # relative to this spec file (./) does not work as this file is loaded by rspec
11
+ #require File.join(File.dirname(__FILE__), '/evaluator_rspec_helper')
12
+
13
+ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
14
+ include PuppetSpec::Pops
15
+ include PuppetSpec::Scope
16
+ before(:each) do
17
+
18
+ # These must be set since the is 3x logic that triggers on these even if the tests are explicit
19
+ # about selection of parser and evaluator
20
+ #
21
+ Puppet[:parser] = 'future'
22
+ end
23
+
24
+ let(:parser) { Puppet::Pops::Parser::EvaluatingParser.new }
25
+
26
+ context "captures-rest parameter" do
27
+ it 'is allowed in lambda when placed last' do
28
+ source = <<-CODE
29
+ foo() |$a, *$b| { $a + $b[0] }
30
+ CODE
31
+ expect do
32
+ parser.parse_string(source, __FILE__)
33
+ end.to_not raise_error()
34
+ end
35
+
36
+ it 'allows a type annotation' do
37
+ source = <<-CODE
38
+ foo() |$a, Integer *$b| { $a + $b[0] }
39
+ CODE
40
+ expect do
41
+ parser.parse_string(source, __FILE__)
42
+ end.to_not raise_error()
43
+ end
44
+
45
+ it 'is not allowed in lambda except last' do
46
+ source = <<-CODE
47
+ foo() |*$a, $b| { $a + $b[0] }
48
+ CODE
49
+ expect do
50
+ parser.parse_string(source, __FILE__)
51
+ end.to raise_error(Puppet::ParseError, /Parameter \$a is not last, and has 'captures rest'/)
52
+ end
53
+
54
+ it 'is not allowed in define' do
55
+ source = <<-CODE
56
+ define foo(*$a) { }
57
+ CODE
58
+ expect do
59
+ parser.parse_string(source, __FILE__)
60
+ end.to raise_error(Puppet::ParseError, /Parameter \$a has 'captures rest' - not supported in a 'define'/)
61
+ end
62
+
63
+ it 'is not allowed in class' do
64
+ source = <<-CODE
65
+ class foo(*$a) { }
66
+ CODE
67
+ expect do
68
+ parser.parse_string(source, __FILE__)
69
+ end.to raise_error(Puppet::ParseError, /Parameter \$a has 'captures rest' - not supported in a Host Class Definition/)
70
+ end
71
+ end
72
+ end
@@ -34,6 +34,7 @@ describe "transformation to Puppet AST for function calls" do
34
34
  "realize bar" => '(invoke realize bar)',
35
35
  "contain bar" => '(invoke contain bar)',
36
36
  "include bar" => '(invoke include bar)',
37
+ "tag bar" => '(invoke tag bar)',
37
38
 
38
39
  "info bar" => '(invoke info bar)',
39
40
  "notice bar" => '(invoke notice bar)',
@@ -54,7 +55,6 @@ describe "transformation to Puppet AST for function calls" do
54
55
 
55
56
  {
56
57
  "foo bar" => '(block foo bar)',
57
- "tag bar" => '(block tag bar)',
58
58
  "tag" => 'tag',
59
59
  }.each do |source, result|
60
60
  it "should not transform #{source}, and instead produce #{result}" do
@@ -78,8 +78,13 @@ describe 'The type calculator' do
78
78
  Puppet::Pops::Types::TypeFactory.struct(type_hash)
79
79
  end
80
80
 
81
- def optional_object_t
82
- Puppet::Pops::Types::TypeFactory.optional_object()
81
+ def object_t
82
+ Puppet::Pops::Types::TypeFactory.any()
83
+ end
84
+
85
+ def unit_t
86
+ # Cannot be created via factory, the type is private to the type system
87
+ Puppet::Pops::Types::PUnitType.new
83
88
  end
84
89
 
85
90
  def types
@@ -88,8 +93,9 @@ describe 'The type calculator' do
88
93
 
89
94
  shared_context "types_setup" do
90
95
 
96
+ # Do not include the special type Unit in this list
91
97
  def all_types
92
- [ Puppet::Pops::Types::PObjectType,
98
+ [ Puppet::Pops::Types::PAnyType,
93
99
  Puppet::Pops::Types::PNilType,
94
100
  Puppet::Pops::Types::PDataType,
95
101
  Puppet::Pops::Types::PScalarType,
@@ -102,7 +108,7 @@ describe 'The type calculator' do
102
108
  Puppet::Pops::Types::PCollectionType,
103
109
  Puppet::Pops::Types::PArrayType,
104
110
  Puppet::Pops::Types::PHashType,
105
- Puppet::Pops::Types::PRubyType,
111
+ Puppet::Pops::Types::PRuntimeType,
106
112
  Puppet::Pops::Types::PHostClassType,
107
113
  Puppet::Pops::Types::PResourceType,
108
114
  Puppet::Pops::Types::PPatternType,
@@ -111,6 +117,9 @@ describe 'The type calculator' do
111
117
  Puppet::Pops::Types::PStructType,
112
118
  Puppet::Pops::Types::PTupleType,
113
119
  Puppet::Pops::Types::PCallableType,
120
+ Puppet::Pops::Types::PType,
121
+ Puppet::Pops::Types::POptionalType,
122
+ Puppet::Pops::Types::PDefaultType,
114
123
  ]
115
124
  end
116
125
 
@@ -215,17 +224,18 @@ describe 'The type calculator' do
215
224
  calculator.infer(nil).class.should == Puppet::Pops::Types::PNilType
216
225
  end
217
226
 
218
- it ':undef translates to PNilType' do
219
- calculator.infer(:undef).class.should == Puppet::Pops::Types::PNilType
227
+ it ':undef translates to PRuntimeType' do
228
+ calculator.infer(:undef).class.should == Puppet::Pops::Types::PRuntimeType
220
229
  end
221
230
 
222
- it 'an instance of class Foo translates to PRubyType[Foo]' do
231
+ it 'an instance of class Foo translates to PRuntimeType[ruby, Foo]' do
223
232
  class Foo
224
233
  end
225
234
 
226
235
  t = calculator.infer(Foo.new)
227
- t.class.should == Puppet::Pops::Types::PRubyType
228
- t.ruby_class.should == 'Foo'
236
+ t.class.should == Puppet::Pops::Types::PRuntimeType
237
+ t.runtime.should == :ruby
238
+ t.runtime_type_name.should == 'Foo'
229
239
  end
230
240
 
231
241
  context 'array' do
@@ -278,8 +288,8 @@ describe 'The type calculator' do
278
288
  calculator.infer(['one', /two/]).element_type.class.should == Puppet::Pops::Types::PScalarType
279
289
  end
280
290
 
281
- it 'with string and symbol values translates to PArrayType[PObjectType]' do
282
- calculator.infer(['one', :two]).element_type.class.should == Puppet::Pops::Types::PObjectType
291
+ it 'with string and symbol values translates to PArrayType[PAnyType]' do
292
+ calculator.infer(['one', :two]).element_type.class.should == Puppet::Pops::Types::PAnyType
283
293
  end
284
294
 
285
295
  it 'with fixnum and nil values translates to PArrayType[PIntegerType]' do
@@ -328,17 +338,18 @@ describe 'The type calculator' do
328
338
  calculator.infer({:first => 1, :second => 2}).class.should == Puppet::Pops::Types::PHashType
329
339
  end
330
340
 
331
- it 'with symbolic keys translates to PHashType[PRubyType[Symbol],value]' do
341
+ it 'with symbolic keys translates to PHashType[PRuntimeType[ruby, Symbol], value]' do
332
342
  k = calculator.infer({:first => 1, :second => 2}).key_type
333
- k.class.should == Puppet::Pops::Types::PRubyType
334
- k.ruby_class.should == 'Symbol'
343
+ k.class.should == Puppet::Pops::Types::PRuntimeType
344
+ k.runtime.should == :ruby
345
+ k.runtime_type_name.should == 'Symbol'
335
346
  end
336
347
 
337
- it 'with string keys translates to PHashType[PStringType,value]' do
348
+ it 'with string keys translates to PHashType[PStringType, value]' do
338
349
  calculator.infer({'first' => 1, 'second' => 2}).key_type.class.should == Puppet::Pops::Types::PStringType
339
350
  end
340
351
 
341
- it 'with fixnum values translates to PHashType[key,PIntegerType]' do
352
+ it 'with fixnum values translates to PHashType[key, PIntegerType]' do
342
353
  calculator.infer({:first => 1, :second => 2}).element_type.class.should == Puppet::Pops::Types::PIntegerType
343
354
  end
344
355
  end
@@ -457,14 +468,14 @@ describe 'The type calculator' do
457
468
  expect(common_t.block_type).to be_nil
458
469
  end
459
470
 
460
- it 'compatible instances => the least specific' do
471
+ it 'compatible instances => the most specific' do
461
472
  t1 = callable_t(String)
462
473
  scalar_t = Puppet::Pops::Types::PScalarType.new
463
474
  t2 = callable_t(scalar_t)
464
475
  common_t = calculator.common_type(t1, t2)
465
476
  expect(common_t.class).to be(Puppet::Pops::Types::PCallableType)
466
477
  expect(common_t.param_types.class).to be(Puppet::Pops::Types::PTupleType)
467
- expect(common_t.param_types.types).to eql([scalar_t])
478
+ expect(common_t.param_types.types).to eql([string_t])
468
479
  expect(common_t.block_type).to be_nil
469
480
  end
470
481
 
@@ -491,15 +502,33 @@ describe 'The type calculator' do
491
502
  context 'computes assignability' do
492
503
  include_context "types_setup"
493
504
 
494
- context "for Object, such that" do
495
- it 'all types are assignable to Object' do
496
- t = Puppet::Pops::Types::PObjectType.new()
505
+ context 'for Unit, such that' do
506
+ it 'all types are assignable to Unit' do
507
+ t = Puppet::Pops::Types::PUnitType.new()
508
+ all_types.each { |t2| t2.new.should be_assignable_to(t) }
509
+ end
510
+
511
+ it 'Unit is assignable to all other types' do
512
+ t = Puppet::Pops::Types::PUnitType.new()
513
+ all_types.each { |t2| t.should be_assignable_to(t2.new) }
514
+ end
515
+
516
+ it 'Unit is assignable to Unit' do
517
+ t = Puppet::Pops::Types::PUnitType.new()
518
+ t2 = Puppet::Pops::Types::PUnitType.new()
519
+ t.should be_assignable_to(t2)
520
+ end
521
+ end
522
+
523
+ context "for Any, such that" do
524
+ it 'all types are assignable to Any' do
525
+ t = Puppet::Pops::Types::PAnyType.new()
497
526
  all_types.each { |t2| t2.new.should be_assignable_to(t) }
498
527
  end
499
528
 
500
- it 'Object is not assignable to anything but Object' do
501
- tested_types = all_types() - [Puppet::Pops::Types::PObjectType]
502
- t = Puppet::Pops::Types::PObjectType.new()
529
+ it 'Any is not assignable to anything but Any' do
530
+ tested_types = all_types() - [Puppet::Pops::Types::PAnyType]
531
+ t = Puppet::Pops::Types::PAnyType.new()
503
532
  tested_types.each { |t2| t.should_not be_assignable_to(t2.new) }
504
533
  end
505
534
  end
@@ -530,7 +559,7 @@ describe 'The type calculator' do
530
559
  end
531
560
 
532
561
  it 'Data is not assignable to any disjunct type' do
533
- tested_types = all_types - [Puppet::Pops::Types::PObjectType, Puppet::Pops::Types::PDataType] - scalar_types
562
+ tested_types = all_types - [Puppet::Pops::Types::PAnyType, Puppet::Pops::Types::PDataType] - scalar_types
534
563
  t = Puppet::Pops::Types::PDataType.new()
535
564
  tested_types.each {|t2| t.should_not be_assignable_to(t2.new) }
536
565
  end
@@ -549,7 +578,7 @@ describe 'The type calculator' do
549
578
  end
550
579
 
551
580
  it 'Scalar is not assignable to any disjunct type' do
552
- tested_types = all_types - [Puppet::Pops::Types::PObjectType, Puppet::Pops::Types::PDataType] - scalar_types
581
+ tested_types = all_types - [Puppet::Pops::Types::PAnyType, Puppet::Pops::Types::PDataType] - scalar_types
553
582
  t = Puppet::Pops::Types::PScalarType.new()
554
583
  tested_types.each {|t2| t.should_not be_assignable_to(t2.new) }
555
584
  end
@@ -569,7 +598,7 @@ describe 'The type calculator' do
569
598
 
570
599
  it 'Numeric is not assignable to any disjunct type' do
571
600
  tested_types = all_types - [
572
- Puppet::Pops::Types::PObjectType,
601
+ Puppet::Pops::Types::PAnyType,
573
602
  Puppet::Pops::Types::PDataType,
574
603
  Puppet::Pops::Types::PScalarType,
575
604
  ] - numeric_types
@@ -591,7 +620,7 @@ describe 'The type calculator' do
591
620
  end
592
621
 
593
622
  it 'Collection is not assignable to any disjunct type' do
594
- tested_types = all_types - [Puppet::Pops::Types::PObjectType] - collection_types
623
+ tested_types = all_types - [Puppet::Pops::Types::PAnyType] - collection_types
595
624
  t = Puppet::Pops::Types::PCollectionType.new()
596
625
  tested_types.each {|t2| t.should_not be_assignable_to(t2.new) }
597
626
  end
@@ -609,7 +638,7 @@ describe 'The type calculator' do
609
638
 
610
639
  it 'Array is not assignable to any disjunct type' do
611
640
  tested_types = all_types - [
612
- Puppet::Pops::Types::PObjectType,
641
+ Puppet::Pops::Types::PAnyType,
613
642
  Puppet::Pops::Types::PDataType] - collection_types
614
643
  t = Puppet::Pops::Types::PArrayType.new()
615
644
  tested_types.each {|t2| t.should_not be_assignable_to(t2.new) }
@@ -628,7 +657,7 @@ describe 'The type calculator' do
628
657
 
629
658
  it 'Hash is not assignable to any disjunct type' do
630
659
  tested_types = all_types - [
631
- Puppet::Pops::Types::PObjectType,
660
+ Puppet::Pops::Types::PAnyType,
632
661
  Puppet::Pops::Types::PDataType] - collection_types
633
662
  t = Puppet::Pops::Types::PHashType.new()
634
663
  tested_types.each {|t2| t.should_not be_assignable_to(t2.new) }
@@ -647,7 +676,7 @@ describe 'The type calculator' do
647
676
 
648
677
  it 'Tuple is not assignable to any disjunct type' do
649
678
  tested_types = all_types - [
650
- Puppet::Pops::Types::PObjectType,
679
+ Puppet::Pops::Types::PAnyType,
651
680
  Puppet::Pops::Types::PDataType] - collection_types
652
681
  t = Puppet::Pops::Types::PTupleType.new()
653
682
  tested_types.each {|t2| t.should_not be_assignable_to(t2.new) }
@@ -666,7 +695,7 @@ describe 'The type calculator' do
666
695
 
667
696
  it 'Struct is not assignable to any disjunct type' do
668
697
  tested_types = all_types - [
669
- Puppet::Pops::Types::PObjectType,
698
+ Puppet::Pops::Types::PAnyType,
670
699
  Puppet::Pops::Types::PDataType] - collection_types
671
700
  t = Puppet::Pops::Types::PStructType.new()
672
701
  tested_types.each {|t2| t.should_not be_assignable_to(t2.new) }
@@ -678,7 +707,7 @@ describe 'The type calculator' do
678
707
  t = Puppet::Pops::Types::PCallableType.new()
679
708
  tested_types = all_types - [
680
709
  Puppet::Pops::Types::PCallableType,
681
- Puppet::Pops::Types::PObjectType]
710
+ Puppet::Pops::Types::PAnyType]
682
711
  tested_types.each {|t2| t.should_not be_assignable_to(t2.new) }
683
712
  end
684
713
  end
@@ -793,9 +822,50 @@ describe 'The type calculator' do
793
822
  calculator.assignable?(pattern, enum).should == true
794
823
  end
795
824
 
825
+ it 'pattern should accept a variant where all variants are acceptable' do
826
+ pattern = pattern_t(/^\w+$/)
827
+ calculator.assignable?(pattern, variant_t(string_t('a'), string_t('b'))).should == true
828
+ end
829
+
830
+ end
831
+
832
+ context 'when dealing with enums' do
833
+ it 'should accept a string with matching content' do
834
+ calculator.assignable?(enum_t('a', 'b'), string_t('a')).should == true
835
+ calculator.assignable?(enum_t('a', 'b'), string_t('b')).should == true
836
+ calculator.assignable?(enum_t('a', 'b'), string_t('c')).should == false
837
+ end
838
+
839
+ it 'should accept an enum with matching enum' do
840
+ calculator.assignable?(enum_t('a', 'b'), enum_t('a', 'b')).should == true
841
+ calculator.assignable?(enum_t('a', 'b'), enum_t('a')).should == true
842
+ calculator.assignable?(enum_t('a', 'b'), enum_t('c')).should == false
843
+ end
844
+
845
+ it 'enum should accept a variant where all variants are acceptable' do
846
+ enum = enum_t('a', 'b')
847
+ calculator.assignable?(enum, variant_t(string_t('a'), string_t('b'))).should == true
848
+ end
796
849
  end
797
850
 
798
851
  context 'when dealing with tuples' do
852
+ it 'matches empty tuples' do
853
+ tuple1 = tuple_t()
854
+ tuple2 = tuple_t()
855
+
856
+ calculator.assignable?(tuple1, tuple2).should == true
857
+ calculator.assignable?(tuple2, tuple1).should == true
858
+ end
859
+
860
+ it 'accepts an empty tuple as assignable to a tuple with a min size of 0' do
861
+ tuple1 = tuple_t(Object)
862
+ factory.constrain_size(tuple1, 0, :default)
863
+ tuple2 = tuple_t()
864
+
865
+ calculator.assignable?(tuple1, tuple2).should == true
866
+ calculator.assignable?(tuple2, tuple1).should == false
867
+ end
868
+
799
869
  it 'should accept matching tuples' do
800
870
  tuple1 = tuple_t(1,2)
801
871
  tuple2 = tuple_t(Integer,Integer)
@@ -859,6 +929,17 @@ describe 'The type calculator' do
859
929
  calculator.assignable?(tuple1, array).should == true
860
930
  calculator.assignable?(array, tuple1).should == true
861
931
  end
932
+
933
+ it 'should accept empty array when tuple allows min of 0' do
934
+ tuple1 = tuple_t(Integer)
935
+ factory.constrain_size(tuple1, 0, 1)
936
+
937
+ array = array_t(Integer)
938
+ factory.constrain_size(array, 0, 0)
939
+
940
+ calculator.assignable?(tuple1, array).should == true
941
+ calculator.assignable?(array, tuple1).should == false
942
+ end
862
943
  end
863
944
 
864
945
  context 'when dealing with structs' do
@@ -960,21 +1041,48 @@ describe 'The type calculator' do
960
1041
  context 'when testing if x is instance of type t' do
961
1042
  include_context "types_setup"
962
1043
 
963
- it 'should consider undef to be instance of Object and NilType' do
1044
+ it 'should consider undef to be instance of Any, NilType, and optional' do
964
1045
  calculator.instance?(Puppet::Pops::Types::PNilType.new(), nil).should == true
965
- calculator.instance?(Puppet::Pops::Types::PObjectType.new(), nil).should == true
1046
+ calculator.instance?(Puppet::Pops::Types::PAnyType.new(), nil).should == true
1047
+ calculator.instance?(Puppet::Pops::Types::POptionalType.new(), nil).should == true
966
1048
  end
967
1049
 
968
- it 'should not consider undef to be an instance of any other type than Object and NilType and Data' do
969
- types_to_test = all_types - [
970
- Puppet::Pops::Types::PObjectType,
1050
+ it 'all types should be (ruby) instance of PAnyType' do
1051
+ all_types.each do |t|
1052
+ t.new.is_a?(Puppet::Pops::Types::PAnyType).should == true
1053
+ end
1054
+ end
1055
+
1056
+ it "should consider :undef to be instance of Runtime['ruby', 'Symbol]" do
1057
+ calculator.instance?(Puppet::Pops::Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => 'Symbol'), :undef).should == true
1058
+ end
1059
+
1060
+ it 'should not consider undef to be an instance of any other type than Any, NilType and Data' do
1061
+ types_to_test = all_types - [
1062
+ Puppet::Pops::Types::PAnyType,
971
1063
  Puppet::Pops::Types::PNilType,
972
- Puppet::Pops::Types::PDataType]
1064
+ Puppet::Pops::Types::PDataType,
1065
+ Puppet::Pops::Types::POptionalType,
1066
+ ]
973
1067
 
974
1068
  types_to_test.each {|t| calculator.instance?(t.new, nil).should == false }
975
1069
  types_to_test.each {|t| calculator.instance?(t.new, :undef).should == false }
976
1070
  end
977
1071
 
1072
+ it 'should consider default to be instance of Default and Any' do
1073
+ calculator.instance?(Puppet::Pops::Types::PDefaultType.new(), :default).should == true
1074
+ calculator.instance?(Puppet::Pops::Types::PAnyType.new(), :default).should == true
1075
+ end
1076
+
1077
+ it 'should not consider "default" to be an instance of anything but Default, and Any' do
1078
+ types_to_test = all_types - [
1079
+ Puppet::Pops::Types::PAnyType,
1080
+ Puppet::Pops::Types::PDefaultType,
1081
+ ]
1082
+
1083
+ types_to_test.each {|t| calculator.instance?(t.new, :default).should == false }
1084
+ end
1085
+
978
1086
  it 'should consider fixnum instanceof PIntegerType' do
979
1087
  calculator.instance?(Puppet::Pops::Types::PIntegerType.new(), 1).should == true
980
1088
  end
@@ -1075,7 +1183,7 @@ describe 'The type calculator' do
1075
1183
 
1076
1184
  context 'and t is Data' do
1077
1185
  it 'undef should be considered instance of Data' do
1078
- calculator.instance?(data_t, :undef).should == true
1186
+ calculator.instance?(data_t, nil).should == true
1079
1187
  end
1080
1188
 
1081
1189
  it 'other symbols should not be considered instance of Data' do
@@ -1092,21 +1200,18 @@ describe 'The type calculator' do
1092
1200
 
1093
1201
  it 'a hash with nil/undef data should be considered instance of Data' do
1094
1202
  calculator.instance?(data_t, {'a' => nil}).should == true
1095
- calculator.instance?(data_t, {'a' => :undef}).should == true
1096
1203
  end
1097
1204
 
1098
- it 'a hash with nil/undef key should not considered instance of Data' do
1205
+ it 'a hash with nil/default key should not considered instance of Data' do
1099
1206
  calculator.instance?(data_t, {nil => 10}).should == false
1100
- calculator.instance?(data_t, {:undef => 10}).should == false
1207
+ calculator.instance?(data_t, {:default => 10}).should == false
1101
1208
  end
1102
1209
 
1103
- it 'an array with undef entries should be considered instance of Data' do
1104
- calculator.instance?(data_t, [:undef]).should == true
1210
+ it 'an array with nil entries should be considered instance of Data' do
1105
1211
  calculator.instance?(data_t, [nil]).should == true
1106
1212
  end
1107
1213
 
1108
- it 'an array with undef / data entries should be considered instance of Data' do
1109
- calculator.instance?(data_t, [1, :undef, 'a']).should == true
1214
+ it 'an array with nil + data entries should be considered instance of Data' do
1110
1215
  calculator.instance?(data_t, [1, nil, 'a']).should == true
1111
1216
  end
1112
1217
  end
@@ -1119,10 +1224,8 @@ describe 'The type calculator' do
1119
1224
  the_block = factory.LAMBDA(params,factory.literal(42))
1120
1225
  the_closure = Puppet::Pops::Evaluator::Closure.new(:fake_evaluator, the_block, :fake_scope)
1121
1226
  expect(calculator.instance?(all_callables_t, the_closure)).to be_true
1122
- # TODO: lambdas are currently unttypes, anything can be given if arg count is correct
1123
- expect(calculator.instance?(callable_t(optional_object_t), the_closure)).to be_true
1124
- # Arg count is wrong
1125
- expect(calculator.instance?(callable_t(optional_object_t, optional_object_t), the_closure)).to be_false
1227
+ expect(calculator.instance?(callable_t(object_t), the_closure)).to be_true
1228
+ expect(calculator.instance?(callable_t(object_t, object_t), the_closure)).to be_false
1126
1229
  end
1127
1230
 
1128
1231
  it 'a Function instance should be considered a Callable' do
@@ -1192,8 +1295,8 @@ describe 'The type calculator' do
1192
1295
  calculator.string(Puppet::Pops::Types::PType.new()).should == 'Type'
1193
1296
  end
1194
1297
 
1195
- it 'should yield \'Object\' for PObjectType' do
1196
- calculator.string(Puppet::Pops::Types::PObjectType.new()).should == 'Object'
1298
+ it 'should yield \'Object\' for PAnyType' do
1299
+ calculator.string(Puppet::Pops::Types::PAnyType.new()).should == 'Any'
1197
1300
  end
1198
1301
 
1199
1302
  it 'should yield \'Scalar\' for PScalarType' do
@@ -1397,20 +1500,29 @@ describe 'The type calculator' do
1397
1500
  expect(calculator.string(callable_t(String, Integer))).to eql("Callable[String, Integer]")
1398
1501
  end
1399
1502
 
1400
- it "should yield 'Callable[t,min.max]' for callable with size constraint (infinite max)" do
1503
+ it "should yield 'Callable[t,min,max]' for callable with size constraint (infinite max)" do
1401
1504
  expect(calculator.string(callable_t(String, 0))).to eql("Callable[String, 0, default]")
1402
1505
  end
1403
1506
 
1404
- it "should yield 'Callable[t,min.max]' for callable with size constraint (capped max)" do
1507
+ it "should yield 'Callable[t,min,max]' for callable with size constraint (capped max)" do
1405
1508
  expect(calculator.string(callable_t(String, 0, 3))).to eql("Callable[String, 0, 3]")
1406
1509
  end
1407
1510
 
1511
+ it "should yield 'Callable[min,max]' callable with size > 0" do
1512
+ expect(calculator.string(callable_t(0, 0))).to eql("Callable[0, 0]")
1513
+ expect(calculator.string(callable_t(0, 1))).to eql("Callable[0, 1]")
1514
+ expect(calculator.string(callable_t(0, :default))).to eql("Callable[0, default]")
1515
+ end
1516
+
1408
1517
  it "should yield 'Callable[Callable]' for callable with block" do
1409
1518
  expect(calculator.string(callable_t(all_callables_t))).to eql("Callable[0, 0, Callable]")
1410
1519
  expect(calculator.string(callable_t(string_t, all_callables_t))).to eql("Callable[String, Callable]")
1411
1520
  expect(calculator.string(callable_t(string_t, 1,1, all_callables_t))).to eql("Callable[String, 1, 1, Callable]")
1412
1521
  end
1413
1522
 
1523
+ it "should yield Unit for a Unit type" do
1524
+ expect(calculator.string(unit_t)).to eql('Unit')
1525
+ end
1414
1526
  end
1415
1527
 
1416
1528
  context 'when processing meta type' do
@@ -1428,7 +1540,7 @@ describe 'The type calculator' do
1428
1540
  calculator.infer(Puppet::Pops::Types::PCollectionType.new()).is_a?(ptype).should() == true
1429
1541
  calculator.infer(Puppet::Pops::Types::PArrayType.new() ).is_a?(ptype).should() == true
1430
1542
  calculator.infer(Puppet::Pops::Types::PHashType.new() ).is_a?(ptype).should() == true
1431
- calculator.infer(Puppet::Pops::Types::PRubyType.new() ).is_a?(ptype).should() == true
1543
+ calculator.infer(Puppet::Pops::Types::PRuntimeType.new() ).is_a?(ptype).should() == true
1432
1544
  calculator.infer(Puppet::Pops::Types::PHostClassType.new() ).is_a?(ptype).should() == true
1433
1545
  calculator.infer(Puppet::Pops::Types::PResourceType.new() ).is_a?(ptype).should() == true
1434
1546
  calculator.infer(Puppet::Pops::Types::PEnumType.new() ).is_a?(ptype).should() == true
@@ -1453,7 +1565,7 @@ describe 'The type calculator' do
1453
1565
  calculator.string(calculator.infer(Puppet::Pops::Types::PCollectionType.new())).should == "Type[Collection]"
1454
1566
  calculator.string(calculator.infer(Puppet::Pops::Types::PArrayType.new() )).should == "Type[Array[?]]"
1455
1567
  calculator.string(calculator.infer(Puppet::Pops::Types::PHashType.new() )).should == "Type[Hash[?, ?]]"
1456
- calculator.string(calculator.infer(Puppet::Pops::Types::PRubyType.new() )).should == "Type[Ruby[?]]"
1568
+ calculator.string(calculator.infer(Puppet::Pops::Types::PRuntimeType.new() )).should == "Type[Runtime[?, ?]]"
1457
1569
  calculator.string(calculator.infer(Puppet::Pops::Types::PHostClassType.new() )).should == "Type[Class]"
1458
1570
  calculator.string(calculator.infer(Puppet::Pops::Types::PResourceType.new() )).should == "Type[Resource]"
1459
1571
  calculator.string(calculator.infer(Puppet::Pops::Types::PEnumType.new() )).should == "Type[Enum]"
@@ -1462,6 +1574,10 @@ describe 'The type calculator' do
1462
1574
  calculator.string(calculator.infer(Puppet::Pops::Types::PTupleType.new() )).should == "Type[Tuple]"
1463
1575
  calculator.string(calculator.infer(Puppet::Pops::Types::POptionalType.new() )).should == "Type[Optional]"
1464
1576
  calculator.string(calculator.infer(Puppet::Pops::Types::PCallableType.new() )).should == "Type[Callable]"
1577
+
1578
+ calculator.infer(Puppet::Pops::Types::PResourceType.new(:type_name => 'foo::fee::fum')).to_s.should == "Type[Foo::Fee::Fum]"
1579
+ calculator.string(calculator.infer(Puppet::Pops::Types::PResourceType.new(:type_name => 'foo::fee::fum'))).should == "Type[Foo::Fee::Fum]"
1580
+ calculator.infer(Puppet::Pops::Types::PResourceType.new(:type_name => 'Foo::Fee::Fum')).to_s.should == "Type[Foo::Fee::Fum]"
1465
1581
  end
1466
1582
 
1467
1583
  it "computes the common type of PType's type parameter" do
@@ -1584,6 +1700,87 @@ describe 'The type calculator' do
1584
1700
  end
1585
1701
  end
1586
1702
 
1703
+ context 'when determening callability' do
1704
+ context 'and given is exact' do
1705
+ it 'with callable' do
1706
+ required = callable_t(string_t)
1707
+ given = callable_t(string_t)
1708
+ calculator.callable?(required, given).should == true
1709
+ end
1710
+
1711
+ it 'with args tuple' do
1712
+ required = callable_t(string_t)
1713
+ given = tuple_t(string_t)
1714
+ calculator.callable?(required, given).should == true
1715
+ end
1716
+
1717
+ it 'with args tuple having a block' do
1718
+ required = callable_t(string_t, callable_t(string_t))
1719
+ given = tuple_t(string_t, callable_t(string_t))
1720
+ calculator.callable?(required, given).should == true
1721
+ end
1722
+
1723
+ it 'with args array' do
1724
+ required = callable_t(string_t)
1725
+ given = array_t(string_t)
1726
+ factory.constrain_size(given, 1, 1)
1727
+ calculator.callable?(required, given).should == true
1728
+ end
1729
+ end
1730
+
1731
+ context 'and given is more generic' do
1732
+ it 'with callable' do
1733
+ required = callable_t(string_t)
1734
+ given = callable_t(object_t)
1735
+ calculator.callable?(required, given).should == true
1736
+ end
1737
+
1738
+ it 'with args tuple' do
1739
+ required = callable_t(string_t)
1740
+ given = tuple_t(object_t)
1741
+ calculator.callable?(required, given).should == false
1742
+ end
1743
+
1744
+ it 'with args tuple having a block' do
1745
+ required = callable_t(string_t, callable_t(string_t))
1746
+ given = tuple_t(string_t, callable_t(object_t))
1747
+ calculator.callable?(required, given).should == true
1748
+ end
1749
+
1750
+ it 'with args tuple having a block with captures rest' do
1751
+ required = callable_t(string_t, callable_t(string_t))
1752
+ given = tuple_t(string_t, callable_t(object_t, 0, :default))
1753
+ calculator.callable?(required, given).should == true
1754
+ end
1755
+ end
1756
+
1757
+ context 'and given is more specific' do
1758
+ it 'with callable' do
1759
+ required = callable_t(object_t)
1760
+ given = callable_t(string_t)
1761
+ calculator.callable?(required, given).should == false
1762
+ end
1763
+
1764
+ it 'with args tuple' do
1765
+ required = callable_t(object_t)
1766
+ given = tuple_t(string_t)
1767
+ calculator.callable?(required, given).should == true
1768
+ end
1769
+
1770
+ it 'with args tuple having a block' do
1771
+ required = callable_t(string_t, callable_t(object_t))
1772
+ given = tuple_t(string_t, callable_t(string_t))
1773
+ calculator.callable?(required, given).should == false
1774
+ end
1775
+
1776
+ it 'with args tuple having a block with captures rest' do
1777
+ required = callable_t(string_t, callable_t(object_t))
1778
+ given = tuple_t(string_t, callable_t(string_t, 0, :default))
1779
+ calculator.callable?(required, given).should == false
1780
+ end
1781
+ end
1782
+ end
1783
+
1587
1784
  matcher :be_assignable_to do |type|
1588
1785
  calc = Puppet::Pops::Types::TypeCalculator.new
1589
1786