puppet 5.4.0-x86-mingw32 → 5.5.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 (441) hide show
  1. data/Gemfile +3 -3
  2. data/MAINTAINERS +0 -19
  3. data/README.md +5 -5
  4. data/Rakefile +26 -0
  5. data/conf/auth.conf +5 -0
  6. data/ext/project_data.yaml +1 -0
  7. data/ext/regexp_nodes/regexp_nodes.rb +3 -4
  8. data/lib/puppet/application/apply.rb +1 -1
  9. data/lib/puppet/application/cert.rb +3 -1
  10. data/lib/puppet/application/device.rb +100 -13
  11. data/lib/puppet/application/facts.rb +5 -0
  12. data/lib/puppet/application/lookup.rb +12 -2
  13. data/lib/puppet/configurer.rb +37 -17
  14. data/lib/puppet/confine.rb +4 -1
  15. data/lib/puppet/datatypes.rb +1 -1
  16. data/lib/puppet/environments.rb +1 -1
  17. data/lib/puppet/error.rb +6 -3
  18. data/lib/puppet/external/dot.rb +0 -7
  19. data/lib/puppet/external/nagios/parser.rb +1 -1
  20. data/lib/puppet/face/config.rb +92 -10
  21. data/lib/puppet/face/epp.rb +31 -6
  22. data/lib/puppet/face/facts.rb +49 -0
  23. data/lib/puppet/face/help.rb +33 -35
  24. data/lib/puppet/face/help/action.erb +1 -1
  25. data/lib/puppet/face/help/face.erb +1 -1
  26. data/lib/puppet/face/man.rb +55 -12
  27. data/lib/puppet/face/parser.rb +30 -3
  28. data/lib/puppet/file_bucket/file.rb +0 -2
  29. data/lib/puppet/file_serving/base.rb +10 -10
  30. data/lib/puppet/forge.rb +3 -3
  31. data/lib/puppet/forge/errors.rb +3 -3
  32. data/lib/puppet/functions.rb +1 -3
  33. data/lib/puppet/functions/alert.rb +1 -1
  34. data/lib/puppet/functions/all.rb +6 -6
  35. data/lib/puppet/functions/annotate.rb +10 -10
  36. data/lib/puppet/functions/any.rb +6 -6
  37. data/lib/puppet/functions/assert_type.rb +4 -4
  38. data/lib/puppet/functions/binary_file.rb +14 -2
  39. data/lib/puppet/functions/break.rb +31 -2
  40. data/lib/puppet/functions/call.rb +4 -4
  41. data/lib/puppet/functions/contain.rb +19 -3
  42. data/lib/puppet/functions/convert_to.rb +6 -5
  43. data/lib/puppet/functions/crit.rb +1 -1
  44. data/lib/puppet/functions/debug.rb +1 -1
  45. data/lib/puppet/functions/defined.rb +11 -9
  46. data/lib/puppet/functions/dig.rb +26 -2
  47. data/lib/puppet/functions/each.rb +8 -8
  48. data/lib/puppet/functions/emerg.rb +1 -1
  49. data/lib/puppet/functions/empty.rb +79 -0
  50. data/lib/puppet/functions/err.rb +1 -1
  51. data/lib/puppet/functions/eyaml_lookup_key.rb +3 -1
  52. data/lib/puppet/functions/filter.rb +7 -7
  53. data/lib/puppet/functions/find_file.rb +15 -1
  54. data/lib/puppet/functions/flatten.rb +64 -0
  55. data/lib/puppet/functions/hiera.rb +6 -6
  56. data/lib/puppet/functions/hiera_array.rb +6 -6
  57. data/lib/puppet/functions/hiera_hash.rb +6 -6
  58. data/lib/puppet/functions/hiera_include.rb +8 -8
  59. data/lib/puppet/functions/include.rb +28 -2
  60. data/lib/puppet/functions/info.rb +1 -1
  61. data/lib/puppet/functions/inline_epp.rb +2 -2
  62. data/lib/puppet/functions/join.rb +56 -0
  63. data/lib/puppet/functions/json_data.rb +2 -2
  64. data/lib/puppet/functions/keys.rb +25 -0
  65. data/lib/puppet/functions/length.rb +44 -0
  66. data/lib/puppet/functions/lest.rb +39 -1
  67. data/lib/puppet/functions/lookup.rb +2 -1
  68. data/lib/puppet/functions/map.rb +10 -9
  69. data/lib/puppet/functions/match.rb +6 -6
  70. data/lib/puppet/functions/new.rb +995 -2
  71. data/lib/puppet/functions/next.rb +1 -1
  72. data/lib/puppet/functions/notice.rb +1 -1
  73. data/lib/puppet/functions/reduce.rb +6 -6
  74. data/lib/puppet/functions/regsubst.rb +9 -3
  75. data/lib/puppet/functions/require.rb +36 -2
  76. data/lib/puppet/functions/return.rb +1 -1
  77. data/lib/puppet/functions/reverse_each.rb +71 -2
  78. data/lib/puppet/functions/slice.rb +23 -9
  79. data/lib/puppet/functions/split.rb +12 -10
  80. data/lib/puppet/functions/step.rb +73 -1
  81. data/lib/puppet/functions/strftime.rb +176 -2
  82. data/lib/puppet/functions/then.rb +65 -2
  83. data/lib/puppet/functions/tree_each.rb +19 -19
  84. data/lib/puppet/functions/type.rb +42 -1
  85. data/lib/puppet/functions/unique.rb +13 -13
  86. data/lib/puppet/functions/unwrap.rb +8 -4
  87. data/lib/puppet/functions/values.rb +25 -0
  88. data/lib/puppet/functions/versioncmp.rb +1 -1
  89. data/lib/puppet/functions/warning.rb +1 -1
  90. data/lib/puppet/functions/with.rb +6 -4
  91. data/lib/puppet/functions/yaml_data.rb +3 -1
  92. data/lib/puppet/indirector/certificate_status/file.rb +1 -1
  93. data/lib/puppet/indirector/facts/facter.rb +1 -3
  94. data/lib/puppet/indirector/facts/rest.rb +21 -0
  95. data/lib/puppet/indirector/facts/yaml.rb +0 -4
  96. data/lib/puppet/indirector/rest.rb +2 -2
  97. data/lib/puppet/module.rb +3 -3
  98. data/lib/puppet/module/task.rb +2 -3
  99. data/lib/puppet/module_tool/applications/application.rb +4 -4
  100. data/lib/puppet/module_tool/applications/builder.rb +2 -2
  101. data/lib/puppet/module_tool/applications/checksummer.rb +3 -3
  102. data/lib/puppet/module_tool/applications/unpacker.rb +2 -2
  103. data/lib/puppet/module_tool/metadata.rb +3 -3
  104. data/lib/puppet/network/authconfig.rb +1 -1
  105. data/lib/puppet/network/format_support.rb +1 -1
  106. data/lib/puppet/network/formats.rb +5 -7
  107. data/lib/puppet/network/http/api/indirected_routes.rb +1 -0
  108. data/lib/puppet/network/http/api/master/v3/environment.rb +2 -2
  109. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -2
  110. data/lib/puppet/network/http/error.rb +3 -3
  111. data/lib/puppet/network/resolver.rb +1 -2
  112. data/lib/puppet/parser/compiler.rb +12 -5
  113. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +1 -1
  114. data/lib/puppet/parser/functions/fqdn_rand.rb +15 -4
  115. data/lib/puppet/parser/functions/new.rb +31 -46
  116. data/lib/puppet/parser/parser_factory.rb +1 -1
  117. data/lib/puppet/parser/resource.rb +1 -1
  118. data/lib/puppet/parser/type_loader.rb +11 -11
  119. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  120. data/lib/puppet/pops/evaluator/collector_transformer.rb +1 -1
  121. data/lib/puppet/pops/evaluator/epp_evaluator.rb +2 -2
  122. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +2 -2
  123. data/lib/puppet/pops/evaluator/runtime3_support.rb +5 -2
  124. data/lib/puppet/pops/functions/dispatch.rb +1 -1
  125. data/lib/puppet/pops/issue_reporter.rb +18 -1
  126. data/lib/puppet/pops/issues.rb +6 -3
  127. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -2
  128. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -2
  129. data/lib/puppet/pops/loader/task_instantiator.rb +5 -5
  130. data/lib/puppet/pops/loader/type_definition_instantiator.rb +4 -1
  131. data/lib/puppet/pops/loaders.rb +18 -7
  132. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  133. data/lib/puppet/pops/lookup/lookup_adapter.rb +55 -6
  134. data/lib/puppet/pops/model/factory.rb +6 -3
  135. data/lib/puppet/pops/model/model_tree_dumper.rb +4 -0
  136. data/lib/puppet/pops/model/pn_transformer.rb +400 -0
  137. data/lib/puppet/pops/parser/egrammar.ra +1 -1
  138. data/lib/puppet/pops/parser/eparser.rb +1 -1
  139. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  140. data/lib/puppet/pops/parser/lexer_support.rb +3 -2
  141. data/lib/puppet/pops/parser/locator.rb +0 -2
  142. data/lib/puppet/pops/parser/pn_parser.rb +316 -0
  143. data/lib/puppet/pops/pcore.rb +17 -17
  144. data/lib/puppet/pops/pn.rb +236 -0
  145. data/lib/puppet/pops/serialization/json.rb +7 -7
  146. data/lib/puppet/pops/types/class_loader.rb +6 -3
  147. data/lib/puppet/pops/types/implementation_registry.rb +28 -35
  148. data/lib/puppet/pops/types/p_object_type.rb +3 -3
  149. data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
  150. data/lib/puppet/pops/types/p_type_set_type.rb +24 -1
  151. data/lib/puppet/pops/types/ruby_generator.rb +3 -4
  152. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  153. data/lib/puppet/pops/types/type_factory.rb +0 -4
  154. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  155. data/lib/puppet/pops/types/type_parser.rb +14 -7
  156. data/lib/puppet/pops/types/types.rb +1 -1
  157. data/lib/puppet/pops/utils.rb +2 -2
  158. data/lib/puppet/pops/validation/checker4_0.rb +6 -2
  159. data/lib/puppet/provider/group/groupadd.rb +3 -1
  160. data/lib/puppet/provider/group/windows_adsi.rb +4 -7
  161. data/lib/puppet/provider/nameservice.rb +3 -3
  162. data/lib/puppet/provider/package/pacman.rb +4 -4
  163. data/lib/puppet/provider/package/pip.rb +3 -3
  164. data/lib/puppet/provider/package/pkgdmg.rb +3 -3
  165. data/lib/puppet/provider/package/pkgutil.rb +2 -2
  166. data/lib/puppet/provider/package/portage.rb +9 -9
  167. data/lib/puppet/provider/package/zypper.rb +2 -2
  168. data/lib/puppet/provider/service/base.rb +1 -1
  169. data/lib/puppet/provider/service/smf.rb +3 -2
  170. data/lib/puppet/provider/service/systemd.rb +1 -1
  171. data/lib/puppet/provider/user/useradd.rb +6 -2
  172. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  173. data/lib/puppet/provider/yumrepo/inifile.rb +20 -9
  174. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  175. data/lib/puppet/reference/configuration.rb +2 -0
  176. data/lib/puppet/reference/type.rb +11 -11
  177. data/lib/puppet/resource.rb +1 -1
  178. data/lib/puppet/resource/capability_finder.rb +5 -5
  179. data/lib/puppet/resource/catalog.rb +6 -3
  180. data/lib/puppet/resource/status.rb +9 -2
  181. data/lib/puppet/resource/type.rb +1 -1
  182. data/lib/puppet/settings.rb +31 -19
  183. data/lib/puppet/settings/base_setting.rb +5 -0
  184. data/lib/puppet/settings/config_file.rb +1 -1
  185. data/lib/puppet/settings/ttl_setting.rb +5 -0
  186. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  187. data/lib/puppet/ssl/certificate_request.rb +0 -2
  188. data/lib/puppet/syntax_checkers/json.rb +1 -1
  189. data/lib/puppet/transaction/additional_resource_generator.rb +2 -2
  190. data/lib/puppet/transaction/event.rb +1 -1
  191. data/lib/puppet/transaction/report.rb +18 -12
  192. data/lib/puppet/type.rb +9 -13
  193. data/lib/puppet/type/augeas.rb +2 -2
  194. data/lib/puppet/type/cron.rb +11 -6
  195. data/lib/puppet/type/exec.rb +1 -1
  196. data/lib/puppet/type/file.rb +4 -5
  197. data/lib/puppet/type/host.rb +1 -1
  198. data/lib/puppet/type/k5login.rb +30 -54
  199. data/lib/puppet/type/package.rb +3 -3
  200. data/lib/puppet/type/schedule.rb +12 -12
  201. data/lib/puppet/type/scheduled_task.rb +2 -2
  202. data/lib/puppet/type/ssh_authorized_key.rb +5 -5
  203. data/lib/puppet/type/sshkey.rb +2 -2
  204. data/lib/puppet/type/tidy.rb +1 -1
  205. data/lib/puppet/type/user.rb +1 -1
  206. data/lib/puppet/type/yumrepo.rb +26 -5
  207. data/lib/puppet/util.rb +0 -4
  208. data/lib/puppet/util/backups.rb +1 -1
  209. data/lib/puppet/util/inifile.rb +3 -4
  210. data/lib/puppet/util/json.rb +68 -0
  211. data/lib/puppet/util/json_lockfile.rb +3 -3
  212. data/lib/puppet/util/log.rb +2 -5
  213. data/lib/puppet/util/log/destinations.rb +2 -2
  214. data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  215. data/lib/puppet/util/plist.rb +1 -1
  216. data/lib/puppet/util/reference.rb +1 -8
  217. data/lib/puppet/util/tagging.rb +1 -1
  218. data/lib/puppet/util/warnings.rb +0 -2
  219. data/lib/puppet/util/windows/adsi.rb +15 -18
  220. data/lib/puppet/util/windows/com.rb +2 -1
  221. data/lib/puppet/util/windows/file.rb +2 -2
  222. data/lib/puppet/util/windows/principal.rb +7 -6
  223. data/lib/puppet/util/windows/sid.rb +60 -7
  224. data/lib/puppet/util/windows/taskscheduler.rb +0 -9
  225. data/lib/puppet/version.rb +1 -1
  226. data/lib/puppet_pal.rb +53 -48
  227. data/locales/ja/puppet.po +1357 -912
  228. data/locales/puppet.pot +549 -466
  229. data/man/man5/puppet.conf.5 +103 -20
  230. data/man/man8/puppet-agent.8 +6 -2
  231. data/man/man8/puppet-apply.8 +2 -2
  232. data/man/man8/puppet-ca.8 +1 -1
  233. data/man/man8/puppet-catalog.8 +1 -1
  234. data/man/man8/puppet-cert.8 +1 -1
  235. data/man/man8/puppet-certificate.8 +1 -1
  236. data/man/man8/puppet-certificate_request.8 +1 -1
  237. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  238. data/man/man8/puppet-config.8 +35 -1
  239. data/man/man8/puppet-describe.8 +1 -1
  240. data/man/man8/puppet-device.8 +33 -11
  241. data/man/man8/puppet-doc.8 +1 -1
  242. data/man/man8/puppet-epp.8 +34 -12
  243. data/man/man8/puppet-facts.8 +50 -1
  244. data/man/man8/puppet-filebucket.8 +38 -11
  245. data/man/man8/puppet-generate.8 +1 -1
  246. data/man/man8/puppet-help.8 +1 -1
  247. data/man/man8/puppet-key.8 +1 -1
  248. data/man/man8/puppet-lookup.8 +1 -1
  249. data/man/man8/puppet-man.8 +10 -4
  250. data/man/man8/puppet-master.8 +1 -1
  251. data/man/man8/puppet-module.8 +15 -6
  252. data/man/man8/puppet-node.8 +1 -1
  253. data/man/man8/puppet-parser.8 +31 -8
  254. data/man/man8/puppet-plugin.8 +1 -1
  255. data/man/man8/puppet-report.8 +1 -1
  256. data/man/man8/puppet-resource.8 +1 -1
  257. data/man/man8/puppet-script.8 +67 -0
  258. data/man/man8/puppet-status.8 +1 -1
  259. data/man/man8/puppet.8 +3 -3
  260. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet_x/awesome2/echo_scheme_handler.rb +1 -1
  261. data/spec/integration/application/apply_spec.rb +15 -15
  262. data/spec/integration/application/lookup_spec.rb +21 -0
  263. data/spec/integration/faces/config_spec.rb +16 -4
  264. data/spec/integration/network/http/api/indirected_routes_spec.rb +5 -5
  265. data/spec/integration/parser/catalog_spec.rb +1 -1
  266. data/spec/integration/parser/collection_spec.rb +2 -2
  267. data/spec/integration/parser/compiler_spec.rb +17 -18
  268. data/spec/integration/parser/pcore_resource_spec.rb +2 -2
  269. data/spec/integration/parser/scope_spec.rb +2 -2
  270. data/spec/integration/ssl/certificate_authority_spec.rb +7 -7
  271. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  272. data/spec/integration/ssl/key_spec.rb +1 -1
  273. data/spec/integration/transaction/report_spec.rb +3 -3
  274. data/spec/integration/transaction_spec.rb +0 -1
  275. data/spec/integration/type/file_spec.rb +10 -11
  276. data/spec/integration/type_spec.rb +1 -2
  277. data/spec/integration/util/windows/adsi_spec.rb +86 -1
  278. data/spec/integration/util/windows/principal_spec.rb +11 -2
  279. data/spec/integration/util/windows/security_spec.rb +2 -2
  280. data/spec/lib/matchers/json.rb +4 -4
  281. data/spec/lib/puppet_spec/language.rb +34 -35
  282. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  283. data/spec/shared_behaviours/file_server_terminus.rb +0 -2
  284. data/spec/shared_behaviours/things_that_declare_options.rb +2 -2
  285. data/spec/spec_helper.rb +1 -1
  286. data/spec/unit/application/cert_spec.rb +21 -9
  287. data/spec/unit/application/device_spec.rb +96 -2
  288. data/spec/unit/application/face_base_spec.rb +2 -2
  289. data/spec/unit/application/lookup_spec.rb +0 -1
  290. data/spec/unit/configurer_spec.rb +14 -0
  291. data/spec/unit/confine_spec.rb +16 -0
  292. data/spec/unit/data_providers/hiera_data_provider_spec.rb +4 -4
  293. data/spec/unit/datatypes_spec.rb +49 -0
  294. data/spec/unit/environments_spec.rb +7 -0
  295. data/spec/unit/face/config_spec.rb +116 -12
  296. data/spec/unit/face/epp_face_spec.rb +53 -2
  297. data/spec/unit/face/facts_spec.rb +53 -0
  298. data/spec/unit/face/help_spec.rb +62 -69
  299. data/spec/unit/face/man_spec.rb +26 -0
  300. data/spec/unit/face/module/list_spec.rb +0 -1
  301. data/spec/unit/face/parser_spec.rb +78 -0
  302. data/spec/unit/file_bucket/dipper_spec.rb +0 -4
  303. data/spec/unit/file_serving/content_spec.rb +0 -1
  304. data/spec/unit/file_serving/fileset_spec.rb +0 -1
  305. data/spec/unit/file_serving/metadata_spec.rb +0 -1
  306. data/spec/unit/file_serving/terminus_selector_spec.rb +0 -2
  307. data/spec/unit/forge_spec.rb +1 -2
  308. data/spec/unit/functions/assert_type_spec.rb +1 -1
  309. data/spec/unit/functions/empty_spec.rb +77 -0
  310. data/spec/unit/functions/epp_spec.rb +1 -1
  311. data/spec/unit/functions/flatten_spec.rb +31 -0
  312. data/spec/unit/functions/include_spec.rb +2 -2
  313. data/spec/unit/functions/inline_epp_spec.rb +1 -1
  314. data/spec/unit/functions/join_spec.rb +33 -0
  315. data/spec/unit/functions/keys_spec.rb +31 -0
  316. data/spec/unit/functions/length_spec.rb +50 -0
  317. data/spec/unit/functions/lookup_fixture_spec.rb +1 -1
  318. data/spec/unit/functions/lookup_spec.rb +52 -0
  319. data/spec/unit/functions/shared.rb +1 -1
  320. data/spec/unit/functions/values_spec.rb +30 -0
  321. data/spec/unit/functions/versioncmp_spec.rb +1 -1
  322. data/spec/unit/functions4_spec.rb +30 -32
  323. data/spec/unit/graph/title_hash_prioritizer_spec.rb +2 -1
  324. data/spec/unit/indirector/catalog/compiler_spec.rb +0 -15
  325. data/spec/unit/indirector/facts/rest_spec.rb +45 -0
  326. data/spec/unit/indirector/facts/yaml_spec.rb +6 -0
  327. data/spec/unit/indirector/file_bucket_file/file_spec.rb +2 -2
  328. data/spec/unit/indirector/indirection_spec.rb +1 -1
  329. data/spec/unit/indirector/node/ldap_spec.rb +2 -2
  330. data/spec/unit/indirector/request_spec.rb +0 -2
  331. data/spec/unit/indirector/rest_spec.rb +2 -2
  332. data/spec/unit/indirector_spec.rb +0 -1
  333. data/spec/unit/info_service_spec.rb +1 -1
  334. data/spec/unit/interface/action_manager_spec.rb +1 -1
  335. data/spec/unit/interface/action_spec.rb +1 -1
  336. data/spec/unit/module_spec.rb +0 -5
  337. data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
  338. data/spec/unit/module_tool/applications/unpacker_spec.rb +4 -4
  339. data/spec/unit/network/formats_spec.rb +5 -13
  340. data/spec/unit/network/http/api/indirected_routes_spec.rb +6 -2
  341. data/spec/unit/network/http/connection_spec.rb +1 -1
  342. data/spec/unit/network/http/handler_spec.rb +3 -2
  343. data/spec/unit/node/environment_spec.rb +1 -1
  344. data/spec/unit/node_spec.rb +3 -3
  345. data/spec/unit/parser/compiler_spec.rb +9 -2
  346. data/spec/unit/parser/environment_compiler_spec.rb +8 -8
  347. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  348. data/spec/unit/parser/functions/fail_spec.rb +1 -1
  349. data/spec/unit/parser/functions/fqdn_rand_spec.rb +24 -0
  350. data/spec/unit/parser/functions/realize_spec.rb +1 -1
  351. data/spec/unit/parser/resource_spec.rb +0 -1
  352. data/spec/unit/parser/scope_spec.rb +3 -3
  353. data/spec/unit/parser/type_loader_spec.rb +1 -1
  354. data/spec/unit/pops/adaptable_spec.rb +0 -1
  355. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +0 -3
  356. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +0 -4
  357. data/spec/unit/pops/factory_rspec_helper.rb +1 -1
  358. data/spec/unit/pops/factory_spec.rb +5 -5
  359. data/spec/unit/pops/issues_spec.rb +23 -8
  360. data/spec/unit/pops/loaders/loaders_spec.rb +24 -2
  361. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  362. data/spec/unit/pops/lookup/interpolation_spec.rb +5 -0
  363. data/spec/unit/pops/lookup/lookup_spec.rb +56 -0
  364. data/spec/unit/pops/model/pn_transformer_spec.rb +53 -0
  365. data/spec/unit/pops/parser/lexer2_spec.rb +14 -5
  366. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +9 -9
  367. data/spec/unit/pops/parser/parse_calls_spec.rb +1 -1
  368. data/spec/unit/pops/parser/parse_functions_spec.rb +1 -1
  369. data/spec/unit/pops/parser/parse_heredoc_spec.rb +3 -3
  370. data/spec/unit/pops/parser/parse_lambda_spec.rb +1 -1
  371. data/spec/unit/pops/parser/parse_resource_spec.rb +35 -35
  372. data/spec/unit/pops/parser/pn_parser_spec.rb +101 -0
  373. data/spec/unit/pops/pn_spec.rb +148 -0
  374. data/spec/unit/pops/types/iterable_spec.rb +1 -1
  375. data/spec/unit/pops/types/p_object_type_spec.rb +5 -5
  376. data/spec/unit/pops/types/p_timespan_type_spec.rb +11 -4
  377. data/spec/unit/pops/types/p_timestamp_type_spec.rb +9 -2
  378. data/spec/unit/pops/types/p_type_set_type_spec.rb +106 -2
  379. data/spec/unit/pops/types/ruby_generator_spec.rb +3 -8
  380. data/spec/unit/pops/types/string_converter_spec.rb +3 -3
  381. data/spec/unit/pops/types/type_calculator_spec.rb +1 -1
  382. data/spec/unit/pops/validator/validator_spec.rb +3 -1
  383. data/spec/unit/property_spec.rb +2 -2
  384. data/spec/unit/provider/aixobject_spec.rb +1 -1
  385. data/spec/unit/provider/cron/crontab_spec.rb +3 -3
  386. data/spec/unit/provider/exec/posix_spec.rb +6 -6
  387. data/spec/unit/provider/group/groupadd_spec.rb +4 -4
  388. data/spec/unit/provider/group/windows_adsi_spec.rb +79 -22
  389. data/spec/unit/provider/ldap_spec.rb +0 -1
  390. data/spec/unit/provider/nameservice_spec.rb +5 -5
  391. data/spec/unit/provider/package/rpm_spec.rb +3 -4
  392. data/spec/unit/provider/package/yum_spec.rb +6 -2
  393. data/spec/unit/provider/parsedfile_spec.rb +1 -1
  394. data/spec/unit/provider/service/base_spec.rb +2 -4
  395. data/spec/unit/provider/service/init_spec.rb +2 -2
  396. data/spec/unit/provider/service/openrc_spec.rb +2 -2
  397. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  398. data/spec/unit/provider/service/smf_spec.rb +2 -0
  399. data/spec/unit/provider/service/systemd_spec.rb +3 -3
  400. data/spec/unit/provider/service/upstart_spec.rb +7 -7
  401. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -4
  402. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -2
  403. data/spec/unit/provider/user/useradd_spec.rb +15 -9
  404. data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
  405. data/spec/unit/provider/yumrepo/inifile_spec.rb +76 -0
  406. data/spec/unit/puppet_pal_2pec.rb +4 -5
  407. data/spec/unit/resource/catalog_spec.rb +8 -3
  408. data/spec/unit/resource/status_spec.rb +15 -4
  409. data/spec/unit/resource/type_spec.rb +2 -3
  410. data/spec/unit/settings_spec.rb +9 -4
  411. data/spec/unit/ssl/certificate_authority_spec.rb +1 -9
  412. data/spec/unit/ssl/certificate_request_spec.rb +1 -2
  413. data/spec/unit/transaction/report_spec.rb +41 -0
  414. data/spec/unit/transaction_spec.rb +1 -1
  415. data/spec/unit/type/exec_spec.rb +7 -9
  416. data/spec/unit/type/file/selinux_spec.rb +0 -1
  417. data/spec/unit/type/file_spec.rb +4 -3
  418. data/spec/unit/type/k5login_spec.rb +79 -10
  419. data/spec/unit/type/mount_spec.rb +1 -1
  420. data/spec/unit/type/nagios_spec.rb +6 -6
  421. data/spec/unit/type/user_spec.rb +1 -1
  422. data/spec/unit/type/yumrepo_spec.rb +18 -0
  423. data/spec/unit/type/zfs_spec.rb +1 -1
  424. data/spec/unit/type_spec.rb +14 -15
  425. data/spec/unit/util/docs_spec.rb +1 -1
  426. data/spec/unit/util/execution_spec.rb +0 -1
  427. data/spec/unit/util/inifile_spec.rb +35 -4
  428. data/spec/unit/util/log/destinations_spec.rb +2 -2
  429. data/spec/unit/util/log_spec.rb +6 -5
  430. data/spec/unit/util/network_device/cisco/device_spec.rb +2 -2
  431. data/spec/unit/util/plist_spec.rb +3 -3
  432. data/spec/unit/util/selinux_spec.rb +2 -2
  433. data/spec/unit/util/tagging_spec.rb +1 -7
  434. data/spec/unit/util/windows/adsi_spec.rb +31 -27
  435. data/spec/unit/util/windows/sid_spec.rb +86 -15
  436. data/spec/unit/util_spec.rb +2 -2
  437. data/spec/watchr.rb +0 -1
  438. data/tasks/benchmark.rake +37 -0
  439. data/tasks/manpages.rake +1 -1
  440. metadata +83 -11
  441. checksums.yaml +0 -7
