puppet 4.8.2-x86-mingw32 → 4.9.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (348) hide show
  1. checksums.yaml +15 -0
  2. data/CONTRIBUTING.md +25 -1
  3. data/Gemfile +6 -0
  4. data/Rakefile +1 -0
  5. data/ext/project_data.yaml +5 -1
  6. data/ext/windows/service/daemon.rb +2 -1
  7. data/install.rb +43 -6
  8. data/lib/hiera/puppet_function.rb +15 -17
  9. data/lib/hiera/scope.rb +12 -14
  10. data/lib/puppet.rb +52 -0
  11. data/lib/puppet/application/face_base.rb +4 -0
  12. data/lib/puppet/application/lookup.rb +4 -2
  13. data/lib/puppet/application/resource.rb +1 -1
  14. data/lib/puppet/data_providers.rb +6 -3
  15. data/lib/puppet/data_providers/data_adapter.rb +6 -0
  16. data/lib/puppet/data_providers/data_function_support.rb +7 -0
  17. data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
  18. data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
  19. data/lib/puppet/data_providers/hiera_config.rb +31 -10
  20. data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
  21. data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
  22. data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
  23. data/lib/puppet/data_providers/hiera_support.rb +6 -0
  24. data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
  25. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
  26. data/lib/puppet/defaults.rb +25 -4
  27. data/lib/puppet/face/ca.rb +2 -0
  28. data/lib/puppet/face/certificate_request.rb +2 -0
  29. data/lib/puppet/face/certificate_revocation_list.rb +2 -0
  30. data/lib/puppet/face/file.rb +3 -0
  31. data/lib/puppet/face/help.rb +19 -17
  32. data/lib/puppet/face/help/face.erb +3 -0
  33. data/lib/puppet/face/key.rb +1 -0
  34. data/lib/puppet/face/man.rb +4 -2
  35. data/lib/puppet/face/module/generate.rb +1 -1
  36. data/lib/puppet/face/status.rb +2 -0
  37. data/lib/puppet/feature/base.rb +9 -2
  38. data/lib/puppet/feature/hocon.rb +3 -0
  39. data/lib/puppet/file_system.rb +15 -3
  40. data/lib/puppet/file_system/windows.rb +8 -0
  41. data/lib/puppet/forge.rb +6 -6
  42. data/lib/puppet/forge/repository.rb +1 -2
  43. data/lib/puppet/functions/binary_file.rb +4 -10
  44. data/lib/puppet/functions/hiera_array.rb +1 -1
  45. data/lib/puppet/functions/hiera_include.rb +1 -1
  46. data/lib/puppet/functions/hocon_data.rb +24 -0
  47. data/lib/puppet/functions/json_data.rb +18 -0
  48. data/lib/puppet/functions/yaml_data.rb +21 -0
  49. data/lib/puppet/generate/type.rb +1 -1
  50. data/lib/puppet/graph/simple_graph.rb +4 -2
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
  52. data/lib/puppet/indirector/request.rb +5 -1
  53. data/lib/puppet/interface.rb +14 -2
  54. data/lib/puppet/interface/face_collection.rb +1 -1
  55. data/lib/puppet/module.rb +14 -2
  56. data/lib/puppet/module_tool.rb +4 -4
  57. data/lib/puppet/module_tool/applications/builder.rb +3 -2
  58. data/lib/puppet/module_tool/applications/installer.rb +14 -14
  59. data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
  60. data/lib/puppet/module_tool/installed_modules.rb +7 -7
  61. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/network/http/connection.rb +2 -0
  64. data/lib/puppet/network/http/webrick.rb +2 -1
  65. data/lib/puppet/parser/functions/hiera.rb +14 -0
  66. data/lib/puppet/parser/functions/hiera_array.rb +14 -0
  67. data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
  68. data/lib/puppet/parser/functions/hiera_include.rb +14 -0
  69. data/lib/puppet/parser/scope.rb +14 -20
  70. data/lib/puppet/plugins/data_providers.rb +2 -0
  71. data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
  72. data/lib/puppet/plugins/data_providers/registry.rb +2 -36
  73. data/lib/puppet/pops.rb +6 -9
  74. data/lib/puppet/pops/adaptable.rb +0 -3
  75. data/lib/puppet/pops/binder/producers.rb +3 -3
  76. data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
  77. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  78. data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
  79. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  80. data/lib/puppet/pops/issues.rb +4 -0
  81. data/lib/puppet/pops/label_provider.rb +14 -0
  82. data/lib/puppet/pops/loader/loader_paths.rb +3 -1
  83. data/lib/puppet/pops/loader/module_loaders.rb +21 -7
  84. data/lib/puppet/pops/loader/typed_name.rb +0 -2
  85. data/lib/puppet/pops/loaders.rb +31 -12
  86. data/lib/puppet/pops/lookup.rb +4 -3
  87. data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
  88. data/lib/puppet/pops/lookup/context.rb +121 -71
  89. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  90. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
  91. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
  92. data/lib/puppet/pops/lookup/data_provider.rb +102 -0
  93. data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
  94. data/lib/puppet/pops/lookup/explainer.rb +122 -82
  95. data/lib/puppet/pops/lookup/function_provider.rb +82 -0
  96. data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
  97. data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
  98. data/lib/puppet/pops/lookup/interpolation.rb +56 -35
  99. data/lib/puppet/pops/lookup/invocation.rb +179 -101
  100. data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
  101. data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
  102. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  103. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
  104. data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
  105. data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
  106. data/lib/puppet/pops/merge_strategy.rb +120 -39
  107. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  108. data/lib/puppet/pops/parser/eparser.rb +816 -808
  109. data/lib/puppet/pops/parser/locator.rb +3 -3
  110. data/lib/puppet/pops/parser/slurp_support.rb +4 -3
  111. data/lib/puppet/pops/pcore.rb +21 -12
  112. data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
  113. data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
  114. data/lib/puppet/pops/serialization/deserializer.rb +17 -4
  115. data/lib/puppet/pops/serialization/extension.rb +37 -8
  116. data/lib/puppet/pops/serialization/object.rb +14 -6
  117. data/lib/puppet/pops/serialization/rgen.rb +2 -1
  118. data/lib/puppet/pops/serialization/serializer.rb +30 -7
  119. data/lib/puppet/pops/types/implementation_registry.rb +1 -1
  120. data/lib/puppet/pops/types/p_object_type.rb +55 -12
  121. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
  122. data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
  123. data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
  124. data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
  125. data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
  126. data/lib/puppet/pops/types/recursion_guard.rb +64 -20
  127. data/lib/puppet/pops/types/ruby_generator.rb +10 -0
  128. data/lib/puppet/pops/types/type_calculator.rb +23 -13
  129. data/lib/puppet/pops/types/type_factory.rb +20 -9
  130. data/lib/puppet/pops/types/type_formatter.rb +37 -17
  131. data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
  132. data/lib/puppet/pops/types/type_parser.rb +6 -0
  133. data/lib/puppet/pops/types/types.rb +225 -132
  134. data/lib/puppet/pops/validation.rb +1 -1
  135. data/lib/puppet/pops/validation/checker4_0.rb +12 -2
  136. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  137. data/lib/puppet/pops/visitor.rb +4 -3
  138. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
  139. data/lib/puppet/provider/nameservice.rb +15 -0
  140. data/lib/puppet/provider/package/appdmg.rb +1 -1
  141. data/lib/puppet/provider/package/dnf.rb +1 -1
  142. data/lib/puppet/provider/package/pkg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  144. data/lib/puppet/provider/package/pkgng.rb +1 -1
  145. data/lib/puppet/provider/package/rpm.rb +2 -2
  146. data/lib/puppet/provider/service/smf.rb +3 -3
  147. data/lib/puppet/provider/service/systemd.rb +5 -1
  148. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  149. data/lib/puppet/provider/user/user_role_add.rb +15 -0
  150. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  151. data/lib/puppet/provider/zone/solaris.rb +4 -1
  152. data/lib/puppet/reference/indirection.rb +1 -1
  153. data/lib/puppet/resource.rb +2 -3
  154. data/lib/puppet/resource/catalog.rb +12 -4
  155. data/lib/puppet/resource/type.rb +3 -3
  156. data/lib/puppet/settings.rb +1 -1
  157. data/lib/puppet/settings/config_file.rb +2 -1
  158. data/lib/puppet/settings/directory_setting.rb +6 -0
  159. data/lib/puppet/settings/environment_conf.rb +6 -2
  160. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  161. data/lib/puppet/settings/file_setting.rb +10 -0
  162. data/lib/puppet/ssl/certificate_authority.rb +13 -2
  163. data/lib/puppet/ssl/host.rb +23 -1
  164. data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
  165. data/lib/puppet/type/user.rb +16 -3
  166. data/lib/puppet/util.rb +1 -0
  167. data/lib/puppet/util/execution.rb +3 -3
  168. data/lib/puppet/util/filetype.rb +11 -5
  169. data/lib/puppet/util/logging.rb +2 -1
  170. data/lib/puppet/util/network_device/config.rb +1 -1
  171. data/lib/puppet/util/plist.rb +6 -0
  172. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  173. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  174. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  175. data/lib/puppet/util/windows/adsi.rb +15 -12
  176. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  177. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  178. data/lib/puppet/vendor/require_vendored.rb +0 -1
  179. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
  180. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  181. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  182. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  183. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  184. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  185. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  186. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  187. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
  188. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
  189. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
  190. data/lib/puppet/version.rb +1 -1
  191. data/lib/semver.rb +19 -12
  192. data/locales/config.yaml +29 -0
  193. data/locales/puppet.pot +79 -0
  194. data/man/man5/puppet.conf.5 +1 -1
  195. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
  196. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
  197. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
  198. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
  199. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
  200. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
  201. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
  202. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
  203. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  204. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
  205. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  206. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  207. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
  208. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
  209. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
  210. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
  211. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
  212. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
  213. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
  214. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
  215. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
  216. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
  217. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
  218. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
  219. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
  220. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
  221. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
  222. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
  223. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
  224. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
  225. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
  226. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
  227. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
  228. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
  229. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
  230. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
  231. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
  232. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
  233. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
  234. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
  235. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
  236. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
  237. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
  238. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
  239. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
  240. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
  241. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
  242. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
  243. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
  244. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
  245. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
  246. data/spec/integration/application/apply_spec.rb +88 -2
  247. data/spec/integration/application/lookup_spec.rb +155 -0
  248. data/spec/integration/data_binding_spec.rb +5 -5
  249. data/spec/integration/defaults_spec.rb +13 -0
  250. data/spec/integration/environments/default_manifest_spec.rb +16 -16
  251. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  252. data/spec/integration/test/test_helper_spec.rb +6 -2
  253. data/spec/integration/transaction_spec.rb +74 -0
  254. data/spec/integration/util/execution_spec.rb +8 -0
  255. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  256. data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
  257. data/spec/lib/puppet_spec/unindent.rb +2 -2
  258. data/spec/unit/application/face_base_spec.rb +16 -0
  259. data/spec/unit/application/lookup_spec.rb +262 -227
  260. data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
  261. data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
  262. data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
  263. data/spec/unit/defaults_spec.rb +1 -1
  264. data/spec/unit/face/ca_spec.rb +10 -0
  265. data/spec/unit/face/certificate_request_spec.rb +10 -0
  266. data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
  267. data/spec/unit/face/file_spec.rb +4 -0
  268. data/spec/unit/face/help_spec.rb +17 -0
  269. data/spec/unit/face/key_spec.rb +10 -0
  270. data/spec/unit/face/status_spec.rb +10 -0
  271. data/spec/unit/file_system_spec.rb +143 -6
  272. data/spec/unit/functions/binary_file_spec.rb +1 -1
  273. data/spec/unit/functions/hiera_spec.rb +257 -47
  274. data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
  275. data/spec/unit/functions/lookup_spec.rb +1319 -608
  276. data/spec/unit/functions/new_spec.rb +3 -3
  277. data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
  278. data/spec/unit/graph/simple_graph_spec.rb +1 -1
  279. data/spec/unit/hiera/scope_spec.rb +4 -4
  280. data/spec/unit/indirector/request_spec.rb +9 -0
  281. data/spec/unit/interface_spec.rb +27 -0
  282. data/spec/unit/man_spec.rb +1 -1
  283. data/spec/unit/module_spec.rb +1 -1
  284. data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
  285. data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
  286. data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
  287. data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
  288. data/spec/unit/module_tool_spec.rb +3 -3
  289. data/spec/unit/network/http/connection_spec.rb +10 -0
  290. data/spec/unit/network/http/webrick_spec.rb +1 -1
  291. data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
  292. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
  293. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  294. data/spec/unit/pops/lookup/context_spec.rb +45 -16
  295. data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
  296. data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
  297. data/spec/unit/pops/merge_strategy_spec.rb +18 -0
  298. data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
  299. data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
  300. data/spec/unit/pops/serialization/packer_spec.rb +4 -23
  301. data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
  302. data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
  303. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
  304. data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
  305. data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
  306. data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
  307. data/spec/unit/pops/types/type_factory_spec.rb +3 -3
  308. data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
  309. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
  310. data/spec/unit/pops/types/types_spec.rb +25 -2
  311. data/spec/unit/pops/validator/validator_spec.rb +60 -4
  312. data/spec/unit/provider/nameservice_spec.rb +42 -0
  313. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  314. data/spec/unit/provider/package/pkg_spec.rb +22 -0
  315. data/spec/unit/provider/package/pkgng_spec.rb +12 -0
  316. data/spec/unit/provider/package/rpm_spec.rb +8 -8
  317. data/spec/unit/provider/service/smf_spec.rb +13 -11
  318. data/spec/unit/provider/service/systemd_spec.rb +8 -1
  319. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  320. data/spec/unit/puppet_spec.rb +14 -0
  321. data/spec/unit/resource/catalog_spec.rb +15 -9
  322. data/spec/unit/resource_spec.rb +20 -17
  323. data/spec/unit/semver_spec.rb +14 -0
  324. data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
  325. data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
  326. data/spec/unit/type/user_spec.rb +32 -6
  327. data/spec/unit/util/filetype_spec.rb +3 -3
  328. data/spec/unit/util/yaml_spec.rb +1 -1
  329. data/spec/unit/util_spec.rb +10 -2
  330. data/tasks/i18n.rake +20 -0
  331. metadata +2661 -2607
  332. data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
  333. data/lib/puppet/vendor/load_semantic.rb +0 -1
  334. data/lib/puppet/vendor/semantic/Gemfile +0 -20
  335. data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
  336. data/lib/puppet/vendor/semantic/Rakefile +0 -69
  337. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
  338. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
  339. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
  340. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
  341. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
  342. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
  343. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
  344. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
  345. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
  346. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
  347. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
  348. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -513,7 +513,15 @@ describe 'Lexer2' do
