puppet 4.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2045) hide show
  1. data/COMMITTERS.md +2 -2
  2. data/CONTRIBUTING.md +51 -10
  3. data/Gemfile +27 -14
  4. data/LICENSE +3 -3
  5. data/MAINTAINERS +66 -0
  6. data/README.md +9 -11
  7. data/Rakefile +36 -0
  8. data/conf/auth.conf +23 -2
  9. data/conf/fileserver.conf +7 -12
  10. data/conf/hiera.yaml +11 -0
  11. data/conf/puppet.conf +1 -1
  12. data/ext/README.environment +1 -1
  13. data/ext/build_defaults.yaml +10 -37
  14. data/ext/debian/README.source +1 -1
  15. data/ext/debian/control +3 -5
  16. data/ext/debian/copyright +4 -4
  17. data/ext/debian/puppet-common.install +0 -1
  18. data/ext/debian/puppet-common.manpages +0 -2
  19. data/ext/debian/puppet.default +0 -5
  20. data/ext/debian/puppet.init +1 -16
  21. data/ext/debian/puppet.logrotate +14 -5
  22. data/ext/debian/puppetmaster.README.debian +11 -9
  23. data/ext/envpuppet +2 -2
  24. data/ext/hiera/hiera.yaml +15 -0
  25. data/ext/ips/puppetagent.xml +1 -1
  26. data/ext/ips/puppetmaster.xml +1 -1
  27. data/ext/logcheck/puppet +1 -1
  28. data/ext/osx/puppet.plist +30 -0
  29. data/ext/project_data.yaml +29 -16
  30. data/ext/puppet-test +3 -27
  31. data/ext/rack/config.ru +2 -2
  32. data/ext/rack/example-passenger-vhost.conf +1 -1
  33. data/ext/redhat/client.init +67 -17
  34. data/ext/redhat/client.sysconfig +1 -10
  35. data/ext/redhat/logrotate +15 -3
  36. data/ext/redhat/puppet.spec.erb +6 -14
  37. data/ext/redhat/server.init +1 -1
  38. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  39. data/ext/solaris/pkginfo +1 -1
  40. data/ext/solaris/smf/puppet +44 -0
  41. data/ext/solaris/smf/puppet.xml +44 -0
  42. data/ext/suse/client.init +30 -33
  43. data/ext/suse/puppet.spec +2 -2
  44. data/ext/suse/server.init +2 -2
  45. data/ext/systemd/puppet.service +13 -1
  46. data/ext/upload_facts.rb +1 -1
  47. data/ext/windows/puppet_interactive.bat +6 -0
  48. data/ext/windows/puppet_shell.bat +9 -0
  49. data/ext/windows/run_puppet_interactive.bat +9 -0
  50. data/ext/windows/service/daemon.rb +10 -15
  51. data/ext/yaml_nodes.rb +1 -1
  52. data/install.rb +99 -66
  53. data/lib/hiera/puppet_function.rb +28 -18
  54. data/lib/hiera/scope.rb +12 -14
  55. data/lib/hiera_puppet.rb +6 -14
  56. data/lib/puppet/agent/disabler.rb +3 -3
  57. data/lib/puppet/agent/locker.rb +12 -3
  58. data/lib/puppet/agent.rb +35 -39
  59. data/lib/puppet/application/agent.rb +53 -25
  60. data/lib/puppet/application/apply.rb +83 -28
  61. data/lib/puppet/application/ca.rb +1 -0
  62. data/lib/puppet/application/cert.rb +54 -5
  63. data/lib/puppet/application/describe.rb +2 -2
  64. data/lib/puppet/application/device.rb +80 -50
  65. data/lib/puppet/application/doc.rb +9 -9
  66. data/lib/puppet/application/face_base.rb +11 -12
  67. data/lib/puppet/application/filebucket.rb +84 -10
  68. data/lib/puppet/application/generate.rb +5 -0
  69. data/lib/puppet/application/lookup.rb +357 -0
  70. data/lib/puppet/application/master.rb +33 -26
  71. data/lib/puppet/application/resource.rb +22 -23
  72. data/lib/puppet/application.rb +31 -15
  73. data/lib/puppet/application_support.rb +1 -1
  74. data/lib/puppet/compilable_resource_type.rb +15 -0
  75. data/lib/puppet/configurer/downloader.rb +2 -2
  76. data/lib/puppet/configurer/fact_handler.rb +13 -4
  77. data/lib/puppet/configurer/plugin_handler.rb +7 -5
  78. data/lib/puppet/configurer.rb +198 -55
  79. data/lib/puppet/context/trusted_information.rb +22 -2
  80. data/lib/puppet/context.rb +20 -5
  81. data/lib/puppet/daemon.rb +17 -13
  82. data/lib/puppet/data_binding.rb +4 -2
  83. data/lib/puppet/defaults.rb +309 -123
  84. data/lib/puppet/environments.rb +105 -10
  85. data/lib/puppet/error.rb +32 -2
  86. data/lib/puppet/etc.rb +161 -0
  87. data/lib/puppet/external/dot.rb +1 -1
  88. data/lib/puppet/external/pson/common.rb +4 -0
  89. data/lib/puppet/face/ca.rb +56 -44
  90. data/lib/puppet/face/catalog/select.rb +4 -4
  91. data/lib/puppet/face/catalog.rb +3 -3
  92. data/lib/puppet/face/certificate.rb +28 -22
  93. data/lib/puppet/face/certificate_request.rb +3 -1
  94. data/lib/puppet/face/certificate_revocation_list.rb +3 -1
  95. data/lib/puppet/face/config.rb +12 -12
  96. data/lib/puppet/face/epp.rb +96 -50
  97. data/lib/puppet/face/facts.rb +5 -5
  98. data/lib/puppet/face/generate.rb +64 -0
  99. data/lib/puppet/face/help/face.erb +3 -0
  100. data/lib/puppet/face/help/man.erb +1 -1
  101. data/lib/puppet/face/help.rb +37 -29
  102. data/lib/puppet/face/key.rb +4 -3
  103. data/lib/puppet/face/man.rb +12 -10
  104. data/lib/puppet/face/module/build.rb +7 -7
  105. data/lib/puppet/face/module/changes.rb +8 -7
  106. data/lib/puppet/face/module/generate.rb +25 -25
  107. data/lib/puppet/face/module/install.rb +19 -15
  108. data/lib/puppet/face/module/list.rb +16 -12
  109. data/lib/puppet/face/module/search.rb +4 -4
  110. data/lib/puppet/face/module/uninstall.rb +13 -10
  111. data/lib/puppet/face/module/upgrade.rb +11 -7
  112. data/lib/puppet/face/module.rb +3 -3
  113. data/lib/puppet/face/node/clean.rb +8 -8
  114. data/lib/puppet/face/node.rb +6 -6
  115. data/lib/puppet/face/parser.rb +28 -25
  116. data/lib/puppet/face/plugin.rb +14 -21
  117. data/lib/puppet/face/report.rb +10 -10
  118. data/lib/puppet/face/resource.rb +13 -13
  119. data/lib/puppet/face/status.rb +9 -6
  120. data/lib/puppet/feature/base.rb +13 -5
  121. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  122. data/lib/puppet/feature/eventlog.rb +1 -1
  123. data/lib/puppet/feature/hiera_eyaml.rb +3 -0
  124. data/lib/puppet/feature/hocon.rb +3 -0
  125. data/lib/puppet/feature/telnet.rb +9 -0
  126. data/lib/puppet/file_bucket/dipper.rb +62 -6
  127. data/lib/puppet/file_bucket/file.rb +4 -17
  128. data/lib/puppet/file_serving/base.rb +3 -3
  129. data/lib/puppet/file_serving/configuration/parser.rb +12 -12
  130. data/lib/puppet/file_serving/configuration.rb +3 -3
  131. data/lib/puppet/file_serving/content.rb +1 -1
  132. data/lib/puppet/file_serving/fileset.rb +7 -5
  133. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  134. data/lib/puppet/file_serving/metadata.rb +33 -12
  135. data/lib/puppet/file_serving/mount/file.rb +6 -6
  136. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  137. data/lib/puppet/file_serving/mount.rb +1 -1
  138. data/lib/puppet/file_serving/terminus_helper.rb +7 -8
  139. data/lib/puppet/file_serving/terminus_selector.rb +3 -1
  140. data/lib/puppet/file_system/file_impl.rb +13 -4
  141. data/lib/puppet/file_system/memory_impl.rb +10 -2
  142. data/lib/puppet/file_system/path_pattern.rb +7 -6
  143. data/lib/puppet/file_system/uniquefile.rb +5 -5
  144. data/lib/puppet/file_system/windows.rb +39 -16
  145. data/lib/puppet/file_system.rb +46 -5
  146. data/lib/puppet/forge/cache.rb +1 -0
  147. data/lib/puppet/forge/errors.rb +12 -12
  148. data/lib/puppet/forge/repository.rb +5 -36
  149. data/lib/puppet/forge.rb +17 -15
  150. data/lib/puppet/functions/alert.rb +14 -0
  151. data/lib/puppet/functions/annotate.rb +108 -0
  152. data/lib/puppet/functions/assert_type.rb +53 -19
  153. data/lib/puppet/functions/binary_file.rb +19 -0
  154. data/lib/puppet/functions/break.rb +22 -0
  155. data/lib/puppet/functions/call.rb +42 -0
  156. data/lib/puppet/functions/contain.rb +33 -0
  157. data/lib/puppet/functions/crit.rb +14 -0
  158. data/lib/puppet/functions/debug.rb +14 -0
  159. data/lib/puppet/functions/defined.rb +160 -0
  160. data/lib/puppet/functions/dig.rb +23 -0
  161. data/lib/puppet/functions/each.rb +89 -39
  162. data/lib/puppet/functions/emerg.rb +14 -0
  163. data/lib/puppet/functions/epp.rb +29 -37
  164. data/lib/puppet/functions/err.rb +14 -0
  165. data/lib/puppet/functions/eyaml_lookup_key.rb +94 -0
  166. data/lib/puppet/functions/filter.rb +64 -38
  167. data/lib/puppet/functions/find_file.rb +31 -0
  168. data/lib/puppet/functions/hiera.rb +83 -3
  169. data/lib/puppet/functions/hiera_array.rb +73 -4
  170. data/lib/puppet/functions/hiera_hash.rb +82 -2
  171. data/lib/puppet/functions/hiera_include.rb +93 -6
  172. data/lib/puppet/functions/hocon_data.rb +41 -0
  173. data/lib/puppet/functions/include.rb +21 -0
  174. data/lib/puppet/functions/info.rb +14 -0
  175. data/lib/puppet/functions/inline_epp.rb +44 -71
  176. data/lib/puppet/functions/json_data.rb +33 -0
  177. data/lib/puppet/functions/lest.rb +17 -0
  178. data/lib/puppet/functions/lookup.rb +172 -184
  179. data/lib/puppet/functions/map.rb +60 -33
  180. data/lib/puppet/functions/match.rb +32 -14
  181. data/lib/puppet/functions/new.rb +31 -0
  182. data/lib/puppet/functions/next.rb +23 -0
  183. data/lib/puppet/functions/notice.rb +14 -0
  184. data/lib/puppet/functions/reduce.rb +112 -71
  185. data/lib/puppet/functions/regsubst.rb +23 -26
  186. data/lib/puppet/functions/require.rb +37 -0
  187. data/lib/puppet/functions/return.rb +22 -0
  188. data/lib/puppet/functions/reverse_each.rb +25 -0
  189. data/lib/puppet/functions/scanf.rb +15 -18
  190. data/lib/puppet/functions/slice.rb +25 -39
  191. data/lib/puppet/functions/split.rb +3 -3
  192. data/lib/puppet/functions/step.rb +26 -0
  193. data/lib/puppet/functions/strftime.rb +43 -0
  194. data/lib/puppet/functions/then.rb +14 -0
  195. data/lib/puppet/functions/type.rb +31 -0
  196. data/lib/puppet/functions/unique.rb +132 -0
  197. data/lib/puppet/functions/unwrap.rb +40 -0
  198. data/lib/puppet/functions/versioncmp.rb +36 -0
  199. data/lib/puppet/functions/warning.rb +14 -0
  200. data/lib/puppet/functions/with.rb +15 -7
  201. data/lib/puppet/functions/yaml_data.rb +42 -0
  202. data/lib/puppet/functions.rb +226 -76
  203. data/lib/puppet/generate/models/type/property.rb +70 -0
  204. data/lib/puppet/generate/models/type/type.rb +62 -0
  205. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  206. data/lib/puppet/generate/type.rb +239 -0
  207. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  208. data/lib/puppet/graph/relationship_graph.rb +4 -1
  209. data/lib/puppet/graph/simple_graph.rb +51 -74
  210. data/lib/puppet/indirector/catalog/compiler.rb +242 -38
  211. data/lib/puppet/indirector/catalog/json.rb +18 -0
  212. data/lib/puppet/indirector/certificate/disabled_ca.rb +1 -1
  213. data/lib/puppet/indirector/certificate_request/ca.rb +3 -3
  214. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +1 -1
  215. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +1 -1
  216. data/lib/puppet/indirector/certificate_status/file.rb +6 -6
  217. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  218. data/lib/puppet/indirector/exec.rb +2 -2
  219. data/lib/puppet/indirector/face.rb +24 -19
  220. data/lib/puppet/indirector/facts/facter.rb +9 -1
  221. data/lib/puppet/indirector/file_bucket_file/file.rb +142 -29
  222. data/lib/puppet/indirector/file_content/http.rb +15 -0
  223. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  224. data/lib/puppet/indirector/file_server.rb +10 -2
  225. data/lib/puppet/indirector/generic_http.rb +16 -0
  226. data/lib/puppet/indirector/hiera.rb +12 -4
  227. data/lib/puppet/indirector/indirection.rb +25 -18
  228. data/lib/puppet/indirector/json.rb +11 -12
  229. data/lib/puppet/indirector/key/ca.rb +2 -2
  230. data/lib/puppet/indirector/key/disabled_ca.rb +1 -1
  231. data/lib/puppet/indirector/key/file.rb +4 -3
  232. data/lib/puppet/indirector/ldap.rb +6 -5
  233. data/lib/puppet/indirector/memory.rb +1 -1
  234. data/lib/puppet/indirector/msgpack.rb +9 -8
  235. data/lib/puppet/indirector/node/exec.rb +9 -7
  236. data/lib/puppet/indirector/node/ldap.rb +10 -8
  237. data/lib/puppet/indirector/node/plain.rb +2 -1
  238. data/lib/puppet/indirector/node/write_only_yaml.rb +6 -1
  239. data/lib/puppet/indirector/node/yaml.rb +0 -9
  240. data/lib/puppet/indirector/report/processor.rb +2 -2
  241. data/lib/puppet/indirector/report/rest.rb +13 -0
  242. data/lib/puppet/indirector/request.rb +40 -23
  243. data/lib/puppet/indirector/resource/ral.rb +1 -1
  244. data/lib/puppet/indirector/resource/validator.rb +1 -1
  245. data/lib/puppet/indirector/rest.rb +103 -10
  246. data/lib/puppet/indirector/ssl_file.rb +33 -12
  247. data/lib/puppet/indirector/terminus.rb +7 -7
  248. data/lib/puppet/indirector/yaml.rb +5 -5
  249. data/lib/puppet/indirector.rb +2 -2
  250. data/lib/puppet/info_service/class_information_service.rb +110 -0
  251. data/lib/puppet/info_service.rb +7 -0
  252. data/lib/puppet/interface/documentation.rb +1 -1
  253. data/lib/puppet/interface/face_collection.rb +7 -2
  254. data/lib/puppet/interface.rb +12 -4
  255. data/lib/puppet/loaders.rb +6 -0
  256. data/lib/puppet/metatype/manager.rb +25 -8
  257. data/lib/puppet/module.rb +73 -34
  258. data/lib/puppet/module_tool/applications/application.rb +8 -9
  259. data/lib/puppet/module_tool/applications/builder.rb +9 -9
  260. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  261. data/lib/puppet/module_tool/applications/installer.rb +21 -20
  262. data/lib/puppet/module_tool/applications/searcher.rb +1 -1
  263. data/lib/puppet/module_tool/applications/uninstaller.rb +2 -1
  264. data/lib/puppet/module_tool/applications/unpacker.rb +4 -4
  265. data/lib/puppet/module_tool/applications/upgrader.rb +19 -18
  266. data/lib/puppet/module_tool/checksums.rb +1 -1
  267. data/lib/puppet/module_tool/contents_description.rb +1 -1
  268. data/lib/puppet/module_tool/dependency.rb +0 -1
  269. data/lib/puppet/module_tool/errors/installer.rb +23 -23
  270. data/lib/puppet/module_tool/errors/shared.rb +44 -42
  271. data/lib/puppet/module_tool/errors/uninstaller.rb +13 -9
  272. data/lib/puppet/module_tool/errors/upgrader.rb +11 -11
  273. data/lib/puppet/module_tool/install_directory.rb +1 -1
  274. data/lib/puppet/module_tool/installed_modules.rb +10 -10
  275. data/lib/puppet/module_tool/local_tarball.rb +7 -7
  276. data/lib/puppet/module_tool/metadata.rb +47 -21
  277. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  278. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +14 -3
  279. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +48 -38
  280. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +19 -4
  281. data/lib/puppet/module_tool/skeleton/templates/generator/{tests → examples}/init.pp.erb +3 -3
  282. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
  283. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -2
  284. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  285. data/lib/puppet/module_tool/tar.rb +5 -4
  286. data/lib/puppet/module_tool.rb +11 -7
  287. data/lib/puppet/network/auth_config_parser.rb +13 -12
  288. data/lib/puppet/network/authconfig.rb +23 -3
  289. data/lib/puppet/network/authorization.rb +8 -1
  290. data/lib/puppet/network/authstore.rb +2 -2
  291. data/lib/puppet/network/format.rb +7 -7
  292. data/lib/puppet/network/format_handler.rb +12 -9
  293. data/lib/puppet/network/format_support.rb +11 -5
  294. data/lib/puppet/network/formats.rb +38 -27
  295. data/lib/puppet/network/http/api/indirected_routes.rb +86 -58
  296. data/lib/puppet/network/http/api/master/v3/environment.rb +82 -0
  297. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  298. data/lib/puppet/network/http/compression.rb +12 -8
  299. data/lib/puppet/network/http/connection.rb +21 -15
  300. data/lib/puppet/network/http/error.rb +14 -10
  301. data/lib/puppet/network/http/factory.rb +8 -4
  302. data/lib/puppet/network/http/handler.rb +11 -6
  303. data/lib/puppet/network/http/issues.rb +1 -0
  304. data/lib/puppet/network/http/pool.rb +10 -1
  305. data/lib/puppet/network/http/rack/rest.rb +27 -3
  306. data/lib/puppet/network/http/rack.rb +2 -2
  307. data/lib/puppet/network/http/request.rb +34 -20
  308. data/lib/puppet/network/http/response.rb +13 -1
  309. data/lib/puppet/network/http/webrick/rest.rb +2 -2
  310. data/lib/puppet/network/http/webrick.rb +7 -6
  311. data/lib/puppet/network/rights.rb +7 -17
  312. data/lib/puppet/network/server.rb +2 -2
  313. data/lib/puppet/node/environment.rb +73 -17
  314. data/lib/puppet/node/facts.rb +1 -6
  315. data/lib/puppet/node.rb +61 -18
  316. data/lib/puppet/parameter/boolean.rb +1 -1
  317. data/lib/puppet/parameter/package_options.rb +1 -1
  318. data/lib/puppet/parameter/path.rb +3 -3
  319. data/lib/puppet/parameter/value.rb +1 -1
  320. data/lib/puppet/parameter/value_collection.rb +4 -4
  321. data/lib/puppet/parameter.rb +24 -29
  322. data/lib/puppet/parser/ast/node.rb +1 -1
  323. data/lib/puppet/parser/ast/pops_bridge.rb +103 -29
  324. data/lib/puppet/parser/ast/resource.rb +5 -0
  325. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  326. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  327. data/lib/puppet/parser/ast.rb +5 -0
  328. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  329. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +57 -0
  330. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  331. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  332. data/lib/puppet/parser/compiler.rb +351 -128
  333. data/lib/puppet/parser/e4_parser_adapter.rb +14 -14
  334. data/lib/puppet/parser/environment_compiler.rb +199 -0
  335. data/lib/puppet/parser/functions/assert_type.rb +47 -17
  336. data/lib/puppet/parser/functions/binary_file.rb +24 -0
  337. data/lib/puppet/parser/functions/break.rb +39 -0
  338. data/lib/puppet/parser/functions/contain.rb +7 -15
  339. data/lib/puppet/parser/functions/create_resources.rb +49 -25
  340. data/lib/puppet/parser/functions/defined.rb +106 -69
  341. data/lib/puppet/parser/functions/dig.rb +29 -0
  342. data/lib/puppet/parser/functions/each.rb +86 -28
  343. data/lib/puppet/parser/functions/epp.rb +30 -38
  344. data/lib/puppet/parser/functions/file.rb +4 -2
  345. data/lib/puppet/parser/functions/filter.rb +60 -24
  346. data/lib/puppet/parser/functions/find_file.rb +28 -0
  347. data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
  348. data/lib/puppet/parser/functions/generate.rb +5 -4
  349. data/lib/puppet/parser/functions/hiera.rb +98 -28
  350. data/lib/puppet/parser/functions/hiera_array.rb +86 -29
  351. data/lib/puppet/parser/functions/hiera_hash.rb +96 -31
  352. data/lib/puppet/parser/functions/hiera_include.rb +96 -41
  353. data/lib/puppet/parser/functions/include.rb +5 -8
  354. data/lib/puppet/parser/functions/inline_epp.rb +36 -61
  355. data/lib/puppet/parser/functions/inline_template.rb +3 -3
  356. data/lib/puppet/parser/functions/lest.rb +49 -0
  357. data/lib/puppet/parser/functions/lookup.rb +129 -151
  358. data/lib/puppet/parser/functions/map.rb +56 -21
  359. data/lib/puppet/parser/functions/match.rb +29 -13
  360. data/lib/puppet/parser/functions/new.rb +939 -0
  361. data/lib/puppet/parser/functions/next.rb +38 -0
  362. data/lib/puppet/parser/functions/reduce.rb +98 -61
  363. data/lib/puppet/parser/functions/regsubst.rb +4 -2
  364. data/lib/puppet/parser/functions/require.rb +4 -27
  365. data/lib/puppet/parser/functions/return.rb +71 -0
  366. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  367. data/lib/puppet/parser/functions/scanf.rb +25 -31
  368. data/lib/puppet/parser/functions/slice.rb +18 -25
  369. data/lib/puppet/parser/functions/split.rb +2 -2
  370. data/lib/puppet/parser/functions/step.rb +84 -0
  371. data/lib/puppet/parser/functions/strftime.rb +185 -0
  372. data/lib/puppet/parser/functions/then.rb +73 -0
  373. data/lib/puppet/parser/functions/type.rb +53 -0
  374. data/lib/puppet/parser/functions/with.rb +17 -9
  375. data/lib/puppet/parser/functions.rb +39 -21
  376. data/lib/puppet/parser/parser_factory.rb +0 -30
  377. data/lib/puppet/parser/relationship.rb +49 -20
  378. data/lib/puppet/parser/resource/param.rb +0 -3
  379. data/lib/puppet/parser/resource.rb +165 -50
  380. data/lib/puppet/parser/scope.rb +419 -200
  381. data/lib/puppet/parser/templatewrapper.rb +4 -3
  382. data/lib/puppet/parser/type_loader.rb +2 -2
  383. data/lib/puppet/parser.rb +3 -1
  384. data/lib/puppet/plugins/configuration.rb +15 -58
  385. data/lib/puppet/plugins/syntax_checkers.rb +6 -11
  386. data/lib/puppet/pops/adaptable.rb +12 -7
  387. data/lib/puppet/pops/adapters.rb +102 -73
  388. data/lib/puppet/pops/evaluator/access_operator.rb +248 -158
  389. data/lib/puppet/pops/evaluator/callable_signature.rb +7 -0
  390. data/lib/puppet/pops/evaluator/closure.rb +251 -109
  391. data/lib/puppet/pops/evaluator/collector_transformer.rb +51 -37
  392. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  393. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +6 -2
  394. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +8 -5
  395. data/lib/puppet/pops/evaluator/compare_operator.rb +113 -13
  396. data/lib/puppet/pops/evaluator/epp_evaluator.rb +17 -11
  397. data/lib/puppet/pops/evaluator/evaluator_impl.rb +281 -151
  398. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -9
  399. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
  400. data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  401. data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -1
  402. data/lib/puppet/pops/evaluator/relationship_operator.rb +44 -20
  403. data/lib/puppet/pops/evaluator/runtime3_converter.rb +74 -49
  404. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +117 -0
  405. data/lib/puppet/pops/evaluator/runtime3_support.rb +142 -91
  406. data/lib/puppet/pops/functions/dispatch.rb +34 -14
  407. data/lib/puppet/pops/functions/dispatcher.rb +17 -16
  408. data/lib/puppet/pops/functions/function.rb +30 -4
  409. data/lib/puppet/pops/issue_reporter.rb +49 -21
  410. data/lib/puppet/pops/issues.rb +404 -102
  411. data/lib/puppet/pops/label_provider.rb +18 -4
  412. data/lib/puppet/pops/loader/base_loader.rb +74 -20
  413. data/lib/puppet/pops/loader/dependency_loader.rb +27 -2
  414. data/lib/puppet/pops/loader/gem_support.rb +2 -2
  415. data/lib/puppet/pops/loader/loader.rb +57 -48
  416. data/lib/puppet/pops/loader/loader_paths.rb +113 -6
  417. data/lib/puppet/pops/loader/module_loaders.rb +128 -35
  418. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  419. data/lib/puppet/pops/loader/predefined_loader.rb +24 -0
  420. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
  421. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
  422. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +19 -7
  423. data/lib/puppet/pops/loader/runtime3_type_loader.rb +96 -0
  424. data/lib/puppet/pops/loader/static_loader.rb +111 -41
  425. data/lib/puppet/pops/loader/type_definition_instantiator.rb +93 -0
  426. data/lib/puppet/pops/loader/typed_name.rb +54 -0
  427. data/lib/puppet/pops/loaders.rb +213 -31
  428. data/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
  429. data/lib/puppet/pops/lookup/context.rb +200 -0
  430. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  431. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
  432. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
  433. data/lib/puppet/pops/lookup/data_provider.rb +92 -0
  434. data/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
  435. data/lib/puppet/pops/lookup/explainer.rb +594 -0
  436. data/lib/puppet/pops/lookup/function_provider.rb +110 -0
  437. data/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
  438. data/lib/puppet/pops/lookup/hiera_config.rb +761 -0
  439. data/lib/puppet/pops/lookup/interpolation.rb +154 -0
  440. data/lib/puppet/pops/lookup/invocation.rb +261 -0
  441. data/lib/puppet/pops/lookup/location_resolver.rb +99 -0
  442. data/lib/puppet/pops/lookup/lookup_adapter.rb +471 -0
  443. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  444. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
  445. data/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
  446. data/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
  447. data/lib/puppet/pops/lookup.rb +49 -49
  448. data/lib/puppet/pops/merge_strategy.rb +197 -46
  449. data/lib/puppet/pops/migration/migration_checker.rb +58 -0
  450. data/lib/puppet/pops/model/ast.pp +692 -0
  451. data/lib/puppet/pops/model/ast.rb +4833 -0
  452. data/lib/puppet/pops/model/ast_transformer.rb +15 -9
  453. data/lib/puppet/pops/model/factory.rb +550 -527
  454. data/lib/puppet/pops/model/model_label_provider.rb +33 -8
  455. data/lib/puppet/pops/model/model_tree_dumper.rb +52 -7
  456. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  457. data/lib/puppet/pops/parser/egrammar.ra +190 -67
  458. data/lib/puppet/pops/parser/eparser.rb +1823 -1338
  459. data/lib/puppet/pops/parser/epp_support.rb +27 -12
  460. data/lib/puppet/pops/parser/evaluating_parser.rb +31 -17
  461. data/lib/puppet/pops/parser/heredoc_support.rb +20 -16
  462. data/lib/puppet/pops/parser/interpolation_support.rb +18 -5
  463. data/lib/puppet/pops/parser/lexer2.rb +460 -383
  464. data/lib/puppet/pops/parser/lexer_support.rb +132 -25
  465. data/lib/puppet/pops/parser/locator.rb +86 -9
  466. data/lib/puppet/pops/parser/parser_support.rb +59 -54
  467. data/lib/puppet/pops/parser/slurp_support.rb +37 -12
  468. data/lib/puppet/pops/patterns.rb +16 -1
  469. data/lib/puppet/pops/pcore.rb +103 -0
  470. data/lib/puppet/pops/puppet_stack.rb +43 -0
  471. data/lib/puppet/pops/resource/param.rb +55 -0
  472. data/lib/puppet/pops/resource/resource_type_impl.rb +314 -0
  473. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  474. data/lib/puppet/pops/semantic_error.rb +12 -0
  475. data/lib/puppet/pops/serialization/abstract_reader.rb +176 -0
  476. data/lib/puppet/pops/serialization/abstract_writer.rb +215 -0
  477. data/lib/puppet/pops/serialization/deserializer.rb +80 -0
  478. data/lib/puppet/pops/serialization/extension.rb +157 -0
  479. data/lib/puppet/pops/serialization/from_data_converter.rb +181 -0
  480. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  481. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  482. data/lib/puppet/pops/serialization/json.rb +297 -0
  483. data/lib/puppet/pops/serialization/json_path.rb +126 -0
  484. data/lib/puppet/pops/serialization/object.rb +71 -0
  485. data/lib/puppet/pops/serialization/serializer.rb +139 -0
  486. data/lib/puppet/pops/serialization/time_factory.rb +67 -0
  487. data/lib/puppet/pops/serialization/to_data_converter.rb +292 -0
  488. data/lib/puppet/pops/serialization.rb +41 -0
  489. data/lib/puppet/pops/time/timespan.rb +718 -0
  490. data/lib/puppet/pops/time/timestamp.rb +148 -0
  491. data/lib/puppet/pops/types/annotatable.rb +36 -0
  492. data/lib/puppet/pops/types/annotation.rb +71 -0
  493. data/lib/puppet/pops/types/class_loader.rb +29 -29
  494. data/lib/puppet/pops/types/enumeration.rb +9 -27
  495. data/lib/puppet/pops/types/implementation_registry.rb +141 -0
  496. data/lib/puppet/pops/types/iterable.rb +308 -0
  497. data/lib/puppet/pops/types/p_binary_type.rb +226 -0
  498. data/lib/puppet/pops/types/p_meta_type.rb +87 -0
  499. data/lib/puppet/pops/types/p_object_type.rb +925 -0
  500. data/lib/puppet/pops/types/p_runtime_type.rb +115 -0
  501. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
  502. data/lib/puppet/pops/types/p_sem_ver_type.rb +141 -0
  503. data/lib/puppet/pops/types/p_sensitive_type.rb +73 -0
  504. data/lib/puppet/pops/types/p_timespan_type.rb +192 -0
  505. data/lib/puppet/pops/types/p_timestamp_type.rb +69 -0
  506. data/lib/puppet/pops/types/p_type_set_type.rb +360 -0
  507. data/lib/puppet/pops/types/puppet_object.rb +26 -0
  508. data/lib/puppet/pops/types/recursion_guard.rb +136 -0
  509. data/lib/puppet/pops/types/ruby_generator.rb +439 -0
  510. data/lib/puppet/pops/types/ruby_method.rb +31 -0
  511. data/lib/puppet/pops/types/string_converter.rb +1099 -0
  512. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  513. data/lib/puppet/pops/types/type_asserter.rb +21 -19
  514. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  515. data/lib/puppet/pops/types/type_calculator.rb +252 -1232
  516. data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  517. data/lib/puppet/pops/types/type_factory.rb +300 -166
  518. data/lib/puppet/pops/types/type_formatter.rb +734 -0
  519. data/lib/puppet/pops/types/type_mismatch_describer.rb +1106 -0
  520. data/lib/puppet/pops/types/type_parser.rb +382 -275
  521. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  522. data/lib/puppet/pops/types/types.rb +3287 -289
  523. data/lib/puppet/pops/utils.rb +7 -30
  524. data/lib/puppet/pops/validation/checker4_0.rb +353 -125
  525. data/lib/puppet/pops/validation/validator_factory_4_0.rb +13 -5
  526. data/lib/puppet/pops/validation.rb +50 -18
  527. data/lib/puppet/pops/visitor.rb +30 -6
  528. data/lib/puppet/pops.rb +46 -57
  529. data/lib/puppet/property/ensure.rb +4 -4
  530. data/lib/puppet/property/list.rb +1 -10
  531. data/lib/puppet/property.rb +84 -21
  532. data/lib/puppet/provider/aixobject.rb +11 -11
  533. data/lib/puppet/provider/augeas/augeas.rb +89 -34
  534. data/lib/puppet/provider/command.rb +1 -1
  535. data/lib/puppet/provider/cron/crontab.rb +3 -3
  536. data/lib/puppet/provider/exec/posix.rb +4 -4
  537. data/lib/puppet/provider/exec/windows.rb +4 -4
  538. data/lib/puppet/provider/exec.rb +14 -7
  539. data/lib/puppet/provider/file/posix.rb +5 -5
  540. data/lib/puppet/provider/file/windows.rb +4 -4
  541. data/lib/puppet/provider/group/aix.rb +6 -6
  542. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  543. data/lib/puppet/provider/group/groupadd.rb +2 -2
  544. data/lib/puppet/provider/group/pw.rb +2 -1
  545. data/lib/puppet/provider/group/windows_adsi.rb +23 -7
  546. data/lib/puppet/provider/host/parsed.rb +1 -1
  547. data/lib/puppet/provider/macauthorization/macauthorization.rb +20 -19
  548. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  549. data/lib/puppet/provider/maillist/mailman.rb +2 -2
  550. data/lib/puppet/provider/mcx/mcxcontent.rb +6 -5
  551. data/lib/puppet/provider/mount/parsed.rb +162 -3
  552. data/lib/puppet/provider/mount.rb +2 -1
  553. data/lib/puppet/provider/naginator.rb +1 -1
  554. data/lib/puppet/provider/nameservice/directoryservice.rb +65 -72
  555. data/lib/puppet/provider/nameservice.rb +40 -17
  556. data/lib/puppet/provider/network_device.rb +2 -1
  557. data/lib/puppet/provider/package/aix.rb +5 -5
  558. data/lib/puppet/provider/package/appdmg.rb +7 -6
  559. data/lib/puppet/provider/package/apple.rb +2 -2
  560. data/lib/puppet/provider/package/apt.rb +5 -5
  561. data/lib/puppet/provider/package/aptitude.rb +1 -1
  562. data/lib/puppet/provider/package/aptrpm.rb +2 -2
  563. data/lib/puppet/provider/package/blastwave.rb +4 -4
  564. data/lib/puppet/provider/package/dnf.rb +46 -0
  565. data/lib/puppet/provider/package/dpkg.rb +3 -3
  566. data/lib/puppet/provider/package/fink.rb +3 -3
  567. data/lib/puppet/provider/package/freebsd.rb +1 -1
  568. data/lib/puppet/provider/package/gem.rb +35 -9
  569. data/lib/puppet/provider/package/hpux.rb +1 -1
  570. data/lib/puppet/provider/package/nim.rb +17 -14
  571. data/lib/puppet/provider/package/openbsd.rb +11 -11
  572. data/lib/puppet/provider/package/opkg.rb +1 -1
  573. data/lib/puppet/provider/package/pacman.rb +20 -19
  574. data/lib/puppet/provider/package/pip.rb +83 -22
  575. data/lib/puppet/provider/package/pip3.rb +20 -0
  576. data/lib/puppet/provider/package/pkg.rb +21 -17
  577. data/lib/puppet/provider/package/pkgdmg.rb +12 -9
  578. data/lib/puppet/provider/package/pkgin.rb +6 -6
  579. data/lib/puppet/provider/package/pkgng.rb +143 -0
  580. data/lib/puppet/provider/package/pkgutil.rb +7 -7
  581. data/lib/puppet/provider/package/portage.rb +183 -35
  582. data/lib/puppet/provider/package/ports.rb +3 -6
  583. data/lib/puppet/provider/package/portupgrade.rb +4 -4
  584. data/lib/puppet/provider/package/puppet_gem.rb +0 -0
  585. data/lib/puppet/provider/package/rpm.rb +130 -21
  586. data/lib/puppet/provider/package/rug.rb +1 -1
  587. data/lib/puppet/provider/package/sun.rb +4 -3
  588. data/lib/puppet/provider/package/tdnf.rb +28 -0
  589. data/lib/puppet/provider/package/up2date.rb +1 -1
  590. data/lib/puppet/provider/package/urpmi.rb +1 -1
  591. data/lib/puppet/provider/package/windows/exe_package.rb +10 -9
  592. data/lib/puppet/provider/package/windows/msi_package.rb +4 -4
  593. data/lib/puppet/provider/package/windows/package.rb +12 -4
  594. data/lib/puppet/provider/package/windows.rb +5 -5
  595. data/lib/puppet/provider/package/yum.rb +73 -94
  596. data/lib/puppet/provider/package/zypper.rb +70 -16
  597. data/lib/puppet/provider/package.rb +6 -2
  598. data/lib/puppet/provider/parsedfile.rb +3 -3
  599. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +39 -7
  600. data/lib/puppet/provider/selmodule/semodule.rb +20 -16
  601. data/lib/puppet/provider/service/base.rb +4 -3
  602. data/lib/puppet/provider/service/bsd.rb +9 -9
  603. data/lib/puppet/provider/service/daemontools.rb +5 -5
  604. data/lib/puppet/provider/service/debian.rb +14 -5
  605. data/lib/puppet/provider/service/freebsd.rb +1 -1
  606. data/lib/puppet/provider/service/init.rb +27 -3
  607. data/lib/puppet/provider/service/launchd.rb +57 -19
  608. data/lib/puppet/provider/service/rcng.rb +51 -0
  609. data/lib/puppet/provider/service/redhat.rb +2 -1
  610. data/lib/puppet/provider/service/runit.rb +4 -4
  611. data/lib/puppet/provider/service/smf.rb +59 -8
  612. data/lib/puppet/provider/service/src.rb +66 -39
  613. data/lib/puppet/provider/service/systemd.rb +141 -22
  614. data/lib/puppet/provider/service/upstart.rb +1 -3
  615. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  616. data/lib/puppet/provider/sshkey/parsed.rb +20 -10
  617. data/lib/puppet/provider/user/aix.rb +12 -6
  618. data/lib/puppet/provider/user/directoryservice.rb +43 -66
  619. data/lib/puppet/provider/user/hpux.rb +1 -1
  620. data/lib/puppet/provider/user/ldap.rb +1 -1
  621. data/lib/puppet/provider/user/openbsd.rb +1 -0
  622. data/lib/puppet/provider/user/pw.rb +1 -0
  623. data/lib/puppet/provider/user/user_role_add.rb +19 -2
  624. data/lib/puppet/provider/user/useradd.rb +1 -1
  625. data/lib/puppet/provider/user/windows_adsi.rb +51 -2
  626. data/lib/puppet/provider/yumrepo/inifile.rb +12 -9
  627. data/lib/puppet/provider/zfs/zfs.rb +2 -2
  628. data/lib/puppet/provider/zone/solaris.rb +6 -3
  629. data/lib/puppet/provider/zpool/zpool.rb +2 -2
  630. data/lib/puppet/provider.rb +11 -7
  631. data/lib/puppet/reference/configuration.rb +13 -5
  632. data/lib/puppet/reference/indirection.rb +3 -3
  633. data/lib/puppet/reference/metaparameter.rb +1 -1
  634. data/lib/puppet/reference/providers.rb +8 -9
  635. data/lib/puppet/reference/report.rb +9 -12
  636. data/lib/puppet/reference/type.rb +3 -3
  637. data/lib/puppet/relationship.rb +7 -9
  638. data/lib/puppet/reports/http.rb +6 -2
  639. data/lib/puppet/reports.rb +5 -1
  640. data/lib/puppet/resource/capability_finder.rb +128 -0
  641. data/lib/puppet/resource/catalog.rb +163 -51
  642. data/lib/puppet/resource/status.rb +34 -20
  643. data/lib/puppet/resource/type.rb +246 -97
  644. data/lib/puppet/resource/type_collection.rb +97 -17
  645. data/lib/puppet/resource.rb +242 -199
  646. data/lib/puppet/settings/array_setting.rb +1 -1
  647. data/lib/puppet/settings/autosign_setting.rb +1 -1
  648. data/lib/puppet/settings/base_setting.rb +9 -3
  649. data/lib/puppet/settings/boolean_setting.rb +1 -1
  650. data/lib/puppet/settings/config_file.rb +4 -3
  651. data/lib/puppet/settings/directory_setting.rb +6 -0
  652. data/lib/puppet/settings/duration_setting.rb +1 -1
  653. data/lib/puppet/settings/enum_setting.rb +1 -1
  654. data/lib/puppet/settings/environment_conf.rb +28 -8
  655. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  656. data/lib/puppet/settings/file_setting.rb +22 -11
  657. data/lib/puppet/settings/ini_file.rb +2 -2
  658. data/lib/puppet/settings/priority_setting.rb +1 -1
  659. data/lib/puppet/settings/server_list_setting.rb +20 -0
  660. data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  661. data/lib/puppet/settings/terminus_setting.rb +1 -1
  662. data/lib/puppet/settings/ttl_setting.rb +2 -2
  663. data/lib/puppet/settings.rb +118 -46
  664. data/lib/puppet/ssl/base.rb +16 -3
  665. data/lib/puppet/ssl/certificate.rb +1 -1
  666. data/lib/puppet/ssl/certificate_authority/interface.rb +172 -32
  667. data/lib/puppet/ssl/certificate_authority.rb +67 -31
  668. data/lib/puppet/ssl/certificate_factory.rb +5 -5
  669. data/lib/puppet/ssl/certificate_request.rb +19 -19
  670. data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
  671. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -3
  672. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  673. data/lib/puppet/ssl/configuration.rb +4 -1
  674. data/lib/puppet/ssl/host.rb +47 -25
  675. data/lib/puppet/ssl/inventory.rb +11 -4
  676. data/lib/puppet/ssl/key.rb +8 -4
  677. data/lib/puppet/ssl/oids.rb +48 -8
  678. data/lib/puppet/ssl/validator/default_validator.rb +6 -7
  679. data/lib/puppet/syntax_checkers/base64.rb +41 -0
  680. data/lib/puppet/syntax_checkers/json.rb +5 -7
  681. data/lib/puppet/test/test_helper.rb +21 -11
  682. data/lib/puppet/transaction/additional_resource_generator.rb +105 -11
  683. data/lib/puppet/transaction/event.rb +45 -7
  684. data/lib/puppet/transaction/event_manager.rb +7 -7
  685. data/lib/puppet/transaction/persistence.rb +84 -0
  686. data/lib/puppet/transaction/report.rb +113 -37
  687. data/lib/puppet/transaction/resource_harness.rb +99 -37
  688. data/lib/puppet/transaction.rb +100 -54
  689. data/lib/puppet/type/augeas.rb +15 -6
  690. data/lib/puppet/type/component.rb +11 -0
  691. data/lib/puppet/type/cron.rb +27 -44
  692. data/lib/puppet/type/exec.rb +82 -52
  693. data/lib/puppet/type/file/checksum.rb +1 -0
  694. data/lib/puppet/type/file/checksum_value.rb +53 -0
  695. data/lib/puppet/type/file/content.rb +37 -122
  696. data/lib/puppet/type/file/data_sync.rb +92 -0
  697. data/lib/puppet/type/file/ensure.rb +22 -19
  698. data/lib/puppet/type/file/group.rb +3 -3
  699. data/lib/puppet/type/file/mode.rb +10 -6
  700. data/lib/puppet/type/file/owner.rb +3 -3
  701. data/lib/puppet/type/file/selcontext.rb +19 -2
  702. data/lib/puppet/type/file/source.rb +134 -37
  703. data/lib/puppet/type/file/target.rb +2 -2
  704. data/lib/puppet/type/file.rb +160 -61
  705. data/lib/puppet/type/filebucket.rb +3 -8
  706. data/lib/puppet/type/group.rb +28 -10
  707. data/lib/puppet/type/host.rb +7 -7
  708. data/lib/puppet/type/interface.rb +9 -4
  709. data/lib/puppet/type/k5login.rb +1 -1
  710. data/lib/puppet/type/macauthorization.rb +2 -2
  711. data/lib/puppet/type/mailalias.rb +2 -18
  712. data/lib/puppet/type/maillist.rb +1 -1
  713. data/lib/puppet/type/mount.rb +31 -8
  714. data/lib/puppet/type/notify.rb +3 -1
  715. data/lib/puppet/type/package.rb +37 -17
  716. data/lib/puppet/type/resources.rb +7 -7
  717. data/lib/puppet/type/schedule.rb +14 -14
  718. data/lib/puppet/type/scheduled_task.rb +18 -5
  719. data/lib/puppet/type/service.rb +25 -1
  720. data/lib/puppet/type/ssh_authorized_key.rb +20 -30
  721. data/lib/puppet/type/sshkey.rb +9 -7
  722. data/lib/puppet/type/stage.rb +1 -1
  723. data/lib/puppet/type/tidy.rb +24 -15
  724. data/lib/puppet/type/user.rb +112 -53
  725. data/lib/puppet/type/yumrepo.rb +36 -16
  726. data/lib/puppet/type/zone.rb +13 -13
  727. data/lib/puppet/type/zpool.rb +3 -3
  728. data/lib/puppet/type.rb +175 -47
  729. data/lib/puppet/util/at_fork/noop.rb +18 -0
  730. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  731. data/lib/puppet/util/at_fork.rb +35 -0
  732. data/lib/puppet/util/autoload.rb +18 -13
  733. data/lib/puppet/util/backups.rb +6 -6
  734. data/lib/puppet/util/character_encoding.rb +98 -0
  735. data/lib/puppet/util/checksums.rb +74 -31
  736. data/lib/puppet/util/classgen.rb +5 -5
  737. data/lib/puppet/util/command_line/puppet_option_parser.rb +3 -3
  738. data/lib/puppet/util/command_line/trollop.rb +32 -32
  739. data/lib/puppet/util/command_line.rb +14 -6
  740. data/lib/puppet/util/diff.rb +1 -1
  741. data/lib/puppet/util/errors.rb +4 -4
  742. data/lib/puppet/util/execution.rb +42 -23
  743. data/lib/puppet/util/feature.rb +5 -5
  744. data/lib/puppet/util/fileparsing.rb +8 -8
  745. data/lib/puppet/util/filetype.rb +26 -20
  746. data/lib/puppet/util/http_proxy.rb +132 -0
  747. data/lib/puppet/util/inifile.rb +5 -5
  748. data/lib/puppet/util/instance_loader.rb +2 -2
  749. data/lib/puppet/util/json_lockfile.rb +4 -4
  750. data/lib/puppet/util/ldap/connection.rb +2 -2
  751. data/lib/puppet/util/ldap/manager.rb +2 -2
  752. data/lib/puppet/util/limits.rb +1 -1
  753. data/lib/puppet/util/log/destinations.rb +33 -18
  754. data/lib/puppet/util/log.rb +92 -16
  755. data/lib/puppet/util/logging.rb +88 -6
  756. data/lib/puppet/util/metric.rb +9 -6
  757. data/lib/puppet/util/monkey_patches.rb +41 -65
  758. data/lib/puppet/util/multi_match.rb +51 -0
  759. data/lib/puppet/util/network_device/cisco/device.rb +29 -11
  760. data/lib/puppet/util/network_device/cisco/interface.rb +21 -9
  761. data/lib/puppet/util/network_device/config.rb +7 -7
  762. data/lib/puppet/util/network_device/transport/ssh.rb +13 -9
  763. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  764. data/lib/puppet/util/network_device.rb +1 -1
  765. data/lib/puppet/util/plist.rb +153 -0
  766. data/lib/puppet/util/posix.rb +5 -5
  767. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  768. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  769. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  770. data/lib/puppet/util/profiler.rb +1 -1
  771. data/lib/puppet/util/provider_features.rb +1 -1
  772. data/lib/puppet/util/psych_support.rb +4 -12
  773. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +3 -3
  774. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  775. data/lib/puppet/util/rdoc.rb +6 -6
  776. data/lib/puppet/util/reference.rb +9 -7
  777. data/lib/puppet/util/resource_template.rb +2 -2
  778. data/lib/puppet/util/retry_action.rb +2 -2
  779. data/lib/puppet/util/rubygems.rb +1 -1
  780. data/lib/puppet/util/run_mode.rb +3 -16
  781. data/lib/puppet/util/selinux.rb +54 -12
  782. data/lib/puppet/util/skip_tags.rb +9 -0
  783. data/lib/puppet/util/splayer.rb +18 -0
  784. data/lib/puppet/util/storage.rb +5 -5
  785. data/lib/puppet/util/suidmanager.rb +4 -4
  786. data/lib/puppet/util/symbolic_file_mode.rb +9 -9
  787. data/lib/puppet/util/tag_set.rb +1 -4
  788. data/lib/puppet/util/tagging.rb +9 -3
  789. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  790. data/lib/puppet/util/windows/access_control_entry.rb +2 -2
  791. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  792. data/lib/puppet/util/windows/adsi.rb +222 -85
  793. data/lib/puppet/util/windows/api_types.rb +28 -19
  794. data/lib/puppet/util/windows/com.rb +7 -7
  795. data/lib/puppet/util/windows/error.rb +3 -3
  796. data/lib/puppet/util/windows/eventlog.rb +192 -0
  797. data/lib/puppet/util/windows/file.rb +115 -22
  798. data/lib/puppet/util/windows/principal.rb +191 -0
  799. data/lib/puppet/util/windows/process.rb +90 -13
  800. data/lib/puppet/util/windows/registry.rb +31 -25
  801. data/lib/puppet/util/windows/root_certs.rb +6 -6
  802. data/lib/puppet/util/windows/security.rb +52 -51
  803. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  804. data/lib/puppet/util/windows/sid.rb +89 -20
  805. data/lib/puppet/util/windows/taskscheduler.rb +154 -98
  806. data/lib/puppet/util/windows/user.rb +38 -20
  807. data/lib/puppet/util/windows.rb +7 -0
  808. data/lib/puppet/util/yaml.rb +15 -3
  809. data/lib/puppet/util.rb +259 -33
  810. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  811. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  812. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  813. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  814. data/lib/puppet/vendor/pathspec/README.md +1 -1
  815. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  816. data/lib/puppet/vendor/require_vendored.rb +0 -1
  817. data/lib/puppet/vendor/semantic/lib/semantic.rb +4 -6
  818. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  819. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  820. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/module_release.rb +17 -5
  821. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  822. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  823. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  824. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  825. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +203 -0
  826. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +758 -0
  827. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +9 -0
  828. data/lib/puppet/vendor/semantic_puppet/locales/config.yaml +21 -0
  829. data/lib/puppet/version.rb +7 -3
  830. data/lib/puppet.rb +104 -6
  831. data/lib/puppet_x.rb +7 -1
  832. data/locales/config.yaml +29 -0
  833. data/locales/puppet.pot +7995 -0
  834. data/man/man5/puppet.conf.5 +61 -41
  835. data/man/man8/puppet-agent.8 +6 -3
  836. data/man/man8/puppet-apply.8 +6 -3
  837. data/man/man8/puppet-ca.8 +3 -3
  838. data/man/man8/puppet-catalog.8 +3 -3
  839. data/man/man8/puppet-cert.8 +3 -3
  840. data/man/man8/puppet-certificate.8 +3 -3
  841. data/man/man8/puppet-certificate_request.8 +3 -3
  842. data/man/man8/puppet-certificate_revocation_list.8 +3 -3
  843. data/man/man8/puppet-config.8 +4 -4
  844. data/man/man8/puppet-describe.8 +2 -2
  845. data/man/man8/puppet-device.8 +7 -4
  846. data/man/man8/puppet-doc.8 +2 -2
  847. data/man/man8/puppet-epp.8 +3 -3
  848. data/man/man8/puppet-facts.8 +3 -3
  849. data/man/man8/puppet-filebucket.8 +3 -3
  850. data/man/man8/puppet-help.8 +3 -3
  851. data/man/man8/puppet-inspect.8 +3 -3
  852. data/man/man8/puppet-key.8 +3 -3
  853. data/man/man8/puppet-man.8 +3 -3
  854. data/man/man8/puppet-master.8 +6 -3
  855. data/man/man8/puppet-module.8 +10 -10
  856. data/man/man8/puppet-node.8 +3 -3
  857. data/man/man8/puppet-parser.8 +3 -3
  858. data/man/man8/puppet-plugin.8 +3 -3
  859. data/man/man8/puppet-report.8 +3 -3
  860. data/man/man8/puppet-resource.8 +3 -3
  861. data/man/man8/puppet-status.8 +4 -4
  862. data/man/man8/puppet.8 +2 -2
  863. data/spec/fixtures/module.tar.gz +0 -0
  864. data/spec/fixtures/unit/application/environments/production/data/common.yaml +22 -0
  865. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  866. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  867. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  868. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/environment/data.pp +10 -0
  869. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  870. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  871. data/spec/fixtures/unit/data_providers/environments/{sample → hiera_bad_syntax_json}/environment.conf +1 -1
  872. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  873. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  874. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  875. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  876. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  877. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  878. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  879. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  880. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  881. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  882. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  883. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  884. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  885. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  886. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  887. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  888. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/third_utf8.json +3 -0
  889. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/utf8.yaml +3 -0
  890. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  891. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  892. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +22 -0
  893. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  894. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +48 -0
  895. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  896. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  897. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  898. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  899. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  900. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  901. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  902. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  903. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  904. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  905. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  906. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +2 -0
  907. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  908. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server1.yaml +1 -0
  909. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server2.yaml +1 -0
  910. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  911. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  912. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +20 -0
  913. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  914. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  915. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  916. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  917. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  918. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  919. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  920. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  921. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  922. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  923. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  924. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  925. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  926. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  927. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  928. data/spec/fixtures/unit/data_providers/environments/production/lib/puppet/functions/environment/data.rb +3 -1
  929. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +2 -1
  930. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +2 -1
  931. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
  932. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/functions/data.pp +6 -0
  933. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/manifests/init.pp +9 -0
  934. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
  935. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  936. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  937. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/metadata.json +9 -0
  938. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  939. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/manifests/init.pp +2 -0
  940. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
  941. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
  942. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/data/empty.json +0 -0
  943. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/hiera.yaml +5 -0
  944. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/manifests/init.pp +2 -0
  945. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/metadata.json +9 -0
  946. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/data/empty_key.json +1 -0
  947. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/hiera.yaml +5 -0
  948. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/manifests/init.pp +2 -0
  949. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/metadata.json +9 -0
  950. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/data/empty_key.yaml +1 -0
  951. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/hiera.yaml +5 -0
  952. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/manifests/init.pp +2 -0
  953. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/metadata.json +9 -0
  954. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/data/empty.yaml +2 -0
  955. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  956. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  957. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/metadata.json +9 -0
  958. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/data/first.json +4 -0
  959. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  960. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  961. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/metadata.json +9 -0
  962. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  963. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/manifests/init.pp +3 -0
  964. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/metadata.json +9 -0
  965. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  966. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +0 -0
  967. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  968. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  969. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/type/usee_type.rb +5 -0
  970. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  971. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  972. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  973. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  974. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  975. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  976. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  977. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  978. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  979. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  980. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +87 -0
  981. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  982. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  983. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  984. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcalled.pp +3 -0
  985. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller.pp +3 -0
  986. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller4.pp +3 -0
  987. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/callingpuppet.rb +5 -0
  988. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/functions/hello.pp +3 -0
  989. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/manifests/init.pp +3 -0
  990. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/metadata.json +10 -0
  991. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  992. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/hello.pp +3 -0
  993. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/subspace/hello.pp +3 -0
  994. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +1 -10
  995. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +0 -0
  996. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +93 -85
  997. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +11 -7
  998. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +8 -0
  999. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +1 -0
  1000. data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +1 -0
  1001. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +3 -0
  1002. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  1003. data/spec/fixtures/unit/provider/package/yum/yum-check-update-obsoletes.txt +195 -0
  1004. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  1005. data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-empty.out +3 -0
  1006. data/spec/fixtures/unit/provider/service/smf/svcs.out +4 -3
  1007. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  1008. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  1009. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  1010. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  1011. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  1012. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  1013. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  1014. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  1015. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  1016. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  1017. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  1018. data/spec/integration/agent/logging_spec.rb +15 -14
  1019. data/spec/integration/application/apply_spec.rb +442 -32
  1020. data/spec/integration/application/doc_spec.rb +0 -0
  1021. data/spec/integration/application/lookup_spec.rb +155 -0
  1022. data/spec/integration/configurer_spec.rb +1 -1
  1023. data/spec/integration/data_binding_spec.rb +195 -0
  1024. data/spec/integration/defaults_spec.rb +29 -4
  1025. data/spec/integration/directory_environments_spec.rb +16 -0
  1026. data/spec/integration/environments/default_manifest_spec.rb +16 -16
  1027. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  1028. data/spec/integration/environments/settings_spec.rb +32 -4
  1029. data/spec/integration/faces/ca_spec.rb +0 -0
  1030. data/spec/integration/faces/config_spec.rb +80 -0
  1031. data/spec/integration/faces/documentation_spec.rb +2 -2
  1032. data/spec/integration/faces/plugin_spec.rb +0 -4
  1033. data/spec/integration/file_bucket/file_spec.rb +2 -2
  1034. data/spec/integration/file_serving/fileset_spec.rb +0 -0
  1035. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -0
  1036. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  1037. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -0
  1038. data/spec/integration/indirector/direct_file_server_spec.rb +0 -0
  1039. data/spec/integration/indirector/facts/facter_spec.rb +97 -0
  1040. data/spec/integration/indirector/file_content/file_server_spec.rb +1 -0
  1041. data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -0
  1042. data/spec/integration/indirector/node/ldap_spec.rb +0 -0
  1043. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  1044. data/spec/integration/network/formats_spec.rb +0 -0
  1045. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  1046. data/spec/integration/node/environment_spec.rb +34 -0
  1047. data/spec/integration/node/facts_spec.rb +0 -0
  1048. data/spec/integration/node_spec.rb +0 -0
  1049. data/spec/integration/parser/catalog_spec.rb +15 -3
  1050. data/spec/integration/parser/class_spec.rb +6 -6
  1051. data/spec/integration/parser/collection_spec.rb +18 -0
  1052. data/spec/integration/parser/compiler_spec.rb +911 -658
  1053. data/spec/integration/parser/dynamic_scoping_spec.rb +66 -0
  1054. data/spec/integration/parser/parameter_defaults_spec.rb +358 -0
  1055. data/spec/integration/parser/pcore_resource_spec.rb +260 -0
  1056. data/spec/integration/parser/resource_expressions_spec.rb +10 -5
  1057. data/spec/integration/parser/scope_spec.rb +99 -11
  1058. data/spec/integration/parser/undef_param_spec.rb +9 -1
  1059. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -0
  1060. data/spec/integration/provider/mount_spec.rb +23 -36
  1061. data/spec/integration/provider/service/init_spec.rb +0 -0
  1062. data/spec/integration/provider/service/windows_spec.rb +3 -2
  1063. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -0
  1064. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  1065. data/spec/integration/reference/providers_spec.rb +0 -0
  1066. data/spec/integration/reports_spec.rb +0 -0
  1067. data/spec/integration/resource/catalog_spec.rb +1 -5
  1068. data/spec/integration/resource/type_collection_spec.rb +14 -0
  1069. data/spec/integration/ssl/autosign_spec.rb +18 -3
  1070. data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
  1071. data/spec/integration/ssl/certificate_request_spec.rb +0 -1
  1072. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
  1073. data/spec/integration/ssl/host_spec.rb +0 -1
  1074. data/spec/integration/ssl/key_spec.rb +104 -0
  1075. data/spec/integration/test/test_helper_spec.rb +32 -0
  1076. data/spec/integration/transaction/report_spec.rb +683 -1
  1077. data/spec/integration/transaction_spec.rb +128 -4
  1078. data/spec/integration/type/exec_spec.rb +0 -0
  1079. data/spec/integration/type/file_spec.rb +582 -51
  1080. data/spec/integration/type/package_spec.rb +79 -2
  1081. data/spec/integration/type/tidy_spec.rb +21 -9
  1082. data/spec/integration/type/user_spec.rb +13 -6
  1083. data/spec/integration/type_spec.rb +0 -0
  1084. data/spec/integration/util/autoload_spec.rb +0 -0
  1085. data/spec/integration/util/execution_spec.rb +30 -0
  1086. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  1087. data/spec/integration/util/settings_spec.rb +26 -0
  1088. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  1089. data/spec/integration/util/windows/principal_spec.rb +250 -0
  1090. data/spec/integration/util/windows/process_spec.rb +35 -2
  1091. data/spec/{unit → integration}/util/windows/registry_spec.rb +92 -2
  1092. data/spec/integration/util/windows/security_spec.rb +75 -21
  1093. data/spec/integration/util/windows/user_spec.rb +27 -5
  1094. data/spec/integration/util_spec.rb +49 -27
  1095. data/spec/lib/matchers/include_in_order.rb +2 -3
  1096. data/spec/lib/matchers/json.rb +3 -3
  1097. data/spec/lib/matchers/resource.rb +22 -1
  1098. data/spec/lib/puppet/face/1.0.0/huzzah.rb +1 -1
  1099. data/spec/lib/puppet/face/basetest.rb +1 -1
  1100. data/spec/lib/puppet/face/huzzah.rb +1 -1
  1101. data/spec/lib/puppet/face/version_matching.rb +1 -1
  1102. data/spec/lib/puppet/indirector_testing.rb +4 -0
  1103. data/spec/lib/puppet_spec/character_encoding.rb +12 -0
  1104. data/spec/lib/puppet_spec/compiler.rb +40 -4
  1105. data/spec/lib/puppet_spec/files.rb +16 -2
  1106. data/spec/lib/puppet_spec/fixtures.rb +0 -0
  1107. data/spec/lib/puppet_spec/language.rb +3 -1
  1108. data/spec/lib/puppet_spec/matchers.rb +6 -4
  1109. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  1110. data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
  1111. data/spec/lib/puppet_spec/modules.rb +2 -2
  1112. data/spec/lib/puppet_spec/network.rb +22 -14
  1113. data/spec/lib/puppet_spec/pops.rb +13 -0
  1114. data/spec/lib/puppet_spec/unindent.rb +5 -0
  1115. data/spec/lib/puppet_spec/verbose.rb +0 -0
  1116. data/spec/shared_behaviours/all_parsedfile_providers.rb +0 -0
  1117. data/spec/shared_behaviours/file_server_terminus.rb +0 -0
  1118. data/spec/shared_behaviours/file_serving.rb +0 -0
  1119. data/spec/shared_behaviours/iterative_functions.rb +9 -9
  1120. data/spec/shared_behaviours/memory_terminus.rb +0 -0
  1121. data/spec/shared_behaviours/path_parameters.rb +0 -0
  1122. data/spec/shared_behaviours/things_that_declare_options.rb +0 -0
  1123. data/spec/shared_contexts/types_setup.rb +143 -0
  1124. data/spec/shared_examples/rhel_package_provider.rb +356 -0
  1125. data/spec/spec_helper.rb +23 -13
  1126. data/spec/unit/agent/locker_spec.rb +4 -4
  1127. data/spec/unit/agent_spec.rb +23 -46
  1128. data/spec/unit/application/agent_spec.rb +22 -0
  1129. data/spec/unit/application/apply_spec.rb +59 -14
  1130. data/spec/unit/application/cert_spec.rb +20 -0
  1131. data/spec/unit/application/certificate_spec.rb +0 -0
  1132. data/spec/unit/application/config_spec.rb +0 -0
  1133. data/spec/unit/application/describe_spec.rb +19 -0
  1134. data/spec/unit/application/device_spec.rb +41 -2
  1135. data/spec/unit/application/doc_spec.rb +0 -0
  1136. data/spec/unit/application/face_base_spec.rb +22 -6
  1137. data/spec/unit/application/facts_spec.rb +0 -0
  1138. data/spec/unit/application/filebucket_spec.rb +88 -2
  1139. data/spec/unit/application/indirection_base_spec.rb +0 -0
  1140. data/spec/unit/application/lookup_spec.rb +532 -0
  1141. data/spec/unit/application/master_spec.rb +53 -11
  1142. data/spec/unit/application/resource_spec.rb +39 -1
  1143. data/spec/unit/application_spec.rb +3 -9
  1144. data/spec/unit/capability_spec.rb +412 -0
  1145. data/spec/unit/configurer/downloader_factory_spec.rb +0 -0
  1146. data/spec/unit/configurer/downloader_spec.rb +5 -5
  1147. data/spec/unit/configurer/fact_handler_spec.rb +76 -20
  1148. data/spec/unit/configurer/plugin_handler_spec.rb +5 -8
  1149. data/spec/unit/configurer_spec.rb +372 -58
  1150. data/spec/unit/confine/exists_spec.rb +0 -0
  1151. data/spec/unit/confine/false_spec.rb +0 -0
  1152. data/spec/unit/confine/feature_spec.rb +0 -0
  1153. data/spec/unit/confine/true_spec.rb +0 -0
  1154. data/spec/unit/confine/variable_spec.rb +0 -0
  1155. data/spec/unit/confine_collection_spec.rb +0 -0
  1156. data/spec/unit/confine_spec.rb +0 -0
  1157. data/spec/unit/confiner_spec.rb +0 -0
  1158. data/spec/unit/context/trusted_information_spec.rb +24 -1
  1159. data/spec/unit/daemon_spec.rb +18 -8
  1160. data/spec/unit/data_providers/function_data_provider_spec.rb +30 -3
  1161. data/spec/unit/data_providers/hiera_data_provider_spec.rb +361 -0
  1162. data/spec/unit/defaults_spec.rb +34 -17
  1163. data/spec/unit/environments_spec.rb +26 -4
  1164. data/spec/unit/etc_spec.rb +442 -0
  1165. data/spec/unit/external/pson_spec.rb +0 -0
  1166. data/spec/unit/face/ca_spec.rb +10 -0
  1167. data/spec/unit/face/catalog_spec.rb +0 -0
  1168. data/spec/unit/face/certificate_request_spec.rb +10 -0
  1169. data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
  1170. data/spec/unit/face/certificate_spec.rb +10 -2
  1171. data/spec/unit/face/config_spec.rb +47 -0
  1172. data/spec/unit/face/epp_face_spec.rb +24 -5
  1173. data/spec/unit/face/facts_spec.rb +0 -0
  1174. data/spec/unit/face/generate_spec.rb +230 -0
  1175. data/spec/unit/face/help_spec.rb +70 -0
  1176. data/spec/unit/face/key_spec.rb +10 -0
  1177. data/spec/unit/face/module/list_spec.rb +60 -0
  1178. data/spec/unit/face/module/search_spec.rb +1 -1
  1179. data/spec/unit/face/node_spec.rb +1 -1
  1180. data/spec/unit/face/parser_spec.rb +49 -2
  1181. data/spec/unit/face/plugin_spec.rb +29 -4
  1182. data/spec/unit/face/status_spec.rb +10 -0
  1183. data/spec/unit/face_spec.rb +0 -0
  1184. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  1185. data/spec/unit/file_bucket/file_spec.rb +3 -3
  1186. data/spec/unit/file_serving/base_spec.rb +0 -0
  1187. data/spec/unit/file_serving/configuration/parser_spec.rb +25 -30
  1188. data/spec/unit/file_serving/configuration_spec.rb +1 -1
  1189. data/spec/unit/file_serving/content_spec.rb +0 -0
  1190. data/spec/unit/file_serving/fileset_spec.rb +0 -0
  1191. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  1192. data/spec/unit/file_serving/metadata_spec.rb +85 -9
  1193. data/spec/unit/file_serving/mount/file_spec.rb +0 -0
  1194. data/spec/unit/file_serving/mount/modules_spec.rb +0 -0
  1195. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +0 -0
  1196. data/spec/unit/file_serving/mount/plugins_spec.rb +0 -0
  1197. data/spec/unit/file_serving/mount_spec.rb +0 -0
  1198. data/spec/unit/file_serving/terminus_helper_spec.rb +2 -3
  1199. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  1200. data/spec/unit/file_system/uniquefile_spec.rb +20 -0
  1201. data/spec/unit/file_system_spec.rb +373 -6
  1202. data/spec/unit/forge/forge_spec.rb +112 -0
  1203. data/spec/unit/forge/repository_spec.rb +31 -4
  1204. data/spec/unit/functions/annotate_spec.rb +175 -0
  1205. data/spec/unit/functions/assert_type_spec.rb +48 -8
  1206. data/spec/unit/functions/binary_file_spec.rb +46 -0
  1207. data/spec/unit/functions/break_spec.rb +117 -0
  1208. data/spec/unit/functions/call_spec.rb +77 -0
  1209. data/spec/unit/{parser/functions → functions}/contain_spec.rb +69 -4
  1210. data/spec/unit/functions/defined_spec.rb +289 -0
  1211. data/spec/unit/functions/dig_spec.rb +58 -0
  1212. data/spec/unit/functions/epp_spec.rb +17 -9
  1213. data/spec/unit/functions/filter_spec.rb +18 -0
  1214. data/spec/unit/functions/find_file_spec.rb +69 -0
  1215. data/spec/unit/functions/hiera_spec.rb +451 -49
  1216. data/spec/unit/functions/include_spec.rb +175 -0
  1217. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  1218. data/spec/unit/functions/lest_spec.rb +34 -0
  1219. data/spec/unit/functions/logging_spec.rb +54 -0
  1220. data/spec/unit/functions/lookup_fixture_spec.rb +688 -0
  1221. data/spec/unit/functions/lookup_spec.rb +3108 -264
  1222. data/spec/unit/functions/match_spec.rb +2 -2
  1223. data/spec/unit/functions/new_spec.rb +694 -0
  1224. data/spec/unit/functions/next_spec.rb +93 -0
  1225. data/spec/unit/functions/regsubst_spec.rb +30 -9
  1226. data/spec/unit/functions/require_spec.rb +83 -0
  1227. data/spec/unit/functions/return_spec.rb +105 -0
  1228. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  1229. data/spec/unit/functions/scanf_spec.rb +1 -1
  1230. data/spec/unit/{parser/functions → functions}/shared.rb +15 -12
  1231. data/spec/unit/functions/split_spec.rb +11 -3
  1232. data/spec/unit/functions/step_spec.rb +113 -0
  1233. data/spec/unit/functions/strftime_spec.rb +152 -0
  1234. data/spec/unit/functions/then_spec.rb +40 -0
  1235. data/spec/unit/functions/type_spec.rb +35 -0
  1236. data/spec/unit/functions/unique_spec.rb +111 -0
  1237. data/spec/unit/functions/unwrap_spec.rb +29 -0
  1238. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  1239. data/spec/unit/functions4_spec.rb +352 -107
  1240. data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
  1241. data/spec/unit/graph/relationship_graph_spec.rb +0 -0
  1242. data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
  1243. data/spec/unit/graph/simple_graph_spec.rb +59 -56
  1244. data/spec/unit/hiera/scope_spec.rb +6 -3
  1245. data/spec/unit/hiera_puppet_spec.rb +49 -8
  1246. data/spec/unit/indirector/catalog/compiler_spec.rb +887 -83
  1247. data/spec/unit/indirector/catalog/json_spec.rb +50 -1
  1248. data/spec/unit/indirector/catalog/msgpack_spec.rb +0 -0
  1249. data/spec/unit/indirector/catalog/rest_spec.rb +0 -0
  1250. data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -0
  1251. data/spec/unit/indirector/catalog/yaml_spec.rb +0 -0
  1252. data/spec/unit/indirector/certificate/ca_spec.rb +0 -0
  1253. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -0
  1254. data/spec/unit/indirector/certificate/file_spec.rb +0 -0
  1255. data/spec/unit/indirector/certificate/rest_spec.rb +0 -0
  1256. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -0
  1257. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -0
  1258. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -0
  1259. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -0
  1260. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -0
  1261. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -0
  1262. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -0
  1263. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -0
  1264. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -0
  1265. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -0
  1266. data/spec/unit/indirector/code_spec.rb +0 -0
  1267. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  1268. data/spec/unit/indirector/direct_file_server_spec.rb +0 -0
  1269. data/spec/unit/indirector/envelope_spec.rb +0 -0
  1270. data/spec/unit/indirector/exec_spec.rb +0 -0
  1271. data/spec/unit/indirector/face_spec.rb +10 -2
  1272. data/spec/unit/indirector/facts/facter_spec.rb +6 -7
  1273. data/spec/unit/indirector/facts/network_device_spec.rb +0 -0
  1274. data/spec/unit/indirector/facts/store_configs_spec.rb +0 -0
  1275. data/spec/unit/indirector/facts/yaml_spec.rb +0 -0
  1276. data/spec/unit/indirector/file_bucket_file/file_spec.rb +86 -4
  1277. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +0 -0
  1278. data/spec/unit/indirector/file_content/file_server_spec.rb +0 -0
  1279. data/spec/unit/indirector/file_content/file_spec.rb +0 -0
  1280. data/spec/unit/indirector/file_content/rest_spec.rb +0 -0
  1281. data/spec/unit/indirector/file_metadata/file_server_spec.rb +0 -0
  1282. data/spec/unit/indirector/file_metadata/file_spec.rb +0 -0
  1283. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -0
  1284. data/spec/unit/indirector/file_server_spec.rb +17 -2
  1285. data/spec/unit/indirector/indirection_spec.rb +14 -38
  1286. data/spec/unit/indirector/json_spec.rb +27 -6
  1287. data/spec/unit/indirector/key/ca_spec.rb +0 -0
  1288. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -0
  1289. data/spec/unit/indirector/key/file_spec.rb +1 -1
  1290. data/spec/unit/indirector/ldap_spec.rb +0 -0
  1291. data/spec/unit/indirector/memory_spec.rb +0 -0
  1292. data/spec/unit/indirector/msgpack_spec.rb +11 -1
  1293. data/spec/unit/indirector/node/exec_spec.rb +12 -12
  1294. data/spec/unit/indirector/node/ldap_spec.rb +29 -8
  1295. data/spec/unit/indirector/node/memory_spec.rb +0 -0
  1296. data/spec/unit/indirector/node/msgpack_spec.rb +0 -0
  1297. data/spec/unit/indirector/node/plain_spec.rb +16 -6
  1298. data/spec/unit/indirector/node/rest_spec.rb +0 -0
  1299. data/spec/unit/indirector/node/store_configs_spec.rb +0 -0
  1300. data/spec/unit/indirector/node/write_only_yaml_spec.rb +12 -0
  1301. data/spec/unit/indirector/node/yaml_spec.rb +0 -0
  1302. data/spec/unit/indirector/plain_spec.rb +0 -0
  1303. data/spec/unit/indirector/report/msgpack_spec.rb +0 -0
  1304. data/spec/unit/indirector/report/processor_spec.rb +2 -2
  1305. data/spec/unit/indirector/report/rest_spec.rb +29 -3
  1306. data/spec/unit/indirector/report/yaml_spec.rb +0 -0
  1307. data/spec/unit/indirector/request_spec.rb +32 -12
  1308. data/spec/unit/indirector/resource/ral_spec.rb +0 -0
  1309. data/spec/unit/indirector/resource/store_configs_spec.rb +0 -0
  1310. data/spec/unit/indirector/rest_spec.rb +158 -18
  1311. data/spec/unit/indirector/ssl_file_spec.rb +4 -4
  1312. data/spec/unit/indirector/status/rest_spec.rb +0 -0
  1313. data/spec/unit/indirector/store_configs_spec.rb +0 -0
  1314. data/spec/unit/indirector/terminus_spec.rb +0 -0
  1315. data/spec/unit/indirector/yaml_spec.rb +1 -1
  1316. data/spec/unit/indirector_spec.rb +0 -0
  1317. data/spec/unit/info_service_spec.rb +298 -0
  1318. data/spec/unit/interface/action_builder_spec.rb +0 -0
  1319. data/spec/unit/interface/action_manager_spec.rb +0 -0
  1320. data/spec/unit/interface/action_spec.rb +0 -0
  1321. data/spec/unit/interface/documentation_spec.rb +0 -0
  1322. data/spec/unit/interface/face_collection_spec.rb +7 -7
  1323. data/spec/unit/interface/option_builder_spec.rb +0 -0
  1324. data/spec/unit/interface/option_spec.rb +0 -0
  1325. data/spec/unit/interface_spec.rb +27 -0
  1326. data/spec/unit/man_spec.rb +1 -1
  1327. data/spec/unit/module_spec.rb +126 -74
  1328. data/spec/unit/module_tool/application_spec.rb +1 -1
  1329. data/spec/unit/module_tool/applications/builder_spec.rb +44 -9
  1330. data/spec/unit/module_tool/applications/installer_spec.rb +11 -3
  1331. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  1332. data/spec/unit/module_tool/applications/upgrader_spec.rb +9 -2
  1333. data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
  1334. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  1335. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  1336. data/spec/unit/module_tool/tar_spec.rb +16 -10
  1337. data/spec/unit/module_tool_spec.rb +3 -3
  1338. data/spec/unit/network/auth_config_parser_spec.rb +16 -0
  1339. data/spec/unit/network/authconfig_spec.rb +62 -32
  1340. data/spec/unit/network/authorization_spec.rb +30 -2
  1341. data/spec/unit/network/authstore_spec.rb +2 -2
  1342. data/spec/unit/network/format_handler_spec.rb +11 -11
  1343. data/spec/unit/network/format_spec.rb +9 -0
  1344. data/spec/unit/network/formats_spec.rb +322 -138
  1345. data/spec/unit/network/http/api/indirected_routes_spec.rb +125 -116
  1346. data/spec/unit/network/http/api/master/v3/environment_spec.rb +186 -0
  1347. data/spec/unit/network/http/api/master/v3_spec.rb +23 -5
  1348. data/spec/unit/network/http/api_spec.rb +1 -1
  1349. data/spec/unit/network/http/compression_spec.rb +132 -84
  1350. data/spec/unit/network/http/connection_spec.rb +25 -19
  1351. data/spec/unit/network/http/error_spec.rb +1 -1
  1352. data/spec/unit/network/http/factory_spec.rb +18 -0
  1353. data/spec/unit/network/http/handler_spec.rb +17 -18
  1354. data/spec/unit/network/http/nocache_pool_spec.rb +0 -0
  1355. data/spec/unit/network/http/pool_spec.rb +30 -0
  1356. data/spec/unit/network/http/rack/rest_spec.rb +9 -2
  1357. data/spec/unit/network/http/rack_spec.rb +0 -0
  1358. data/spec/unit/network/http/request_spec.rb +110 -0
  1359. data/spec/unit/network/http/response_spec.rb +108 -0
  1360. data/spec/unit/network/http/session_spec.rb +0 -0
  1361. data/spec/unit/network/http/site_spec.rb +0 -0
  1362. data/spec/unit/network/http/webrick/rest_spec.rb +0 -0
  1363. data/spec/unit/network/http/webrick_spec.rb +1 -1
  1364. data/spec/unit/network/http_pool_spec.rb +0 -0
  1365. data/spec/unit/network/http_spec.rb +0 -0
  1366. data/spec/unit/network/resolver_spec.rb +0 -0
  1367. data/spec/unit/network/rights_spec.rb +4 -4
  1368. data/spec/unit/network/server_spec.rb +0 -0
  1369. data/spec/unit/node/environment_spec.rb +10 -0
  1370. data/spec/unit/node/facts_spec.rb +13 -13
  1371. data/spec/unit/node_spec.rb +74 -10
  1372. data/spec/unit/other/selinux_spec.rb +0 -0
  1373. data/spec/unit/parameter/path_spec.rb +0 -0
  1374. data/spec/unit/parameter/value_collection_spec.rb +0 -0
  1375. data/spec/unit/parameter/value_spec.rb +0 -0
  1376. data/spec/unit/parameter_spec.rb +84 -5
  1377. data/spec/unit/parser/ast/leaf_spec.rb +1 -1
  1378. data/spec/unit/parser/compiler_spec.rb +135 -34
  1379. data/spec/unit/parser/environment_compiler_spec.rb +686 -0
  1380. data/spec/unit/parser/files_spec.rb +0 -0
  1381. data/spec/unit/parser/functions/create_resources_spec.rb +132 -10
  1382. data/spec/unit/parser/functions/digest_spec.rb +0 -0
  1383. data/spec/unit/parser/functions/fail_spec.rb +0 -0
  1384. data/spec/unit/parser/functions/file_spec.rb +7 -1
  1385. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -2
  1386. data/spec/unit/parser/functions/generate_spec.rb +3 -12
  1387. data/spec/unit/parser/functions/hiera_array_spec.rb +1 -1
  1388. data/spec/unit/parser/functions/hiera_hash_spec.rb +1 -1
  1389. data/spec/unit/parser/functions/hiera_include_spec.rb +1 -1
  1390. data/spec/unit/parser/functions/hiera_spec.rb +1 -1
  1391. data/spec/unit/parser/functions/inline_template_spec.rb +0 -0
  1392. data/spec/unit/parser/functions/lookup_spec.rb +1 -1
  1393. data/spec/unit/parser/functions/realize_spec.rb +0 -0
  1394. data/spec/unit/parser/functions/regsubst_spec.rb +1 -1
  1395. data/spec/unit/parser/functions/scanf_spec.rb +0 -0
  1396. data/spec/unit/parser/functions/shellquote_spec.rb +0 -0
  1397. data/spec/unit/parser/functions/split_spec.rb +1 -1
  1398. data/spec/unit/parser/functions/sprintf_spec.rb +0 -0
  1399. data/spec/unit/parser/functions/tag_spec.rb +0 -0
  1400. data/spec/unit/parser/functions/template_spec.rb +1 -1
  1401. data/spec/unit/parser/functions/versioncmp_spec.rb +0 -0
  1402. data/spec/unit/parser/functions_spec.rb +0 -0
  1403. data/spec/unit/parser/relationship_spec.rb +0 -0
  1404. data/spec/unit/parser/resource/param_spec.rb +0 -0
  1405. data/spec/unit/parser/resource_spec.rb +115 -54
  1406. data/spec/unit/parser/scope_spec.rb +84 -86
  1407. data/spec/unit/parser/templatewrapper_spec.rb +1 -1
  1408. data/spec/unit/parser/type_loader_spec.rb +0 -0
  1409. data/spec/unit/pops/benchmark_spec.rb +8 -26
  1410. data/spec/unit/pops/containment_spec.rb +0 -26
  1411. data/spec/unit/pops/evaluator/access_ops_spec.rb +214 -99
  1412. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +223 -0
  1413. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +5 -6
  1414. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +29 -26
  1415. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +218 -47
  1416. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +29 -25
  1417. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  1418. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  1419. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +168 -0
  1420. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +10 -10
  1421. data/spec/unit/pops/evaluator/variables_spec.rb +2 -2
  1422. data/spec/unit/pops/factory_rspec_helper.rb +0 -4
  1423. data/spec/unit/pops/factory_spec.rb +83 -83
  1424. data/spec/unit/pops/issues_spec.rb +16 -16
  1425. data/spec/unit/pops/label_provider_spec.rb +5 -1
  1426. data/spec/unit/pops/loaders/dependency_loader_spec.rb +66 -1
  1427. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  1428. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  1429. data/spec/unit/pops/loaders/loaders_spec.rb +541 -57
  1430. data/spec/unit/pops/loaders/module_loaders_spec.rb +63 -2
  1431. data/spec/unit/pops/loaders/static_loader_spec.rb +80 -19
  1432. data/spec/unit/pops/lookup/context_spec.rb +334 -0
  1433. data/spec/unit/pops/lookup/interpolation_spec.rb +373 -0
  1434. data/spec/unit/pops/lookup/lookup_spec.rb +294 -0
  1435. data/spec/unit/pops/merge_strategy_spec.rb +18 -0
  1436. data/spec/unit/pops/migration_spec.rb +53 -0
  1437. data/spec/unit/pops/model/model_spec.rb +10 -10
  1438. data/spec/unit/pops/parser/epp_parser_spec.rb +1 -1
  1439. data/spec/unit/pops/parser/lexer2_spec.rb +380 -10
  1440. data/spec/unit/pops/parser/locator_spec.rb +24 -0
  1441. data/spec/unit/pops/parser/parse_application_spec.rb +32 -0
  1442. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +35 -4
  1443. data/spec/unit/pops/parser/parse_calls_spec.rb +25 -0
  1444. data/spec/unit/pops/parser/parse_capabilities_spec.rb +37 -0
  1445. data/spec/unit/pops/parser/parse_containers_spec.rb +17 -19
  1446. data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
  1447. data/spec/unit/pops/parser/parse_heredoc_spec.rb +26 -0
  1448. data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
  1449. data/spec/unit/pops/parser/parse_site_spec.rb +48 -0
  1450. data/spec/unit/pops/parser/parser_rspec_helper.rb +6 -0
  1451. data/spec/unit/pops/parser/parser_spec.rb +32 -6
  1452. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  1453. data/spec/unit/pops/resource/resource_type_impl_spec.rb +109 -0
  1454. data/spec/unit/pops/serialization/packer_spec.rb +154 -0
  1455. data/spec/unit/pops/serialization/serialization_spec.rb +426 -0
  1456. data/spec/unit/pops/serialization/to_from_hr_spec.rb +494 -0
  1457. data/spec/unit/pops/time/timespan_spec.rb +121 -0
  1458. data/spec/unit/pops/time/timestamp_spec.rb +13 -0
  1459. data/spec/unit/pops/types/enumeration_spec.rb +13 -12
  1460. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  1461. data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
  1462. data/spec/unit/pops/types/p_object_type_spec.rb +1253 -0
  1463. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +322 -0
  1464. data/spec/unit/pops/types/p_sensitive_type_spec.rb +169 -0
  1465. data/spec/unit/pops/types/p_timespan_type_spec.rb +273 -0
  1466. data/spec/unit/pops/types/p_timestamp_type_spec.rb +311 -0
  1467. data/spec/unit/pops/types/p_type_set_type_spec.rb +445 -0
  1468. data/spec/unit/pops/types/recursion_guard_spec.rb +93 -0
  1469. data/spec/unit/pops/types/ruby_generator_spec.rb +662 -0
  1470. data/spec/unit/pops/types/string_converter_spec.rb +1132 -0
  1471. data/spec/unit/pops/types/type_acceptor_spec.rb +106 -0
  1472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  1473. data/spec/unit/pops/types/type_calculator_spec.rb +1249 -901
  1474. data/spec/unit/pops/types/type_factory_spec.rb +137 -96
  1475. data/spec/unit/pops/types/type_formatter_spec.rb +409 -0
  1476. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +228 -0
  1477. data/spec/unit/pops/types/type_parser_spec.rb +207 -40
  1478. data/spec/unit/pops/types/types_spec.rb +650 -0
  1479. data/spec/unit/pops/validation_spec.rb +66 -0
  1480. data/spec/unit/pops/validator/validator_spec.rb +395 -21
  1481. data/spec/unit/pops/visitor_spec.rb +1 -1
  1482. data/spec/unit/property/ensure_spec.rb +0 -0
  1483. data/spec/unit/property/keyvalue_spec.rb +0 -0
  1484. data/spec/unit/property/list_spec.rb +2 -2
  1485. data/spec/unit/property/ordered_list_spec.rb +0 -0
  1486. data/spec/unit/property_spec.rb +49 -12
  1487. data/spec/unit/provider/augeas/augeas_spec.rb +60 -1
  1488. data/spec/unit/provider/cisco_spec.rb +0 -0
  1489. data/spec/unit/provider/command_spec.rb +0 -0
  1490. data/spec/unit/provider/cron/crontab_spec.rb +0 -0
  1491. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  1492. data/spec/unit/provider/exec/posix_spec.rb +0 -0
  1493. data/spec/unit/provider/exec/shell_spec.rb +0 -0
  1494. data/spec/unit/provider/exec/windows_spec.rb +0 -0
  1495. data/spec/unit/provider/exec_spec.rb +0 -0
  1496. data/spec/unit/provider/file/posix_spec.rb +0 -0
  1497. data/spec/unit/provider/file/windows_spec.rb +0 -0
  1498. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  1499. data/spec/unit/provider/group/groupadd_spec.rb +0 -0
  1500. data/spec/unit/provider/group/ldap_spec.rb +0 -0
  1501. data/spec/unit/provider/group/pw_spec.rb +0 -0
  1502. data/spec/unit/provider/group/windows_adsi_spec.rb +88 -18
  1503. data/spec/unit/provider/host/parsed_spec.rb +0 -0
  1504. data/spec/unit/provider/interface/cisco_spec.rb +0 -0
  1505. data/spec/unit/provider/ldap_spec.rb +0 -0
  1506. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  1507. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -0
  1508. data/spec/unit/provider/mount/parsed_spec.rb +31 -5
  1509. data/spec/unit/provider/mount_spec.rb +0 -0
  1510. data/spec/unit/provider/naginator_spec.rb +0 -0
  1511. data/spec/unit/provider/nameservice/directoryservice_spec.rb +16 -19
  1512. data/spec/unit/provider/nameservice_spec.rb +167 -15
  1513. data/spec/unit/provider/network_device_spec.rb +0 -0
  1514. data/spec/unit/provider/package/aix_spec.rb +0 -0
  1515. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  1516. data/spec/unit/provider/package/apt_spec.rb +5 -0
  1517. data/spec/unit/provider/package/aptitude_spec.rb +0 -0
  1518. data/spec/unit/provider/package/aptrpm_spec.rb +3 -3
  1519. data/spec/unit/provider/package/base_spec.rb +18 -0
  1520. data/spec/unit/provider/package/dnf_spec.rb +30 -0
  1521. data/spec/unit/provider/package/dpkg_spec.rb +0 -0
  1522. data/spec/unit/provider/package/freebsd_spec.rb +0 -0
  1523. data/spec/unit/provider/package/gem_spec.rb +77 -0
  1524. data/spec/unit/provider/package/hpux_spec.rb +0 -0
  1525. data/spec/unit/provider/package/macports_spec.rb +0 -0
  1526. data/spec/unit/provider/package/nim_spec.rb +6 -6
  1527. data/spec/unit/provider/package/openbsd_spec.rb +0 -0
  1528. data/spec/unit/provider/package/opkg_spec.rb +0 -0
  1529. data/spec/unit/provider/package/pacman_spec.rb +55 -0
  1530. data/spec/unit/provider/package/pip3_spec.rb +22 -0
  1531. data/spec/unit/provider/package/pip_spec.rb +173 -46
  1532. data/spec/unit/provider/package/pkg_spec.rb +139 -99
  1533. data/spec/unit/provider/package/pkgdmg_spec.rb +32 -8
  1534. data/spec/unit/provider/package/pkgin_spec.rb +23 -13
  1535. data/spec/unit/provider/package/pkgng_spec.rb +186 -0
  1536. data/spec/unit/provider/package/pkgutil_spec.rb +0 -0
  1537. data/spec/unit/provider/package/portage_spec.rb +150 -8
  1538. data/spec/unit/provider/package/puppet_gem_spec.rb +0 -0
  1539. data/spec/unit/provider/package/rpm_spec.rb +183 -12
  1540. data/spec/unit/provider/package/sun_spec.rb +0 -0
  1541. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  1542. data/spec/unit/provider/package/windows/exe_package_spec.rb +0 -1
  1543. data/spec/unit/provider/package/windows/msi_package_spec.rb +0 -1
  1544. data/spec/unit/provider/package/windows/package_spec.rb +45 -1
  1545. data/spec/unit/provider/package/windows_spec.rb +8 -2
  1546. data/spec/unit/provider/package/yum_spec.rb +29 -466
  1547. data/spec/unit/provider/package/zypper_spec.rb +64 -19
  1548. data/spec/unit/provider/parsedfile_spec.rb +0 -0
  1549. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +523 -70
  1550. data/spec/unit/provider/selboolean_spec.rb +0 -0
  1551. data/spec/unit/provider/selmodule_spec.rb +0 -0
  1552. data/spec/unit/provider/service/base_spec.rb +44 -27
  1553. data/spec/unit/provider/service/bsd_spec.rb +130 -0
  1554. data/spec/unit/provider/service/daemontools_spec.rb +0 -0
  1555. data/spec/unit/provider/service/debian_spec.rb +38 -0
  1556. data/spec/unit/provider/service/freebsd_spec.rb +17 -0
  1557. data/spec/unit/provider/service/gentoo_spec.rb +8 -0
  1558. data/spec/unit/provider/service/init_spec.rb +42 -1
  1559. data/spec/unit/provider/service/launchd_spec.rb +124 -25
  1560. data/spec/unit/provider/service/openbsd_spec.rb +1 -0
  1561. data/spec/unit/provider/service/openrc_spec.rb +7 -0
  1562. data/spec/unit/provider/service/openwrt_spec.rb +0 -0
  1563. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  1564. data/spec/unit/provider/service/redhat_spec.rb +9 -1
  1565. data/spec/unit/provider/service/runit_spec.rb +0 -0
  1566. data/spec/unit/provider/service/smf_spec.rb +77 -13
  1567. data/spec/unit/provider/service/src_spec.rb +31 -4
  1568. data/spec/unit/provider/service/systemd_spec.rb +228 -39
  1569. data/spec/unit/provider/service/upstart_spec.rb +64 -0
  1570. data/spec/unit/provider/service/windows_spec.rb +0 -0
  1571. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -1
  1572. data/spec/unit/provider/sshkey/parsed_spec.rb +42 -18
  1573. data/spec/unit/provider/user/aix_spec.rb +7 -0
  1574. data/spec/unit/provider/user/directoryservice_spec.rb +171 -90
  1575. data/spec/unit/provider/user/hpux_spec.rb +0 -0
  1576. data/spec/unit/provider/user/ldap_spec.rb +0 -0
  1577. data/spec/unit/provider/user/openbsd_spec.rb +0 -0
  1578. data/spec/unit/provider/user/pw_spec.rb +0 -0
  1579. data/spec/unit/provider/user/user_role_add_spec.rb +0 -0
  1580. data/spec/unit/provider/user/useradd_spec.rb +14 -0
  1581. data/spec/unit/provider/user/windows_adsi_spec.rb +160 -7
  1582. data/spec/unit/provider/vlan/cisco_spec.rb +0 -0
  1583. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  1584. data/spec/unit/provider/zfs/zfs_spec.rb +0 -0
  1585. data/spec/unit/provider/zone/solaris_spec.rb +64 -12
  1586. data/spec/unit/provider/zpool/zpool_spec.rb +0 -0
  1587. data/spec/unit/provider_spec.rb +0 -0
  1588. data/spec/unit/puppet_spec.rb +16 -3
  1589. data/spec/unit/relationship_spec.rb +15 -36
  1590. data/spec/unit/reports/http_spec.rb +11 -8
  1591. data/spec/unit/reports/store_spec.rb +0 -0
  1592. data/spec/unit/reports_spec.rb +10 -0
  1593. data/spec/unit/resource/capability_finder_spec.rb +147 -0
  1594. data/spec/unit/resource/catalog_spec.rb +294 -41
  1595. data/spec/unit/resource/status_spec.rb +114 -103
  1596. data/spec/unit/resource/type_collection_spec.rb +28 -7
  1597. data/spec/unit/resource/type_spec.rb +172 -82
  1598. data/spec/unit/resource_spec.rb +161 -76
  1599. data/spec/unit/settings/directory_setting_spec.rb +0 -0
  1600. data/spec/unit/settings/duration_setting_spec.rb +0 -0
  1601. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  1602. data/spec/unit/settings/file_setting_spec.rb +37 -0
  1603. data/spec/unit/settings/ini_file_spec.rb +58 -1
  1604. data/spec/unit/settings/path_setting_spec.rb +0 -0
  1605. data/spec/unit/settings/priority_setting_spec.rb +0 -0
  1606. data/spec/unit/settings_spec.rb +120 -5
  1607. data/spec/unit/ssl/base_spec.rb +9 -0
  1608. data/spec/unit/ssl/certificate_authority/interface_spec.rb +180 -13
  1609. data/spec/unit/ssl/certificate_authority_spec.rb +82 -28
  1610. data/spec/unit/ssl/certificate_factory_spec.rb +2 -2
  1611. data/spec/unit/ssl/certificate_request_attributes_spec.rb +6 -0
  1612. data/spec/unit/ssl/certificate_request_spec.rb +4 -5
  1613. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  1614. data/spec/unit/ssl/certificate_spec.rb +1 -1
  1615. data/spec/unit/ssl/configuration_spec.rb +11 -2
  1616. data/spec/unit/ssl/host_spec.rb +37 -37
  1617. data/spec/unit/ssl/inventory_spec.rb +27 -3
  1618. data/spec/unit/ssl/key_spec.rb +7 -7
  1619. data/spec/unit/ssl/oids_spec.rb +24 -13
  1620. data/spec/unit/status_spec.rb +7 -7
  1621. data/spec/unit/transaction/additional_resource_generator_spec.rb +160 -31
  1622. data/spec/unit/transaction/event_manager_spec.rb +0 -0
  1623. data/spec/unit/transaction/event_spec.rb +18 -13
  1624. data/spec/unit/transaction/persistence_spec.rb +178 -0
  1625. data/spec/unit/transaction/report_spec.rb +214 -40
  1626. data/spec/unit/transaction/resource_harness_spec.rb +84 -40
  1627. data/spec/unit/transaction_spec.rb +102 -7
  1628. data/spec/unit/type/augeas_spec.rb +0 -0
  1629. data/spec/unit/type/component_spec.rb +0 -0
  1630. data/spec/unit/type/computer_spec.rb +0 -0
  1631. data/spec/unit/type/cron_spec.rb +0 -0
  1632. data/spec/unit/type/exec_spec.rb +57 -12
  1633. data/spec/unit/type/file/checksum_spec.rb +6 -0
  1634. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  1635. data/spec/unit/type/file/content_spec.rb +59 -208
  1636. data/spec/unit/type/file/ctime_spec.rb +0 -0
  1637. data/spec/unit/type/file/ensure_spec.rb +0 -0
  1638. data/spec/unit/type/file/group_spec.rb +2 -2
  1639. data/spec/unit/type/file/mode_spec.rb +9 -9
  1640. data/spec/unit/type/file/mtime_spec.rb +0 -0
  1641. data/spec/unit/type/file/owner_spec.rb +2 -2
  1642. data/spec/unit/type/file/selinux_spec.rb +2 -0
  1643. data/spec/unit/type/file/source_spec.rb +224 -119
  1644. data/spec/unit/type/file/type_spec.rb +0 -0
  1645. data/spec/unit/type/file_spec.rb +211 -35
  1646. data/spec/unit/type/filebucket_spec.rb +0 -0
  1647. data/spec/unit/type/group_spec.rb +0 -0
  1648. data/spec/unit/type/host_spec.rb +4 -4
  1649. data/spec/unit/type/interface_spec.rb +32 -0
  1650. data/spec/unit/type/k5login_spec.rb +0 -0
  1651. data/spec/unit/type/macauthorization_spec.rb +4 -1
  1652. data/spec/unit/type/mailalias_spec.rb +0 -0
  1653. data/spec/unit/type/maillist_spec.rb +0 -0
  1654. data/spec/unit/type/mcx_spec.rb +0 -0
  1655. data/spec/unit/type/mount_spec.rb +50 -8
  1656. data/spec/unit/type/nagios_spec.rb +0 -0
  1657. data/spec/unit/type/noop_metaparam_spec.rb +0 -0
  1658. data/spec/unit/type/package/package_settings_spec.rb +0 -0
  1659. data/spec/unit/type/package_spec.rb +1 -0
  1660. data/spec/unit/type/resources_spec.rb +0 -0
  1661. data/spec/unit/type/schedule_spec.rb +0 -0
  1662. data/spec/unit/type/selboolean_spec.rb +0 -0
  1663. data/spec/unit/type/selmodule_spec.rb +0 -0
  1664. data/spec/unit/type/service_spec.rb +21 -0
  1665. data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
  1666. data/spec/unit/type/sshkey_spec.rb +0 -0
  1667. data/spec/unit/type/stage_spec.rb +0 -0
  1668. data/spec/unit/type/tidy_spec.rb +4 -4
  1669. data/spec/unit/type/user_spec.rb +38 -7
  1670. data/spec/unit/type/vlan_spec.rb +1 -1
  1671. data/spec/unit/type/whit_spec.rb +0 -0
  1672. data/spec/unit/type/yumrepo_spec.rb +3 -7
  1673. data/spec/unit/type/zfs_spec.rb +0 -0
  1674. data/spec/unit/type/zone_spec.rb +0 -0
  1675. data/spec/unit/type/zpool_spec.rb +0 -0
  1676. data/spec/unit/type_spec.rb +119 -1
  1677. data/spec/unit/util/at_fork_spec.rb +150 -0
  1678. data/spec/unit/util/autoload_spec.rb +0 -0
  1679. data/spec/unit/util/backups_spec.rb +0 -0
  1680. data/spec/unit/util/character_encoding_spec.rb +229 -0
  1681. data/spec/unit/util/checksums_spec.rb +0 -0
  1682. data/spec/unit/util/colors_spec.rb +0 -0
  1683. data/spec/unit/util/command_line_spec.rb +11 -0
  1684. data/spec/unit/util/constant_inflector_spec.rb +0 -0
  1685. data/spec/unit/util/diff_spec.rb +0 -0
  1686. data/spec/unit/util/errors_spec.rb +0 -0
  1687. data/spec/unit/util/execution_spec.rb +44 -3
  1688. data/spec/unit/util/execution_stub_spec.rb +0 -0
  1689. data/spec/unit/util/feature_spec.rb +1 -1
  1690. data/spec/unit/util/filetype_spec.rb +4 -4
  1691. data/spec/unit/util/http_proxy_spec.rb +91 -0
  1692. data/spec/unit/util/ldap/connection_spec.rb +0 -0
  1693. data/spec/unit/util/ldap/generator_spec.rb +1 -1
  1694. data/spec/unit/util/ldap/manager_spec.rb +0 -0
  1695. data/spec/unit/util/log/destinations_spec.rb +5 -8
  1696. data/spec/unit/util/log_spec.rb +187 -18
  1697. data/spec/unit/util/logging_spec.rb +69 -0
  1698. data/spec/unit/util/metric_spec.rb +9 -2
  1699. data/spec/unit/util/monkey_patches_spec.rb +37 -127
  1700. data/spec/unit/util/multi_match_spec.rb +39 -0
  1701. data/spec/unit/util/nagios_maker_spec.rb +0 -0
  1702. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  1703. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -0
  1704. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -0
  1705. data/spec/unit/util/network_device/config_spec.rb +0 -0
  1706. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -0
  1707. data/spec/unit/util/network_device/transport/base_spec.rb +0 -0
  1708. data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
  1709. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  1710. data/spec/unit/util/network_device_spec.rb +1 -1
  1711. data/spec/unit/util/package_spec.rb +0 -0
  1712. data/spec/unit/util/plist_spec.rb +135 -0
  1713. data/spec/unit/util/posix_spec.rb +0 -0
  1714. data/spec/unit/util/rdoc_spec.rb +0 -0
  1715. data/spec/unit/util/resource_template_spec.rb +2 -2
  1716. data/spec/unit/util/retry_action_spec.rb +0 -0
  1717. data/spec/unit/util/run_mode_spec.rb +44 -13
  1718. data/spec/unit/util/selinux_spec.rb +0 -0
  1719. data/spec/unit/util/splayer_spec.rb +45 -0
  1720. data/spec/unit/util/storage_spec.rb +8 -1
  1721. data/spec/unit/util/suidmanager_spec.rb +0 -0
  1722. data/spec/unit/util/symbolic_file_mode_spec.rb +0 -0
  1723. data/spec/unit/util/tag_set_spec.rb +2 -2
  1724. data/spec/unit/util/tagging_spec.rb +59 -0
  1725. data/spec/unit/util/user_attr_spec.rb +0 -0
  1726. data/spec/unit/util/warnings_spec.rb +0 -0
  1727. data/spec/unit/util/windows/adsi_spec.rb +196 -60
  1728. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  1729. data/spec/unit/util/windows/eventlog_spec.rb +123 -0
  1730. data/spec/unit/util/windows/file_spec.rb +89 -0
  1731. data/spec/unit/util/windows/root_certs_spec.rb +0 -0
  1732. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  1733. data/spec/unit/util/windows/sid_spec.rb +76 -24
  1734. data/spec/unit/util/yaml_spec.rb +13 -1
  1735. data/spec/unit/util_spec.rb +456 -17
  1736. data/spec/unit/version_spec.rb +19 -0
  1737. data/spec/watchr.rb +0 -0
  1738. data/tasks/benchmark.rake +3 -3
  1739. data/tasks/cfpropertylist.rake +15 -0
  1740. data/tasks/generate_ast_model.rake +78 -0
  1741. metadata +3474 -3068
  1742. checksums.yaml +0 -7
  1743. data/bin/extlookup2hiera +0 -56
  1744. data/ext/emacs/puppet-mode-init.el +0 -6
  1745. data/ext/emacs/puppet-mode.el +0 -433
  1746. data/ext/puppet-nm-dispatcher +0 -13
  1747. data/ext/puppetlisten/puppetlisten.rb +0 -77
  1748. data/ext/puppetlisten/puppetrun.rb +0 -38
  1749. data/ext/systemd/puppetmaster.service +0 -11
  1750. data/ext/vim/README +0 -3
  1751. data/ext/vim/ftdetect/puppet.vim +0 -2
  1752. data/ext/vim/ftplugin/puppet.vim +0 -94
  1753. data/ext/vim/indent/puppet.vim +0 -76
  1754. data/ext/vim/syntax/puppet.vim +0 -115
  1755. data/lib/puppet/application/file.rb +0 -4
  1756. data/lib/puppet/application/inspect.rb +0 -179
  1757. data/lib/puppet/application/resource_type.rb +0 -7
  1758. data/lib/puppet/data_providers/data_adapter.rb +0 -91
  1759. data/lib/puppet/data_providers/data_function_support.rb +0 -45
  1760. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -28
  1761. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -39
  1762. data/lib/puppet/data_providers.rb +0 -31
  1763. data/lib/puppet/face/file/download.rb +0 -56
  1764. data/lib/puppet/face/file/store.rb +0 -21
  1765. data/lib/puppet/face/file.rb +0 -47
  1766. data/lib/puppet/face/resource_type.rb +0 -84
  1767. data/lib/puppet/feature/cfacter.rb +0 -14
  1768. data/lib/puppet/feature/external_facts.rb +0 -5
  1769. data/lib/puppet/indirector/catalog/static_compiler.rb +0 -213
  1770. data/lib/puppet/indirector/resource_type/parser.rb +0 -101
  1771. data/lib/puppet/indirector/resource_type/rest.rb +0 -7
  1772. data/lib/puppet/indirector/resource_type.rb +0 -5
  1773. data/lib/puppet/parser/yaml_trimmer.rb +0 -7
  1774. data/lib/puppet/plugins/binding_schemes.rb +0 -140
  1775. data/lib/puppet/plugins/data_providers.rb +0 -90
  1776. data/lib/puppet/pops/binder/binder.rb +0 -394
  1777. data/lib/puppet/pops/binder/binder_issues.rb +0 -122
  1778. data/lib/puppet/pops/binder/bindings_checker.rb +0 -197
  1779. data/lib/puppet/pops/binder/bindings_composer.rb +0 -177
  1780. data/lib/puppet/pops/binder/bindings_factory.rb +0 -809
  1781. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -43
  1782. data/lib/puppet/pops/binder/bindings_loader.rb +0 -83
  1783. data/lib/puppet/pops/binder/bindings_model.rb +0 -68
  1784. data/lib/puppet/pops/binder/bindings_model_dumper.rb +0 -215
  1785. data/lib/puppet/pops/binder/bindings_model_meta.rb +0 -215
  1786. data/lib/puppet/pops/binder/bindings_validator_factory.rb +0 -28
  1787. data/lib/puppet/pops/binder/config/binder_config.rb +0 -107
  1788. data/lib/puppet/pops/binder/config/binder_config_checker.rb +0 -142
  1789. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +0 -32
  1790. data/lib/puppet/pops/binder/config/issues.rb +0 -90
  1791. data/lib/puppet/pops/binder/injector.rb +0 -766
  1792. data/lib/puppet/pops/binder/injector_entry.rb +0 -57
  1793. data/lib/puppet/pops/binder/key_factory.rb +0 -67
  1794. data/lib/puppet/pops/binder/producers.rb +0 -826
  1795. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +0 -34
  1796. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +0 -84
  1797. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +0 -53
  1798. data/lib/puppet/pops/binder/system_bindings.rb +0 -60
  1799. data/lib/puppet/pops/containment.rb +0 -104
  1800. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  1801. data/lib/puppet/pops/model/model.rb +0 -114
  1802. data/lib/puppet/pops/model/model_meta.rb +0 -582
  1803. data/lib/puppet/pops/types/types_meta.rb +0 -223
  1804. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  1805. data/lib/puppet/vendor/load_plist.rb +0 -1
  1806. data/lib/puppet/vendor/load_rgen.rb +0 -2
  1807. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  1808. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  1809. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  1810. data/lib/puppet/vendor/plist/README +0 -36
  1811. data/lib/puppet/vendor/plist/Rakefile +0 -144
  1812. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  1813. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  1814. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  1815. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  1816. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  1817. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  1818. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  1819. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  1820. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  1821. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  1822. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  1823. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  1824. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  1825. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  1826. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  1827. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  1828. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  1829. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  1830. data/lib/puppet/vendor/rgen/CHANGELOG +0 -197
  1831. data/lib/puppet/vendor/rgen/MIT-LICENSE +0 -20
  1832. data/lib/puppet/vendor/rgen/PUPPET_README.md +0 -6
  1833. data/lib/puppet/vendor/rgen/README.rdoc +0 -78
  1834. data/lib/puppet/vendor/rgen/Rakefile +0 -41
  1835. data/lib/puppet/vendor/rgen/TODO +0 -41
  1836. data/lib/puppet/vendor/rgen/anounce.txt +0 -61
  1837. data/lib/puppet/vendor/rgen/design_rationale.txt +0 -71
  1838. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +0 -54
  1839. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +0 -32
  1840. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +0 -562
  1841. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +0 -45
  1842. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +0 -43
  1843. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +0 -103
  1844. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +0 -89
  1845. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +0 -559
  1846. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +0 -26
  1847. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +0 -20
  1848. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +0 -91
  1849. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +0 -28
  1850. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +0 -37
  1851. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +0 -172
  1852. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +0 -45
  1853. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +0 -218
  1854. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +0 -81
  1855. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +0 -69
  1856. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +0 -47
  1857. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +0 -167
  1858. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +0 -91
  1859. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +0 -129
  1860. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +0 -63
  1861. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +0 -140
  1862. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +0 -289
  1863. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +0 -66
  1864. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +0 -66
  1865. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +0 -117
  1866. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +0 -169
  1867. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +0 -126
  1868. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +0 -331
  1869. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +0 -94
  1870. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +0 -137
  1871. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +0 -97
  1872. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +0 -128
  1873. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +0 -47
  1874. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +0 -168
  1875. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +0 -556
  1876. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +0 -174
  1877. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +0 -89
  1878. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +0 -77
  1879. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +0 -30
  1880. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +0 -168
  1881. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +0 -23
  1882. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +0 -42
  1883. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +0 -224
  1884. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +0 -334
  1885. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +0 -225
  1886. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +0 -156
  1887. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +0 -32
  1888. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +0 -121
  1889. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +0 -18
  1890. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +0 -47
  1891. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +0 -116
  1892. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +0 -71
  1893. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +0 -98
  1894. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +0 -83
  1895. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +0 -87
  1896. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +0 -234
  1897. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +0 -26
  1898. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +0 -297
  1899. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +0 -475
  1900. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +0 -61
  1901. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +0 -67
  1902. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +0 -124
  1903. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +0 -84
  1904. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +0 -114
  1905. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +0 -68
  1906. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +0 -142
  1907. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +0 -29
  1908. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +0 -42
  1909. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +0 -329
  1910. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +0 -79
  1911. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +0 -127
  1912. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +0 -64
  1913. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +0 -35
  1914. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +0 -23
  1915. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +0 -54
  1916. data/lib/puppet/vendor/rgen/test/environment_test.rb +0 -90
  1917. data/lib/puppet/vendor/rgen/test/json_test.rb +0 -171
  1918. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +0 -1482
  1919. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +0 -57
  1920. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +0 -131
  1921. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +0 -70
  1922. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +0 -42
  1923. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +0 -44
  1924. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +0 -9
  1925. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +0 -98
  1926. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +0 -178
  1927. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +0 -59
  1928. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +0 -242
  1929. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +0 -163
  1930. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +0 -163
  1931. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +0 -156
  1932. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +0 -94
  1933. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +0 -42
  1934. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +0 -23
  1935. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +0 -6
  1936. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +0 -30
  1937. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +0 -58
  1938. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +0 -48
  1939. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +0 -102
  1940. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +0 -117
  1941. data/lib/puppet/vendor/rgen/test/rgen_test.rb +0 -26
  1942. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +0 -29
  1943. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +0 -9
  1944. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +0 -4
  1945. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +0 -1
  1946. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +0 -1
  1947. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +0 -12
  1948. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +0 -5
  1949. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +0 -11
  1950. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +0 -7
  1951. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +0 -5
  1952. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +0 -8
  1953. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +0 -8
  1954. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +0 -7
  1955. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +0 -12
  1956. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +0 -1
  1957. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +0 -3
  1958. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +0 -5
  1959. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +0 -3
  1960. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +0 -3
  1961. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +0 -24
  1962. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +0 -13
  1963. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +0 -10
  1964. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +0 -17
  1965. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +0 -31
  1966. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +0 -3
  1967. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +0 -9
  1968. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +0 -4
  1969. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +0 -29
  1970. data/lib/puppet/vendor/rgen/test/template_language_test.rb +0 -163
  1971. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +0 -119
  1972. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  1973. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +0 -1029
  1974. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +0 -317
  1975. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +0 -101
  1976. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +0 -22
  1977. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +0 -67
  1978. data/lib/puppet/vendor/rgen/test/transformer_test.rb +0 -254
  1979. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +0 -99
  1980. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +0 -97
  1981. data/lib/puppet/vendor/rgen/test/util_test.rb +0 -5
  1982. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +0 -94
  1983. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +0 -53
  1984. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +0 -49
  1985. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +0 -75
  1986. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +0 -160
  1987. data/lib/puppet/vendor/rgen_patch.rb +0 -132
  1988. data/lib/puppet/vendor/semantic/Gemfile +0 -20
  1989. data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
  1990. data/lib/puppet/vendor/semantic/Rakefile +0 -69
  1991. data/lib/puppet/vendor/semantic/lib/semantic/version.rb +0 -168
  1992. data/lib/puppet/vendor/semantic/lib/semantic/version_range.rb +0 -424
  1993. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
  1994. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
  1995. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
  1996. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
  1997. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
  1998. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
  1999. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
  2000. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
  2001. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
  2002. data/lib/semver.rb +0 -123
  2003. data/man/man8/extlookup2hiera.8 +0 -10
  2004. data/man/man8/puppet-file.8 +0 -189
  2005. data/man/man8/puppet-resource_type.8 +0 -188
  2006. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  2007. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
  2008. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +0 -54
  2009. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +0 -31
  2010. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +0 -32
  2011. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +0 -5
  2012. data/spec/fixtures/unit/functions/lookup/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  2013. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -9
  2014. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -3
  2015. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -9
  2016. data/spec/integration/data_binding.rb +0 -104
  2017. data/spec/integration/parser/functions/require_spec.rb +0 -43
  2018. data/spec/integration/provider/package_spec.rb +0 -33
  2019. data/spec/unit/application/inspect_spec.rb +0 -287
  2020. data/spec/unit/data_providers/sample_data_provider_spec.rb +0 -52
  2021. data/spec/unit/face/file_spec.rb +0 -10
  2022. data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -237
  2023. data/spec/unit/indirector/resource_type/parser_spec.rb +0 -254
  2024. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -14
  2025. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  2026. data/spec/unit/parser/functions/include_spec.rb +0 -55
  2027. data/spec/unit/parser/functions/require_spec.rb +0 -68
  2028. data/spec/unit/pops/binder/binder_spec.rb +0 -43
  2029. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -155
  2030. data/spec/unit/pops/binder/bindings_composer_spec.rb +0 -64
  2031. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +0 -18
  2032. data/spec/unit/pops/binder/config/binder_config_spec.rb +0 -42
  2033. data/spec/unit/pops/binder/injector_spec.rb +0 -768
  2034. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +0 -23
  2035. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
  2036. data/spec/unit/semver_spec.rb +0 -305
  2037. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
  2038. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
  2039. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
  2040. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
  2041. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
  2042. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
  2043. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
  2044. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  2045. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -1,367 +1,485 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/pops'