@@ -138,7 +138,7 @@ describe "egrammar parsing function calls" do
138
138
  end
139
139
 
140
140
  it 'notice Hash.assert_type(a => 42)' do
141
- expect(dump(parse('notice Hash.assert_type(a => 42)'))).to eq('(invoke notice (call-method (. hash assert_type) ({} (a 42))))')
141
+ expect(dump(parse('notice Hash.assert_type(a => 42)'))).to eq('(invoke notice (call-method (. Hash assert_type) ({} (a 42))))')
142
142
  end
143
143
 
144
144
  it "notice 42.type(detailed)" do
@@ -13,7 +13,7 @@ describe 'egrammar parsing function definitions' do
13
13
 
14
14
  context 'with return type' do
15
15
  it 'function foo() >> Integer { 1 }' do
16
- expect(dump(parse('function foo() >> Integer { 1 }'))).to eq("(function foo (return_type integer) (block\n 1\n))")
16
+ expect(dump(parse('function foo() >> Integer { 1 }'))).to eq("(function foo (return_type Integer) (block\n 1\n))")
17
17
  end
18
18
  end
19
19
  end
@@ -66,7 +66,7 @@ describe "egrammar parsing heredoc" do
66
66
  CODE
67
67
  expect(dump(parse(src))).to eq([
68
68
  "(@()",
69
- " (sublocated (cat 'Hello ' (str $name) ''))",
69
+ " (sublocated (cat 'Hello ' (str $name)))",
70
70
  ")"
71
71
  ].join("\n"))