513
513
  "x\\u2713y"
514
514
  CODE
515
515
  # >= Ruby 1.9.3 reports \u
516
- expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713y"])
516
+ expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713y"])
517
+ end
518
+
519
+ it 'should support adjacent short form unicode characters' do
520
+ code = <<-CODE
521
+ "x\\u2713\\u2713y"
522
+ CODE
523
+ # >= Ruby 1.9.3 reports \u
524
+ expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u2713\u2713y"])
517
525
  end
518
526
 
519
527
  it 'should support unicode characters in long form' do
@@ -523,6 +531,13 @@ describe 'Lexer2' do
523
531
  expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\u{1f452}y"])
524
532
  end
525
533
 
534
+ it 'can escape the unicode escape' do
535
+ code = <<-"CODE"
536
+ "x\\\\u{1f452}y"
537
+ CODE
538
+ expect(tokens_scanned_from(code)).to match_tokens2([:STRING, "x\\u{1f452}y"])
539
+ end
540
+
526
541
  it 'produces byte offsets that counts each byte in a comment' do
527
542
  code = <<-"CODE"
528
543
  # \u{0400}\na
@@ -42,6 +42,10 @@ describe "egrammar parsing of site expression" do
42
42
  it "allows the keyword '#{keyword}' as a value in a hash" do