3
3
 
4
+ module Puppet::Pops
5
+ module Types
4
6
  describe 'The type calculator' do
5
- let(:calculator) { Puppet::Pops::Types::TypeCalculator.new() }
7
+ let(:calculator) { TypeCalculator.new }
6
8
 
7
9
  def range_t(from, to)
8
- t = Puppet::Pops::Types::PIntegerType.new
9
- t.from = from
10
- t.to = to
11
- t
12
- end
13
- def constrained_t(t, from, to)
14
- Puppet::Pops::Types::TypeFactory.constrain_size(t, from, to)
10
+ PIntegerType.new(from, to)
15
11
  end
16
12
 
17
13
  def pattern_t(*patterns)
18
- Puppet::Pops::Types::TypeFactory.pattern(*patterns)
14
+ TypeFactory.pattern(*patterns)
19
15
  end
20
16
 
21
17
  def regexp_t(pattern)
22
- Puppet::Pops::Types::TypeFactory.regexp(pattern)
18
+ TypeFactory.regexp(pattern)
23
19
  end
24
20
 
25
- def string_t(*strings)
26
- Puppet::Pops::Types::TypeFactory.string(*strings)
21
+ def string_t(string = nil)
22
+ TypeFactory.string(string)
27
23
  end
28
24
 