72
72
  end
@@ -79,7 +79,7 @@ describe "egrammar parsing heredoc" do
79
79
  CODE
80
80
  expect(dump(parse(src))).to eq([
81
81
  "(@()",
82
- " (sublocated (cat 'Hello \\' (str $name) ''))",
82
+ " (sublocated (cat 'Hello \\' (str $name)))",
83
83
  ")"
84
84
  ].join("\n"))
85
85
  end
@@ -92,7 +92,7 @@ describe "egrammar parsing heredoc" do
92
92
  CODE
93
93
  expect(dump(parse(src))).to eq([
94
94
  "(@()",
95
- " (sublocated (cat 'Hello \\' (str $name) ''))",
95
+ " (sublocated (cat 'Hello \\' (str $name)))",
96
96
  ")"
97
97
  ].join("\n"))
98
98
  end
@@ -13,7 +13,7 @@ describe 'egrammar parsing lambda definitions' do
13
13
 
14
14
  context 'with return type' do
15
15
  it 'f() |$x| >> Integer { 1 }' do
16
- expect(dump(parse('f() |$x| >> Integer { 1 }'))).to eq("(invoke f (lambda (parameters x) (return_type integer) (block\n 1\n)))")
16
+ expect(dump(parse('f() |$x| >> Integer { 1 }'))).to eq("(invoke f (lambda (parameters x) (return_type Integer) (block\n 1\n)))")
17
17
  end