43
43
  expect(dump(parse("$a = {'x'=>#{keyword}}"))).to(eq("(= $a ({} ('x' '#{keyword}')))"))
44
44
  end
45
+
46
+ it "allows the keyword '#{keyword}' as an attribute name" do
47
+ expect(dump(parse("foo { 'x': #{keyword} => 'value' } "))).to eql("(resource foo\n ('x'\n (#{keyword} => 'value')))")
48
+ end
45
49
  end
46
50
  end
47
51
  end
@@ -87,15 +87,6 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
87
87
  expect(val2).to eql(val)
88
88
  end
89
89
 
90
- it 'Sensitive' do
91
- sval = 'the sensitive value'
92
- val = Types::PSensitiveType::Sensitive.new(sval)
93
- write(val)
94
- val2 = read
95
- expect(val2).to be_a(Types::PSensitiveType::Sensitive)
96
- expect(val2.unwrap).to eql(sval)
97
- end
98
-
99
90
  it 'Timespan' do
100
91
  val = Time::Timespan.from_fields(false, 3, 12, 40, 31, 123)
101
92
  write(val)
@@ -113,18 +104,18 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
113
104
  end
114
105
 
115
106
  it 'Version' do
116
- val = Semantic::Version.parse('1.2.3-alpha2')
107
+ val = SemanticPuppet::Version.parse('1.2.3-alpha2')
117
108
  write(val)