29
- def callable_t(*params)
30
- Puppet::Pops::Types::TypeFactory.callable(*params)
31
- end
32
- def all_callables_t(*params)
33
- Puppet::Pops::Types::TypeFactory.all_callables()
25
+ def constrained_string_t(size_type)
26
+ TypeFactory.string(size_type)
34
27
  end
35
28
 
36
- def with_block_t(callable_t, *params)
37
- Puppet::Pops::Types::TypeFactory.with_block(callable_t, *params)
29
+ def callable_t(*params)
30
+ TypeFactory.callable(*params)
38
31
  end
39
32
 
40
- def with_optional_block_t(callable_t, *params)
41
- Puppet::Pops::Types::TypeFactory.with_optional_block(callable_t, *params)
33
+ def all_callables_t
34
+ TypeFactory.all_callables
42
35
  end
43
36
 
44
37
  def enum_t(*strings)
45
- Puppet::Pops::Types::TypeFactory.enum(*strings)
38
+ TypeFactory.enum(*strings)
46
39
  end
47
40
 
48
41
  def variant_t(*types)
49
- Puppet::Pops::Types::TypeFactory.variant(*types)
42
+ TypeFactory.variant(*types)
43
+ end
44
+
45
+ def type_alias_t(name, type_string)
46
+ type_expr = Parser::EvaluatingParser.new.parse_string(type_string)
47
+ TypeFactory.type_alias(name, type_expr)
50
48
  end