18
18
  end
19
19
  end
@@ -12,14 +12,14 @@ describe "egrammar parsing resource declarations" do
12
12
  ["File", "file"].each do |word|
13
13
  it "#{word} { 'title': }" do
14
14
  expect(dump(parse("#{word} { 'title': }"))).to eq([
15
- "(resource file",
15
+ "(resource #{word}",
16
16
  " ('title'))"
17
17
  ].join("\n"))
18
18
  end
19
19
 
20
20
  it "#{word} { 'title': path => '/somewhere', mode => '0777'}" do
21
21
  expect(dump(parse("#{word} { 'title': path => '/somewhere', mode => '0777'}"))).to eq([
22
- "(resource file",
22
+ "(resource #{word}",
23
23
  " ('title'",
24
24
  " (path => '/somewhere')",
25
25
  " (mode => '0777')))"
@@ -28,7 +28,7 @@ describe "egrammar parsing resource declarations" do
28
28
 
29
29
  it "#{word} { 'title': path => '/somewhere', }" do
30
30
  expect(dump(parse("#{word} { 'title': path => '/somewhere', }"))).to eq([
31
- "(resource file",
31
+ "(resource #{word}",
32
32
  " ('title'",
33
33
  " (path => '/somewhere')))"
34
34
  ].join("\n"))
@@ -36,21 +36,21 @@ describe "egrammar parsing resource declarations" do
36
36
 
37
37
  it "#{word} { 'title': , }" do
38
38
  expect(dump(parse("#{word} { 'title': , }"))).to eq([
39
- "(resource file",
39
+ "(resource #{word}",
40
40
  " ('title'))"
41
41
  ].join("\n"))
42
42
  end
43
43
 
44
44
  it "#{word} { 'title': ; }" do
45
45
  expect(dump(parse("#{word} { 'title': ; }"))).to eq([
46
- "(resource file",
46
+ "(resource #{word}",
47
47
  " ('title'))"
48
48
  ].join("\n"))
49
49
  end
50
50
 
51
51
  it "#{word} { 'title': ; 'other_title': }" do
52
52
  expect(dump(parse("#{word} { 'title': ; 'other_title': }"))).to eq([
53
- "(resource file",
53
+ "(resource #{word}",
54
54
  " ('title')",
55
55
  " ('other_title'))"
56
56
  ].join("\n"))
@@ -59,7 +59,7 @@ describe "egrammar parsing resource declarations" do
59
59
  # PUP-2898, trailing ';'
60
60
  it "#{word} { 'title': ; 'other_title': ; }" do
61
61
  expect(dump(parse("#{word} { 'title': ; 'other_title': ; }"))).to eq([
62
- "(resource file",
62
+ "(resource #{word}",
63
63
  " ('title')",
64
64
  " ('other_title'))"
65
65
  ].join("\n"))
@@ -67,7 +67,7 @@ describe "egrammar parsing resource declarations" do
67
67
 
68
68
  it "#{word} { 'title1': path => 'x'; 'title2': path => 'y'}" do
69
69
  expect(dump(parse("#{word} { 'title1': path => 'x'; 'title2': path => 'y'}"))).to eq([
70
- "(resource file",
70
+ "(resource #{word}",
71
71
  " ('title1'",
72
72
  " (path => 'x'))",
73
73
  " ('title2'",
@@ -77,7 +77,7 @@ describe "egrammar parsing resource declarations" do
77
77
 
78
78
  it "#{word} { title: * => {mode => '0777'} }" do
79
79
  expect(dump(parse("#{word} { title: * => {mode => '0777'}}"))).to eq([
80
- "(resource file",
80
+ "(resource #{word}",
81
81
  " (title",
82
82
  " (* => ({} (mode '0777')))))"
83
83
  ].join("\n"))
@@ -87,19 +87,19 @@ describe "egrammar parsing resource declarations" do
87
87
 
88
88
  context "When parsing (type based) resource defaults" do
89
89
  it "File { }" do
90
- expect(dump(parse("File { }"))).to eq("(resource-defaults file)")
90
+ expect(dump(parse("File { }"))).to eq("(resource-defaults File)")
91
91
  end
92
92
 
93
93
  it "File { mode => '0777' }" do
94
94
  expect(dump(parse("File { mode => '0777'}"))).to eq([
95
- "(resource-defaults file",
95
+ "(resource-defaults File",
96
96
  " (mode => '0777'))"
97
97
  ].join("\n"))
98
98
  end
99
99
 
100
100
  it "File { * => {mode => '0777'} } (even if validated to be illegal)" do
101
101
  expect(dump(parse("File { * => {mode => '0777'}}"))).to eq([
102
- "(resource-defaults file",
102
+ "(resource-defaults File",
103
103
  " (* => ({} (mode '0777'))))"
104
104
  ].join("\n"))
105
105
  end
@@ -107,12 +107,12 @@ describe "egrammar parsing resource declarations" do
107
107
 
108
108
  context "When parsing resource override" do
109
109
  it "File['x'] { }" do
110
- expect(dump(parse("File['x'] { }"))).to eq("(override (slice file 'x'))")
110
+ expect(dump(parse("File['x'] { }"))).to eq("(override (slice File 'x'))")
111
111
  end
112
112
 
113
113
  it "File['x'] { x => 1 }" do
114
114
  expect(dump(parse("File['x'] { x => 1}"))).to eq([
115
- "(override (slice file 'x')",
115
+ "(override (slice File 'x')",
116
116
  " (x => 1))"
117
117
  ].join("\n"))
118
118
  end
@@ -120,14 +120,14 @@ describe "egrammar parsing resource declarations" do
120
120
 
121
121
  it "File['x', 'y'] { x => 1 }" do
122
122
  expect(dump(parse("File['x', 'y'] { x => 1}"))).to eq([
123
- "(override (slice file ('x' 'y'))",
123
+ "(override (slice File ('x' 'y'))",
124
124
  " (x => 1))"
125
125
  ].join("\n"))
126
126
  end
127
127
 
128
128
  it "File['x'] { x => 1, y => 2 }" do
129
129
  expect(dump(parse("File['x'] { x => 1, y=> 2}"))).to eq([
130
- "(override (slice file 'x')",
130
+ "(override (slice File 'x')",
131
131
  " (x => 1)",
132
132
  " (y => 2))"
133
133
  ].join("\n"))
@@ -135,14 +135,14 @@ describe "egrammar parsing resource declarations" do
135
135
 
136
136
  it "File['x'] { x +> 1 }" do
137
137
  expect(dump(parse("File['x'] { x +> 1}"))).to eq([
138
- "(override (slice file 'x')",
138
+ "(override (slice File 'x')",
139
139
  " (x +> 1))"
140
140
  ].join("\n"))
141
141
  end
142
142
 
143
143
  it "File['x'] { * => {mode => '0777'} } (even if validated to be illegal)" do
144
144
  expect(dump(parse("File['x'] { * => {mode => '0777'}}"))).to eq([
145
- "(override (slice file 'x')",
145
+ "(override (slice File 'x')",
146
146
  " (* => ({} (mode '0777'))))"
147
147
  ].join("\n"))
148
148
  end
@@ -173,28 +173,28 @@ describe "egrammar parsing resource declarations" do
173
173
 
174
174
  it "parses global defaults with @ (even if validated to be illegal)" do
175
175
  expect(dump(parse("@File { mode => '0777' }"))).to eq([
176
- "(virtual-resource-defaults file",
176
+ "(virtual-resource-defaults File",
177
177
  " (mode => '0777'))"
178
178
  ].join("\n"))
179
179
  end
180
180
 
181
181
  it "parses global defaults with @@ (even if validated to be illegal)" do
182
182
  expect(dump(parse("@@File { mode => '0777' }"))).to eq([
183
- "(exported-resource-defaults file",
183
+ "(exported-resource-defaults File",
184
184
  " (mode => '0777'))"
185
185
  ].join("\n"))
186
186
  end
187
187
 
188
188
  it "parses override with @ (even if validated to be illegal)" do
189
189
  expect(dump(parse("@File[foo] { mode => '0777' }"))).to eq([
190
- "(virtual-override (slice file foo)",
190
+ "(virtual-override (slice File foo)",
191
191
  " (mode => '0777'))"
192
192
  ].join("\n"))
193
193
  end
194
194
 
195
195
  it "parses override combined with @@ (even if validated to be illegal)" do
196
196
  expect(dump(parse("@@File[foo] { mode => '0777' }"))).to eq([
197
- "(exported-override (slice file foo)",
197
+ "(exported-override (slice File foo)",
198
198
  " (mode => '0777'))"
199
199
  ].join("\n"))
200
200
  end
@@ -253,19 +253,19 @@ describe "egrammar parsing resource declarations" do
253
253
 
254
254
  context "When parsing Relationships" do
255
255
  it "File[a] -> File[b]" do
256
- expect(dump(parse("File[a] -> File[b]"))).to eq("(-> (slice file a) (slice file b))")
256
+ expect(dump(parse("File[a] -> File[b]"))).to eq("(-> (slice File a) (slice File b))")
257
257
  end
258
258
 
259
259
  it "File[a] <- File[b]" do
260
- expect(dump(parse("File[a] <- File[b]"))).to eq("(<- (slice file a) (slice file b))")
260
+ expect(dump(parse("File[a] <- File[b]"))).to eq("(<- (slice File a) (slice File b))")
261
261
  end
262
262
 
263
263
  it "File[a] ~> File[b]" do
264
- expect(dump(parse("File[a] ~> File[b]"))).to eq("(~> (slice file a) (slice file b))")
264
+ expect(dump(parse("File[a] ~> File[b]"))).to eq("(~> (slice File a) (slice File b))")
265
265
  end
266
266
 
267
267
  it "File[a] <~ File[b]" do
268
- expect(dump(parse("File[a] <~ File[b]"))).to eq("(<~ (slice file a) (slice file b))")
268
+ expect(dump(parse("File[a] <~ File[b]"))).to eq("(<~ (slice File a) (slice File b))")
269
269
  end
270
270
 
271
271
  it "Should chain relationships" do
@@ -276,13 +276,13 @@ describe "egrammar parsing resource declarations" do
276
276
 
277
277
  it "Should chain relationships" do
278
278
  expect(dump(parse("File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]"))).to eq(
279
- "(<~ (<- (~> (-> (slice file a) (slice file b)) (slice file c)) (slice file d)) (slice file e))"
279
+ "(<~ (<- (~> (-> (slice File a) (slice File b)) (slice File c)) (slice File d)) (slice File e))"
280
280
  )
281
281
  end
282
282
 
283
283
  it "should create relationships between collects" do
284
284
  expect(dump(parse("File <| mode == 0644 |> -> File <| mode == 0755 |>"))).to eq(
285
- "(-> (collect file\n (<| |> (== mode 0644))) (collect file\n (<| |> (== mode 0755))))"
285
+ "(-> (collect File\n (<| |> (== mode 0644))) (collect File\n (<| |> (== mode 0755))))"
286
286
  )
287
287
  end
288
288
  end
@@ -290,38 +290,38 @@ describe "egrammar parsing resource declarations" do
290
290
  context "When parsing collection" do
291
291
  context "of virtual resources" do
292
292
  it "File <| |>" do
293
- expect(dump(parse("File <| |>"))).to eq("(collect file\n (<| |>))")
293
+ expect(dump(parse("File <| |>"))).to eq("(collect File\n (<| |>))")
294
294
  end
295
295
  end
296
296
 
297
297
  context "of exported resources" do
298
298
  it "File <<| |>>" do
299
- expect(dump(parse("File <<| |>>"))).to eq("(collect file\n (<<| |>>))")
299
+ expect(dump(parse("File <<| |>>"))).to eq("(collect File\n (<<| |>>))")
300
300
  end
301
301
  end
302
302
 
303
303
  context "queries are parsed with correct precedence" do
304
304
  it "File <| tag == 'foo' |>" do
305
- expect(dump(parse("File <| tag == 'foo' |>"))).to eq("(collect file\n (<| |> (== tag 'foo')))")
305
+ expect(dump(parse("File <| tag == 'foo' |>"))).to eq("(collect File\n (<| |> (== tag 'foo')))")
306
306
  end
307
307
 
308
308
  it "File <| tag == 'foo' and mode != '0777' |>" do
309
- expect(dump(parse("File <| tag == 'foo' and mode != '0777' |>"))).to eq("(collect file\n (<| |> (&& (== tag 'foo') (!= mode '0777'))))")
309
+ expect(dump(parse("File <| tag == 'foo' and mode != '0777' |>"))).to eq("(collect File\n (<| |> (&& (== tag 'foo') (!= mode '0777'))))")
310
310
  end
311
311
 
312
312
  it "File <| tag == 'foo' or mode != '0777' |>" do
313
- expect(dump(parse("File <| tag == 'foo' or mode != '0777' |>"))).to eq("(collect file\n (<| |> (|| (== tag 'foo') (!= mode '0777'))))")
313
+ expect(dump(parse("File <| tag == 'foo' or mode != '0777' |>"))).to eq("(collect File\n (<| |> (|| (== tag 'foo') (!= mode '0777'))))")
314
314
  end
315
315
 
316
316
  it "File <| tag == 'foo' or tag == 'bar' and mode != '0777' |>" do
317
317
  expect(dump(parse("File <| tag == 'foo' or tag == 'bar' and mode != '0777' |>"))).to eq(
318
- "(collect file\n (<| |> (|| (== tag 'foo') (&& (== tag 'bar') (!= mode '0777')))))"
318
+ "(collect File\n (<| |> (|| (== tag 'foo') (&& (== tag 'bar') (!= mode '0777')))))"
319
319
  )
320
320
  end
321
321
 
322
322
  it "File <| (tag == 'foo' or tag == 'bar') and mode != '0777' |>" do
323
323
  expect(dump(parse("File <| (tag == 'foo' or tag == 'bar') and mode != '0777' |>"))).to eq(
324
- "(collect file\n (<| |> (&& (|| (== tag 'foo') (== tag 'bar')) (!= mode '0777'))))"
324
+ "(collect File\n (<| |> (&& (|| (== tag 'foo') (== tag 'bar')) (!= mode '0777'))))"
325
325
  )
326
326
  end
327
327
  end
@@ -0,0 +1,101 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+ require 'puppet/pops/pn'
5
+
6
+ module Puppet::Pops
7
+ module Parser
8
+
9
+ describe 'Puppet::Pops::Parser::PNParser' do
10
+ context 'parses the text' do
11
+ it '"true" to PN::Literal(true)' do
12
+ expect(PNParser.new.parse('true')).to eql(lit(true))
13
+ end
14
+
15
+ it '"false" to PN::Literal(false)' do
16
+ expect(PNParser.new.parse('false')).to eql(lit(false))
17
+ end
18
+
19
+ it '"nil" to PN::Literal(nil)' do
20
+ expect(PNParser.new.parse('nil')).to eql(lit(nil))
21
+ end
22
+
23
+ it '"123" to PN::Literal(123)' do
24
+ expect(PNParser.new.parse('123')).to eql(lit(123))
25
+ end
26
+
27
+ it '"-123" to PN::Literal(-123)' do
28
+ expect(PNParser.new.parse('-123')).to eql(lit(-123))
29
+ end
30
+
31
+ it '"123.45" to PN::Literal(123.45)' do
32
+ expect(PNParser.new.parse('123.45')).to eql(lit(123.45))
33
+ end
34
+
35
+ it '"-123.45" to PN::Literal(-123.45)' do
36
+ expect(PNParser.new.parse('-123.45')).to eql(lit(-123.45))
37
+ end
38
+
39
+ it '"123.45e12" to PN::Literal(123.45e12)' do
40
+ expect(PNParser.new.parse('123.45e12')).to eql(lit(123.45e12))
41
+ end
42
+
43
+ it '"123.45e+12" to PN::Literal(123.45e+12)' do
44
+ expect(PNParser.new.parse('123.45e+12')).to eql(lit(123.45e+12))
45
+ end
46
+
47
+ it '"123.45e-12" to PN::Literal(123.45e-12)' do
48
+ expect(PNParser.new.parse('123.45e-12')).to eql(lit(123.45e-12))
49
+ end
50
+
51
+ it '"hello" to PN::Literal("hello")' do
52
+ expect(PNParser.new.parse('"hello"')).to eql(lit('hello'))
53
+ end
54
+
55
+ it '"\t" to PN::Literal("\t")' do
56
+ expect(PNParser.new.parse('"\t"')).to eql(lit("\t"))
57
+ end
58
+
59
+ it '"\r" to PN::Literal("\r")' do
60
+ expect(PNParser.new.parse('"\r"')).to eql(lit("\r"))
61
+ end
62
+
63
+ it '"\n" to PN::Literal("\n")' do
64
+ expect(PNParser.new.parse('"\n"')).to eql(lit("\n"))
65
+ end
66
+
67
+ it '"\"" to PN::Literal("\"")' do
68
+ expect(PNParser.new.parse('"\""')).to eql(lit('"'))
69
+ end
70
+
71
+ it '"\\\\" to PN::Literal("\\")' do
72
+ expect(PNParser.new.parse('"\\\\"')).to eql(lit("\\"))
73
+ end
74
+
75
+ it '"\o024" to PN::Literal("\u{14}")' do
76
+ expect(PNParser.new.parse('"\o024"')).to eql(lit("\u{14}"))
77
+ end
78
+ end
79
+
80
+ it 'parses elements enclosed in brackets to a PN::List' do
81
+ expect(PNParser.new.parse('[1 "2" true false nil]')).to eql(PN::List.new([lit(1), lit('2'), lit(true), lit(false), lit(nil)]))
82
+ end
83
+
84
+ it 'parses elements enclosed in parenthesis to a PN::Call' do
85
+ expect(PNParser.new.parse('(+ 1 2)')).to eql(PN::Call.new('+', lit(1), lit(2)))
86
+ end
87
+
88
+ it 'parses entries enclosed in curly braces to a PN::Map' do
89
+ expect(PNParser.new.parse('{:a 1 :b "2" :c true}')).to eql(PN::Map.new([entry('a', 1), entry('b', '2'), entry('c', true)]))
90
+ end
91
+
92
+ def entry(k, v)
93
+ PN::Entry.new(k, lit(v))
94
+ end
95
+
96
+ def lit(v)
97
+ PN::Literal.new(v)
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,148 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+ require 'puppet/pops/pn'
5
+
6
+ module Puppet::Pops
7
+ module PN
8
+
9
+ describe 'Puppet::Pops::PN' do
10
+ context 'Literal' do
11
+ context 'containing the value' do
12
+ it 'true produces the text "true"' do
13
+ expect(lit(true).to_s).to eql('true')
14
+ end
15
+
16
+ it 'false produces the text "false"' do
17
+ expect(lit(false).to_s).to eql('false')
18
+ end
19
+
20
+ it 'nil produces the text "nil"' do
21
+ expect(lit(nil).to_s).to eql('nil')
22
+ end
23
+
24
+ it '34 produces the text "34"' do
25
+ expect(lit(34).to_s).to eql('34')
26
+ end
27
+
28
+ it '3.0 produces the text "3.0"' do
29
+ expect(lit(3.0).to_s).to eql('3.0')
30
+ end
31
+ end
32
+
33
+ context 'produces a double quoted text from a string such that' do
34
+ it '"plain" produces "plain"' do
35
+ expect(lit('plain').to_s).to eql('"plain"')
36
+ end
37
+
38
+ it '"\t" produces a text containing a tab character' do
39
+ expect(lit("\t").to_s).to eql('"\t"')
40
+ end
41
+
42
+ it '"\r" produces a text containing a return character' do
43
+ expect(lit("\r").to_s).to eql('"\r"')
44
+ end
45
+
46
+ it '"\n" produces a text containing a newline character' do
47
+ expect(lit("\n").to_s).to eql('"\n"')
48
+ end
49
+
50
+ it '"\"" produces a text containing a double quote' do
51
+ expect(lit("\"").to_s).to eql('"\""')
52
+ end
53
+
54
+ it '"\\" produces a text containing a backslash' do
55
+ expect(lit("\\").to_s).to eql('"\\\\"')
56
+ end
57
+
58
+ it '"\u{14}" produces "\o024"' do
59
+ expect(lit("\u{14}").to_s).to eql('"\o024"')
60
+ end
61
+ end
62
+ end
63
+
64
+ context 'List' do
65
+ it 'produces a text where its elements are enclosed in brackets' do
66
+ expect(List.new([lit(3), lit('a'), lit(true)]).to_s).to eql('[3 "a" true]')
67
+ end
68
+
69
+ it 'produces a text where the elements of nested lists are enclosed in brackets' do
70
+ expect(List.new([lit(3), lit('a'), List.new([lit(true), lit(false)])]).to_s).to eql('[3 "a" [true false]]')
71
+ end
72
+
73
+ context 'with indent' do
74
+ it 'produces a text where the each element is on an indented line ' do
75
+ s = ''
76
+ List.new([lit(3), lit('a'), List.new([lit(true), lit(false)])]).format(Indent.new(' '), s)
77
+ expect(s).to eql(<<-RESULT.unindent[0..-2]) # unindent and strip last newline
78
+ [
79
+ 3
80
+ "a"
81
+ [
82
+ true
83
+ false]]
84
+ RESULT
85
+ end
86
+ end
87
+ end
88
+
89
+ context 'Map' do
90
+ it 'raises error when illegal keys are used' do
91
+ expect { Map.new([Entry.new('123', lit(3))]) }.to raise_error(ArgumentError, /key 123 does not conform to pattern/)
92
+ end
93
+
94
+ it 'produces a text where entries are enclosed in curly braces' do
95
+ expect(Map.new([Entry.new('a', lit(3))]).to_s).to eql('{:a 3}')
96
+ end
97
+
98
+ it 'produces a text where the entries of nested maps are enclosed in curly braces' do
99
+ expect(Map.new([
100
+ Map.new([Entry.new('a', lit(3))]).with_name('o')]).to_s).to eql('{:o {:a 3}}')
101
+ end
102
+
103
+ context 'with indent' do
104
+ it 'produces a text where the each element is on an indented line ' do
105
+ s = ''
106
+ Map.new([
107
+ Map.new([Entry.new('a', lit(3)), Entry.new('b', lit(5))]).with_name('o')]).format(Indent.new(' '), s)
108
+ expect(s).to eql(<<-RESULT.unindent[0..-2]) # unindent and strip last newline
109
+ {
110
+ :o {
111
+ :a 3
112
+ :b 5}}
113
+ RESULT
114
+ end
115
+ end
116
+ end
117
+
118
+ context 'Call' do
119
+ it 'produces a text where elements are enclosed in parenthesis' do
120
+ expect(Call.new('+', lit(3), lit(5)).to_s).to eql('(+ 3 5)')
121
+ end
122
+
123
+ it 'produces a text where the elements of nested calls are enclosed in parenthesis' do
124
+ expect(Map.new([
125
+ Call.new('+', lit(3), lit(5)).with_name('o')]).to_s).to eql('{:o (+ 3 5)}')
126
+ end
127
+
128
+ context 'with indent' do
129
+ it 'produces a text where the each element is on an indented line ' do
130
+ s = ''
131
+ Call.new('+', lit(3), lit(Call.new('-', lit(10), lit(5)))).format(Indent.new(' '), s)
132
+ expect(s).to eql(<<-RESULT.unindent[0..-2]) # unindent and strip last newline
133
+ (+
134
+ 3
135
+ (-
136
+ 10
137
+ 5))
138
+ RESULT
139
+ end
140
+ end
141
+ end
142
+
143
+ def lit(v)
144
+ v.is_a?(PN) ? v : Literal.new(v)
145
+ end
146
+ end
147
+ end
148
+ end