118
109
  val2 = read
119
- expect(val2).to be_a(Semantic::Version)
110
+ expect(val2).to be_a(SemanticPuppet::Version)
120
111
  expect(val2).to eql(val)
121
112
  end
122
113
 
123
114
  it 'VersionRange' do
124
- val = Semantic::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
115
+ val = SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
125
116
  write(val)
126
117
  val2 = read
127
- expect(val2).to be_a(Semantic::VersionRange)
118
+ expect(val2).to be_a(SemanticPuppet::VersionRange)
128
119
  expect(val2).to eql(val)
129
120
  end
130
121
 
@@ -135,16 +126,6 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
135
126
  expect(val2).to be_a(Types::PBinaryType::Binary)
136
127
  expect(val2).to eql(val)
137
128
  end
138
-
139
- it 'Sensitive with rich data' do
140
- sval = Time::Timestamp.now
141
- val = Types::PSensitiveType::Sensitive.new(sval)
142
- write(val)
143
- val2 = read
144
- expect(val2).to be_a(Types::PSensitiveType::Sensitive)
145
- expect(val2.unwrap).to be_a(Time::Timestamp)
146
- expect(val2.unwrap).to eql(sval)
147
- end
148
129
  end
149
130
 
150
131
  context 'will fail on attempts to write' do
@@ -121,19 +121,19 @@ module Serialization
121
121
 
122
122
  it 'Version' do
123
123
  # It does succeed on rare occasions, so we need to repeat
124
- val = Semantic::Version.parse('1.2.3-alpha2')
124
+ val = SemanticPuppet::Version.parse('1.2.3-alpha2')
125
125
  write(val)
126
126
  val2 = read
127
- expect(val2).to be_a(Semantic::Version)
127
+ expect(val2).to be_a(SemanticPuppet::Version)
128
128
  expect(val2).to eql(val)
129
129
  end
130
130
 
131
131
  it 'VersionRange' do
132
132
  # It does succeed on rare occasions, so we need to repeat
133
- val = Semantic::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
133
+ val = SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4')
134
134
  write(val)
135
135
  val2 = read
136
- expect(val2).to be_a(Semantic::VersionRange)
136
+ expect(val2).to be_a(SemanticPuppet::VersionRange)
137
137
  expect(val2).to eql(val)
138
138
  end
139
139
 
@@ -186,6 +186,30 @@ module Serialization
186
186
  expect(val2).to eql(val)
187
187
  end
188
188
 
189
+ it 'Collection' do
190
+ val = Types::TypeFactory.collection(Types::TypeFactory.range(0, 20))
191
+ write(val)
192
+ val2 = read
193
+ expect(val2).to be_a(Types::PCollectionType)
194
+ expect(val2).to eql(val)
195
+ end
196
+
197
+ it 'Array' do
198
+ val = Types::TypeFactory.array_of(Types::TypeFactory.integer, Types::TypeFactory.range(0, 20))
199
+ write(val)
200
+ val2 = read
201
+ expect(val2).to be_a(Types::PArrayType)
202
+ expect(val2).to eql(val)
203
+ end
204
+
205
+ it 'Hash' do
206
+ val = Types::TypeFactory.hash_kv(Types::TypeFactory.string, Types::TypeFactory.integer, Types::TypeFactory.range(0, 20))
207
+ write(val)
208
+ val2 = read
209
+ expect(val2).to be_a(Types::PHashType)
210
+ expect(val2).to eql(val)
211
+ end
212
+
189
213
  it 'Variant' do
190
214
  val = Types::TypeFactory.variant(Types::TypeFactory.string, Types::TypeFactory.range(1, :default))
191
215
  write(val)
@@ -208,8 +232,8 @@ module Serialization
208
232
  val = [
209
233
  Time::Timespan.from_fields(false, 3, 12, 40, 31, 123),
210
234
  Time::Timestamp.now,
211
- Semantic::Version.parse('1.2.3-alpha2'),
212
- Semantic::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
235
+ SemanticPuppet::Version.parse('1.2.3-alpha2'),
236
+ SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
213
237
  Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
214
238
  ]
215
239
  write(val)
@@ -222,8 +246,8 @@ module Serialization
222
246
  val = {
223
247
  'duration' => Time::Timespan.from_fields(false, 3, 12, 40, 31, 123),
224
248
  'time' => Time::Timestamp.now,
225
- 'version' => Semantic::Version.parse('1.2.3-alpha2'),
226
- 'range' => Semantic::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
249
+ 'version' => SemanticPuppet::Version.parse('1.2.3-alpha2'),
250
+ 'range' => SemanticPuppet::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
227
251
  'binary' => Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
228
252
  }