51
49
 
52
- def integer_t()
53
- Puppet::Pops::Types::TypeFactory.integer()
50
+ def type_reference_t(type_string)
51
+ TypeFactory.type_reference(type_string)
54
52
  end
55
53
 
56
- def array_t(t)
57
- Puppet::Pops::Types::TypeFactory.array_of(t)
54
+ def integer_t
55
+ TypeFactory.integer
58
56
  end
59
57
 
60
- def hash_t(k,v)
61
- Puppet::Pops::Types::TypeFactory.hash_of(v, k)
58
+ def array_t(t, s = nil)
59
+ TypeFactory.array_of(t, s)
62
60
  end
63
61
 
64
- def data_t()
65
- Puppet::Pops::Types::TypeFactory.data()
62
+ def empty_array_t
63
+ empty_array = array_t(unit_t, range_t(0,0))
66
64
  end
67
65
 
68
- def factory()
69
- Puppet::Pops::Types::TypeFactory
66
+ def hash_t(k,v,s = nil)
67
+ TypeFactory.hash_of(v, k, s)
70
68
  end
71
69
 
72
- def collection_t()
73
- Puppet::Pops::Types::TypeFactory.collection()
70
+ def data_t
71
+ TypeFactory.data
72
+ end
73
+
74
+ def factory
75
+ TypeFactory
76
+ end
77
+
78
+ def collection_t(size_type = nil)
79
+ TypeFactory.collection(size_type)
74
80
  end
75
81
 
76
82
  def tuple_t(*types)
77
- Puppet::Pops::Types::TypeFactory.tuple(*types)
83
+ TypeFactory.tuple(types)
84
+ end
85
+
86
+ def constrained_tuple_t(size_type, *types)
87
+ TypeFactory.tuple(types, size_type)
78
88
  end
79
89
 
80
90
  def struct_t(type_hash)
81
- Puppet::Pops::Types::TypeFactory.struct(type_hash)
91
+ TypeFactory.struct(type_hash)
82
92
  end
83
93
 
84
- def object_t
85
- Puppet::Pops::Types::TypeFactory.any()
94
+ def any_t
95
+ TypeFactory.any
86
96
  end
87
97
 
88
98
  def optional_t(t)
89
- Puppet::Pops::Types::TypeFactory.optional(t)
99
+ TypeFactory.optional(t)
100
+ end
101
+
102
+ def type_t(t)
103
+ TypeFactory.type_type(t)
104
+ end
105
+
106
+ def not_undef_t(t = nil)
107
+ TypeFactory.not_undef(t)
90
108
  end
91
109
 
92
110
  def undef_t
93
- Puppet::Pops::Types::TypeFactory.undef
111
+ TypeFactory.undef
94
112
  end
95
113
 
96
114
  def unit_t
97
115
  # Cannot be created via factory, the type is private to the type system
98
- Puppet::Pops::Types::PUnitType.new
116
+ PUnitType::DEFAULT
99
117
  end
100
118
 
101
- def types
102
- Puppet::Pops::Types
119
+ def runtime_t(t, c)
120
+ TypeFactory.runtime(t, c)
103
121
  end
104
122
 
105
- shared_context "types_setup" do
106
-
107
- # Do not include the special type Unit in this list
108
- def all_types
109
- [ Puppet::Pops::Types::PAnyType,
110
- Puppet::Pops::Types::PUndefType,
111
- Puppet::Pops::Types::PDataType,
112
- Puppet::Pops::Types::PScalarType,
113
- Puppet::Pops::Types::PStringType,
114
- Puppet::Pops::Types::PNumericType,
115
- Puppet::Pops::Types::PIntegerType,
116
- Puppet::Pops::Types::PFloatType,
117
- Puppet::Pops::Types::PRegexpType,
118
- Puppet::Pops::Types::PBooleanType,
119
- Puppet::Pops::Types::PCollectionType,
120
- Puppet::Pops::Types::PArrayType,
121
- Puppet::Pops::Types::PHashType,
122
- Puppet::Pops::Types::PRuntimeType,
123
- Puppet::Pops::Types::PHostClassType,
124
- Puppet::Pops::Types::PResourceType,
125
- Puppet::Pops::Types::PPatternType,
126
- Puppet::Pops::Types::PEnumType,
127
- Puppet::Pops::Types::PVariantType,
128
- Puppet::Pops::Types::PStructType,
129
- Puppet::Pops::Types::PTupleType,
130
- Puppet::Pops::Types::PCallableType,
131
- Puppet::Pops::Types::PType,
132
- Puppet::Pops::Types::POptionalType,
133
- Puppet::Pops::Types::PDefaultType,
134
- ]
135
- end
136
-
137
- def scalar_types
138
- # PVariantType is also scalar, if its types are all Scalar
139
- [
140
- Puppet::Pops::Types::PScalarType,
141
- Puppet::Pops::Types::PStringType,
142
- Puppet::Pops::Types::PNumericType,
143
- Puppet::Pops::Types::PIntegerType,
144
- Puppet::Pops::Types::PFloatType,
145
- Puppet::Pops::Types::PRegexpType,
146
- Puppet::Pops::Types::PBooleanType,
147
- Puppet::Pops::Types::PPatternType,
148
- Puppet::Pops::Types::PEnumType,
149
- ]
150
- end
151
-
152
- def numeric_types
153
- # PVariantType is also numeric, if its types are all numeric
154
- [
155
- Puppet::Pops::Types::PNumericType,
156
- Puppet::Pops::Types::PIntegerType,
157
- Puppet::Pops::Types::PFloatType,
158
- ]
159
- end
160
-
161
- def string_types
162
- # PVariantType is also string type, if its types are all compatible
163
- [
164
- Puppet::Pops::Types::PStringType,
165
- Puppet::Pops::Types::PPatternType,
166
- Puppet::Pops::Types::PEnumType,
167
- ]
168
- end
169
-
170
- def collection_types
171
- # PVariantType is also string type, if its types are all compatible
172
- [
173
- Puppet::Pops::Types::PCollectionType,
174
- Puppet::Pops::Types::PHashType,
175
- Puppet::Pops::Types::PArrayType,
176
- Puppet::Pops::Types::PStructType,
177
- Puppet::Pops::Types::PTupleType,
178
- ]
179
- end
180
-
181
- def data_compatible_types
182
- result = scalar_types
183
- result << Puppet::Pops::Types::PDataType
184
- result << array_t(types::PDataType.new)
185
- result << types::TypeFactory.hash_of_data
186
- result << Puppet::Pops::Types::PUndefType
187
- tmp = tuple_t(types::PDataType.new)
188
- result << (tmp)
189
- tmp.size_type = range_t(0, nil)
190
- result
191
- end
192
-
193
- def type_from_class(c)
194
- c.is_a?(Class) ? c.new : c
195
- end
123
+ def object_t(hash)
124
+ TypeFactory.object(hash)
125
+ end
126
+
127
+ def types
128
+ Types
196
129
  end
197
130
 
198
131
  context 'when inferring ruby' do
199
132
 
200
133
  it 'fixnum translates to PIntegerType' do
201
- expect(calculator.infer(1).class).to eq(Puppet::Pops::Types::PIntegerType)
134
+ expect(calculator.infer(1).class).to eq(PIntegerType)
202
135
  end
203
136
 
204
137
  it 'large fixnum (or bignum depending on architecture) translates to PIntegerType' do
205
- expect(calculator.infer(2**33).class).to eq(Puppet::Pops::Types::PIntegerType)
138
+ expect(calculator.infer(2**33).class).to eq(PIntegerType)
206
139
  end
207
140
 
208
141
  it 'float translates to PFloatType' do
209
- expect(calculator.infer(1.3).class).to eq(Puppet::Pops::Types::PFloatType)
142
+ expect(calculator.infer(1.3).class).to eq(PFloatType)
210
143
  end
211
144
 
212
145
  it 'string translates to PStringType' do
213
- expect(calculator.infer('foo').class).to eq(Puppet::Pops::Types::PStringType)
146
+ expect(calculator.infer('foo').class).to eq(PStringType)
214
147
  end
215
148
 
216
149
  it 'inferred string type knows the string value' do
217
150
  t = calculator.infer('foo')
218
- expect(t.class).to eq(Puppet::Pops::Types::PStringType)
219
- expect(t.values).to eq(['foo'])
151
+ expect(t.class).to eq(PStringType)
152
+ expect(t.value).to eq('foo')
220
153
  end
221
154
 
222
155
  it 'boolean true translates to PBooleanType' do
223
- expect(calculator.infer(true).class).to eq(Puppet::Pops::Types::PBooleanType)
156
+ expect(calculator.infer(true).class).to eq(PBooleanType)
224
157
  end
225
158
 
226
159
  it 'boolean false translates to PBooleanType' do
227
- expect(calculator.infer(false).class).to eq(Puppet::Pops::Types::PBooleanType)
160
+ expect(calculator.infer(false).class).to eq(PBooleanType)
228
161
  end
229
162
 
230
163
  it 'regexp translates to PRegexpType' do
231
- expect(calculator.infer(/^a regular expression$/).class).to eq(Puppet::Pops::Types::PRegexpType)
164
+ expect(calculator.infer(/^a regular expression$/).class).to eq(PRegexpType)
165
+ end
166
+
167
+ it 'iterable translates to PIteratorType' do
168
+ expect(calculator.infer(Iterable.on(1))).to be_a(PIteratorType)
232
169
  end
233
170
 
234
171
  it 'nil translates to PUndefType' do
235
- expect(calculator.infer(nil).class).to eq(Puppet::Pops::Types::PUndefType)
172
+ expect(calculator.infer(nil).class).to eq(PUndefType)
236
173
  end
237
174
 
238
- it ':undef translates to PRuntimeType' do
239
- expect(calculator.infer(:undef).class).to eq(Puppet::Pops::Types::PRuntimeType)
175
+ it ':undef translates to PUndefType' do
176
+ expect(calculator.infer(:undef).class).to eq(PUndefType)
240
177
  end
241
178
 
242
179
  it 'an instance of class Foo translates to PRuntimeType[ruby, Foo]' do
243
- class Foo
180
+ ::Foo = Class.new
181
+ begin
182
+ t = calculator.infer(::Foo.new)
183
+ expect(t.class).to eq(PRuntimeType)
184
+ expect(t.runtime).to eq(:ruby)
185
+ expect(t.runtime_type_name).to eq('Foo')
186
+ ensure
187
+ Object.send(:remove_const, :Foo)
188
+ end
189
+ end
190
+
191
+ it 'Class Foo translates to PType[PRuntimeType[ruby, Foo]]' do
192
+ ::Foo = Class.new
193
+ begin
194
+ t = calculator.infer(::Foo)
195
+ expect(t.class).to eq(PType)
196
+ tt = t.type
197
+ expect(tt.class).to eq(PRuntimeType)
198
+ expect(tt.runtime).to eq(:ruby)
199
+ expect(tt.runtime_type_name).to eq('Foo')
200
+ ensure
201
+ Object.send(:remove_const, :Foo)
202
+ end
203
+ end
204
+
205
+ it 'Module FooModule translates to PType[PRuntimeType[ruby, FooModule]]' do
206
+ ::FooModule = Module.new
207
+ begin
208
+ t = calculator.infer(::FooModule)
209
+ expect(t.class).to eq(PType)
210
+ tt = t.type
211
+ expect(tt.class).to eq(PRuntimeType)
212
+ expect(tt.runtime).to eq(:ruby)
213
+ expect(tt.runtime_type_name).to eq('FooModule')
214
+ ensure
215
+ Object.send(:remove_const, :FooModule)
216
+ end
217
+ end
218
+
219
+ context 'sensitive' do
220
+ it 'translates to PSensitiveType' do
221
+ expect(calculator.infer(PSensitiveType::Sensitive.new("hunter2")).class).to eq(PSensitiveType)
222
+ end
223
+ end
224
+
225
+ context 'binary' do
226
+ it 'translates to PBinaryType' do
227
+ expect(calculator.infer(PBinaryType::Binary.from_binary_string("binary")).class).to eq(PBinaryType)
228
+ end
229
+ end
230
+
231
+ context 'version' do
232
+ it 'translates to PVersionType' do
233
+ expect(calculator.infer(SemanticPuppet::Version.new(1,0,0)).class).to eq(PSemVerType)
234
+ end
235
+
236
+ it 'range translates to PVersionRangeType' do
237
+ expect(calculator.infer(SemanticPuppet::VersionRange.parse('1.x')).class).to eq(PSemVerRangeType)
238
+ end
239
+
240
+ it 'translates to a limited PVersionType by infer_set' do
241
+ v = SemanticPuppet::Version.new(1,0,0)
242
+ t = calculator.infer_set(v)
243
+ expect(t.class).to eq(PSemVerType)
244
+ expect(t.ranges.size).to eq(1)
245
+ expect(t.ranges[0].begin).to eq(v)
246
+ expect(t.ranges[0].end).to eq(v)
247
+ end
248
+ end
249
+
250
+ context 'timespan' do
251
+ it 'translates to PTimespanType' do
252
+ expect(calculator.infer(Time::Timespan.from_fields_hash('days' => 2))).to be_a(PTimespanType)
244
253
  end
245
254
 
246
- t = calculator.infer(Foo.new)
247
- expect(t.class).to eq(Puppet::Pops::Types::PRuntimeType)
248
- expect(t.runtime).to eq(:ruby)
249
- expect(t.runtime_type_name).to eq('Foo')
255
+ it 'translates to a limited PTimespanType by infer_set' do
256
+ ts = Time::Timespan.from_fields_hash('days' => 2)
257
+ t = calculator.infer_set(ts)
258
+ expect(t.class).to eq(PTimespanType)
259
+ expect(t.from).to be(ts)
260
+ expect(t.to).to be(ts)
261
+ end
262
+ end
263
+
264
+ context 'timestamp' do
265
+ it 'translates to PTimespanType' do
266
+ expect(calculator.infer(Time::Timestamp.now)).to be_a(PTimestampType)
267
+ end
268
+
269
+ it 'translates to a limited PTimespanType by infer_set' do
270
+ ts = Time::Timestamp.now
271
+ t = calculator.infer_set(ts)
272
+ expect(t.class).to eq(PTimestampType)
273
+ expect(t.from).to be(ts)
274
+ expect(t.to).to be(ts)
275
+ end
250
276
  end
251
277
 
252
278
  context 'array' do
279
+ let(:derived) do
280
+ Class.new(Array).new([1,2])
281
+ end
282
+
283
+ let(:derived_object) do
284
+ Class.new(Array) do
285
+ include PuppetObject
286
+
287
+ def self._pcore_type
288
+ @type ||= TypeFactory.object('name' => 'DerivedObjectArray')
289
+ end
290
+ end.new([1,2])
291
+ end
292
+
253
293
  it 'translates to PArrayType' do
254
- expect(calculator.infer([1,2]).class).to eq(Puppet::Pops::Types::PArrayType)
294
+ expect(calculator.infer([1,2]).class).to eq(PArrayType)
295
+ end
296
+
297
+ it 'translates derived Array to PRuntimeType' do
298
+ expect(calculator.infer(derived).class).to eq(PRuntimeType)
299
+ end
300
+
301
+ it 'translates derived Puppet Object Array to PObjectType' do
302
+ expect(calculator.infer(derived_object).class).to eq(PObjectType)
303
+ end
304
+
305
+ it 'Instance of derived Array class is not instance of Array type' do
306
+ expect(PArrayType::DEFAULT).not_to be_instance(derived)
307
+ end
308
+
309
+ it 'Instance of derived Array class is instance of Runtime type' do
310
+ expect(runtime_t('ruby', nil)).to be_instance(derived)
311
+ end
312
+
313
+ it 'Instance of derived Puppet Object Array class is not instance of Array type' do
314
+ expect(PArrayType::DEFAULT).not_to be_instance(derived_object)
315
+ end
316
+
317
+ it 'Instance of derived Puppet Object Array class is instance of Object type' do
318
+ expect(object_t('name' => 'DerivedObjectArray')).to be_instance(derived_object)
255
319
  end
256
320
 
257
321
  it 'with fixnum values translates to PArrayType[PIntegerType]' do