229
253
  write(val)
@@ -9,9 +9,15 @@ describe 'The Object Type' do
9
9
 
10
10
  let(:parser) { TypeParser.singleton }
11
11
  let(:pp_parser) { Parser::EvaluatingParser.new }
12
- let(:loader) { Loader::BaseLoader.new(nil, 'type_parser_unit_test_loader') }
12
+ let(:loader) { Loaders.find_loader(nil) }
13
13
  let(:factory) { TypeFactory }
14
14
 
15
+ around(:each) do |example|
16
+ Puppet.override(:loaders => Loaders.new(Puppet::Node::Environment.create(:testing, []))) do
17
+ example.run
18
+ end
19
+ end
20
+
15
21
  def type_object_t(name, body_string)
16
22
  object = PObjectType.new(name, pp_parser.parse_string("{#{body_string}}").current.body)
17
23
  loader.set_entry(Loader::TypedName.new(:type, name.downcase), object)
@@ -148,7 +154,7 @@ describe 'The Object Type' do
148
154
  end
149
155
 
150
156
  context 'when dealing with functions' do
151
- it 'raises an error when the function type is a Type[Callable]' do
157
+ it 'raises an error unless the function type is a Type[Callable]' do
152
158
  obj = <<-OBJECT
153
159
  functions => {
154
160
  a => String
@@ -207,7 +213,7 @@ describe 'The Object Type' do
207
213
  'function MyDerivedObject[a] attempts to override attribute MyObject[a]')
208
214
  end
209
215
 
210
- it 'raises an error when the an function overrides an attribute' do
216
+ it 'raises an error when the a function overrides an attribute' do
211
217
  parent = <<-OBJECT
212
218
  functions => {
213
219
  a => Callable
@@ -699,6 +705,43 @@ describe 'The Object Type' do
699
705
  end
700
706
  end
701
707
 
708
+ context 'when stringifying created instances' do
709
+ it 'outputs a Puppet constructor using the initializer hash' do
710
+ code = <<-CODE
711
+ type Spec::MyObject = Object[{attributes => { a => Integer }}]
712
+ type Spec::MySecondObject = Object[{parent => Spec::MyObject, attributes => { b => String }}]
713
+ notice(Spec::MySecondObject(42, 'Meaning of life'))
714
+ CODE
715
+ expect(eval_and_collect_notices(code)).to eql(["Spec::MySecondObject({\n 'a' => 42,\n 'b' => 'Meaning of life'\n})"])
716
+ end
717
+ end
718
+
719
+ context 'when used from Ruby' do
720
+ it 'can create an instance without scope using positional arguments' do
721
+ parse_object('MyObject', <<-OBJECT)
722
+ attributes => {
723
+ a => { type => Integer }
724
+ }
725
+ OBJECT
726
+
727
+ t = Puppet::Pops::Types::TypeParser.singleton.parse('MyObject', Puppet::Pops::Loaders.find_loader(nil))
728
+ instance = t.create(32)
729
+ expect(instance.a).to eql(32)
730
+ end
731
+
732
+ it 'can create an instance without scope using initialization hash' do
733
+ parse_object('MyObject', <<-OBJECT)
734
+ attributes => {
735
+ a => { type => Integer }
736
+ }
737
+ OBJECT
738
+
739
+ t = Puppet::Pops::Types::TypeParser.singleton.parse('MyObject', Puppet::Pops::Loaders.find_loader(nil))
740
+ instance = t.from_hash('a' => 32)
741
+ expect(instance.a).to eql(32)
742
+ end
743
+ end
744
+
702
745
  context 'when used in Puppet expressions' do
703
746
  it 'two anonymous empty objects are equal' do
704
747
  code = <<-CODE
@@ -763,6 +806,28 @@ describe 'The Object Type' do
763
806
  /attribute MySecondObject\[a\] attempts to override final attribute MyObject\[a\]/)
764
807
  end
765
808
 
809
+ it 'can inherit from an aliased type' do
810
+ code = <<-CODE
811
+ type MyObject = Object[{ name => 'MyFirstObject', attributes => { a => Integer }}]
812
+ type MyObjectAlias = MyObject
813
+ type MySecondObject = Object[{ parent => MyObjectAlias, attributes => { b => String }}]
814
+ notice(MySecondObject < MyObjectAlias)
815
+ notice(MySecondObject < MyObject)
816
+ CODE
817
+ expect(eval_and_collect_notices(code)).to eql(['true', 'true'])
818
+ end
819
+
820
+ it 'detects equality duplication when inherited from an aliased type' do
821
+ code = <<-CODE
822
+ type MyObject = Object[{ name => 'MyFirstObject', attributes => { a => Integer }}]
823
+ type MyObjectAlias = MyObject
824
+ type MySecondObject = Object[{ parent => MyObjectAlias, attributes => { b => String }, equality => a}]
825
+ notice(MySecondObject < MyObject)
826
+ CODE
827
+ expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error,
828
+ /MySecondObject equality is referencing attribute MyObject\[a\] which is included in equality of MyObject/)
829
+ end
830
+
766
831
  it 'raises an error when object when circular inheritance is detected' do
767
832
  code = <<-CODE
768
833
  type MyFirstObject = Object[{
@@ -20,12 +20,12 @@ describe 'Semantic Versions' do
20
20
  end
21
21
 
22
22
  it 'returns its argument when the argument is a version' do
23
- v = Semantic::Version.new(1,0,0)
23
+ v = SemanticPuppet::Version.new(1,0,0)
24
24
  expect(PSemVerType.convert(v)).to equal(v)
25
25
  end
26
26
 
27
27
  it 'converts a valid version string argument to a version' do
28
- v = Semantic::Version.new(1,0,0)
28
+ v = SemanticPuppet::Version.new(1,0,0)
29
29
  expect(PSemVerType.convert('1.0.0')).to eq(v)
30
30
  end
31
31
 
@@ -42,12 +42,12 @@ describe 'Semantic Versions' do
42
42
  end
43
43
 
44
44
  it 'returns its argument when the argument is a version range' do
45
- vr = Semantic::VersionRange.parse('1.x')
45
+ vr = SemanticPuppet::VersionRange.parse('1.x')
46
46
  expect(PSemVerRangeType.convert(vr)).to equal(vr)
47
47
  end
48
48
 
49
49
  it 'converts a valid version string argument to a version range' do
50
- vr = Semantic::VersionRange.parse('1.x')
50
+ vr = SemanticPuppet::VersionRange.parse('1.x')
51
51
  expect(PSemVerRangeType.convert('1.x')).to eq(vr)
52
52
  end
53
53
 
@@ -123,7 +123,7 @@ module Puppet::Pops
123
123
  version => '1.x',
124
124
  pcore_version => '1.0.0',
125
125
  OBJECT
126
- expect { parse_type_set('MySet', ts) }.to raise_error(Semantic::Version::ValidationFailure)
126
+ expect { parse_type_set('MySet', ts) }.to raise_error(SemanticPuppet::Version::ValidationFailure)
127
127
  end
128
128
 
129
129
  it 'the pcore_version is an invalid semantic version' do
@@ -131,7 +131,7 @@ module Puppet::Pops
131
131
  version => '1.0.0',
132
132
  pcore_version => '1.x',
133
133
  OBJECT
134
- expect { parse_type_set('MySet', ts) }.to raise_error(Semantic::Version::ValidationFailure)
134
+ expect { parse_type_set('MySet', ts) }.to raise_error(SemanticPuppet::Version::ValidationFailure)
135
135
  end
136
136
 
137
137
  it 'the pcore_version is outside of the range of that is parsable by this runtime' do
@@ -419,6 +419,35 @@ module Puppet::Pops
419
419
  OBJECT
420
420
  end
421
421
  end
422
+
423
+ it '#name_for method reports the name of deeply nested type correctly' do
424
+ tv = parse_type_set('Vehicles', <<-OBJECT)
425
+ version => '1.0.0',
426
+ pcore_version => '1.0.0',
427
+ types => { Car => Object[{}] }
428
+ OBJECT
429
+ tt = parse_type_set('Transports', <<-OBJECT)
430
+ version => '1.0.0',
431
+ pcore_version => '1.0.0',
432
+ references => {
433
+ Vecs => {
434
+ name => 'Vehicles',
435
+ version_range => '1.x'
436
+ }
437
+ }
438
+ OBJECT
439
+ ts = parse_type_set('TheSet', <<-OBJECT)
440
+ version => '1.0.0',
441
+ pcore_version => '1.0.0',
442
+ references => {
443
+ T => {
444
+ name => 'Transports',
445
+ version_range => '1.x'
446
+ }
447
+ }
448
+ OBJECT
449
+ expect(ts.name_for(tv['Car'], nil)).to eql('T::Vecs::Car')
450
+ end
422
451
  end
423
452
  end
424
453
  end
@@ -1,24 +1,25 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/pops/types/type_acceptor'
3
3
 
4
+ class PuppetSpec::TestTypeAcceptor
5
+ include Puppet::Pops::Types::TypeAcceptor
6
+ attr_reader :visitors, :guard
7
+
8
+ def initialize
9
+ @visitors = []
10
+ @guard = nil
11
+ end
12
+
13
+ def visit(type, guard)
14
+ @visitors << type
15
+ @guard = guard
16
+ end
17
+ end
18
+
4
19
  module Puppet::Pops::Types
5
20
  describe 'the Puppet::Pops::Types::TypeAcceptor' do
6
- let!(:acceptor_class) do
7
- Class.new do
8
- include TypeAcceptor
9
- attr_reader :visitors, :guard
10
-
11
- def initialize
12
- @visitors = []
13
- @guard = nil
14
- end
15
-
16
- def visit(type, guard)
17
- @visitors << type
18
- @guard = guard
19
- end
20
- end
21
- end
21
+
22
+ let!(:acceptor_class) { PuppetSpec::TestTypeAcceptor }
22
23
 
23
24
  let(:acceptor) { acceptor_class.new }
24
25
  let(:guard) { RecursionGuard.new }
@@ -102,4 +103,4 @@ describe 'the Puppet::Pops::Types::TypeAcceptor' do
102
103
  expect(acceptor.visitors).to include(t, PStringType::DEFAULT, PIntegerType::DEFAULT)
103
104
  end
104
105
  end
105
- end
106
+ end
@@ -18,12 +18,12 @@ describe 'The type calculator' do
18
18
  TypeFactory.regexp(pattern)
19
19
  end
20
20
 
21
- def string_t(*strings)
22
- TypeFactory.string(nil, *strings)
21
+ def string_t(string = nil)
22
+ TypeFactory.string(string)
23
23
  end
24
24
 
25
- def constrained_string_t(size_type, *strings)
26
- TypeFactory.string(size_type, *strings)
25
+ def constrained_string_t(size_type)
26
+ TypeFactory.string(size_type)
27
27
  end
28
28
 
29
29
  def callable_t(*params)
@@ -141,7 +141,7 @@ describe 'The type calculator' do
141
141
  it 'inferred string type knows the string value' do
142
142
  t = calculator.infer('foo')
143
143
  expect(t.class).to eq(PStringType)
144
- expect(t.values).to eq(['foo'])
144
+ expect(t.value).to eq('foo')
145
145
  end
146
146
 
147
147
  it 'boolean true translates to PBooleanType' do
@@ -222,15 +222,15 @@ describe 'The type calculator' do
222
222
 
223
223
  context 'version' do
224
224
  it 'translates to PVersionType' do
225
- expect(calculator.infer(Semantic::Version.new(1,0,0)).class).to eq(PSemVerType)
225
+ expect(calculator.infer(SemanticPuppet::Version.new(1,0,0)).class).to eq(PSemVerType)
226
226
  end
227
227
 
228
228
  it 'range translates to PVersionRangeType' do
229
- expect(calculator.infer(Semantic::VersionRange.parse('1.x')).class).to eq(PSemVerRangeType)
229
+ expect(calculator.infer(SemanticPuppet::VersionRange.parse('1.x')).class).to eq(PSemVerRangeType)
230
230
  end
231
231
 
232
232
  it 'translates to a limited PVersionType by infer_set' do
233
- v = Semantic::Version.new(1,0,0)
233
+ v = SemanticPuppet::Version.new(1,0,0)
234
234
  t = calculator.infer_set(v)
235
235
  expect(t.class).to eq(PSemVerType)
236
236
  expect(t.ranges.size).to eq(1)
@@ -287,9 +287,9 @@ describe 'The type calculator' do
287
287
  expect(t.to).to eq(42)
288
288
  end
289
289
 
290
- it 'Compound string values are computed' do
290
+ it 'Compound string values are converted to enums' do
291
291
  t = calculator.infer(['a','b', 'c']).element_type
292
- expect(t.class).to eq(PStringType)
292
+ expect(t.class).to eq(PEnumType)
293
293
  expect(t.values).to eq(['a', 'b', 'c'])
294
294
  end
295
295
 
@@ -326,16 +326,16 @@ describe 'The type calculator' do
326
326
  end
327
327
 
328
328
  it 'with arrays of string values translates to PArrayType[PArrayType[PStringType]]' do
329
- et = calculator.infer([['first' 'array'], ['second','array']])
329
+ et = calculator.infer([['first', 'array'], ['second','array']])
330
330
  expect(et.class).to eq(PArrayType)
331
331
  et = et.element_type
332
332
  expect(et.class).to eq(PArrayType)
333
333
  et = et.element_type
334
- expect(et.class).to eq(PStringType)
334
+ expect(et.class).to eq(PEnumType)
335
335
  end
336
336
 
337
337
  it 'with array of string values and array of fixnums translates to PArrayType[PArrayType[PScalarType]]' do
338
- et = calculator.infer([['first' 'array'], [1,2]])
338
+ et = calculator.infer([['first', 'array'], [1,2]])
339
339
  expect(et.class).to eq(PArrayType)
340
340
  et = et.element_type
341
341
  expect(et.class).to eq(PArrayType)
@@ -343,13 +343,13 @@ describe 'The type calculator' do
343
343
  expect(et.class).to eq(PScalarType)
344
344
  end
345
345
 
346
- it 'with hashes of string values translates to PArrayType[PHashType[PStringType]]' do
346
+ it 'with hashes of string values translates to PArrayType[PHashType[PEnumType]]' do
347
347
  et = calculator.infer([{:first => 'first', :second => 'second' }, {:first => 'first', :second => 'second' }])
348
348
  expect(et.class).to eq(PArrayType)
349
349
  et = et.element_type
350
350
  expect(et.class).to eq(PHashType)
351
- et = et.element_type
352
- expect(et.class).to eq(PStringType)
351
+ et = et.value_type
352
+ expect(et.class).to eq(PEnumType)
353
353
  end
354
354
 
355
355
  it 'with hash of string values and hash of fixnums translates to PArrayType[PHashType[PScalarType]]' do
@@ -357,7 +357,7 @@ describe 'The type calculator' do
357
357
  expect(et.class).to eq(PArrayType)
358
358
  et = et.element_type
359
359
  expect(et.class).to eq(PHashType)
360
- et = et.element_type
360
+ et = et.value_type
361
361
  expect(et.class).to eq(PScalarType)
362
362
  end
363
363
  end
@@ -374,12 +374,12 @@ describe 'The type calculator' do
374
374
  expect(k.runtime_type_name).to eq('Symbol')
375
375
  end
376
376
 
377
- it 'with string keys translates to PHashType[PStringType, value]' do
378
- expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(PStringType)
377
+ it 'with string keys translates to PHashType[PEnumType, value]' do
378
+ expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(PEnumType)
379
379
  end
380
380
 
381
381
  it 'with fixnum values translates to PHashType[key, PIntegerType]' do
382
- expect(calculator.infer({:first => 1, :second => 2}).element_type.class).to eq(PIntegerType)
382
+ expect(calculator.infer({:first => 1, :second => 2}).value_type.class).to eq(PIntegerType)
383
383
  end
384
384
 
385
385
  it 'when empty infers a type that answers true to is_the_empty_hash?' do
@@ -435,8 +435,8 @@ describe 'The type calculator' do
435
435
  expect(t.patterns[0].regexp.match('abc')[1]).to eq('b')
436
436
  end
437
437
 
438
- it 'constructs a PStringType with multiple strings' do
439
- t = string_t('a', 'b', 'c', 'abc')
438
+ it 'constructs a PEnumType with multiple strings' do
439
+ t = enum_t('a', 'b', 'c', 'abc')
440
440
  expect(t.values).to eq(['a', 'b', 'c', 'abc'].sort)
441
441
  end
442
442
  end
@@ -482,7 +482,7 @@ describe 'The type calculator' do
482
482
  t1 = string_t('abc')
483
483
  t2 = string_t('xyz')
484
484
  common_t = calculator.common_type(t1,t2)
485
- expect(common_t.class).to eq(PStringType)
485
+ expect(common_t.class).to eq(PEnumType)
486
486
  expect(common_t.values).to eq(['abc', 'xyz'])
487
487
  end
488
488
 
@@ -503,11 +503,11 @@ describe 'The type calculator' do
503
503
  end
504
504
 
505
505
  it 'computes values to be empty if the one has empty values' do
506
- t1 = constrained_string_t(range_t(3,6), 'apa')
506
+ t1 = string_t('apa')
507
507
  t2 = constrained_string_t(range_t(2,4))
508
508
  common_t = calculator.common_type(t1,t2)
509
509
  expect(common_t.class).to eq(PStringType)
510
- expect(common_t.values).to be_empty
510
+ expect(common_t.value).to be_nil
511
511
  end
512
512
  end
513
513
 
@@ -1154,7 +1154,7 @@ describe 'The type calculator' do
1154
1154
 
1155
1155
  it 'should accept multiple strings if they all match any patterns' do
1156
1156
  p_t = pattern_t('X', 'Y', 'abc')
1157
- p_s = string_t('Xa', 'aY', 'abc')
1157
+ p_s = enum_t('Xa', 'aY', 'abc')
1158
1158
  expect(calculator.assignable?(p_t, p_s)).to eq(true)
1159
1159
  end
1160
1160
 
@@ -1166,7 +1166,7 @@ describe 'The type calculator' do
1166
1166
 
1167
1167
  it 'should reject multiple strings if not all match any patterns' do
1168
1168
  p_t = pattern_t('abc', 'ab', 'c', 'q')
1169
- p_s = string_t('X', 'Y', 'Z')
1169
+ p_s = enum_t('X', 'Y', 'Z')
1170
1170
  expect(calculator.assignable?(p_t, p_s)).to eq(false)
1171
1171
  end
1172
1172
 
@@ -1661,9 +1661,8 @@ describe 'The type calculator' do
1661
1661
  end
1662
1662
 
1663
1663
  it 'should consider string values' do
1664
- string = string_t('a', 'b')
1664
+ string = string_t('a')
1665
1665
  expect(calculator.instance?(string, 'a')).to eq(true)
1666
- expect(calculator.instance?(string, 'b')).to eq(true)
1667
1666
  expect(calculator.instance?(string, 'c')).to eq(false)
1668
1667
  end
1669
1668
 
@@ -1936,7 +1935,7 @@ describe 'The type calculator' do
1936
1935
  t = calculator.type(Hash)
1937
1936
  expect(t.class).to eq(PHashType)
1938
1937
  expect(t.key_type.class).to eq(PScalarType)
1939
- expect(t.element_type.class).to eq(PDataType)
1938
+ expect(t.value_type.class).to eq(PDataType)
1940
1939
  end
1941
1940
  end
1942
1941
 
@@ -2066,25 +2065,25 @@ describe 'The type calculator' do
2066
2065
  end
2067
2066
 
2068
2067
  it 'a generic inference is produced using infer_generic' do
2069
- expect(calculator.infer_generic(['a','b']).element_type.values).to eq([])
2068
+ expect(calculator.infer_generic(['a','b']).element_type).to eql(string_t(range_t(1,1)))
2070
2069
  end
2071
2070
 
2072
2071
  it 'a generic result is created by generalize given an instance specific result for an Array' do
2073
2072
  generic = calculator.infer(['a','b'])
2074
- expect(generic.element_type.values).to eq(['a', 'b'])
2073
+ expect(generic.element_type.values).to eq(['a','b'])
2075
2074
  generic = generic.generalize
2076
- expect(generic.element_type.values).to eq([])
2075
+ expect(generic.element_type).to eql(string_t(range_t(1,1)))
2077
2076
  end
2078
2077
 
2079
2078
  it 'a generic result is created by generalize given an instance specific result for a Hash' do
2080
- generic = calculator.infer({'a' =>1,'b' => 2})
2081
- expect(generic.key_type.values.sort).to eq(['a', 'b'])
2082
- expect(generic.element_type.from).to eq(1)
2083
- expect(generic.element_type.to).to eq(2)
2079
+ generic = calculator.infer({'a' =>1,'bcd' => 2})
2080
+ expect(generic.key_type.values.sort).to eq(['a', 'bcd'])
2081
+ expect(generic.value_type.from).to eq(1)
2082
+ expect(generic.value_type.to).to eq(2)
2084
2083
  generic = generic.generalize
2085
- expect(generic.key_type.values).to eq([])
2086
- expect(generic.element_type.from).to eq(nil)
2087
- expect(generic.element_type.to).to eq(nil)
2084
+ expect(generic.key_type.size_type).to eq(range_t(1,3))
2085
+ expect(generic.value_type.from).to eq(nil)
2086
+ expect(generic.value_type.to).to eq(nil)
2088
2087
  end
2089
2088
 
2090
2089
  it 'ensures that Struct key types are not generalized' do