258
- expect(calculator.infer([1,2]).element_type.class).to eq(Puppet::Pops::Types::PIntegerType)
322
+ expect(calculator.infer([1,2]).element_type.class).to eq(PIntegerType)
259
323
  end
260
324
 
261
325
  it 'with 32 and 64 bit integer values translates to PArrayType[PIntegerType]' do
262
- expect(calculator.infer([1,2**33]).element_type.class).to eq(Puppet::Pops::Types::PIntegerType)
326
+ expect(calculator.infer([1,2**33]).element_type.class).to eq(PIntegerType)
263
327
  end
264
328
 
265
329
  it 'Range of integer values are computed' do
266
330
  t = calculator.infer([-3,0,42]).element_type
267
- expect(t.class).to eq(Puppet::Pops::Types::PIntegerType)
331
+ expect(t.class).to eq(PIntegerType)
268
332
  expect(t.from).to eq(-3)
269
333
  expect(t.to).to eq(42)
270
334
  end
271
335
 
272
- it "Compound string values are computed" do
336
+ it 'Compound string values are converted to enums' do
273
337
  t = calculator.infer(['a','b', 'c']).element_type
274
- expect(t.class).to eq(Puppet::Pops::Types::PStringType)
338
+ expect(t.class).to eq(PEnumType)
275
339
  expect(t.values).to eq(['a', 'b', 'c'])
276
340
  end
277
341
 
278
- it 'with fixnum and float values translates to PArrayType[PNumericType]' do
279
- expect(calculator.infer([1,2.0]).element_type.class).to eq(Puppet::Pops::Types::PNumericType)
342
+ it 'with integer and float values translates to PArrayType[PNumericType]' do
343
+ expect(calculator.infer([1,2.0]).element_type.class).to eq(PNumericType)
280
344
  end
281
345
 
282
- it 'with fixnum and string values translates to PArrayType[PScalarType]' do
283
- expect(calculator.infer([1,'two']).element_type.class).to eq(Puppet::Pops::Types::PScalarType)
346
+ it 'with integer and string values translates to PArrayType[PScalarDataType]' do
347
+ expect(calculator.infer([1,'two']).element_type.class).to eq(PScalarDataType)
284
348
  end
285
349
 
286
- it 'with float and string values translates to PArrayType[PScalarType]' do
287
- expect(calculator.infer([1.0,'two']).element_type.class).to eq(Puppet::Pops::Types::PScalarType)
350
+ it 'with float and string values translates to PArrayType[PScalarDataType]' do
351
+ expect(calculator.infer([1.0,'two']).element_type.class).to eq(PScalarDataType)
288
352
  end
289
353
 
290
- it 'with fixnum, float, and string values translates to PArrayType[PScalarType]' do
291
- expect(calculator.infer([1, 2.0,'two']).element_type.class).to eq(Puppet::Pops::Types::PScalarType)
354
+ it 'with integer, float, and string values translates to PArrayType[PScalarDataType]' do
355
+ expect(calculator.infer([1, 2.0,'two']).element_type.class).to eq(PScalarDataType)
292
356
  end
293
357
 
294
- it 'with fixnum and regexp values translates to PArrayType[PScalarType]' do
295
- expect(calculator.infer([1, /two/]).element_type.class).to eq(Puppet::Pops::Types::PScalarType)
358
+ it 'with integer and regexp values translates to PArrayType[PScalarType]' do
359
+ expect(calculator.infer([1, /two/]).element_type.class).to eq(PScalarType)
296
360
  end
297
361
 
298
362
  it 'with string and regexp values translates to PArrayType[PScalarType]' do
299
- expect(calculator.infer(['one', /two/]).element_type.class).to eq(Puppet::Pops::Types::PScalarType)
363
+ expect(calculator.infer(['one', /two/]).element_type.class).to eq(PScalarType)
300
364
  end
301
365
 
302
366
  it 'with string and symbol values translates to PArrayType[PAnyType]' do
303
- expect(calculator.infer(['one', :two]).element_type.class).to eq(Puppet::Pops::Types::PAnyType)
367
+ expect(calculator.infer(['one', :two]).element_type.class).to eq(PAnyType)
368
+ end
369
+
370
+ it 'with integer and nil values translates to PArrayType[PIntegerType]' do
371
+ expect(calculator.infer([1, nil]).element_type.class).to eq(PIntegerType)
304
372
  end
305
373
 
306
- it 'with fixnum and nil values translates to PArrayType[PIntegerType]' do
307
- expect(calculator.infer([1, nil]).element_type.class).to eq(Puppet::Pops::Types::PIntegerType)
374
+ it 'with integer value, and array of string values, translates to Array[Data]' do
375
+ expect(calculator.infer([1, ['two']]).element_type.name).to eq('Data')
376
+ end
377
+
378
+ it 'with integer value, and hash of string => string values, translates to Array[Data]' do
379
+ expect(calculator.infer([1, {'two' => 'three'} ]).element_type.name).to eq('Data')
380
+ end
381
+
382
+ it 'with integer value, and hash of integer => string values, translates to Array[RichData]' do
383
+ expect(calculator.infer([1, {2 => 'three'} ]).element_type.name).to eq('RichData')
384
+ end
385
+
386
+ it 'with integer, regexp, and binary values translates to Array[RichData]' do
387
+ expect(calculator.infer([1, /two/, PBinaryType::Binary.from_string('three')]).element_type.name).to eq('RichData')
308
388
  end
309
389
 
310
390
  it 'with arrays of string values translates to PArrayType[PArrayType[PStringType]]' do
311
- et = calculator.infer([['first' 'array'], ['second','array']])
312
- expect(et.class).to eq(Puppet::Pops::Types::PArrayType)
391
+ et = calculator.infer([['first', 'array'], ['second','array']])
392
+ expect(et.class).to eq(PArrayType)
313
393
  et = et.element_type
314
- expect(et.class).to eq(Puppet::Pops::Types::PArrayType)
394
+ expect(et.class).to eq(PArrayType)
315
395
  et = et.element_type
316
- expect(et.class).to eq(Puppet::Pops::Types::PStringType)
396
+ expect(et.class).to eq(PEnumType)
317
397
  end
318
398
 
319
- it 'with array of string values and array of fixnums translates to PArrayType[PArrayType[PScalarType]]' do
320
- et = calculator.infer([['first' 'array'], [1,2]])
321
- expect(et.class).to eq(Puppet::Pops::Types::PArrayType)
399
+ it 'with array of string values and array of fixnums translates to PArrayType[PArrayType[PScalarDataType]]' do
400
+ et = calculator.infer([['first', 'array'], [1,2]])
401
+ expect(et.class).to eq(PArrayType)
322
402
  et = et.element_type
323
- expect(et.class).to eq(Puppet::Pops::Types::PArrayType)
403
+ expect(et.class).to eq(PArrayType)
324
404
  et = et.element_type
325
- expect(et.class).to eq(Puppet::Pops::Types::PScalarType)
405
+ expect(et.class).to eq(PScalarDataType)
326
406
  end
327
407
 
328
- it 'with hashes of string values translates to PArrayType[PHashType[PStringType]]' do
408
+ it 'with hashes of string values translates to PArrayType[PHashType[PEnumType]]' do
329
409
  et = calculator.infer([{:first => 'first', :second => 'second' }, {:first => 'first', :second => 'second' }])
330
- expect(et.class).to eq(Puppet::Pops::Types::PArrayType)
410
+ expect(et.class).to eq(PArrayType)
331
411
  et = et.element_type
332
- expect(et.class).to eq(Puppet::Pops::Types::PHashType)
333
- et = et.element_type
334
- expect(et.class).to eq(Puppet::Pops::Types::PStringType)
412
+ expect(et.class).to eq(PHashType)
413
+ et = et.value_type
414
+ expect(et.class).to eq(PEnumType)
335
415
  end
336
416
 
337
- it 'with hash of string values and hash of fixnums translates to PArrayType[PHashType[PScalarType]]' do
417
+ it 'with hash of string values and hash of fixnums translates to PArrayType[PHashType[PScalarDataType]]' do
338
418
  et = calculator.infer([{:first => 'first', :second => 'second' }, {:first => 1, :second => 2 }])
339
- expect(et.class).to eq(Puppet::Pops::Types::PArrayType)
340
- et = et.element_type
341
- expect(et.class).to eq(Puppet::Pops::Types::PHashType)
419
+ expect(et.class).to eq(PArrayType)
342
420
  et = et.element_type
343
- expect(et.class).to eq(Puppet::Pops::Types::PScalarType)
421
+ expect(et.class).to eq(PHashType)
422
+ et = et.value_type
423
+ expect(et.class).to eq(PScalarDataType)
344
424
  end
345
425
  end
346
426
 
347
427
  context 'hash' do
428
+ let(:derived) do
429
+ Class.new(Hash)[:first => 1, :second => 2]
430
+ end
431
+
432
+ let(:derived_object) do
433
+ Class.new(Hash) do
434
+ include PuppetObject
435
+
436
+ def self._pcore_type
437
+ @type ||= TypeFactory.object('name' => 'DerivedObjectHash')
438
+ end
439
+ end[:first => 1, :second => 2]
440
+ end
441
+
348
442
  it 'translates to PHashType' do
349
- expect(calculator.infer({:first => 1, :second => 2}).class).to eq(Puppet::Pops::Types::PHashType)
443
+ expect(calculator.infer({:first => 1, :second => 2}).class).to eq(PHashType)
444
+ end
445
+
446
+ it 'translates derived Hash to PRuntimeType' do
447
+ expect(calculator.infer(derived).class).to eq(PRuntimeType)
448
+ end
449
+
450
+ it 'translates derived Puppet Object Hash to PObjectType' do
451
+ expect(calculator.infer(derived_object).class).to eq(PObjectType)
452
+ end
453
+
454
+ it 'Instance of derived Hash class is not instance of Hash type' do
455
+ expect(PHashType::DEFAULT).not_to be_instance(derived)
456
+ end
457
+
458
+ it 'Instance of derived Hash class is instance of Runtime type' do
459
+ expect(runtime_t('ruby', nil)).to be_instance(derived)
460
+ end
461
+
462
+ it 'Instance of derived Puppet Object Hash class is not instance of Hash type' do
463
+ expect(PHashType::DEFAULT).not_to be_instance(derived_object)
464
+ end
465
+
466
+ it 'Instance of derived Puppet Object Hash class is instance of Object type' do
467
+ expect(object_t('name' => 'DerivedObjectHash')).to be_instance(derived_object)
350
468
  end
351
469
 
352
470
  it 'with symbolic keys translates to PHashType[PRuntimeType[ruby, Symbol], value]' do
353
471
  k = calculator.infer({:first => 1, :second => 2}).key_type
354
- expect(k.class).to eq(Puppet::Pops::Types::PRuntimeType)
472
+ expect(k.class).to eq(PRuntimeType)
355
473
  expect(k.runtime).to eq(:ruby)
356
474
  expect(k.runtime_type_name).to eq('Symbol')
357
475
  end
358
476
 
359
- it 'with string keys translates to PHashType[PStringType, value]' do
360
- expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(Puppet::Pops::Types::PStringType)
477
+ it 'with string keys translates to PHashType[PEnumType, value]' do
478
+ expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(PEnumType)
361
479
  end
362
480
 
363
481
  it 'with fixnum values translates to PHashType[key, PIntegerType]' do
364
- expect(calculator.infer({:first => 1, :second => 2}).element_type.class).to eq(Puppet::Pops::Types::PIntegerType)
482
+ expect(calculator.infer({:first => 1, :second => 2}).value_type.class).to eq(PIntegerType)
365
483
  end
366
484
 
367
485
  it 'when empty infers a type that answers true to is_the_empty_hash?' do
@@ -374,110 +492,132 @@ describe 'The type calculator' do
374
492
  end
375
493
 
376
494
  it 'when empty is not assignable to a PHashType with from size > 0' do
377
- expect(calculator.assignable?(constrained_t(hash_t(string_t,string_t), 1, 1), calculator.infer({}))).to eq(false)
495
+ expect(calculator.assignable?(hash_t(string_t,string_t,range_t(1, 1)), calculator.infer({}))).to eq(false)
378
496
  end
379
497
 
380
498
  context 'using infer_set' do
381
499
  it "with 'first' and 'second' keys translates to PStructType[{first=>value,second=>value}]" do
382
500
  t = calculator.infer_set({'first' => 1, 'second' => 2})
383
- expect(t.class).to eq(Puppet::Pops::Types::PStructType)
501
+ expect(t.class).to eq(PStructType)
384
502
  expect(t.elements.size).to eq(2)
385
503
  expect(t.elements.map { |e| e.name }.sort).to eq(['first', 'second'])
386
504
  end
387
505
 
388
506
  it 'with string keys and string and array values translates to PStructType[{key1=>PStringType,key2=>PTupleType}]' do
389
507
  t = calculator.infer_set({ 'mode' => 'read', 'path' => ['foo', 'fee' ] })
390
- expect(t.class).to eq(Puppet::Pops::Types::PStructType)
508
+ expect(t.class).to eq(PStructType)
391
509
  expect(t.elements.size).to eq(2)
392
- els = t.elements.map { |e| e.type }.sort {|a,b| a.to_s <=> b.to_s }
393
- expect(els[0].class).to eq(Puppet::Pops::Types::PStringType)
394
- expect(els[1].class).to eq(Puppet::Pops::Types::PTupleType)
510
+ els = t.elements.map { |e| e.value_type }.sort {|a,b| a.to_s <=> b.to_s }
511
+ expect(els[0].class).to eq(PStringType)
512
+ expect(els[1].class).to eq(PTupleType)
395
513
  end
396
514
 
397
515
  it 'with mixed string and non-string keys translates to PHashType' do
398
516
  t = calculator.infer_set({ 1 => 'first', 'second' => 'second' })
399
- expect(t.class).to eq(Puppet::Pops::Types::PHashType)
517
+ expect(t.class).to eq(PHashType)
400
518
  end
401
519
 
402
520
  it 'with empty string keys translates to PHashType' do
403
521
  t = calculator.infer_set({ '' => 'first', 'second' => 'second' })
404
- expect(t.class).to eq(Puppet::Pops::Types::PHashType)
522
+ expect(t.class).to eq(PHashType)
405
523
  end
406
524
  end
407
525
  end
408
526
  end
409
527
 
410
528
  context 'patterns' do
411
- it "constructs a PPatternType" do
529
+ it 'constructs a PPatternType' do
412
530
  t = pattern_t('a(b)c')
413
- expect(t.class).to eq(Puppet::Pops::Types::PPatternType)
531
+ expect(t.class).to eq(PPatternType)
414
532
  expect(t.patterns.size).to eq(1)
415
- expect(t.patterns[0].class).to eq(Puppet::Pops::Types::PRegexpType)
533
+ expect(t.patterns[0].class).to eq(PRegexpType)
416
534
  expect(t.patterns[0].pattern).to eq('a(b)c')
417
535
  expect(t.patterns[0].regexp.match('abc')[1]).to eq('b')
418
536
  end
419
537
 
420
- it "constructs a PStringType with multiple strings" do
421
- t = string_t('a', 'b', 'c', 'abc')
422
- expect(t.values).to eq(['a', 'b', 'c', 'abc'])
538
+ it 'constructs a PEnumType with multiple strings' do
539
+ t = enum_t('a', 'b', 'c', 'abc')
540
+ expect(t.values).to eq(['a', 'b', 'c', 'abc'].sort)
423
541
  end
424
542
  end
425
543
 
426
544
  # Deal with cases not covered by computing common type
427
545
  context 'when computing common type' do
428
546
  it 'computes given resource type commonality' do
429
- r1 = Puppet::Pops::Types::PResourceType.new()
430
- r1.type_name = 'File'
431
- r2 = Puppet::Pops::Types::PResourceType.new()
432
- r2.type_name = 'File'
433
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("File")
547
+ r1 = PResourceType.new('File', nil)
548
+ r2 = PResourceType.new('File', nil)
549
+ expect(calculator.common_type(r1, r2).to_s).to eq('File')
434
550
 
435
- r2 = Puppet::Pops::Types::PResourceType.new()
436
- r2.type_name = 'File'
437
- r2.title = '/tmp/foo'
438
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("File")
439
551
 
440
- r1 = Puppet::Pops::Types::PResourceType.new()
441
- r1.type_name = 'File'
442
- r1.title = '/tmp/foo'
443
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("File['/tmp/foo']")
552
+ r2 = PResourceType.new('File', '/tmp/foo')
553
+ expect(calculator.common_type(r1, r2).to_s).to eq('File')
444
554
 
445
- r1 = Puppet::Pops::Types::PResourceType.new()
446
- r1.type_name = 'File'
447
- r1.title = '/tmp/bar'
448
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("File")
555
+ r1 = PResourceType.new('File', '/tmp/foo')
556
+ expect(calculator.common_type(r1, r2).to_s).to eq("File['/tmp/foo']")
449
557
 
450
- r2 = Puppet::Pops::Types::PResourceType.new()
451
- r2.type_name = 'Package'
452
- r2.title = 'apache'
453
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("Resource")
558
+ r1 = PResourceType.new('File', '/tmp/bar')
559
+ expect(calculator.common_type(r1, r2).to_s).to eq('File')
560
+
561
+ r2 = PResourceType.new('Package', 'apache')
562
+ expect(calculator.common_type(r1, r2).to_s).to eq('Resource')
454
563
  end
455
564
 
456
565
  it 'computes given hostclass type commonality' do
457
- r1 = Puppet::Pops::Types::PHostClassType.new()
458
- r1.class_name = 'foo'
459
- r2 = Puppet::Pops::Types::PHostClassType.new()
460
- r2.class_name = 'foo'
461
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("Class[foo]")
566
+ r1 = PHostClassType.new('foo')
567
+ r2 = PHostClassType.new('foo')
568
+ expect(calculator.common_type(r1, r2).to_s).to eq('Class[foo]')
569
+
570
+ r2 = PHostClassType.new('bar')
571
+ expect(calculator.common_type(r1, r2).to_s).to eq('Class')
572
+
573
+ r2 = PHostClassType.new(nil)
574
+ expect(calculator.common_type(r1, r2).to_s).to eq('Class')
462
575
 
463
- r2 = Puppet::Pops::Types::PHostClassType.new()
464
- r2.class_name = 'bar'
465
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("Class")
576
+ r1 = PHostClassType.new(nil)
577
+ expect(calculator.common_type(r1, r2).to_s).to eq('Class')
578
+ end
579
+
580
+ context 'of strings' do
581
+ it 'computes commonality' do
582
+ t1 = string_t('abc')
583
+ t2 = string_t('xyz')
584
+ common_t = calculator.common_type(t1,t2)
585
+ expect(common_t.class).to eq(PEnumType)
586
+ expect(common_t.values).to eq(['abc', 'xyz'])
587
+ end
466
588
 
467
- r2 = Puppet::Pops::Types::PHostClassType.new()
468
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("Class")
589
+ it 'computes common size_type' do
590
+ t1 = constrained_string_t(range_t(3,6))
591
+ t2 = constrained_string_t(range_t(2,4))
592
+ common_t = calculator.common_type(t1,t2)
593
+ expect(common_t.class).to eq(PStringType)
594
+ expect(common_t.size_type).to eq(range_t(2,6))
595
+ end
596
+
597
+ it 'computes common size_type to be undef when one of the types has no size_type' do
598
+ t1 = string_t
599
+ t2 = constrained_string_t(range_t(2,4))
600
+ common_t = calculator.common_type(t1,t2)
601
+ expect(common_t.class).to eq(PStringType)
602
+ expect(common_t.size_type).to be_nil
603
+ end
469
604
 
470
- r1 = Puppet::Pops::Types::PHostClassType.new()
471
- expect(calculator.string(calculator.common_type(r1, r2))).to eq("Class")
605
+ it 'computes values to be empty if the one has empty values' do
606
+ t1 = string_t('apa')
607
+ t2 = constrained_string_t(range_t(2,4))
608
+ common_t = calculator.common_type(t1,t2)
609
+ expect(common_t.class).to eq(PStringType)
610
+ expect(common_t.value).to be_nil
611
+ end
472
612
  end
473
613
 
474
614
  it 'computes pattern commonality' do
475
615
  t1 = pattern_t('abc')
476
616
  t2 = pattern_t('xyz')
477
617
  common_t = calculator.common_type(t1,t2)
478
- expect(common_t.class).to eq(Puppet::Pops::Types::PPatternType)
618
+ expect(common_t.class).to eq(PPatternType)
479
619
  expect(common_t.patterns.map { |pr| pr.pattern }).to eq(['abc', 'xyz'])
480
- expect(calculator.string(common_t)).to eq("Pattern[/abc/, /xyz/]")
620
+ expect(common_t.to_s).to eq('Pattern[/abc/, /xyz/]')
481
621
  end
482
622
 
483
623
  it 'computes enum commonality to value set sum' do
@@ -488,131 +628,253 @@ describe 'The type calculator' do
488
628
  end
489
629
 
490
630
  it 'computed variant commonality to type union where added types are not sub-types' do
491
- a_t1 = integer_t()
631
+ a_t1 = integer_t
492
632
  a_t2 = enum_t('b')
493
633
  v_a = variant_t(a_t1, a_t2)
494
- b_t1 = enum_t('a')
495
- v_b = variant_t(b_t1)
634
+ b_t1 = integer_t
635
+ b_t2 = enum_t('a')
636
+ v_b = variant_t(b_t1, b_t2)
496
637
  common_t = calculator.common_type(v_a, v_b)
497
- expect(common_t.class).to eq(Puppet::Pops::Types::PVariantType)
498
- expect(Set.new(common_t.types)).to eq(Set.new([a_t1, a_t2, b_t1]))
638
+ expect(common_t.class).to eq(PVariantType)
639
+ expect(Set.new(common_t.types)).to eq(Set.new([a_t1, a_t2, b_t1, b_t2]))
499
640
  end
500
641
 
501
642
  it 'computed variant commonality to type union where added types are sub-types' do
502
- a_t1 = integer_t()
503
- a_t2 = string_t()
643
+ a_t1 = integer_t
644
+ a_t2 = string_t
504
645
  v_a = variant_t(a_t1, a_t2)
505
- b_t1 = enum_t('a')
506
- v_b = variant_t(b_t1)
646
+ b_t1 = integer_t
647
+ b_t2 = enum_t('a')
648
+ v_b = variant_t(b_t1, b_t2)
507
649
  common_t = calculator.common_type(v_a, v_b)
508
- expect(common_t.class).to eq(Puppet::Pops::Types::PVariantType)
650
+ expect(common_t.class).to eq(PVariantType)
509
651
  expect(Set.new(common_t.types)).to eq(Set.new([a_t1, a_t2]))
510
652
  end
511
653
 
512
- context "of callables" do
654
+ context 'commonality of scalar data types' do
655
+ it 'Numeric and String == ScalarData' do
656
+ expect(calculator.common_type(PNumericType::DEFAULT, PStringType::DEFAULT).class).to eq(PScalarDataType)
657
+ end
658
+
659
+ it 'Numeric and Boolean == ScalarData' do
660
+ expect(calculator.common_type(PNumericType::DEFAULT, PBooleanType::DEFAULT).class).to eq(PScalarDataType)
661
+ end
662
+
663
+ it 'String and Boolean == ScalarData' do
664
+ expect(calculator.common_type(PStringType::DEFAULT, PBooleanType::DEFAULT).class).to eq(PScalarDataType)
665
+ end
666
+ end
667
+
668
+ context 'commonality of scalar types' do
669
+ it 'Regexp and Integer == Scalar' do
670
+ expect(calculator.common_type(PRegexpType::DEFAULT, PScalarDataType::DEFAULT).class).to eq(PScalarType)
671
+ end
672
+
673
+ it 'Regexp and SemVer == ScalarData' do
674
+ expect(calculator.common_type(PRegexpType::DEFAULT, PSemVerType::DEFAULT).class).to eq(PScalarType)
675
+ end
676
+
677
+ it 'Timestamp and Timespan == ScalarData' do
678
+ expect(calculator.common_type(PTimestampType::DEFAULT, PTimespanType::DEFAULT).class).to eq(PScalarType)
679
+ end
680
+
681
+ it 'Timestamp and Boolean == ScalarData' do
682
+ expect(calculator.common_type(PTimestampType::DEFAULT, PBooleanType::DEFAULT).class).to eq(PScalarType)
683
+ end
684
+ end
685
+
686
+ context 'of callables' do
513
687
  it 'incompatible instances => generic callable' do
514
688
  t1 = callable_t(String)
515
689
  t2 = callable_t(Integer)
516
690
  common_t = calculator.common_type(t1, t2)
517
- expect(common_t.class).to be(Puppet::Pops::Types::PCallableType)
691
+ expect(common_t.class).to be(PCallableType)
518
692
  expect(common_t.param_types).to be_nil
519
693
  expect(common_t.block_type).to be_nil
520
694
  end
521
695
 
522
696
  it 'compatible instances => the most specific' do
523
697
  t1 = callable_t(String)
524
- scalar_t = Puppet::Pops::Types::PScalarType.new
698
+ scalar_t = PScalarType.new
525
699
  t2 = callable_t(scalar_t)
526
700
  common_t = calculator.common_type(t1, t2)
527
- expect(common_t.class).to be(Puppet::Pops::Types::PCallableType)
528
- expect(common_t.param_types.class).to be(Puppet::Pops::Types::PTupleType)
701
+ expect(common_t.class).to be(PCallableType)
702
+ expect(common_t.param_types.class).to be(PTupleType)
529
703
  expect(common_t.param_types.types).to eql([string_t])
530
704
  expect(common_t.block_type).to be_nil
531
705
  end
532
706
 
533
707
  it 'block_type is included in the check (incompatible block)' do
534
- t1 = with_block_t(callable_t(String), String)
535
- t2 = with_block_t(callable_t(String), Integer)
708
+ b1 = callable_t(String)
709
+ b2 = callable_t(Integer)
710
+ t1 = callable_t(String, b1)
711
+ t2 = callable_t(String, b2)
536
712
  common_t = calculator.common_type(t1, t2)
537
- expect(common_t.class).to be(Puppet::Pops::Types::PCallableType)
713
+ expect(common_t.class).to be(PCallableType)
538
714
  expect(common_t.param_types).to be_nil
539
715
  expect(common_t.block_type).to be_nil
540
716
  end
541
717
 
542
718
  it 'block_type is included in the check (compatible block)' do
543
- t1 = with_block_t(callable_t(String), String)
544
- scalar_t = Puppet::Pops::Types::PScalarType.new
545
- t2 = with_block_t(callable_t(String), scalar_t)
719
+ b1 = callable_t(String)
720
+ t1 = callable_t(String, b1)
721
+ scalar_t = PScalarType::DEFAULT
722
+ b2 = callable_t(scalar_t)
723
+ t2 = callable_t(String, b2)
546
724
  common_t = calculator.common_type(t1, t2)
547
- expect(common_t.param_types.class).to be(Puppet::Pops::Types::PTupleType)
725
+ expect(common_t.param_types.class).to be(PTupleType)
548
726
  expect(common_t.block_type).to eql(callable_t(scalar_t))
549
727
  end
728
+
729
+ it 'return_type is included in the check (incompatible return_type)' do
730
+ t1 = callable_t([String], String)
731
+ t2 = callable_t([String], Integer)
732
+ common_t = calculator.common_type(t1, t2)
733
+ expect(common_t.class).to be(PCallableType)
734
+ expect(common_t.param_types).to be_nil
735
+ expect(common_t.return_type).to be_nil
736
+ end
737
+
738
+ it 'return_type is included in the check (compatible return_type)' do
739
+ t1 = callable_t([String], Numeric)
740
+ t2 = callable_t([String], Integer)
741
+ common_t = calculator.common_type(t1, t2)
742
+ expect(common_t.class).to be(PCallableType)
743
+ expect(common_t.param_types).to be_a(PTupleType)
744
+ expect(common_t.return_type).to eql(PNumericType::DEFAULT)
745
+ end
550
746
  end
551
747
  end
552
748
 
553
749
  context 'computes assignability' do
554
- include_context "types_setup"
750
+ include_context 'types_setup'
751
+
752
+ it 'such that all types are assignable to themselves' do
753
+ all_types.each do |tc|
754
+ t = tc::DEFAULT
755
+ expect(t).to be_assignable_to(t)
756
+ end
757
+ end
555
758
 
556
759
  context 'for Unit, such that' do
557
760
  it 'all types are assignable to Unit' do
558
- t = Puppet::Pops::Types::PUnitType.new()
559
- all_types.each { |t2| expect(t2.new).to be_assignable_to(t) }
761
+ t = PUnitType::DEFAULT
762
+ all_types.each { |t2| expect(t2::DEFAULT).to be_assignable_to(t) }
560
763
  end
561
764
 
562
765
  it 'Unit is assignable to all other types' do
563
- t = Puppet::Pops::Types::PUnitType.new()
564
- all_types.each { |t2| expect(t).to be_assignable_to(t2.new) }
766
+ t = PUnitType::DEFAULT
767
+ all_types.each { |t2| expect(t).to be_assignable_to(t2::DEFAULT) }
565
768
  end
566
769
 
567
770
  it 'Unit is assignable to Unit' do
568
- t = Puppet::Pops::Types::PUnitType.new()
569
- t2 = Puppet::Pops::Types::PUnitType.new()
771
+ t = PUnitType::DEFAULT
772
+ t2 = PUnitType::DEFAULT
570
773
  expect(t).to be_assignable_to(t2)
571
774
  end
572
775
  end
573
776
 
574
- context "for Any, such that" do
777
+ context 'for Any, such that' do
575
778
  it 'all types are assignable to Any' do
576
- t = Puppet::Pops::Types::PAnyType.new()
577
- all_types.each { |t2| expect(t2.new).to be_assignable_to(t) }
779
+ t = PAnyType::DEFAULT
780
+ all_types.each { |t2| expect(t2::DEFAULT).to be_assignable_to(t) }
578
781
  end
579
782
 
580
- it 'Any is not assignable to anything but Any' do
581
- tested_types = all_types() - [Puppet::Pops::Types::PAnyType]
582
- t = Puppet::Pops::Types::PAnyType.new()
583
- tested_types.each { |t2| expect(t).not_to be_assignable_to(t2.new) }
783
+ it 'Any is not assignable to anything but Any and Optional (implied Optional[Any])' do
784
+ tested_types = all_types() - [PAnyType, POptionalType]
785
+ t = PAnyType::DEFAULT
786
+ tested_types.each { |t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
584
787
  end
585
788
  end
586
789
 
587
- context "for Data, such that" do
588
- it 'all scalars + array and hash are assignable to Data' do
589
- t = Puppet::Pops::Types::PDataType.new()
590
- data_compatible_types.each { |t2|
591
- expect(type_from_class(t2)).to be_assignable_to(t)
592
- }
790
+ context "for NotUndef, such that" do
791
+ it 'all types except types assignable from Undef are assignable to NotUndef' do
792
+ t = not_undef_t
793
+ tc = TypeCalculator.singleton
794
+ undef_t = PUndefType::DEFAULT
795
+ all_types.each do |c|
796
+ t2 = c::DEFAULT
797
+ if tc.assignable?(t2, undef_t)
798
+ expect(t2).not_to be_assignable_to(t)
799
+ else
800
+ expect(t2).to be_assignable_to(t)
801
+ end
802
+ end
593
803
  end
594
804
 
595
- it 'a Variant of scalar, hash, or array is assignable to Data' do
596
- t = Puppet::Pops::Types::PDataType.new()
597
- data_compatible_types.each { |t2| expect(variant_t(type_from_class(t2))).to be_assignable_to(t) }
805
+ it 'type NotUndef[T] is assignable from T unless T is assignable from Undef ' do
806
+ tc = TypeCalculator.singleton
807
+ undef_t = PUndefType::DEFAULT
808
+ all_types().select do |c|
809
+ t2 = c::DEFAULT
810
+ not_undef_t = not_undef_t(t2)
811
+ if tc.assignable?(t2, undef_t)
812
+ expect(t2).not_to be_assignable_to(not_undef_t)
813
+ else
814
+ expect(t2).to be_assignable_to(not_undef_t)
815
+ end
816
+ end
598
817
  end
599
818
 
600
- it 'Data is not assignable to any of its subtypes' do
601
- t = Puppet::Pops::Types::PDataType.new()
602
- types_to_test = data_compatible_types- [Puppet::Pops::Types::PDataType]
603
- types_to_test.each {|t2| expect(t).not_to be_assignable_to(type_from_class(t2)) }
819
+ it 'type T is assignable from NotUndef[T] unless T is assignable from Undef' do
820
+ tc = TypeCalculator.singleton
821
+ undef_t = PUndefType::DEFAULT
822
+ all_types().select do |c|
823
+ t2 = c::DEFAULT
824
+ not_undef_t = not_undef_t(t2)
825
+ unless tc.assignable?(t2, undef_t)
826
+ expect(not_undef_t).to be_assignable_to(t2)
827
+ end
828
+ end
829
+ end
830
+ end
831
+
832
+ context "for TypeReference, such that" do
833
+ it 'no other type is assignable' do
834
+ t = PTypeReferenceType::DEFAULT
835
+ all_instances = (all_types - [
836
+ PTypeReferenceType, # Avoid comparison with t
837
+ PVariantType, # DEFAULT contains no variants, so assignability is never tested and always true
838
+ PTypeAliasType # DEFAULT resolves to PTypeReferenceType::DEFAULT, i.e. t
839
+ ]).map {|c| c::DEFAULT }
840
+
841
+ # Add a non-empty variant
842
+ all_instances << variant_t(PAnyType::DEFAULT, PUnitType::DEFAULT)
843
+ # Add a type alias that doesn't resolve to 't'
844
+ all_instances << type_alias_t('MyInt', 'Integer').resolve(TypeParser.singleton, nil)
845
+
846
+ all_instances.each { |i| expect(i).not_to be_assignable_to(t) }
847
+ end
848
+
849
+ it 'a TypeReference to the exact same type is assignable' do
850
+ expect(type_reference_t('Integer[0,10]')).to be_assignable_to(type_reference_t('Integer[0,10]'))
851
+ end
852
+
853
+ it 'a TypeReference to the different type is not assignable' do
854
+ expect(type_reference_t('String')).not_to be_assignable_to(type_reference_t('Integer'))
855
+ end
856
+
857
+ it 'a TypeReference to the different type is not assignable even if the referenced type is' do
858
+ expect(type_reference_t('Integer[1,2]')).not_to be_assignable_to(type_reference_t('Integer[0,3]'))
859
+ end
860
+ end
861
+
862
+ context 'for Data, such that' do
863
+ let(:data) { TypeFactory.data }
864
+ data_compatible_types.map { |t2| type_from_class(t2) }.each do |tc|
865
+ it "#{tc.name} is assignable to Data" do
866
+ expect(tc).to be_assignable_to(data)
867
+ end
604
868
  end
605
869
 
606
- it 'Data is not assignable to a Variant of Data subtype' do
607
- t = Puppet::Pops::Types::PDataType.new()
608
- types_to_test = data_compatible_types- [Puppet::Pops::Types::PDataType]
609
- types_to_test.each { |t2| expect(t).not_to be_assignable_to(variant_t(type_from_class(t2))) }
870
+ it 'Data is not assignable to any of its subtypes' do
871
+ types_to_test = data_compatible_types
872
+ types_to_test.each {|t2| expect(data).not_to be_assignable_to(type_from_class(t2)) }
610
873
  end
611
874
 
612
875
  it 'Data is not assignable to any disjunct type' do
613
- tested_types = all_types - [Puppet::Pops::Types::PAnyType, Puppet::Pops::Types::PDataType] - scalar_types
614
- t = Puppet::Pops::Types::PDataType.new()
615
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
876
+ tested_types = all_types - [PAnyType, POptionalType] - scalar_types
877
+ tested_types.each {|t2| expect(data).not_to be_assignable_to(t2::DEFAULT) }
616
878
  end
617
879
  end
618
880
 
@@ -634,102 +896,130 @@ describe 'The type calculator' do
634
896
  end
635
897
  end
636
898
 
637
- context "for Scalar, such that" do
638
- it "all scalars are assignable to Scalar" do
639
- t = Puppet::Pops::Types::PScalarType.new()
640
- scalar_types.each {|t2| expect(t2.new).to be_assignable_to(t) }
899
+ context 'for Scalar, such that' do
900
+ it 'all scalars are assignable to Scalar' do
901
+ t = PScalarType::DEFAULT
902
+ scalar_types.each {|t2| expect(t2::DEFAULT).to be_assignable_to(t) }
641
903
  end
642
904
 
643
905
  it 'Scalar is not assignable to any of its subtypes' do
644
- t = Puppet::Pops::Types::PScalarType.new()
645
- types_to_test = scalar_types - [Puppet::Pops::Types::PScalarType]
646
- types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
906
+ t = PScalarType::DEFAULT
907
+ types_to_test = scalar_types - [PScalarType]
908
+ types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
647
909
  end
648
910
 
649
911
  it 'Scalar is not assignable to any disjunct type' do
650
- tested_types = all_types - [Puppet::Pops::Types::PAnyType, Puppet::Pops::Types::PDataType] - scalar_types
651
- t = Puppet::Pops::Types::PScalarType.new()
652
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
912
+ tested_types = all_types - [PAnyType, POptionalType, PNotUndefType] - scalar_types
913
+ t = PScalarType::DEFAULT
914
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
653
915
  end
654
916
  end
655
917
 
656
- context "for Numeric, such that" do
657
- it "all numerics are assignable to Numeric" do
658
- t = Puppet::Pops::Types::PNumericType.new()
659
- numeric_types.each {|t2| expect(t2.new).to be_assignable_to(t) }
918
+ context 'for Numeric, such that' do
919
+ it 'all numerics are assignable to Numeric' do
920
+ t = PNumericType::DEFAULT
921
+ numeric_types.each {|t2| expect(t2::DEFAULT).to be_assignable_to(t) }
660
922
  end
661
923
 
662
924
  it 'Numeric is not assignable to any of its subtypes' do
663
- t = Puppet::Pops::Types::PNumericType.new()
664
- types_to_test = numeric_types - [Puppet::Pops::Types::PNumericType]
665
- types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
925
+ t = PNumericType::DEFAULT
926
+ types_to_test = numeric_types - [PNumericType]
927
+ types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
666
928
  end
667
929
 
668
930
  it 'Numeric is not assignable to any disjunct type' do
669
931
  tested_types = all_types - [
670
- Puppet::Pops::Types::PAnyType,
671
- Puppet::Pops::Types::PDataType,
672
- Puppet::Pops::Types::PScalarType,
932
+ PAnyType,
933
+ POptionalType,
934
+ PNotUndefType,
935
+ PScalarType,
936
+ PScalarDataType,
673
937
  ] - numeric_types
674
- t = Puppet::Pops::Types::PNumericType.new()
675
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
938
+ t = PNumericType::DEFAULT
939
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
676
940
  end
677
941
  end
678
942
 
679
- context "for Collection, such that" do
680
- it "all collections are assignable to Collection" do
681
- t = Puppet::Pops::Types::PCollectionType.new()
682
- collection_types.each {|t2| expect(t2.new).to be_assignable_to(t) }
943
+ context 'for Collection, such that' do
944
+ it 'all collections are assignable to Collection' do
945
+ t = PCollectionType::DEFAULT
946
+ collection_types.each {|t2| expect(t2::DEFAULT).to be_assignable_to(t) }
683
947
  end
684
948
 
685
949
  it 'Collection is not assignable to any of its subtypes' do
686
- t = Puppet::Pops::Types::PCollectionType.new()
687
- types_to_test = collection_types - [Puppet::Pops::Types::PCollectionType]
688
- types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
950
+ t = PCollectionType::DEFAULT
951
+ types_to_test = collection_types - [PCollectionType]
952
+ types_to_test.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
689
953
  end
690
954
 
691
955
  it 'Collection is not assignable to any disjunct type' do
692
- tested_types = all_types - [Puppet::Pops::Types::PAnyType] - collection_types
693
- t = Puppet::Pops::Types::PCollectionType.new()
694
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
956
+ tested_types = all_types - [
957
+ PAnyType,
958
+ POptionalType,
959
+ PNotUndefType,
960
+ PIterableType] - collection_types
961
+ t = PCollectionType::DEFAULT
962
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
695
963
  end
696
964
  end
697
965
 
698
- context "for Array, such that" do
699
- it "Array is not assignable to non Array based Collection type" do
700
- t = Puppet::Pops::Types::PArrayType.new()
966
+ context 'for Array, such that' do
967
+ it 'Array is not assignable to non Array based Collection type' do
968
+ t = PArrayType::DEFAULT
701
969
  tested_types = collection_types - [
702
- Puppet::Pops::Types::PCollectionType,
703
- Puppet::Pops::Types::PArrayType,
704
- Puppet::Pops::Types::PTupleType]
705
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
970
+ PCollectionType,
971
+ PNotUndefType,
972
+ PArrayType,
973
+ PTupleType]
974
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
706
975
  end
707
976
 
708
977
  it 'Array is not assignable to any disjunct type' do
709
978
  tested_types = all_types - [
710
- Puppet::Pops::Types::PAnyType,
711
- Puppet::Pops::Types::PDataType] - collection_types
712
- t = Puppet::Pops::Types::PArrayType.new()
713
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
979
+ PAnyType,
980
+ POptionalType,
981
+ PNotUndefType,
982
+ PIterableType] - collection_types
983
+ t = PArrayType::DEFAULT
984
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
985
+ end
986
+
987
+ it 'Empty Array is assignable to an array that accepts 0 entries' do
988
+ expect(empty_array_t).to be_assignable_to(array_t(string_t))
989
+ expect(empty_array_t).to be_assignable_to(array_t(integer_t))
990
+ end
991
+
992
+ it 'A Tuple is assignable to an array' do
993
+ expect(tuple_t(String)).to be_assignable_to(array_t(String))
994
+ end
995
+
996
+ it 'A Tuple with <n> elements is assignable to an array with min size <n>' do
997
+ expect(tuple_t(String,String)).to be_assignable_to(array_t(String, range_t(2, :default)))
998
+ end
999
+
1000
+ it 'A Tuple with <n> elements where the last 2 are optional is assignable to an array with size <n> - 2' do
1001
+ expect(constrained_tuple_t(range_t(2, :default), String,String,String,String)).to be_assignable_to(array_t(String, range_t(2, :default)))
714
1002
  end
715
1003
  end
716
1004
 
717
- context "for Hash, such that" do
718
- it "Hash is not assignable to any other Collection type" do
719
- t = Puppet::Pops::Types::PHashType.new()
1005
+ context 'for Hash, such that' do
1006
+ it 'Hash is not assignable to any other Collection type' do
1007
+ t = PHashType::DEFAULT
720
1008
  tested_types = collection_types - [
721
- Puppet::Pops::Types::PCollectionType,
722
- Puppet::Pops::Types::PStructType,
723
- Puppet::Pops::Types::PHashType]
724
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
1009
+ PCollectionType,
1010
+ PStructType,
1011
+ PHashType]
1012
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
725
1013
  end
726
1014
 
727
1015
  it 'Hash is not assignable to any disjunct type' do
728
1016
  tested_types = all_types - [
729
- Puppet::Pops::Types::PAnyType,
730
- Puppet::Pops::Types::PDataType] - collection_types
731
- t = Puppet::Pops::Types::PHashType.new()
732
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
1017
+ PAnyType,
1018
+ POptionalType,
1019
+ PNotUndefType,
1020
+ PIterableType] - collection_types
1021
+ t = PHashType::DEFAULT
1022
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
733
1023
  end
734
1024
 
735
1025
  it 'Struct is assignable to Hash with Pattern that matches all keys' do
@@ -749,68 +1039,185 @@ describe 'The type calculator' do
749
1039
  end
750
1040
  end
751
1041
 
752
- context "for Tuple, such that" do
753
- it "Tuple is not assignable to any other non Array based Collection type" do
754
- t = Puppet::Pops::Types::PTupleType.new()
1042
+ context 'for Timespan such that' do
1043
+ it 'Timespan is assignable to less constrained Timespan' do
1044
+ t1 = PTimespanType.new('00:00:10', '00:00:20')
1045
+ t2 = PTimespanType.new('00:00:11', '00:00:19')
1046
+ expect(t2).to be_assignable_to(t1)
1047
+ end
1048
+
1049
+ it 'Timespan is not assignable to more constrained Timespan' do
1050
+ t1 = PTimespanType.new('00:00:10', '00:00:20')
1051
+ t2 = PTimespanType.new('00:00:11', '00:00:19')
1052
+ expect(t1).not_to be_assignable_to(t2)
1053
+ end
1054
+ end
1055
+
1056
+ context 'for Timestamp such that' do
1057
+ it 'Timestamp is assignable to less constrained Timestamp' do
1058
+ t1 = PTimestampType.new('2016-01-01', '2016-12-31')
1059
+ t2 = PTimestampType.new('2016-02-01', '2016-11-30')
1060
+ expect(t2).to be_assignable_to(t1)
1061
+ end
1062
+
1063
+ it 'Timestamp is not assignable to more constrained Timestamp' do
1064
+ t1 = PTimestampType.new('2016-01-01', '2016-12-31')
1065
+ t2 = PTimestampType.new('2016-02-01', '2016-11-30')
1066
+ expect(t1).not_to be_assignable_to(t2)
1067
+ end
1068
+ end
1069
+
1070
+ context 'for Tuple, such that' do
1071
+ it 'Tuple is not assignable to any other non Array based Collection type' do
1072
+ t = PTupleType::DEFAULT
755
1073
  tested_types = collection_types - [
756
- Puppet::Pops::Types::PCollectionType,
757
- Puppet::Pops::Types::PTupleType,
758
- Puppet::Pops::Types::PArrayType]
759
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
1074
+ PCollectionType,
1075
+ PTupleType,
1076
+ PArrayType]
1077
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
1078
+ end
1079
+
1080
+ it 'A tuple with parameters is assignable to the default Tuple' do
1081
+ t = PTupleType::DEFAULT
1082
+ t2 = PTupleType.new([PStringType::DEFAULT])
1083
+ expect(t2).to be_assignable_to(t)
760
1084
  end
761
1085
 
762
1086
  it 'Tuple is not assignable to any disjunct type' do
763
1087
  tested_types = all_types - [
764
- Puppet::Pops::Types::PAnyType,
765
- Puppet::Pops::Types::PDataType] - collection_types
766
- t = Puppet::Pops::Types::PTupleType.new()
767
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
1088
+ PAnyType,
1089
+ POptionalType,
1090
+ PNotUndefType,
1091
+ PIterableType] - collection_types
1092
+ t = PTupleType::DEFAULT
1093
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
768
1094
  end
769
1095
  end
770
1096
 
771
- context "for Struct, such that" do
772
- it "Struct is not assignable to any other non Hashed based Collection type" do
773
- t = Puppet::Pops::Types::PStructType.new()
1097
+ context 'for Struct, such that' do
1098
+ it 'Struct is not assignable to any other non Hashed based Collection type' do
1099
+ t = PStructType::DEFAULT
774
1100
  tested_types = collection_types - [
775
- Puppet::Pops::Types::PCollectionType,
776
- Puppet::Pops::Types::PStructType,
777
- Puppet::Pops::Types::PHashType]
778
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
1101
+ PCollectionType,
1102
+ PStructType,
1103
+ PHashType]
1104
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
779
1105
  end
780
1106
 
781
1107
  it 'Struct is not assignable to any disjunct type' do
782
1108
  tested_types = all_types - [
783
- Puppet::Pops::Types::PAnyType,
784
- Puppet::Pops::Types::PDataType] - collection_types
785
- t = Puppet::Pops::Types::PStructType.new()
786
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
1109
+ PAnyType,
1110
+ POptionalType,
1111
+ PNotUndefType,
1112
+ PIterableType] - collection_types
1113
+ t = PStructType::DEFAULT
1114
+ tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
1115
+ end
1116
+
1117
+ it 'Default key optionality is controlled by value assignability to undef' do
1118
+ t1 = struct_t({'member' => string_t})
1119
+ expect(t1.elements[0].key_type).to eq(string_t('member'))
1120
+ t1 = struct_t({'member' => any_t})
1121
+ expect(t1.elements[0].key_type).to eq(optional_t(string_t('member')))
1122
+ end
1123
+
1124
+ it "NotUndef['key'] becomes String['key'] (since its implied that String is required)" do
1125
+ t1 = struct_t({not_undef_t('member') => string_t})
1126
+ expect(t1.elements[0].key_type).to eq(string_t('member'))
1127
+ end
1128
+
1129
+ it "Optional['key'] becomes Optional[String['key']]" do
1130
+ t1 = struct_t({optional_t('member') => string_t})
1131
+ expect(t1.elements[0].key_type).to eq(optional_t(string_t('member')))
1132
+ end
1133
+
1134
+ it 'Optional members are not required' do
1135
+ t1 = struct_t({optional_t('optional_member') => string_t, not_undef_t('other_member') => string_t})
1136
+ t2 = struct_t({not_undef_t('other_member') => string_t})
1137
+ expect(t2).to be_assignable_to(t1)
1138
+ end
1139
+
1140
+ it 'Required members not optional even when value is' do
1141
+ t1 = struct_t({not_undef_t('required_member') => any_t, not_undef_t('other_member') => string_t})
1142
+ t2 = struct_t({not_undef_t('other_member') => string_t})
1143
+ expect(t2).not_to be_assignable_to(t1)
1144
+ end
1145
+
1146
+ it 'A hash of string is not assignable to struct with integer value' do
1147
+ t1 = struct_t({'foo' => integer_t, 'bar' => string_t})
1148
+ t2 = hash_t(string_t, string_t, range_t(2, 2))
1149
+ expect(t1.assignable?(t2)).to eql(false)
1150
+ end
1151
+
1152
+ it 'A hash of with integer key is not assignable to struct with string key' do
1153
+ t1 = struct_t({'foo' => string_t, 'bar' => string_t})
1154
+ t2 = hash_t(integer_t, string_t, range_t(2, 2))
1155
+ expect(t1.assignable?(t2)).to eql(false)
787
1156
  end
788
1157
  end
789
1158
 
790
- context "for Callable, such that" do
791
- it "Callable is not assignable to any disjunct type" do
792
- t = Puppet::Pops::Types::PCallableType.new()
1159
+ context 'for Callable, such that' do
1160
+ it 'Callable is not assignable to any disjunct type' do
1161
+ t = PCallableType::DEFAULT
793
1162
  tested_types = all_types - [
794
- Puppet::Pops::Types::PCallableType,
795
- Puppet::Pops::Types::PAnyType]
796
- tested_types.each {|t2| expect(t).not_to be_assignable_to(t2.new) }
1163
+ PCallableType,
1164
+ PAnyType,
1165
+ POptionalType,
1166
+ PNotUndefType]
1167
+ tested_types.each {|t2| expect(t).to_not be_assignable_to(t2::DEFAULT) }
1168
+ end
1169
+
1170
+ it 'a callable with parameter is assignable to the default callable' do
1171
+ expect(callable_t(string_t)).to be_assignable_to(PCallableType::DEFAULT)
1172
+ end
1173
+
1174
+ it 'the default callable is not assignable to a callable with parameter' do
1175
+ expect(PCallableType::DEFAULT).not_to be_assignable_to(callable_t(string_t))
1176
+ end
1177
+
1178
+ it 'a callable with a return type is assignable to the default callable' do
1179
+ expect(callable_t([], string_t)).to be_assignable_to(PCallableType::DEFAULT)
1180
+ end
1181
+
1182
+ it 'the default callable is not assignable to a callable with a return type' do
1183
+ expect(PCallableType::DEFAULT).not_to be_assignable_to(callable_t([],string_t))
1184
+ end
1185
+
1186
+ it 'a callable with a return type Any is assignable to the default callable' do
1187
+ expect(callable_t([], any_t)).to be_assignable_to(PCallableType::DEFAULT)
1188
+ end
1189
+
1190
+ it 'a callable with a return type Any is equal to a callable with the same parameters and no return type' do
1191
+ expect(callable_t([string_t], any_t)).to eql(callable_t(string_t))
1192
+ end
1193
+
1194
+ it 'a callable with a return type different than Any is not equal to a callable with the same parameters and no return type' do
1195
+ expect(callable_t([string_t], string_t)).not_to eql(callable_t(string_t))
1196
+ end
1197
+
1198
+ it 'a callable with a return type is assignable from another callable with an assignable return type' do
1199
+ expect(callable_t([], string_t)).to be_assignable_to(callable_t([], PScalarType::DEFAULT))
1200
+ end
1201
+
1202
+ it 'a callable with a return type is not assignable from another callable unless the return type is assignable' do
1203
+ expect(callable_t([], string_t)).not_to be_assignable_to(callable_t([], integer_t))
797
1204
  end
798
1205
  end
799
1206
 
800
1207
  it 'should recognize mapped ruby types' do
801
- { Integer => Puppet::Pops::Types::PIntegerType.new,
802
- Fixnum => Puppet::Pops::Types::PIntegerType.new,
803
- Bignum => Puppet::Pops::Types::PIntegerType.new,
804
- Float => Puppet::Pops::Types::PFloatType.new,
805
- Numeric => Puppet::Pops::Types::PNumericType.new,
806
- NilClass => Puppet::Pops::Types::PUndefType.new,
807
- TrueClass => Puppet::Pops::Types::PBooleanType.new,
808
- FalseClass => Puppet::Pops::Types::PBooleanType.new,
809
- String => Puppet::Pops::Types::PStringType.new,
810
- Regexp => Puppet::Pops::Types::PRegexpType.new,
811
- Regexp => Puppet::Pops::Types::PRegexpType.new,
812
- Array => Puppet::Pops::Types::TypeFactory.array_of_data(),
813
- Hash => Puppet::Pops::Types::TypeFactory.hash_of_data()
1208
+ { Integer => PIntegerType::DEFAULT,
1209
+ Fixnum => PIntegerType::DEFAULT,
1210
+ Bignum => PIntegerType::DEFAULT,
1211
+ Float => PFloatType::DEFAULT,
1212
+ Numeric => PNumericType::DEFAULT,
1213
+ NilClass => PUndefType::DEFAULT,
1214
+ TrueClass => PBooleanType::DEFAULT,
1215
+ FalseClass => PBooleanType::DEFAULT,
1216
+ String => PStringType::DEFAULT,
1217
+ Regexp => PRegexpType::DEFAULT,
1218
+ Regexp => PRegexpType::DEFAULT,
1219
+ Array => TypeFactory.array_of_any,
1220
+ Hash => TypeFactory.hash_of_any
814
1221
  }.each do |ruby_type, puppet_type |
815
1222
  expect(ruby_type).to be_assignable_to(puppet_type)
816
1223
  end
@@ -821,35 +1228,18 @@ describe 'The type calculator' do
821
1228
  expect(calculator.assignable?(range_t(2,5), range_t(2,5))).to eq(true)
822
1229
  end
823
1230
 
824
- it 'should accept an equal reverse range' do
825
- expect(calculator.assignable?(range_t(2,5), range_t(5,2))).to eq(true)
826
- end
827
-
828
1231
  it 'should accept a narrower range' do
829
1232
  expect(calculator.assignable?(range_t(2,10), range_t(3,5))).to eq(true)
830
1233
  end
831
1234
 
832
- it 'should accept a narrower reverse range' do
833
- expect(calculator.assignable?(range_t(2,10), range_t(5,3))).to eq(true)
834
- end
835
-
836
1235
  it 'should reject a wider range' do
837
1236
  expect(calculator.assignable?(range_t(3,5), range_t(2,10))).to eq(false)
838
1237
  end
839
1238
 
840
- it 'should reject a wider reverse range' do
841
- expect(calculator.assignable?(range_t(3,5), range_t(10,2))).to eq(false)
842
- end
843
-
844
1239
  it 'should reject a partially overlapping range' do
845
1240
  expect(calculator.assignable?(range_t(3,5), range_t(2,4))).to eq(false)
846
1241
  expect(calculator.assignable?(range_t(3,5), range_t(4,6))).to eq(false)
847
1242
  end
848
-
849
- it 'should reject a partially overlapping reverse range' do
850
- expect(calculator.assignable?(range_t(3,5), range_t(4,2))).to eq(false)
851
- expect(calculator.assignable?(range_t(3,5), range_t(6,4))).to eq(false)
852
- end
853
1243
  end
854
1244
 
855
1245
  context 'when dealing with patterns' do
@@ -885,7 +1275,7 @@ describe 'The type calculator' do
885
1275
 
886
1276
  it 'should accept multiple strings if they all match any patterns' do
887
1277
  p_t = pattern_t('X', 'Y', 'abc')
888
- p_s = string_t('Xa', 'aY', 'abc')
1278
+ p_s = enum_t('Xa', 'aY', 'abc')
889
1279
  expect(calculator.assignable?(p_t, p_s)).to eq(true)
890
1280
  end
891
1281
 
@@ -897,7 +1287,7 @@ describe 'The type calculator' do
897
1287
 
898
1288
  it 'should reject multiple strings if not all match any patterns' do
899
1289
  p_t = pattern_t('abc', 'ab', 'c', 'q')
900
- p_s = string_t('X', 'Y', 'Z')
1290
+ p_s = enum_t('X', 'Y', 'Z')
901
1291
  expect(calculator.assignable?(p_t, p_s)).to eq(false)
902
1292
  end
903
1293
 
@@ -913,18 +1303,18 @@ describe 'The type calculator' do
913
1303
  end
914
1304
 
915
1305
  it 'pattern representing all patterns should accept any pattern' do
916
- expect(calculator.assignable?(pattern_t(), pattern_t('a'))).to eq(true)
917
- expect(calculator.assignable?(pattern_t(), pattern_t())).to eq(true)
1306
+ expect(calculator.assignable?(pattern_t, pattern_t('a'))).to eq(true)
1307
+ expect(calculator.assignable?(pattern_t, pattern_t)).to eq(true)
918
1308
  end
919
1309
 
920
1310
  it 'pattern representing all patterns should accept any enum' do
921
- expect(calculator.assignable?(pattern_t(), enum_t('a'))).to eq(true)
922
- expect(calculator.assignable?(pattern_t(), enum_t())).to eq(true)
1311
+ expect(calculator.assignable?(pattern_t, enum_t('a'))).to eq(true)
1312
+ expect(calculator.assignable?(pattern_t, enum_t)).to eq(true)
923
1313
  end
924
1314
 
925
1315
  it 'pattern representing all patterns should accept any string' do
926
- expect(calculator.assignable?(pattern_t(), string_t('a'))).to eq(true)
927
- expect(calculator.assignable?(pattern_t(), string_t())).to eq(true)
1316
+ expect(calculator.assignable?(pattern_t, string_t('a'))).to eq(true)
1317
+ expect(calculator.assignable?(pattern_t, string_t)).to eq(true)
928
1318
  end
929
1319
 
930
1320
  end
@@ -943,8 +1333,8 @@ describe 'The type calculator' do
943
1333
  end
944
1334
 
945
1335
  it 'non parameterized enum accepts any other enum but not the reverse' do
946
- expect(calculator.assignable?(enum_t(), enum_t('a'))).to eq(true)
947
- expect(calculator.assignable?(enum_t('a'), enum_t())).to eq(false)
1336
+ expect(calculator.assignable?(enum_t, enum_t('a'))).to eq(true)
1337
+ expect(calculator.assignable?(enum_t('a'), enum_t)).to eq(false)
948
1338
  end
949
1339
 
950
1340
  it 'enum should accept a variant where all variants are acceptable' do
@@ -955,54 +1345,53 @@ describe 'The type calculator' do
955
1345
 
956
1346
  context 'when dealing with string and enum combinations' do
957
1347
  it 'should accept assigning any enum to unrestricted string' do
958
- expect(calculator.assignable?(string_t(), enum_t('blue'))).to eq(true)
959
- expect(calculator.assignable?(string_t(), enum_t('blue', 'red'))).to eq(true)
1348
+ expect(calculator.assignable?(string_t, enum_t('blue'))).to eq(true)
1349
+ expect(calculator.assignable?(string_t, enum_t('blue', 'red'))).to eq(true)
960
1350
  end
961
1351
 
962
1352
  it 'should not accept assigning longer enum value to size restricted string' do
963
- expect(calculator.assignable?(constrained_t(string_t(),2,2), enum_t('a','blue'))).to eq(false)
1353
+ expect(calculator.assignable?(constrained_string_t(range_t(2,2)), enum_t('a','blue'))).to eq(false)
964
1354
  end
965
1355
 
966
1356
  it 'should accept assigning any string to empty enum' do
967
- expect(calculator.assignable?(enum_t(), string_t())).to eq(true)
1357
+ expect(calculator.assignable?(enum_t, string_t)).to eq(true)
968
1358
  end
969
1359
 
970
1360
  it 'should accept assigning empty enum to any string' do
971
- expect(calculator.assignable?(string_t(), enum_t())).to eq(true)
1361
+ expect(calculator.assignable?(string_t, enum_t)).to eq(true)
972
1362
  end
973
1363
 
974
1364
  it 'should not accept assigning empty enum to size constrained string' do
975
- expect(calculator.assignable?(constrained_t(string_t(),2,2), enum_t())).to eq(false)
1365
+ expect(calculator.assignable?(constrained_string_t(range_t(2,2)), enum_t)).to eq(false)
976
1366
  end
977
1367
  end
978
1368
 
979
1369
  context 'when dealing with string/pattern/enum combinations' do
980
1370
  it 'any string is equal to any enum is equal to any pattern' do
981
- expect(calculator.assignable?(string_t(), enum_t())).to eq(true)
982
- expect(calculator.assignable?(string_t(), pattern_t())).to eq(true)
983
- expect(calculator.assignable?(enum_t(), string_t())).to eq(true)
984
- expect(calculator.assignable?(enum_t(), pattern_t())).to eq(true)
985
- expect(calculator.assignable?(pattern_t(), string_t())).to eq(true)
986
- expect(calculator.assignable?(pattern_t(), enum_t())).to eq(true)
1371
+ expect(calculator.assignable?(string_t, enum_t)).to eq(true)
1372
+ expect(calculator.assignable?(string_t, pattern_t)).to eq(true)
1373
+ expect(calculator.assignable?(enum_t, string_t)).to eq(true)
1374
+ expect(calculator.assignable?(enum_t, pattern_t)).to eq(true)
1375
+ expect(calculator.assignable?(pattern_t, string_t)).to eq(true)
1376
+ expect(calculator.assignable?(pattern_t, enum_t)).to eq(true)
987
1377
  end
988
1378
  end
989
1379
 
990
1380
  context 'when dealing with tuples' do
991
1381
  it 'matches empty tuples' do
992
- tuple1 = tuple_t()
993
- tuple2 = tuple_t()
1382
+ tuple1 = tuple_t
1383
+ tuple2 = tuple_t
994
1384
 
995
1385
  expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
996
1386
  expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
997
1387
  end
998
1388
 
999
1389
  it 'accepts an empty tuple as assignable to a tuple with a min size of 0' do
1000
- tuple1 = tuple_t(Object)
1001
- factory.constrain_size(tuple1, 0, :default)
1390
+ tuple1 = constrained_tuple_t(range_t(0, :default))
1002
1391
  tuple2 = tuple_t()
1003
1392
 
1004
1393
  expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
1005
- expect(calculator.assignable?(tuple2, tuple1)).to eq(false)
1394
+ expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
1006
1395
  end
1007
1396
 
1008
1397
  it 'should accept matching tuples' do
@@ -1020,62 +1409,51 @@ describe 'The type calculator' do
1020
1409
  end
1021
1410
 
1022
1411
  it 'should accept ranged tuples' do
1023
- tuple1 = tuple_t(1)
1024
- factory.constrain_size(tuple1, 5, 5)
1412
+ tuple1 = constrained_tuple_t(range_t(5,5), 1)
1025
1413
  tuple2 = tuple_t(Integer,Integer, Integer, Integer, Integer)
1026
1414
  expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
1027
1415
  expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
1028
1416
  end
1029
1417
 
1030
1418
  it 'should reject ranged tuples when ranges does not match' do
1031
- tuple1 = tuple_t(1)
1032
- factory.constrain_size(tuple1, 4, 5)
1419
+ tuple1 = constrained_tuple_t(range_t(4, 5), 1)
1033
1420
  tuple2 = tuple_t(Integer,Integer, Integer, Integer, Integer)
1034
1421
  expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
1035
1422
  expect(calculator.assignable?(tuple2, tuple1)).to eq(false)
1036
1423
  end
1037
1424
 
1038
1425
  it 'should reject ranged tuples when ranges does not match (using infinite upper bound)' do
1039
- tuple1 = tuple_t(1)
1040
- factory.constrain_size(tuple1, 4, :default)
1426
+ tuple1 = constrained_tuple_t(range_t(4, :default), 1)
1041
1427
  tuple2 = tuple_t(Integer,Integer, Integer, Integer, Integer)
1042
1428
  expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
1043
1429
  expect(calculator.assignable?(tuple2, tuple1)).to eq(false)
1044
1430
  end
1045
1431
 
1046
1432
  it 'should accept matching tuples with optional entries by repeating last' do
1047
- tuple1 = tuple_t(1,2)
1048
- factory.constrain_size(tuple1, 0, :default)
1049
- tuple2 = tuple_t(Numeric,Numeric)
1050
- factory.constrain_size(tuple2, 0, :default)
1433
+ tuple1 = constrained_tuple_t(range_t(0, :default), 1,2)
1434
+ tuple2 = constrained_tuple_t(range_t(0, :default), Numeric,Numeric)
1051
1435
  expect(calculator.assignable?(tuple1, tuple2)).to eq(false)
1052
1436
  expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
1053
1437
  end
1054
1438
 
1055
1439
  it 'should accept matching tuples with optional entries' do
1056
- tuple1 = tuple_t(Integer, Integer, String)
1057
- factory.constrain_size(tuple1, 1, 3)
1058
- array2 = factory.constrain_size(array_t(Integer),2,2)
1440
+ tuple1 = constrained_tuple_t(range_t(1, 3), Integer, Integer, String)
1441
+ array2 = array_t(Integer, range_t(2,2))
1059
1442
  expect(calculator.assignable?(tuple1, array2)).to eq(true)
1060
- factory.constrain_size(tuple1, 3, 3)
1443
+ tuple1 = constrained_tuple_t(range_t(3, 3), tuple1.types)
1061
1444
  expect(calculator.assignable?(tuple1, array2)).to eq(false)
1062
1445
  end
1063
1446
 
1064
1447
  it 'should accept matching array' do
1065
1448
  tuple1 = tuple_t(1,2)
1066
- array = array_t(Integer)
1067
- factory.constrain_size(array, 2, 2)
1449
+ array = array_t(Integer, range_t(2, 2))
1068
1450
  expect(calculator.assignable?(tuple1, array)).to eq(true)
1069
1451
  expect(calculator.assignable?(array, tuple1)).to eq(true)
1070
1452
  end
1071
1453
 
1072
1454
  it 'should accept empty array when tuple allows min of 0' do
1073
- tuple1 = tuple_t(Integer)
1074
- factory.constrain_size(tuple1, 0, 1)
1075
-
1076
- array = array_t(Integer)
1077
- factory.constrain_size(array, 0, 0)
1078
-
1455
+ tuple1 = constrained_tuple_t(range_t(0, 1), Integer)
1456
+ array = array_t(unit_t, range_t(0, 0))
1079
1457
  expect(calculator.assignable?(tuple1, array)).to eq(true)
1080
1458
  expect(calculator.assignable?(array, tuple1)).to eq(false)
1081
1459
  end
@@ -1122,18 +1500,15 @@ describe 'The type calculator' do
1122
1500
 
1123
1501
  it 'should accept matching hash' do
1124
1502
  struct1 = struct_t({'a'=>Integer, 'b'=>Integer})
1125
- non_empty_string = string_t()
1126
- non_empty_string.size_type = range_t(1, nil)
1127
- hsh = hash_t(non_empty_string, Integer)
1128
- factory.constrain_size(hsh, 2, 2)
1503
+ non_empty_string = constrained_string_t(range_t(1, nil))
1504
+ hsh = hash_t(non_empty_string, Integer, range_t(2,2))
1129
1505
  expect(calculator.assignable?(struct1, hsh)).to eq(true)
1130
1506
  expect(calculator.assignable?(hsh, struct1)).to eq(true)
1131
1507
  end
1132
1508
 
1133
- it 'should accept empty hash with key_type undef' do
1509
+ it 'should accept empty hash with key_type unit' do
1134
1510
  struct1 = struct_t({'a'=>optional_t(Integer)})
1135
- hsh = hash_t(undef_t, undef_t)
1136
- factory.constrain_size(hsh, 0, 0)
1511
+ hsh = hash_t(unit_t, unit_t, range_t(0, 0))
1137
1512
  expect(calculator.assignable?(struct1, hsh)).to eq(true)
1138
1513
  end
1139
1514
  end
@@ -1158,111 +1533,228 @@ describe 'The type calculator' do
1158
1533
  expect(calculator.assignable?(Bar, fooType)).to eq(false)
1159
1534
  end
1160
1535
 
1161
- it "should allow host class with same name" do
1162
- hc1 = Puppet::Pops::Types::TypeFactory.host_class('the_name')
1163
- hc2 = Puppet::Pops::Types::TypeFactory.host_class('the_name')
1536
+ it 'should allow host class with same name' do
1537
+ hc1 = TypeFactory.host_class('the_name')
1538
+ hc2 = TypeFactory.host_class('the_name')
1164
1539
  expect(calculator.assignable?(hc1, hc2)).to eq(true)
1165
1540
  end
1166
1541
 
1167
- it "should allow host class with name assigned to hostclass without name" do
1168
- hc1 = Puppet::Pops::Types::TypeFactory.host_class()
1169
- hc2 = Puppet::Pops::Types::TypeFactory.host_class('the_name')
1542
+ it 'should allow host class with name assigned to hostclass without name' do
1543
+ hc1 = TypeFactory.host_class
1544
+ hc2 = TypeFactory.host_class('the_name')
1170
1545
  expect(calculator.assignable?(hc1, hc2)).to eq(true)
1171
1546
  end
1172
1547
 
1173
- it "should reject host classes with different names" do
1174
- hc1 = Puppet::Pops::Types::TypeFactory.host_class('the_name')
1175
- hc2 = Puppet::Pops::Types::TypeFactory.host_class('another_name')
1548
+ it 'should reject host classes with different names' do
1549
+ hc1 = TypeFactory.host_class('the_name')
1550
+ hc2 = TypeFactory.host_class('another_name')
1176
1551
  expect(calculator.assignable?(hc1, hc2)).to eq(false)
1177
1552
  end
1178
1553
 
1179
- it "should reject host classes without name assigned to host class with name" do
1180
- hc1 = Puppet::Pops::Types::TypeFactory.host_class('the_name')
1181
- hc2 = Puppet::Pops::Types::TypeFactory.host_class()
1554
+ it 'should reject host classes without name assigned to host class with name' do
1555
+ hc1 = TypeFactory.host_class('the_name')
1556
+ hc2 = TypeFactory.host_class
1182
1557
  expect(calculator.assignable?(hc1, hc2)).to eq(false)
1183
1558
  end
1184
1559
 
1185
- it "should allow resource with same type_name and title" do
1186
- r1 = Puppet::Pops::Types::TypeFactory.resource('file', 'foo')
1187
- r2 = Puppet::Pops::Types::TypeFactory.resource('file', 'foo')
1560
+ it 'should allow resource with same type_name and title' do
1561
+ r1 = TypeFactory.resource('file', 'foo')
1562
+ r2 = TypeFactory.resource('file', 'foo')
1188
1563
  expect(calculator.assignable?(r1, r2)).to eq(true)
1189
1564
  end
1190
1565
 
1191
- it "should allow more specific resource assignment" do
1192
- r1 = Puppet::Pops::Types::TypeFactory.resource()
1193
- r2 = Puppet::Pops::Types::TypeFactory.resource('file')
1566
+ it 'should allow more specific resource assignment' do
1567
+ r1 = TypeFactory.resource
1568
+ r2 = TypeFactory.resource('file')
1194
1569
  expect(calculator.assignable?(r1, r2)).to eq(true)
1195
- r2 = Puppet::Pops::Types::TypeFactory.resource('file', '/tmp/foo')
1570
+ r2 = TypeFactory.resource('file', '/tmp/foo')
1196
1571
  expect(calculator.assignable?(r1, r2)).to eq(true)
1197
- r1 = Puppet::Pops::Types::TypeFactory.resource('file')
1572
+ r1 = TypeFactory.resource('file')
1198
1573
  expect(calculator.assignable?(r1, r2)).to eq(true)
1199
1574
  end
1200
1575
 
1201
- it "should reject less specific resource assignment" do
1202
- r1 = Puppet::Pops::Types::TypeFactory.resource('file', '/tmp/foo')
1203
- r2 = Puppet::Pops::Types::TypeFactory.resource('file')
1576
+ it 'should reject less specific resource assignment' do
1577
+ r1 = TypeFactory.resource('file', '/tmp/foo')
1578
+ r2 = TypeFactory.resource('file')
1204
1579
  expect(calculator.assignable?(r1, r2)).to eq(false)
1205
- r2 = Puppet::Pops::Types::TypeFactory.resource()
1580
+ r2 = TypeFactory.resource
1206
1581
  expect(calculator.assignable?(r1, r2)).to eq(false)
1207
1582
  end
1208
1583
 
1584
+ context 'for TypeAlias, such that' do
1585
+ let!(:parser) { TypeParser.singleton }
1586
+
1587
+ it 'it is assignable to the type that it is an alias for' do
1588
+ t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
1589
+ expect(calculator.assignable?(integer_t, t)).to be_truthy
1590
+ end
1591
+
1592
+ it 'the type that it is an alias for is assignable to it' do
1593
+ t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
1594
+ expect(calculator.assignable?(t, integer_t)).to be_truthy
1595
+ end
1596
+
1597
+ it 'a recursive alias can be assignable from a conformant type with any depth' do
1598
+ scope = Object.new
1599
+
1600
+ t = type_alias_t('Tree', 'Hash[String,Variant[String,Tree]]')
1601
+ loader = Object.new
1602
+ loader.expects(:load).with(:type, 'tree').returns t
1603
+
1604
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1605
+
1606
+ t.resolve(parser, scope)
1607
+ expect(calculator.assignable?(t, parser.parse('Hash[String,Variant[String,Hash[String,Variant[String,String]]]]'))).to be_truthy
1608
+ end
1609
+
1610
+
1611
+ it 'similar recursive aliases are assignable' do
1612
+ scope = Object.new
1613
+
1614
+ t1 = type_alias_t('Tree1', 'Hash[String,Variant[String,Tree1]]')
1615
+ t2 = type_alias_t('Tree2', 'Hash[String,Variant[String,Tree2]]')
1616
+ loader = Object.new
1617
+ loader.expects(:load).with(:type, 'tree1').returns t1
1618
+ loader.expects(:load).with(:type, 'tree2').returns t2
1619
+
1620
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1621
+
1622
+ t1.resolve(parser, scope)
1623
+ t2.resolve(parser, scope)
1624
+ expect(calculator.assignable?(t1, t2)).to be_truthy
1625
+ end
1626
+
1627
+ it 'crossing recursive aliases are assignable' do
1628
+ t1 = type_alias_t('Tree1', 'Hash[String,Variant[String,Tree2]]')
1629
+ t2 = type_alias_t('Tree2', 'Hash[String,Variant[String,Tree1]]')
1630
+ loader = Object.new
1631
+ loader.expects(:load).with(:type, 'tree1').returns t1
1632
+ loader.expects(:load).with(:type, 'tree2').returns t2
1633
+
1634
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1635
+
1636
+ t1.resolve(parser, loader)
1637
+ t2.resolve(parser, loader)
1638
+ expect(calculator.assignable?(t1, t2)).to be_truthy
1639
+ end
1640
+
1641
+ it 'Type[T] is assignable to Type[AT] when AT is an alias for T' do
1642
+ scope = Object.new
1643
+
1644
+ ta = type_alias_t('PositiveInteger', 'Integer[0,default]')
1645
+ loader = Object.new
1646
+ loader.expects(:load).with(:type, 'positiveinteger').returns ta
1647
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1648
+
1649
+ t1 = type_t(range_t(0, :default))
1650
+ t2 = parser.parse('Type[PositiveInteger]', scope)
1651
+ expect(calculator.assignable?(t2, t1)).to be_truthy
1652
+ end
1653
+
1654
+ it 'Type[T] is assignable to AT when AT is an alias for Type[T]' do
1655
+ scope = Object.new
1656
+
1657
+ ta = type_alias_t('PositiveIntegerType', 'Type[Integer[0,default]]')
1658
+ loader = Object.new
1659
+ loader.expects(:load).with(:type, 'positiveintegertype').returns ta
1660
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1661
+
1662
+ t1 = type_t(range_t(0, :default))
1663
+ t2 = parser.parse('PositiveIntegerType', scope)
1664
+ expect(calculator.assignable?(t2, t1)).to be_truthy
1665
+ end
1666
+
1667
+ it 'Type[Type[T]] is assignable to Type[Type[AT]] when AT is an alias for T' do
1668
+ scope = Object.new
1669
+
1670
+ ta = type_alias_t('PositiveInteger', 'Integer[0,default]')
1671
+ loader = Object.new
1672
+ loader.expects(:load).with(:type, 'positiveinteger').returns ta
1673
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1674
+
1675
+ t1 = type_t(type_t(range_t(0, :default)))
1676
+ t2 = parser.parse('Type[Type[PositiveInteger]]', scope)
1677
+ expect(calculator.assignable?(t2, t1)).to be_truthy
1678
+ end
1679
+
1680
+ it 'Type[Type[T]] is assignable to Type[AT] when AT is an alias for Type[T]' do
1681
+ scope = Object.new
1682
+
1683
+ ta = type_alias_t('PositiveIntegerType', 'Type[Integer[0,default]]')
1684
+ loader = Object.new
1685
+ loader.expects(:load).with(:type, 'positiveintegertype').returns ta
1686
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1687
+
1688
+ t1 = type_t(type_t(range_t(0, :default)))
1689
+ t2 = parser.parse('Type[PositiveIntegerType]', scope)
1690
+ expect(calculator.assignable?(t2, t1)).to be_truthy
1691
+ end
1692
+ end
1209
1693
  end
1210
1694
 
1211
1695
  context 'when testing if x is instance of type t' do
1212
- include_context "types_setup"
1696
+ include_context 'types_setup'
1213
1697
 
1214
1698
  it 'should consider undef to be instance of Any, NilType, and optional' do
1215
- expect(calculator.instance?(Puppet::Pops::Types::PUndefType.new(), nil)).to eq(true)
1216
- expect(calculator.instance?(Puppet::Pops::Types::PAnyType.new(), nil)).to eq(true)
1217
- expect(calculator.instance?(Puppet::Pops::Types::POptionalType.new(), nil)).to eq(true)
1699
+ expect(calculator.instance?(PUndefType::DEFAULT, nil)).to eq(true)
1700
+ expect(calculator.instance?(PAnyType::DEFAULT, nil)).to eq(true)
1701
+ expect(calculator.instance?(POptionalType::DEFAULT, nil)).to eq(true)
1218
1702
  end
1219
1703
 
1220
1704
  it 'all types should be (ruby) instance of PAnyType' do
1221
1705
  all_types.each do |t|
1222
- expect(t.new.is_a?(Puppet::Pops::Types::PAnyType)).to eq(true)
1706
+ expect(t::DEFAULT.is_a?(PAnyType)).to eq(true)
1223
1707
  end
1224
1708
  end
1225
1709
 
1226
- it "should consider :undef to be instance of Runtime['ruby', 'Symbol]" do
1227
- expect(calculator.instance?(Puppet::Pops::Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => 'Symbol'), :undef)).to eq(true)
1710
+ it "should infer :undef to be Undef" do
1711
+ expect(calculator.infer(:undef)).to be_assignable_to(undef_t)
1712
+ end
1713
+
1714
+ it "should not consider :default to be instance of Runtime['ruby', 'Symbol]" do
1715
+ expect(calculator.instance?(PRuntimeType.new(:ruby, 'Symbol'), :default)).to eq(false)
1228
1716
  end
1229
1717
 
1230
- it "should consider :undef to be instance of an Optional type" do
1231
- expect(calculator.instance?(Puppet::Pops::Types::POptionalType.new(), :undef)).to eq(true)
1718
+ it "should not consider :undef to be instance of Runtime['ruby', 'Symbol]" do
1719
+ expect(calculator.instance?(PRuntimeType.new(:ruby, 'Symbol'), :undef)).to eq(false)
1232
1720
  end
1233
1721
 
1234
- it 'should not consider undef to be an instance of any other type than Any, NilType and Data' do
1722
+ it 'should consider :undef to be instance of an Optional type' do
1723
+ expect(calculator.instance?(POptionalType::DEFAULT, :undef)).to eq(true)
1724
+ end
1725
+
1726
+ it 'should not consider undef to be an instance of any other type than Any, UndefType and Data' do
1235
1727
  types_to_test = all_types - [
1236
- Puppet::Pops::Types::PAnyType,
1237
- Puppet::Pops::Types::PUndefType,
1238
- Puppet::Pops::Types::PDataType,
1239
- Puppet::Pops::Types::POptionalType,
1728
+ PAnyType,
1729
+ PUndefType,
1730
+ POptionalType,
1240
1731
  ]
1241
1732
 
1242
- types_to_test.each {|t| expect(calculator.instance?(t.new, nil)).to eq(false) }
1243
- types_to_test.each {|t| expect(calculator.instance?(t.new, :undef)).to eq(false) }
1733
+ types_to_test.each {|t| expect(calculator.instance?(t::DEFAULT, nil)).to eq(false) }
1734
+ types_to_test.each {|t| expect(calculator.instance?(t::DEFAULT, :undef)).to eq(false) }
1244
1735
  end
1245
1736
 
1246
1737
  it 'should consider default to be instance of Default and Any' do
1247
- expect(calculator.instance?(Puppet::Pops::Types::PDefaultType.new(), :default)).to eq(true)
1248
- expect(calculator.instance?(Puppet::Pops::Types::PAnyType.new(), :default)).to eq(true)
1738
+ expect(calculator.instance?(PDefaultType::DEFAULT, :default)).to eq(true)
1739
+ expect(calculator.instance?(PAnyType::DEFAULT, :default)).to eq(true)
1249
1740
  end
1250
1741
 
1251
- it 'should not consider "default" to be an instance of anything but Default, and Any' do
1742
+ it 'should not consider "default" to be an instance of anything but Default, NotUndef, and Any' do
1252
1743
  types_to_test = all_types - [
1253
- Puppet::Pops::Types::PAnyType,
1254
- Puppet::Pops::Types::PDefaultType,
1744
+ PAnyType,
1745
+ PNotUndefType,
1746
+ PDefaultType,
1255
1747
  ]
1256
1748
 
1257
- types_to_test.each {|t| expect(calculator.instance?(t.new, :default)).to eq(false) }
1749
+ types_to_test.each {|t| expect(calculator.instance?(t::DEFAULT, :default)).to eq(false) }
1258
1750
  end
1259
1751
 
1260
- it 'should consider fixnum instanceof PIntegerType' do
1261
- expect(calculator.instance?(Puppet::Pops::Types::PIntegerType.new(), 1)).to eq(true)
1752
+ it 'should consider integer instanceof PIntegerType' do
1753
+ expect(calculator.instance?(PIntegerType::DEFAULT, 1)).to eq(true)
1262
1754
  end
1263
1755
 
1264
- it 'should consider fixnum instanceof Fixnum' do
1265
- expect(calculator.instance?(Fixnum, 1)).to eq(true)
1756
+ it 'should consider integer instanceof Integer' do
1757
+ expect(calculator.instance?(Integer, 1)).to eq(true)
1266
1758
  end
1267
1759
 
1268
1760
  it 'should consider integer in range' do
@@ -1274,15 +1766,21 @@ describe 'The type calculator' do
1274
1766
  end
1275
1767
 
1276
1768
  it 'should consider string in length range' do
1277
- range = factory.constrain_size(string_t, 1,3)
1769
+ range = constrained_string_t(range_t(1,3))
1278
1770
  expect(calculator.instance?(range, 'a')).to eq(true)
1279
1771
  expect(calculator.instance?(range, 'abc')).to eq(true)
1280
1772
  expect(calculator.instance?(range, '')).to eq(false)
1281
1773
  expect(calculator.instance?(range, 'abcd')).to eq(false)
1282
1774
  end
1283
1775
 
1776
+ it 'should consider string values' do
1777
+ string = string_t('a')
1778
+ expect(calculator.instance?(string, 'a')).to eq(true)
1779
+ expect(calculator.instance?(string, 'c')).to eq(false)
1780
+ end
1781
+
1284
1782
  it 'should consider array in length range' do
1285
- range = factory.constrain_size(array_t(integer_t), 1,3)
1783
+ range = array_t(integer_t, range_t(1,3))
1286
1784
  expect(calculator.instance?(range, [1])).to eq(true)
1287
1785
  expect(calculator.instance?(range, [1,2,3])).to eq(true)
1288
1786
  expect(calculator.instance?(range, [])).to eq(false)
@@ -1290,7 +1788,7 @@ describe 'The type calculator' do
1290
1788
  end
1291
1789
 
1292
1790
  it 'should consider hash in length range' do
1293
- range = factory.constrain_size(hash_t(integer_t, integer_t), 1,2)
1791
+ range = hash_t(integer_t, integer_t, range_t(1,2))
1294
1792
  expect(calculator.instance?(range, {1=>1})).to eq(true)
1295
1793
  expect(calculator.instance?(range, {1=>1, 2=>2})).to eq(true)
1296
1794
  expect(calculator.instance?(range, {})).to eq(false)
@@ -1298,7 +1796,7 @@ describe 'The type calculator' do
1298
1796
  end
1299
1797
 
1300
1798
  it 'should consider collection in length range for array ' do
1301
- range = factory.constrain_size(collection_t, 1,3)
1799
+ range = collection_t(range_t(1,3))
1302
1800
  expect(calculator.instance?(range, [1])).to eq(true)
1303
1801
  expect(calculator.instance?(range, [1,2,3])).to eq(true)
1304
1802
  expect(calculator.instance?(range, [])).to eq(false)
@@ -1306,7 +1804,7 @@ describe 'The type calculator' do
1306
1804
  end
1307
1805
 
1308
1806
  it 'should consider collection in length range for hash' do
1309
- range = factory.constrain_size(collection_t, 1,2)
1807
+ range = collection_t(range_t(1,2))
1310
1808
  expect(calculator.instance?(range, {1=>1})).to eq(true)
1311
1809
  expect(calculator.instance?(range, {1=>1, 2=>2})).to eq(true)
1312
1810
  expect(calculator.instance?(range, {})).to eq(false)
@@ -1380,6 +1878,26 @@ describe 'The type calculator' do
1380
1878
  struct = struct_t({'a'=>Integer, 'b'=>String, 'c'=>optional_t(Float)})
1381
1879
  expect(calculator.instance?(struct, {'a'=>1, 'b'=>'a', 'c'=>'x'})).to eq(false)
1382
1880
  end
1881
+
1882
+ it 'should consider nil to be a valid element value' do
1883
+ struct = struct_t({not_undef_t('a') => any_t, 'b'=>String})
1884
+ expect(calculator.instance?(struct, {'a'=>nil , 'b'=>'a'})).to eq(true)
1885
+ end
1886
+
1887
+ it 'should consider nil to be a valid element value but subject to value type' do
1888
+ struct = struct_t({not_undef_t('a') => String, 'b'=>String})
1889
+ expect(calculator.instance?(struct, {'a'=>nil , 'b'=>'a'})).to eq(false)
1890
+ end
1891
+
1892
+ it 'should consider nil to be a valid element value but subject to value type even when key is optional' do
1893
+ struct = struct_t({optional_t('a') => String, 'b'=>String})
1894
+ expect(calculator.instance?(struct, {'a'=>nil , 'b'=>'a'})).to eq(false)
1895
+ end
1896
+
1897
+ it 'should consider a hash where optional key is missing as assignable even if value of optional key is required' do
1898
+ struct = struct_t({optional_t('a') => String, 'b'=>String})
1899
+ expect(calculator.instance?(struct, {'b'=>'a'})).to eq(true)
1900
+ end
1383
1901
  end
1384
1902
 
1385
1903
  context 'and t is Data' do
@@ -1417,16 +1935,16 @@ describe 'The type calculator' do
1417
1935
  end
1418
1936
  end
1419
1937
 
1420
- context "and t is something Callable" do
1938
+ context 'and t is something Callable' do
1421
1939
 
1422
1940
  it 'a Closure should be considered a Callable' do
1423
- factory = Puppet::Pops::Model::Factory
1941
+ factory = Model::Factory
1424
1942
  params = [factory.PARAM('a')]
1425
- the_block = factory.LAMBDA(params,factory.literal(42))
1426
- the_closure = Puppet::Pops::Evaluator::Closure.new(:fake_evaluator, the_block, :fake_scope)
1943
+ the_block = factory.LAMBDA(params,factory.literal(42), nil).model
1944
+ the_closure = Evaluator::Closure::Dynamic.new(:fake_evaluator, the_block, :fake_scope)
1427
1945
  expect(calculator.instance?(all_callables_t, the_closure)).to be_truthy
1428
- expect(calculator.instance?(callable_t(object_t), the_closure)).to be_truthy
1429
- expect(calculator.instance?(callable_t(object_t, object_t), the_closure)).to be_falsey
1946
+ expect(calculator.instance?(callable_t(any_t), the_closure)).to be_truthy
1947
+ expect(calculator.instance?(callable_t(any_t, any_t), the_closure)).to be_falsey
1430
1948
  end
1431
1949
 
1432
1950
  it 'a Function instance should be considered a Callable' do
@@ -1446,456 +1964,288 @@ describe 'The type calculator' do
1446
1964
  expect(calculator.instance?(callable_t(String), f)).to be_truthy
1447
1965
  end
1448
1966
  end
1449
- end
1450
1967
 
1451
- context 'when converting a ruby class' do
1452
- it 'should yield \'PIntegerType\' for Integer, Fixnum, and Bignum' do
1453
- [Integer,Fixnum,Bignum].each do |c|
1454
- expect(calculator.type(c).class).to eq(Puppet::Pops::Types::PIntegerType)
1455
- end
1456
- end
1968
+ context 'and t is a TypeAlias' do
1969
+ let!(:parser) { TypeParser.singleton }
1457
1970
 
1458
- it 'should yield \'PFloatType\' for Float' do
1459
- expect(calculator.type(Float).class).to eq(Puppet::Pops::Types::PFloatType)
1460
- end
1461
-
1462
- it 'should yield \'PBooleanType\' for FalseClass and TrueClass' do
1463
- [FalseClass,TrueClass].each do |c|
1464
- expect(calculator.type(c).class).to eq(Puppet::Pops::Types::PBooleanType)
1971
+ it 'should consider x an instance of the aliased simple type' do
1972
+ t = type_alias_t('Alias', 'Integer').resolve(parser, nil)
1973
+ expect(calculator.instance?(t, 15)).to be_truthy
1465
1974
  end
1466
- end
1467
-
1468
- it 'should yield \'PUndefType\' for NilClass' do
1469
- expect(calculator.type(NilClass).class).to eq(Puppet::Pops::Types::PUndefType)
1470
- end
1471
-
1472
- it 'should yield \'PStringType\' for String' do
1473
- expect(calculator.type(String).class).to eq(Puppet::Pops::Types::PStringType)
1474
- end
1475
-
1476
- it 'should yield \'PRegexpType\' for Regexp' do
1477
- expect(calculator.type(Regexp).class).to eq(Puppet::Pops::Types::PRegexpType)
1478
- end
1479
-
1480
- it 'should yield \'PArrayType[PDataType]\' for Array' do
1481
- t = calculator.type(Array)
1482
- expect(t.class).to eq(Puppet::Pops::Types::PArrayType)
1483
- expect(t.element_type.class).to eq(Puppet::Pops::Types::PDataType)
1484
- end
1485
-
1486
- it 'should yield \'PHashType[PScalarType,PDataType]\' for Hash' do
1487
- t = calculator.type(Hash)
1488
- expect(t.class).to eq(Puppet::Pops::Types::PHashType)
1489
- expect(t.key_type.class).to eq(Puppet::Pops::Types::PScalarType)
1490
- expect(t.element_type.class).to eq(Puppet::Pops::Types::PDataType)
1491
- end
1492
- end
1493
-
1494
- context 'when representing the type as string' do
1495
- it 'should yield \'Type\' for PType' do
1496
- expect(calculator.string(Puppet::Pops::Types::PType.new())).to eq('Type')
1497
- end
1498
-
1499
- it 'should yield \'Object\' for PAnyType' do
1500
- expect(calculator.string(Puppet::Pops::Types::PAnyType.new())).to eq('Any')
1501
- end
1502
-
1503
- it 'should yield \'Scalar\' for PScalarType' do
1504
- expect(calculator.string(Puppet::Pops::Types::PScalarType.new())).to eq('Scalar')
1505
- end
1506
-
1507
- it 'should yield \'Boolean\' for PBooleanType' do
1508
- expect(calculator.string(Puppet::Pops::Types::PBooleanType.new())).to eq('Boolean')
1509
- end
1510
-
1511
- it 'should yield \'Data\' for PDataType' do
1512
- expect(calculator.string(Puppet::Pops::Types::PDataType.new())).to eq('Data')
1513
- end
1514
-
1515
- it 'should yield \'Numeric\' for PNumericType' do
1516
- expect(calculator.string(Puppet::Pops::Types::PNumericType.new())).to eq('Numeric')
1517
- end
1518
-
1519
- it 'should yield \'Integer\' and from/to for PIntegerType' do
1520
- int_T = Puppet::Pops::Types::PIntegerType
1521
- expect(calculator.string(int_T.new())).to eq('Integer')
1522
- int = int_T.new()
1523
- int.from = 1
1524
- int.to = 1
1525
- expect(calculator.string(int)).to eq('Integer[1, 1]')
1526
- int = int_T.new()
1527
- int.from = 1
1528
- int.to = 2
1529
- expect(calculator.string(int)).to eq('Integer[1, 2]')
1530
- int = int_T.new()
1531
- int.from = nil
1532
- int.to = 2
1533
- expect(calculator.string(int)).to eq('Integer[default, 2]')
1534
- int = int_T.new()
1535
- int.from = 2
1536
- int.to = nil
1537
- expect(calculator.string(int)).to eq('Integer[2, default]')
1538
- end
1539
-
1540
- it 'should yield \'Float\' for PFloatType' do
1541
- expect(calculator.string(Puppet::Pops::Types::PFloatType.new())).to eq('Float')
1542
- end
1543
-
1544
- it 'should yield \'Regexp\' for PRegexpType' do
1545
- expect(calculator.string(Puppet::Pops::Types::PRegexpType.new())).to eq('Regexp')
1546
- end
1547
-
1548
- it 'should yield \'Regexp[/pat/]\' for parameterized PRegexpType' do
1549
- t = Puppet::Pops::Types::PRegexpType.new()
1550
- t.pattern = ('a/b')
1551
- expect(calculator.string(Puppet::Pops::Types::PRegexpType.new())).to eq('Regexp')
1552
- end
1553
-
1554
- it 'should yield \'String\' for PStringType' do
1555
- expect(calculator.string(Puppet::Pops::Types::PStringType.new())).to eq('String')
1556
- end
1557
-
1558
- it 'should yield \'String\' for PStringType with multiple values' do
1559
- expect(calculator.string(string_t('a', 'b', 'c'))).to eq('String')
1560
- end
1561
-
1562
- it 'should yield \'String\' and from/to for PStringType' do
1563
- string_T = Puppet::Pops::Types::PStringType
1564
- expect(calculator.string(factory.constrain_size(string_T.new(), 1,1))).to eq('String[1, 1]')
1565
- expect(calculator.string(factory.constrain_size(string_T.new(), 1,2))).to eq('String[1, 2]')
1566
- expect(calculator.string(factory.constrain_size(string_T.new(), :default, 2))).to eq('String[default, 2]')
1567
- expect(calculator.string(factory.constrain_size(string_T.new(), 2, :default))).to eq('String[2, default]')
1568
- end
1569
-
1570
- it 'should yield \'Array[Integer]\' for PArrayType[PIntegerType]' do
1571
- t = Puppet::Pops::Types::PArrayType.new()
1572
- t.element_type = Puppet::Pops::Types::PIntegerType.new()
1573
- expect(calculator.string(t)).to eq('Array[Integer]')
1574
- end
1575
-
1576
- it 'should yield \'Collection\' and from/to for PCollectionType' do
1577
- col = collection_t()
1578
- expect(calculator.string(factory.constrain_size(col.copy, 1,1))).to eq('Collection[1, 1]')
1579
- expect(calculator.string(factory.constrain_size(col.copy, 1,2))).to eq('Collection[1, 2]')
1580
- expect(calculator.string(factory.constrain_size(col.copy, :default, 2))).to eq('Collection[default, 2]')
1581
- expect(calculator.string(factory.constrain_size(col.copy, 2, :default))).to eq('Collection[2, default]')
1582
- end
1583
-
1584
- it 'should yield \'Array\' and from/to for PArrayType' do
1585
- arr = array_t(string_t)
1586
- expect(calculator.string(factory.constrain_size(arr.copy, 1,1))).to eq('Array[String, 1, 1]')
1587
- expect(calculator.string(factory.constrain_size(arr.copy, 1,2))).to eq('Array[String, 1, 2]')
1588
- expect(calculator.string(factory.constrain_size(arr.copy, :default, 2))).to eq('Array[String, default, 2]')
1589
- expect(calculator.string(factory.constrain_size(arr.copy, 2, :default))).to eq('Array[String, 2, default]')
1590
- end
1591
-
1592
- it 'should yield \'Tuple[Integer]\' for PTupleType[PIntegerType]' do
1593
- t = Puppet::Pops::Types::PTupleType.new()
1594
- t.addTypes(Puppet::Pops::Types::PIntegerType.new())
1595
- expect(calculator.string(t)).to eq('Tuple[Integer]')
1596
- end
1597
-
1598
- it 'should yield \'Tuple[T, T,..]\' for PTupleType[T, T, ...]' do
1599
- t = Puppet::Pops::Types::PTupleType.new()
1600
- t.addTypes(Puppet::Pops::Types::PIntegerType.new())
1601
- t.addTypes(Puppet::Pops::Types::PIntegerType.new())
1602
- t.addTypes(Puppet::Pops::Types::PStringType.new())
1603
- expect(calculator.string(t)).to eq('Tuple[Integer, Integer, String]')
1604
- end
1605
-
1606
- it 'should yield \'Tuple\' and from/to for PTupleType' do
1607
- tuple_t = tuple_t(string_t)
1608
- expect(calculator.string(factory.constrain_size(tuple_t.copy, 1,1))).to eq('Tuple[String, 1, 1]')
1609
- expect(calculator.string(factory.constrain_size(tuple_t.copy, 1,2))).to eq('Tuple[String, 1, 2]')
1610
- expect(calculator.string(factory.constrain_size(tuple_t.copy, :default, 2))).to eq('Tuple[String, default, 2]')
1611
- expect(calculator.string(factory.constrain_size(tuple_t.copy, 2, :default))).to eq('Tuple[String, 2, default]')
1612
- end
1613
-
1614
- it 'should yield \'Struct\' and details for PStructType' do
1615
- struct_t = struct_t({'a'=>Integer, 'b'=>String})
1616
- expect(calculator.string(struct_t)).to eq("Struct[{'a'=>Integer, 'b'=>String}]")
1617
- struct_t = struct_t({})
1618
- expect(calculator.string(struct_t)).to eq("Struct")
1619
- end
1620
-
1621
- it 'should yield \'Hash[String, Integer]\' for PHashType[PStringType, PIntegerType]' do
1622
- t = Puppet::Pops::Types::PHashType.new()
1623
- t.key_type = Puppet::Pops::Types::PStringType.new()
1624
- t.element_type = Puppet::Pops::Types::PIntegerType.new()
1625
- expect(calculator.string(t)).to eq('Hash[String, Integer]')
1626
- end
1627
-
1628
- it 'should yield \'Hash\' and from/to for PHashType' do
1629
- hsh = hash_t(string_t, string_t)
1630
- expect(calculator.string(factory.constrain_size(hsh.copy, 1,1))).to eq('Hash[String, String, 1, 1]')
1631
- expect(calculator.string(factory.constrain_size(hsh.copy, 1,2))).to eq('Hash[String, String, 1, 2]')
1632
- expect(calculator.string(factory.constrain_size(hsh.copy, :default, 2))).to eq('Hash[String, String, default, 2]')
1633
- expect(calculator.string(factory.constrain_size(hsh.copy, 2, :default))).to eq('Hash[String, String, 2, default]')
1634
- end
1635
1975
 
1636
- it "should yield 'Class' for a PHostClassType" do
1637
- t = Puppet::Pops::Types::PHostClassType.new()
1638
- expect(calculator.string(t)).to eq('Class')
1639
- end
1976
+ it 'should consider x an instance of the aliased parameterized type' do
1977
+ t = type_alias_t('Alias', 'Integer[0,20]').resolve(parser, nil)
1978
+ expect(calculator.instance?(t, 15)).to be_truthy
1979
+ end
1640
1980
 
1641
- it "should yield 'Class[x]' for a PHostClassType[x]" do
1642
- t = Puppet::Pops::Types::PHostClassType.new()
1643
- t.class_name = 'x'
1644
- expect(calculator.string(t)).to eq('Class[x]')
1645
- end
1981
+ it 'should consider x an instance of the aliased type that uses self recursion' do
1982
+ t = type_alias_t('Tree', 'Hash[String,Variant[String,Tree]]')
1983
+ loader = Object.new
1984
+ loader.expects(:load).with(:type, 'tree').returns t
1646
1985
 
1647
- it "should yield 'Resource' for a PResourceType" do
1648
- t = Puppet::Pops::Types::PResourceType.new()
1649
- expect(calculator.string(t)).to eq('Resource')
1650
- end
1986
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1651
1987
 
1652
- it 'should yield \'File\' for a PResourceType[\'File\']' do
1653
- t = Puppet::Pops::Types::PResourceType.new()
1654
- t.type_name = 'File'
1655
- expect(calculator.string(t)).to eq('File')
1656
- end
1988
+ t.resolve(parser, loader)
1989
+ expect(calculator.instance?(t, {'a'=>{'aa'=>{'aaa'=>'aaaa'}}, 'b'=>'bb'})).to be_truthy
1990
+ end
1657
1991
 
1658
- it "should yield 'File['/tmp/foo']' for a PResourceType['File', '/tmp/foo']" do
1659
- t = Puppet::Pops::Types::PResourceType.new()
1660
- t.type_name = 'File'
1661
- t.title = '/tmp/foo'
1662
- expect(calculator.string(t)).to eq("File['/tmp/foo']")
1663
- end
1992
+ it 'should consider x an instance of the aliased type that uses contains an alias that causes self recursion' do
1993
+ t1 = type_alias_t('Tree', 'Hash[String,Variant[String,OtherTree]]')
1994
+ t2 = type_alias_t('OtherTree', 'Hash[String,Tree]')
1995
+ loader = Object.new
1996
+ loader.expects(:load).with(:type, 'tree').returns t1
1997
+ loader.expects(:load).with(:type, 'othertree').returns t2
1664
1998
 
1665
- it "should yield 'Enum[s,...]' for a PEnumType[s,...]" do
1666
- t = enum_t('a', 'b', 'c')
1667
- expect(calculator.string(t)).to eq("Enum['a', 'b', 'c']")
1668
- end
1999
+ Adapters::LoaderAdapter.expects(:loader_for_model_object).at_least_once.returns loader
1669
2000
 
1670
- it "should yield 'Pattern[/pat/,...]' for a PPatternType['pat',...]" do
1671
- t = pattern_t('a')
1672
- t2 = pattern_t('a', 'b', 'c')
1673
- expect(calculator.string(t)).to eq("Pattern[/a/]")
1674
- expect(calculator.string(t2)).to eq("Pattern[/a/, /b/, /c/]")
2001
+ t1.resolve(parser, loader)
2002
+ expect(calculator.instance?(t1, {'a'=>{'aa'=>{'aaa'=>'aaaa'}}, 'b'=>'bb'})).to be_truthy
2003
+ end
1675
2004
  end
2005
+ end
1676
2006
 
1677
- it "should escape special characters in the string for a PPatternType['pat',...]" do
1678
- t = pattern_t('a/b')
1679
- expect(calculator.string(t)).to eq("Pattern[/a\\/b/]")
2007
+ context 'when converting a ruby class' do
2008
+ it 'should yield \'PIntegerType\' for Fixnum' do
2009
+ expect(calculator.type(Fixnum).class).to eq(PIntegerType)
1680
2010
  end
1681
2011
 
1682
- it "should yield 'Variant[t1,t2,...]' for a PVariantType[t1, t2,...]" do
1683
- t1 = string_t()
1684
- t2 = integer_t()
1685
- t3 = pattern_t('a')
1686
- t = variant_t(t1, t2, t3)
1687
- expect(calculator.string(t)).to eq("Variant[String, Integer, Pattern[/a/]]")
2012
+ it 'should yield \'PIntegerType\' for Bignum' do
2013
+ expect(calculator.type(Bignum).class).to eq(PIntegerType)
1688
2014
  end
1689
2015
 
1690
- it "should yield 'Callable' for generic callable" do
1691
- expect(calculator.string(all_callables_t)).to eql("Callable")
2016
+ it 'should yield \'PIntegerType\' for Integer' do
2017
+ expect(calculator.type(Integer).class).to eq(PIntegerType)
1692
2018
  end
1693
2019
 
1694
- it "should yield 'Callable[0,0]' for callable without params" do
1695
- expect(calculator.string(callable_t)).to eql("Callable[0, 0]")
2020
+ it 'should yield \'PFloatType\' for Float' do
2021
+ expect(calculator.type(Float).class).to eq(PFloatType)
1696
2022
  end
1697
2023
 
1698
- it "should yield 'Callable[t,t]' for callable with typed parameters" do
1699
- expect(calculator.string(callable_t(String, Integer))).to eql("Callable[String, Integer]")
2024
+ it 'should yield \'PBooleanType\' for FalseClass and TrueClass' do
2025
+ [FalseClass,TrueClass].each do |c|
2026
+ expect(calculator.type(c).class).to eq(PBooleanType)
2027
+ end
1700
2028
  end
1701
2029
 
1702
- it "should yield 'Callable[t,min,max]' for callable with size constraint (infinite max)" do
1703
- expect(calculator.string(callable_t(String, 0))).to eql("Callable[String, 0, default]")
2030
+ it 'should yield \'PUndefType\' for NilClass' do
2031
+ expect(calculator.type(NilClass).class).to eq(PUndefType)
1704
2032
  end
1705
2033
 
1706
- it "should yield 'Callable[t,min,max]' for callable with size constraint (capped max)" do
1707
- expect(calculator.string(callable_t(String, 0, 3))).to eql("Callable[String, 0, 3]")
2034
+ it 'should yield \'PStringType\' for String' do
2035
+ expect(calculator.type(String).class).to eq(PStringType)
1708
2036
  end
1709
2037
 
1710
- it "should yield 'Callable[min,max]' callable with size > 0" do
1711
- expect(calculator.string(callable_t(0, 0))).to eql("Callable[0, 0]")
1712
- expect(calculator.string(callable_t(0, 1))).to eql("Callable[0, 1]")
1713
- expect(calculator.string(callable_t(0, :default))).to eql("Callable[0, default]")
2038
+ it 'should yield \'PRegexpType\' for Regexp' do
2039
+ expect(calculator.type(Regexp).class).to eq(PRegexpType)
1714
2040
  end
1715
2041
 
1716
- it "should yield 'Callable[Callable]' for callable with block" do
1717
- expect(calculator.string(callable_t(all_callables_t))).to eql("Callable[0, 0, Callable]")
1718
- expect(calculator.string(callable_t(string_t, all_callables_t))).to eql("Callable[String, Callable]")
1719
- expect(calculator.string(callable_t(string_t, 1,1, all_callables_t))).to eql("Callable[String, 1, 1, Callable]")
2042
+ it 'should yield \'PArrayType[PAnyType]\' for Array' do
2043
+ t = calculator.type(Array)
2044
+ expect(t.class).to eq(PArrayType)
2045
+ expect(t.element_type.class).to eq(PAnyType)
1720
2046
  end
1721
2047
 
1722
- it "should yield Unit for a Unit type" do
1723
- expect(calculator.string(unit_t)).to eql('Unit')
2048
+ it 'should yield \'PHashType[PAnyType,PAnyType]\' for Hash' do
2049
+ t = calculator.type(Hash)
2050
+ expect(t.class).to eq(PHashType)
2051
+ expect(t.key_type.class).to eq(PAnyType)
2052
+ expect(t.value_type.class).to eq(PAnyType)
1724
2053
  end
1725
2054
  end
1726
2055
 
1727
2056
  context 'when processing meta type' do
1728
2057
  it 'should infer PType as the type of all other types' do
1729
- ptype = Puppet::Pops::Types::PType
1730
- expect(calculator.infer(Puppet::Pops::Types::PUndefType.new() ).is_a?(ptype)).to eq(true)
1731
- expect(calculator.infer(Puppet::Pops::Types::PDataType.new() ).is_a?(ptype)).to eq(true)
1732
- expect(calculator.infer(Puppet::Pops::Types::PScalarType.new() ).is_a?(ptype)).to eq(true)
1733
- expect(calculator.infer(Puppet::Pops::Types::PStringType.new() ).is_a?(ptype)).to eq(true)
1734
- expect(calculator.infer(Puppet::Pops::Types::PNumericType.new() ).is_a?(ptype)).to eq(true)
1735
- expect(calculator.infer(Puppet::Pops::Types::PIntegerType.new() ).is_a?(ptype)).to eq(true)
1736
- expect(calculator.infer(Puppet::Pops::Types::PFloatType.new() ).is_a?(ptype)).to eq(true)
1737
- expect(calculator.infer(Puppet::Pops::Types::PRegexpType.new() ).is_a?(ptype)).to eq(true)
1738
- expect(calculator.infer(Puppet::Pops::Types::PBooleanType.new() ).is_a?(ptype)).to eq(true)
1739
- expect(calculator.infer(Puppet::Pops::Types::PCollectionType.new()).is_a?(ptype)).to eq(true)
1740
- expect(calculator.infer(Puppet::Pops::Types::PArrayType.new() ).is_a?(ptype)).to eq(true)
1741
- expect(calculator.infer(Puppet::Pops::Types::PHashType.new() ).is_a?(ptype)).to eq(true)
1742
- expect(calculator.infer(Puppet::Pops::Types::PRuntimeType.new() ).is_a?(ptype)).to eq(true)
1743
- expect(calculator.infer(Puppet::Pops::Types::PHostClassType.new() ).is_a?(ptype)).to eq(true)
1744
- expect(calculator.infer(Puppet::Pops::Types::PResourceType.new() ).is_a?(ptype)).to eq(true)
1745
- expect(calculator.infer(Puppet::Pops::Types::PEnumType.new() ).is_a?(ptype)).to eq(true)
1746
- expect(calculator.infer(Puppet::Pops::Types::PPatternType.new() ).is_a?(ptype)).to eq(true)
1747
- expect(calculator.infer(Puppet::Pops::Types::PVariantType.new() ).is_a?(ptype)).to eq(true)
1748
- expect(calculator.infer(Puppet::Pops::Types::PTupleType.new() ).is_a?(ptype)).to eq(true)
1749
- expect(calculator.infer(Puppet::Pops::Types::POptionalType.new() ).is_a?(ptype)).to eq(true)
1750
- expect(calculator.infer(Puppet::Pops::Types::PCallableType.new() ).is_a?(ptype)).to eq(true)
2058
+ ptype = PType
2059
+ expect(calculator.infer(PUndefType::DEFAULT ).is_a?(ptype)).to eq(true)
2060
+ expect(calculator.infer(PScalarType::DEFAULT ).is_a?(ptype)).to eq(true)
2061
+ expect(calculator.infer(PScalarDataType::DEFAULT).is_a?(ptype)).to eq(true)
2062
+ expect(calculator.infer(PStringType::DEFAULT ).is_a?(ptype)).to eq(true)
2063
+ expect(calculator.infer(PNumericType::DEFAULT ).is_a?(ptype)).to eq(true)
2064
+ expect(calculator.infer(PIntegerType::DEFAULT ).is_a?(ptype)).to eq(true)
2065
+ expect(calculator.infer(PFloatType::DEFAULT ).is_a?(ptype)).to eq(true)
2066
+ expect(calculator.infer(PRegexpType::DEFAULT ).is_a?(ptype)).to eq(true)
2067
+ expect(calculator.infer(PBooleanType::DEFAULT ).is_a?(ptype)).to eq(true)
2068
+ expect(calculator.infer(PCollectionType::DEFAULT).is_a?(ptype)).to eq(true)
2069
+ expect(calculator.infer(PArrayType::DEFAULT ).is_a?(ptype)).to eq(true)
2070
+ expect(calculator.infer(PHashType::DEFAULT ).is_a?(ptype)).to eq(true)
2071
+ expect(calculator.infer(PIterableType::DEFAULT ).is_a?(ptype)).to eq(true)
2072
+ expect(calculator.infer(PRuntimeType::DEFAULT ).is_a?(ptype)).to eq(true)
2073
+ expect(calculator.infer(PHostClassType::DEFAULT ).is_a?(ptype)).to eq(true)
2074
+ expect(calculator.infer(PResourceType::DEFAULT ).is_a?(ptype)).to eq(true)
2075
+ expect(calculator.infer(PEnumType::DEFAULT ).is_a?(ptype)).to eq(true)
2076
+ expect(calculator.infer(PPatternType::DEFAULT ).is_a?(ptype)).to eq(true)
2077
+ expect(calculator.infer(PVariantType::DEFAULT ).is_a?(ptype)).to eq(true)
2078
+ expect(calculator.infer(PTupleType::DEFAULT ).is_a?(ptype)).to eq(true)
2079
+ expect(calculator.infer(POptionalType::DEFAULT ).is_a?(ptype)).to eq(true)
2080
+ expect(calculator.infer(PCallableType::DEFAULT ).is_a?(ptype)).to eq(true)
1751
2081
  end
1752
2082
 
1753
2083
  it 'should infer PType as the type of all other types' do
1754
- ptype = Puppet::Pops::Types::PType
1755
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PUndefType.new() ))).to eq("Type[Undef]")
1756
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PDataType.new() ))).to eq("Type[Data]")
1757
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PScalarType.new() ))).to eq("Type[Scalar]")
1758
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PStringType.new() ))).to eq("Type[String]")
1759
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PNumericType.new() ))).to eq("Type[Numeric]")
1760
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PIntegerType.new() ))).to eq("Type[Integer]")
1761
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PFloatType.new() ))).to eq("Type[Float]")
1762
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PRegexpType.new() ))).to eq("Type[Regexp]")
1763
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PBooleanType.new() ))).to eq("Type[Boolean]")
1764
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PCollectionType.new()))).to eq("Type[Collection]")
1765
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PArrayType.new() ))).to eq("Type[Array[?]]")
1766
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PHashType.new() ))).to eq("Type[Hash[?, ?]]")
1767
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PRuntimeType.new() ))).to eq("Type[Runtime[?, ?]]")
1768
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PHostClassType.new() ))).to eq("Type[Class]")
1769
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PResourceType.new() ))).to eq("Type[Resource]")
1770
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PEnumType.new() ))).to eq("Type[Enum]")
1771
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PVariantType.new() ))).to eq("Type[Variant]")
1772
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PPatternType.new() ))).to eq("Type[Pattern]")
1773
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PTupleType.new() ))).to eq("Type[Tuple]")
1774
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::POptionalType.new() ))).to eq("Type[Optional]")
1775
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PCallableType.new() ))).to eq("Type[Callable]")
1776
-
1777
- expect(calculator.infer(Puppet::Pops::Types::PResourceType.new(:type_name => 'foo::fee::fum')).to_s).to eq("Type[Foo::Fee::Fum]")
1778
- expect(calculator.string(calculator.infer(Puppet::Pops::Types::PResourceType.new(:type_name => 'foo::fee::fum')))).to eq("Type[Foo::Fee::Fum]")
1779
- expect(calculator.infer(Puppet::Pops::Types::PResourceType.new(:type_name => 'Foo::Fee::Fum')).to_s).to eq("Type[Foo::Fee::Fum]")
2084
+ expect(calculator.infer(PUndefType::DEFAULT ).to_s).to eq('Type[Undef]')
2085
+ expect(calculator.infer(PScalarType::DEFAULT ).to_s).to eq('Type[Scalar]')
2086
+ expect(calculator.infer(PScalarDataType::DEFAULT).to_s).to eq('Type[ScalarData]')
2087
+ expect(calculator.infer(PStringType::DEFAULT ).to_s).to eq('Type[String]')
2088
+ expect(calculator.infer(PNumericType::DEFAULT ).to_s).to eq('Type[Numeric]')
2089
+ expect(calculator.infer(PIntegerType::DEFAULT ).to_s).to eq('Type[Integer]')
2090
+ expect(calculator.infer(PFloatType::DEFAULT ).to_s).to eq('Type[Float]')
2091
+ expect(calculator.infer(PRegexpType::DEFAULT ).to_s).to eq('Type[Regexp]')
2092
+ expect(calculator.infer(PBooleanType::DEFAULT ).to_s).to eq('Type[Boolean]')
2093
+ expect(calculator.infer(PCollectionType::DEFAULT).to_s).to eq('Type[Collection]')
2094
+ expect(calculator.infer(PArrayType::DEFAULT ).to_s).to eq('Type[Array]')
2095
+ expect(calculator.infer(PHashType::DEFAULT ).to_s).to eq('Type[Hash]')
2096
+ expect(calculator.infer(PIterableType::DEFAULT ).to_s).to eq('Type[Iterable]')
2097
+ expect(calculator.infer(PRuntimeType::DEFAULT ).to_s).to eq('Type[Runtime[?, ?]]')
2098
+ expect(calculator.infer(PHostClassType::DEFAULT ).to_s).to eq('Type[Class]')
2099
+ expect(calculator.infer(PResourceType::DEFAULT ).to_s).to eq('Type[Resource]')
2100
+ expect(calculator.infer(PEnumType::DEFAULT ).to_s).to eq('Type[Enum]')
2101
+ expect(calculator.infer(PVariantType::DEFAULT ).to_s).to eq('Type[Variant]')
2102
+ expect(calculator.infer(PPatternType::DEFAULT ).to_s).to eq('Type[Pattern]')
2103
+ expect(calculator.infer(PTupleType::DEFAULT ).to_s).to eq('Type[Tuple]')
2104
+ expect(calculator.infer(POptionalType::DEFAULT ).to_s).to eq('Type[Optional]')
2105
+ expect(calculator.infer(PCallableType::DEFAULT ).to_s).to eq('Type[Callable]')
2106
+
2107
+ expect(calculator.infer(PResourceType.new('foo::fee::fum')).to_s).to eq('Type[Foo::Fee::Fum]')
2108
+ expect(calculator.infer(PResourceType.new('foo::fee::fum')).to_s).to eq('Type[Foo::Fee::Fum]')
2109
+ expect(calculator.infer(PResourceType.new('Foo::Fee::Fum')).to_s).to eq('Type[Foo::Fee::Fum]')
1780
2110
  end
1781
2111
 
1782
2112
  it "computes the common type of PType's type parameter" do
1783
- int_t = Puppet::Pops::Types::PIntegerType.new()
1784
- string_t = Puppet::Pops::Types::PStringType.new()
1785
- expect(calculator.string(calculator.infer([int_t]))).to eq("Array[Type[Integer], 1, 1]")
1786
- expect(calculator.string(calculator.infer([int_t, string_t]))).to eq("Array[Type[Scalar], 2, 2]")
2113
+ int_t = PIntegerType::DEFAULT
2114
+ string_t = PStringType::DEFAULT
2115
+ expect(calculator.infer([int_t]).to_s).to eq('Array[Type[Integer], 1, 1]')
2116
+ expect(calculator.infer([int_t, string_t]).to_s).to eq('Array[Type[ScalarData], 2, 2]')
1787
2117
  end
1788
2118
 
1789
2119
  it 'should infer PType as the type of ruby classes' do
1790
2120
  class Foo
1791
2121
  end
1792
2122
  [Object, Numeric, Integer, Fixnum, Bignum, Float, String, Regexp, Array, Hash, Foo].each do |c|
1793
- expect(calculator.infer(c).is_a?(Puppet::Pops::Types::PType)).to eq(true)
2123
+ expect(calculator.infer(c).is_a?(PType)).to eq(true)
1794
2124
  end
1795
2125
  end
1796
2126
 
1797
2127
  it 'should infer PType as the type of PType (meta regression short-circuit)' do
1798
- expect(calculator.infer(Puppet::Pops::Types::PType.new()).is_a?(Puppet::Pops::Types::PType)).to eq(true)
2128
+ expect(calculator.infer(PType::DEFAULT).is_a?(PType)).to eq(true)
1799
2129
  end
1800
2130
 
1801
2131
  it 'computes instance? to be true if parameterized and type match' do
1802
- int_t = Puppet::Pops::Types::PIntegerType.new()
1803
- type_t = Puppet::Pops::Types::TypeFactory.type_type(int_t)
1804
- type_type_t = Puppet::Pops::Types::TypeFactory.type_type(type_t)
2132
+ int_t = PIntegerType::DEFAULT
2133
+ type_t = TypeFactory.type_type(int_t)
2134
+ type_type_t = TypeFactory.type_type(type_t)
1805
2135
  expect(calculator.instance?(type_type_t, type_t)).to eq(true)
1806
2136
  end
1807
2137
 
1808
2138
  it 'computes instance? to be false if parameterized and type do not match' do
1809
- int_t = Puppet::Pops::Types::PIntegerType.new()
1810
- string_t = Puppet::Pops::Types::PStringType.new()
1811
- type_t = Puppet::Pops::Types::TypeFactory.type_type(int_t)
1812
- type_t2 = Puppet::Pops::Types::TypeFactory.type_type(string_t)
1813
- type_type_t = Puppet::Pops::Types::TypeFactory.type_type(type_t)
2139
+ int_t = PIntegerType::DEFAULT
2140
+ string_t = PStringType::DEFAULT
2141
+ type_t = TypeFactory.type_type(int_t)
2142
+ type_t2 = TypeFactory.type_type(string_t)
2143
+ type_type_t = TypeFactory.type_type(type_t)
1814
2144
  # i.e. Type[Integer] =~ Type[Type[Integer]] # false
1815
2145
  expect(calculator.instance?(type_type_t, type_t2)).to eq(false)
1816
2146
  end
1817
2147
 
1818
2148
  it 'computes instance? to be true if unparameterized and matched against a type[?]' do
1819
- int_t = Puppet::Pops::Types::PIntegerType.new()
1820
- type_t = Puppet::Pops::Types::TypeFactory.type_type(int_t)
1821
- expect(calculator.instance?(Puppet::Pops::Types::PType.new, type_t)).to eq(true)
2149
+ int_t = PIntegerType::DEFAULT
2150
+ type_t = TypeFactory.type_type(int_t)
2151
+ expect(calculator.instance?(PType::DEFAULT, type_t)).to eq(true)
1822
2152
  end
1823
2153
  end
1824
2154
 
1825
- context "when asking for an enumerable " do
1826
- it "should produce an enumerable for an Integer range that is not infinite" do
1827
- t = Puppet::Pops::Types::PIntegerType.new()
1828
- t.from = 1
1829
- t.to = 10
1830
- expect(calculator.enumerable(t).respond_to?(:each)).to eq(true)
2155
+ context 'when asking for an iterable ' do
2156
+ it 'should produce an iterable for an Integer range that is finite' do
2157
+ t = PIntegerType.new(1, 10)
2158
+ expect(calculator.iterable(t).respond_to?(:each)).to eq(true)
1831
2159
  end
1832
2160
 
1833
- it "should not produce an enumerable for an Integer range that has an infinite side" do
1834
- t = Puppet::Pops::Types::PIntegerType.new()
1835
- t.from = nil
1836
- t.to = 10
1837
- expect(calculator.enumerable(t)).to eq(nil)
2161
+ it 'should not produce an iterable for an Integer range that has an infinite side' do
2162
+ t = PIntegerType.new(nil, 10)
2163
+ expect(calculator.iterable(t)).to eq(nil)
1838
2164
 
1839
- t = Puppet::Pops::Types::PIntegerType.new()
1840
- t.from = 1
1841
- t.to = nil
1842
- expect(calculator.enumerable(t)).to eq(nil)
2165
+ t = PIntegerType.new(1, nil)
2166
+ expect(calculator.iterable(t)).to eq(nil)
1843
2167
  end
1844
2168
 
1845
- it "all but Integer range are not enumerable" do
2169
+ it 'all but Integer range are not iterable' do
1846
2170
  [Object, Numeric, Float, String, Regexp, Array, Hash].each do |t|
1847
- expect(calculator.enumerable(calculator.type(t))).to eq(nil)
2171
+ expect(calculator.iterable(calculator.type(t))).to eq(nil)
1848
2172
  end
1849
2173
  end
1850
2174
  end
1851
2175
 
1852
- context "when dealing with different types of inference" do
1853
- it "an instance specific inference is produced by infer" do
2176
+ context 'when dealing with different types of inference' do
2177
+ it 'an instance specific inference is produced by infer' do
1854
2178
  expect(calculator.infer(['a','b']).element_type.values).to eq(['a', 'b'])
1855
2179
  end
1856
2180
 
1857
- it "a generic inference is produced using infer_generic" do
1858
- expect(calculator.infer_generic(['a','b']).element_type.values).to eq([])
2181
+ it 'a generic inference is produced using infer_generic' do
2182
+ expect(calculator.infer_generic(['a','b']).element_type).to eql(string_t(range_t(1,1)))
1859
2183
  end
1860
2184
 
1861
- it "a generic result is created by generalize! given an instance specific result for an Array" do
2185
+ it 'a generic result is created by generalize given an instance specific result for an Array' do
1862
2186
  generic = calculator.infer(['a','b'])
1863
- expect(generic.element_type.values).to eq(['a', 'b'])
1864
- calculator.generalize!(generic)
1865
- expect(generic.element_type.values).to eq([])
2187
+ expect(generic.element_type.values).to eq(['a','b'])
2188
+ generic = generic.generalize
2189
+ expect(generic.element_type).to eql(string_t(range_t(1,1)))
1866
2190
  end
1867
2191
 
1868
- it "a generic result is created by generalize! given an instance specific result for a Hash" do
1869
- generic = calculator.infer({'a' =>1,'b' => 2})
1870
- expect(generic.key_type.values.sort).to eq(['a', 'b'])
1871
- expect(generic.element_type.from).to eq(1)
1872
- expect(generic.element_type.to).to eq(2)
1873
- calculator.generalize!(generic)
1874
- expect(generic.key_type.values).to eq([])
1875
- expect(generic.element_type.from).to eq(nil)
1876
- expect(generic.element_type.to).to eq(nil)
2192
+ it 'a generic result is created by generalize given an instance specific result for a Hash' do
2193
+ generic = calculator.infer({'a' =>1,'bcd' => 2})
2194
+ expect(generic.key_type.values.sort).to eq(['a', 'bcd'])
2195
+ expect(generic.value_type.from).to eq(1)
2196
+ expect(generic.value_type.to).to eq(2)
2197
+ generic = generic.generalize
2198
+ expect(generic.key_type.size_type).to eq(range_t(1,3))
2199
+ expect(generic.value_type.from).to eq(nil)
2200
+ expect(generic.value_type.to).to eq(nil)
2201
+ end
2202
+
2203
+ it 'ensures that Struct key types are not generalized' do
2204
+ generic = struct_t({'a' => any_t}).generalize
2205
+ expect(generic.to_s).to eq("Struct[{'a' => Any}]")
2206
+ generic = struct_t({not_undef_t('a') => any_t}).generalize
2207
+ expect(generic.to_s).to eq("Struct[{NotUndef['a'] => Any}]")
2208
+ generic = struct_t({optional_t('a') => string_t}).generalize
2209
+ expect(generic.to_s).to eq("Struct[{Optional['a'] => String}]")
2210
+ end
2211
+
2212
+ it 'ensures that Struct value types are generalized' do
2213
+ generic = struct_t({'a' => range_t(1, 3)}).generalize
2214
+ expect(generic.to_s).to eq("Struct[{'a' => Integer}]")
1877
2215
  end
1878
2216
 
1879
2217
  it "does not reduce by combining types when using infer_set" do
1880
2218
  element_type = calculator.infer(['a','b',1,2]).element_type
1881
- expect(element_type.class).to eq(Puppet::Pops::Types::PScalarType)
2219
+ expect(element_type.class).to eq(PScalarDataType)
1882
2220
  inferred_type = calculator.infer_set(['a','b',1,2])
1883
- expect(inferred_type.class).to eq(Puppet::Pops::Types::PTupleType)
2221
+ expect(inferred_type.class).to eq(PTupleType)
1884
2222
  element_types = inferred_type.types
1885
- expect(element_types[0].class).to eq(Puppet::Pops::Types::PStringType)
1886
- expect(element_types[1].class).to eq(Puppet::Pops::Types::PStringType)
1887
- expect(element_types[2].class).to eq(Puppet::Pops::Types::PIntegerType)
1888
- expect(element_types[3].class).to eq(Puppet::Pops::Types::PIntegerType)
2223
+ expect(element_types[0].class).to eq(PStringType)
2224
+ expect(element_types[1].class).to eq(PStringType)
2225
+ expect(element_types[2].class).to eq(PIntegerType)
2226
+ expect(element_types[3].class).to eq(PIntegerType)
1889
2227
  end
1890
2228
 
1891
- it "does not reduce by combining types when using infer_set and values are undef" do
2229
+ it 'does not reduce by combining types when using infer_set and values are undef' do
1892
2230
  element_type = calculator.infer(['a',nil]).element_type
1893
- expect(element_type.class).to eq(Puppet::Pops::Types::PStringType)
2231
+ expect(element_type.class).to eq(PStringType)
1894
2232
  inferred_type = calculator.infer_set(['a',nil])
1895
- expect(inferred_type.class).to eq(Puppet::Pops::Types::PTupleType)
2233
+ expect(inferred_type.class).to eq(PTupleType)
1896
2234
  element_types = inferred_type.types
1897
- expect(element_types[0].class).to eq(Puppet::Pops::Types::PStringType)
1898
- expect(element_types[1].class).to eq(Puppet::Pops::Types::PUndefType)
2235
+ expect(element_types[0].class).to eq(PStringType)
2236
+ expect(element_types[1].class).to eq(PUndefType)
2237
+ end
2238
+
2239
+ it 'infers on an empty Array produces Array[Unit,0,0]' do
2240
+ inferred_type = calculator.infer([])
2241
+ expect(inferred_type.element_type.class).to eq(PUnitType)
2242
+ expect(inferred_type.size_range).to eq([0, 0])
2243
+ end
2244
+
2245
+ it 'infer_set on an empty Array produces Array[Unit,0,0]' do
2246
+ inferred_type = calculator.infer_set([])
2247
+ expect(inferred_type.element_type.class).to eq(PUnitType)
2248
+ expect(inferred_type.size_range).to eq([0, 0])
1899
2249
  end
1900
2250
  end
1901
2251
 
@@ -1921,8 +2271,7 @@ describe 'The type calculator' do
1921
2271
 
1922
2272
  it 'with args array' do
1923
2273
  required = callable_t(string_t)
1924
- given = array_t(string_t)
1925
- factory.constrain_size(given, 1, 1)
2274
+ given = array_t(string_t, range_t(1, 1))
1926
2275
  expect(calculator.callable?(required, given)).to eq(true)
1927
2276
  end
1928
2277
  end
@@ -1930,50 +2279,50 @@ describe 'The type calculator' do
1930
2279
  context 'and given is more generic' do
1931
2280
  it 'with callable' do
1932
2281
  required = callable_t(string_t)
1933
- given = callable_t(object_t)
2282
+ given = callable_t(any_t)
1934
2283
  expect(calculator.callable?(required, given)).to eq(true)
1935
2284
  end
1936
2285
 
1937
2286
  it 'with args tuple' do
1938
2287
  required = callable_t(string_t)
1939
- given = tuple_t(object_t)
2288
+ given = tuple_t(any_t)
1940
2289
  expect(calculator.callable?(required, given)).to eq(false)
1941
2290
  end
1942
2291
 
1943
2292
  it 'with args tuple having a block' do
1944
2293
  required = callable_t(string_t, callable_t(string_t))
1945
- given = tuple_t(string_t, callable_t(object_t))
2294
+ given = tuple_t(string_t, callable_t(any_t))
1946
2295
  expect(calculator.callable?(required, given)).to eq(true)
1947
2296
  end
1948
2297
 
1949
2298
  it 'with args tuple having a block with captures rest' do
1950
2299
  required = callable_t(string_t, callable_t(string_t))
1951
- given = tuple_t(string_t, callable_t(object_t, 0, :default))
2300
+ given = tuple_t(string_t, callable_t(any_t, 0, :default))
1952
2301
  expect(calculator.callable?(required, given)).to eq(true)
1953
2302
  end
1954
2303
  end
1955
2304
 
1956
2305
  context 'and given is more specific' do
1957
2306
  it 'with callable' do
1958
- required = callable_t(object_t)
2307
+ required = callable_t(any_t)
1959
2308
  given = callable_t(string_t)
1960
2309
  expect(calculator.callable?(required, given)).to eq(false)
1961
2310
  end
1962
2311
 
1963
2312
  it 'with args tuple' do
1964
- required = callable_t(object_t)
2313
+ required = callable_t(any_t)
1965
2314
  given = tuple_t(string_t)
1966
2315
  expect(calculator.callable?(required, given)).to eq(true)
1967
2316
  end
1968
2317
 
1969
2318
  it 'with args tuple having a block' do
1970
- required = callable_t(string_t, callable_t(object_t))
2319
+ required = callable_t(string_t, callable_t(any_t))
1971
2320
  given = tuple_t(string_t, callable_t(string_t))
1972
2321
  expect(calculator.callable?(required, given)).to eq(false)
1973
2322
  end
1974
2323
 
1975
2324
  it 'with args tuple having a block with captures rest' do
1976
- required = callable_t(string_t, callable_t(object_t))
2325
+ required = callable_t(string_t, callable_t(any_t))
1977
2326
  given = tuple_t(string_t, callable_t(string_t, 0, :default))
1978
2327
  expect(calculator.callable?(required, given)).to eq(false)
1979
2328
  end
@@ -1981,19 +2330,18 @@ describe 'The type calculator' do
1981
2330
  end
1982
2331
 
1983
2332
  matcher :be_assignable_to do |type|
1984
- calc = Puppet::Pops::Types::TypeCalculator.new
1985
-
1986
2333
  match do |actual|
1987
- calc.assignable?(type, actual)
2334
+ type.is_a?(PAnyType) && type.assignable?(actual)
1988
2335
  end
1989
2336
 
1990
2337
  failure_message do |actual|
1991
- "#{calc.string(actual)} should be assignable to #{calc.string(type)}"
2338
+ "#{TypeFormatter.string(actual)} should be assignable to #{TypeFormatter.string(type)}"
1992
2339
  end
1993
2340
 
1994
2341
  failure_message_when_negated do |actual|
1995
- "#{calc.string(actual)} is assignable to #{calc.string(type)} when it should not"
2342
+ "#{TypeFormatter.string(actual)} is assignable to #{TypeFormatter.string(type)} when it should not"
1996
2343
  end
1997
2344
  end
1998
-
2345
+ end
2346
+ end
1999
2347
  end