puppet 4.4.1-x86-mingw32 → 4.4.2-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 (556) hide show
  1. data/lib/puppet/application/ca.rb +1 -0
  2. data/lib/puppet/application/lookup.rb +4 -16
  3. data/lib/puppet/application/resource.rb +0 -4
  4. data/lib/puppet/data_providers/hiera_interpolate.rb +8 -2
  5. data/lib/puppet/data_providers/json_data_provider_factory.rb +1 -1
  6. data/lib/puppet/defaults.rb +32 -16
  7. data/lib/puppet/file_system/uniquefile.rb +2 -2
  8. data/lib/puppet/file_system/windows.rb +1 -15
  9. data/lib/puppet/functions/assert_type.rb +1 -1
  10. data/lib/puppet/functions/lookup.rb +0 -3
  11. data/lib/puppet/indirector/catalog/compiler.rb +2 -1
  12. data/lib/puppet/indirector/msgpack.rb +1 -1
  13. data/lib/puppet/indirector/terminus.rb +4 -4
  14. data/lib/puppet/module.rb +3 -3
  15. data/lib/puppet/module_tool/applications/builder.rb +2 -2
  16. data/lib/puppet/network/auth_config_parser.rb +1 -1
  17. data/lib/puppet/network/http/api/indirected_routes.rb +0 -2
  18. data/lib/puppet/network/http/rack/rest.rb +10 -1
  19. data/lib/puppet/parser/functions/lookup.rb +0 -3
  20. data/lib/puppet/pops/evaluator/access_operator.rb +25 -1
  21. data/lib/puppet/pops/evaluator/closure.rb +10 -5
  22. data/lib/puppet/pops/merge_strategy.rb +0 -10
  23. data/lib/puppet/pops/types/recursion_guard.rb +10 -0
  24. data/lib/puppet/pops/types/type_asserter.rb +2 -2
  25. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  26. data/lib/puppet/pops/types/type_formatter.rb +14 -2
  27. data/lib/puppet/pops/types/type_mismatch_describer.rb +22 -10
  28. data/lib/puppet/pops/types/types.rb +240 -98
  29. data/lib/puppet/provider/package/puppet_gem.rb +0 -0
  30. data/lib/puppet/provider/user/user_role_add.rb +3 -1
  31. data/lib/puppet/settings.rb +1 -1
  32. data/lib/puppet/ssl/oids.rb +24 -2
  33. data/lib/puppet/util/monkey_patches.rb +10 -5
  34. data/lib/puppet/util/windows.rb +1 -0
  35. data/lib/puppet/util/windows/file.rb +40 -10
  36. data/lib/puppet/version.rb +1 -1
  37. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/third_utf8.json +3 -0
  38. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/utf8.yaml +3 -0
  39. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +5 -1
  40. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +2 -2
  41. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +0 -0
  42. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +0 -0
  43. data/spec/integration/agent/logging_spec.rb +0 -0
  44. data/spec/integration/application/apply_spec.rb +0 -0
  45. data/spec/integration/application/doc_spec.rb +0 -0
  46. data/spec/integration/configurer_spec.rb +0 -0
  47. data/spec/integration/data_binding_spec.rb +0 -0
  48. data/spec/integration/defaults_spec.rb +0 -0
  49. data/spec/integration/faces/ca_spec.rb +0 -0
  50. data/spec/integration/faces/documentation_spec.rb +0 -0
  51. data/spec/integration/file_serving/fileset_spec.rb +0 -0
  52. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -0
  53. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -0
  54. data/spec/integration/indirector/direct_file_server_spec.rb +0 -0
  55. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -0
  56. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -0
  57. data/spec/integration/indirector/node/ldap_spec.rb +0 -0
  58. data/spec/integration/network/formats_spec.rb +0 -0
  59. data/spec/integration/node/environment_spec.rb +0 -0
  60. data/spec/integration/node/facts_spec.rb +0 -0
  61. data/spec/integration/node_spec.rb +0 -0
  62. data/spec/integration/parser/collection_spec.rb +0 -0
  63. data/spec/integration/parser/compiler_spec.rb +0 -0
  64. data/spec/integration/parser/functions/require_spec.rb +0 -0
  65. data/spec/integration/parser/parameter_defaults_spec.rb +19 -1
  66. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -0
  67. data/spec/integration/provider/mount_spec.rb +0 -0
  68. data/spec/integration/provider/package_spec.rb +0 -0
  69. data/spec/integration/provider/service/init_spec.rb +0 -0
  70. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -0
  71. data/spec/integration/reference/providers_spec.rb +0 -0
  72. data/spec/integration/reports_spec.rb +0 -0
  73. data/spec/integration/resource/catalog_spec.rb +0 -0
  74. data/spec/integration/resource/type_collection_spec.rb +0 -0
  75. data/spec/integration/ssl/certificate_authority_spec.rb +0 -0
  76. data/spec/integration/ssl/certificate_request_spec.rb +0 -0
  77. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -0
  78. data/spec/integration/ssl/host_spec.rb +0 -0
  79. data/spec/integration/transaction/report_spec.rb +0 -0
  80. data/spec/integration/transaction_spec.rb +0 -0
  81. data/spec/integration/type/exec_spec.rb +0 -0
  82. data/spec/integration/type/file_spec.rb +0 -0
  83. data/spec/integration/type/package_spec.rb +0 -0
  84. data/spec/integration/type/tidy_spec.rb +0 -0
  85. data/spec/integration/type_spec.rb +0 -0
  86. data/spec/integration/util/autoload_spec.rb +0 -0
  87. data/spec/integration/util/rdoc/parser_spec.rb +0 -0
  88. data/spec/integration/util/settings_spec.rb +26 -0
  89. data/spec/integration/util/windows/registry_spec.rb +0 -0
  90. data/spec/integration/util/windows/security_spec.rb +0 -0
  91. data/spec/integration/util/windows/user_spec.rb +0 -0
  92. data/spec/integration/util_spec.rb +0 -0
  93. data/spec/lib/puppet/face/1.0.0/huzzah.rb +0 -0
  94. data/spec/lib/puppet/face/basetest.rb +0 -0
  95. data/spec/lib/puppet/face/huzzah.rb +0 -0
  96. data/spec/lib/puppet_spec/files.rb +0 -0
  97. data/spec/lib/puppet_spec/fixtures.rb +0 -0
  98. data/spec/lib/puppet_spec/verbose.rb +0 -0
  99. data/spec/shared_behaviours/all_parsedfile_providers.rb +0 -0
  100. data/spec/shared_behaviours/file_server_terminus.rb +0 -0
  101. data/spec/shared_behaviours/file_serving.rb +0 -0
  102. data/spec/shared_behaviours/memory_terminus.rb +0 -0
  103. data/spec/shared_behaviours/path_parameters.rb +0 -0
  104. data/spec/shared_behaviours/things_that_declare_options.rb +0 -0
  105. data/spec/spec_helper.rb +0 -0
  106. data/spec/unit/agent/locker_spec.rb +0 -0
  107. data/spec/unit/agent_spec.rb +0 -0
  108. data/spec/unit/application/agent_spec.rb +0 -0
  109. data/spec/unit/application/apply_spec.rb +0 -0
  110. data/spec/unit/application/cert_spec.rb +0 -0
  111. data/spec/unit/application/certificate_spec.rb +0 -0
  112. data/spec/unit/application/config_spec.rb +0 -0
  113. data/spec/unit/application/describe_spec.rb +0 -0
  114. data/spec/unit/application/device_spec.rb +0 -0
  115. data/spec/unit/application/doc_spec.rb +0 -0
  116. data/spec/unit/application/face_base_spec.rb +0 -0
  117. data/spec/unit/application/facts_spec.rb +0 -0
  118. data/spec/unit/application/filebucket_spec.rb +0 -0
  119. data/spec/unit/application/indirection_base_spec.rb +0 -0
  120. data/spec/unit/application/inspect_spec.rb +0 -0
  121. data/spec/unit/application/lookup_spec.rb +1 -1
  122. data/spec/unit/application/master_spec.rb +0 -0
  123. data/spec/unit/application/resource_spec.rb +0 -0
  124. data/spec/unit/application_spec.rb +0 -0
  125. data/spec/unit/configurer/downloader_factory_spec.rb +0 -0
  126. data/spec/unit/configurer/downloader_spec.rb +0 -0
  127. data/spec/unit/configurer/fact_handler_spec.rb +0 -0
  128. data/spec/unit/configurer/plugin_handler_spec.rb +0 -0
  129. data/spec/unit/configurer_spec.rb +0 -0
  130. data/spec/unit/confine/exists_spec.rb +0 -0
  131. data/spec/unit/confine/false_spec.rb +0 -0
  132. data/spec/unit/confine/feature_spec.rb +0 -0
  133. data/spec/unit/confine/true_spec.rb +0 -0
  134. data/spec/unit/confine/variable_spec.rb +0 -0
  135. data/spec/unit/confine_collection_spec.rb +0 -0
  136. data/spec/unit/confine_spec.rb +0 -0
  137. data/spec/unit/confiner_spec.rb +0 -0
  138. data/spec/unit/daemon_spec.rb +0 -0
  139. data/spec/unit/data_providers/hiera_data_provider_spec.rb +1 -1
  140. data/spec/unit/data_providers/hiera_interpolation_spec.rb +6 -0
  141. data/spec/unit/external/pson_spec.rb +0 -0
  142. data/spec/unit/face/catalog_spec.rb +0 -0
  143. data/spec/unit/face/certificate_spec.rb +0 -0
  144. data/spec/unit/face/config_spec.rb +0 -0
  145. data/spec/unit/face/facts_spec.rb +0 -0
  146. data/spec/unit/face/file_spec.rb +0 -0
  147. data/spec/unit/face/help_spec.rb +0 -0
  148. data/spec/unit/face/node_spec.rb +0 -0
  149. data/spec/unit/face/plugin_spec.rb +0 -0
  150. data/spec/unit/face_spec.rb +0 -0
  151. data/spec/unit/file_bucket/dipper_spec.rb +0 -0
  152. data/spec/unit/file_bucket/file_spec.rb +0 -0
  153. data/spec/unit/file_serving/base_spec.rb +0 -0
  154. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -0
  155. data/spec/unit/file_serving/configuration_spec.rb +0 -0
  156. data/spec/unit/file_serving/content_spec.rb +0 -0
  157. data/spec/unit/file_serving/fileset_spec.rb +0 -0
  158. data/spec/unit/file_serving/metadata_spec.rb +0 -0
  159. data/spec/unit/file_serving/mount/file_spec.rb +0 -0
  160. data/spec/unit/file_serving/mount/modules_spec.rb +0 -0
  161. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +0 -0
  162. data/spec/unit/file_serving/mount/plugins_spec.rb +0 -0
  163. data/spec/unit/file_serving/mount_spec.rb +0 -0
  164. data/spec/unit/file_serving/terminus_helper_spec.rb +0 -0
  165. data/spec/unit/file_serving/terminus_selector_spec.rb +0 -0
  166. data/spec/unit/file_system/uniquefile_spec.rb +20 -0
  167. data/spec/unit/file_system_spec.rb +61 -0
  168. data/spec/unit/functions/assert_type_spec.rb +8 -0
  169. data/spec/unit/functions/defined_spec.rb +0 -0
  170. data/spec/unit/functions/hiera_spec.rb +0 -0
  171. data/spec/unit/functions/lookup_spec.rb +3 -3
  172. data/spec/unit/functions/regsubst_spec.rb +0 -0
  173. data/spec/unit/functions/split_spec.rb +0 -0
  174. data/spec/unit/functions/versioncmp_spec.rb +0 -0
  175. data/spec/unit/graph/relationship_graph_spec.rb +0 -0
  176. data/spec/unit/graph/simple_graph_spec.rb +0 -0
  177. data/spec/unit/indirector/catalog/compiler_spec.rb +7 -0
  178. data/spec/unit/indirector/catalog/json_spec.rb +0 -0
  179. data/spec/unit/indirector/catalog/msgpack_spec.rb +0 -0
  180. data/spec/unit/indirector/catalog/rest_spec.rb +0 -0
  181. data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -0
  182. data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -0
  183. data/spec/unit/indirector/catalog/yaml_spec.rb +0 -0
  184. data/spec/unit/indirector/certificate/ca_spec.rb +0 -0
  185. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -0
  186. data/spec/unit/indirector/certificate/file_spec.rb +0 -0
  187. data/spec/unit/indirector/certificate/rest_spec.rb +0 -0
  188. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -0
  189. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -0
  190. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -0
  191. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -0
  192. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -0
  193. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -0
  194. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -0
  195. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -0
  196. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -0
  197. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -0
  198. data/spec/unit/indirector/code_spec.rb +0 -0
  199. data/spec/unit/indirector/direct_file_server_spec.rb +0 -0
  200. data/spec/unit/indirector/envelope_spec.rb +0 -0
  201. data/spec/unit/indirector/exec_spec.rb +0 -0
  202. data/spec/unit/indirector/face_spec.rb +0 -0
  203. data/spec/unit/indirector/facts/facter_spec.rb +0 -0
  204. data/spec/unit/indirector/facts/network_device_spec.rb +0 -0
  205. data/spec/unit/indirector/facts/store_configs_spec.rb +0 -0
  206. data/spec/unit/indirector/facts/yaml_spec.rb +0 -0
  207. data/spec/unit/indirector/file_bucket_file/file_spec.rb +0 -0
  208. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +0 -0
  209. data/spec/unit/indirector/file_content/file_server_spec.rb +0 -0
  210. data/spec/unit/indirector/file_content/file_spec.rb +0 -0
  211. data/spec/unit/indirector/file_content/rest_spec.rb +0 -0
  212. data/spec/unit/indirector/file_metadata/file_server_spec.rb +0 -0
  213. data/spec/unit/indirector/file_metadata/file_spec.rb +0 -0
  214. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -0
  215. data/spec/unit/indirector/file_server_spec.rb +0 -0
  216. data/spec/unit/indirector/indirection_spec.rb +0 -0
  217. data/spec/unit/indirector/json_spec.rb +0 -0
  218. data/spec/unit/indirector/key/ca_spec.rb +0 -0
  219. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -0
  220. data/spec/unit/indirector/key/file_spec.rb +0 -0
  221. data/spec/unit/indirector/ldap_spec.rb +0 -0
  222. data/spec/unit/indirector/memory_spec.rb +0 -0
  223. data/spec/unit/indirector/msgpack_spec.rb +11 -1
  224. data/spec/unit/indirector/node/exec_spec.rb +0 -0
  225. data/spec/unit/indirector/node/ldap_spec.rb +0 -0
  226. data/spec/unit/indirector/node/memory_spec.rb +0 -0
  227. data/spec/unit/indirector/node/msgpack_spec.rb +0 -0
  228. data/spec/unit/indirector/node/plain_spec.rb +0 -0
  229. data/spec/unit/indirector/node/rest_spec.rb +0 -0
  230. data/spec/unit/indirector/node/store_configs_spec.rb +0 -0
  231. data/spec/unit/indirector/node/yaml_spec.rb +0 -0
  232. data/spec/unit/indirector/plain_spec.rb +0 -0
  233. data/spec/unit/indirector/report/msgpack_spec.rb +0 -0
  234. data/spec/unit/indirector/report/processor_spec.rb +0 -0
  235. data/spec/unit/indirector/report/rest_spec.rb +0 -0
  236. data/spec/unit/indirector/report/yaml_spec.rb +0 -0
  237. data/spec/unit/indirector/request_spec.rb +0 -0
  238. data/spec/unit/indirector/resource/ral_spec.rb +0 -0
  239. data/spec/unit/indirector/resource/store_configs_spec.rb +0 -0
  240. data/spec/unit/indirector/resource_type/parser_spec.rb +0 -0
  241. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -0
  242. data/spec/unit/indirector/rest_spec.rb +0 -0
  243. data/spec/unit/indirector/ssl_file_spec.rb +0 -0
  244. data/spec/unit/indirector/status/rest_spec.rb +0 -0
  245. data/spec/unit/indirector/store_configs_spec.rb +0 -0
  246. data/spec/unit/indirector/terminus_spec.rb +0 -0
  247. data/spec/unit/indirector/yaml_spec.rb +0 -0
  248. data/spec/unit/indirector_spec.rb +0 -0
  249. data/spec/unit/interface/action_builder_spec.rb +0 -0
  250. data/spec/unit/interface/action_manager_spec.rb +0 -0
  251. data/spec/unit/interface/action_spec.rb +0 -0
  252. data/spec/unit/interface/documentation_spec.rb +0 -0
  253. data/spec/unit/interface/face_collection_spec.rb +0 -0
  254. data/spec/unit/interface/option_builder_spec.rb +0 -0
  255. data/spec/unit/interface/option_spec.rb +0 -0
  256. data/spec/unit/interface_spec.rb +0 -0
  257. data/spec/unit/man_spec.rb +0 -0
  258. data/spec/unit/module_spec.rb +30 -6
  259. data/spec/unit/module_tool/applications/builder_spec.rb +23 -3
  260. data/spec/unit/module_tool_spec.rb +0 -0
  261. data/spec/unit/network/auth_config_parser_spec.rb +16 -0
  262. data/spec/unit/network/authconfig_spec.rb +0 -0
  263. data/spec/unit/network/authstore_spec.rb +0 -0
  264. data/spec/unit/network/format_handler_spec.rb +0 -0
  265. data/spec/unit/network/format_spec.rb +0 -0
  266. data/spec/unit/network/formats_spec.rb +0 -0
  267. data/spec/unit/network/http/api/indirected_routes_spec.rb +21 -13
  268. data/spec/unit/network/http/api/master/v3_spec.rb +0 -0
  269. data/spec/unit/network/http/compression_spec.rb +0 -0
  270. data/spec/unit/network/http/connection_spec.rb +0 -0
  271. data/spec/unit/network/http/factory_spec.rb +0 -0
  272. data/spec/unit/network/http/handler_spec.rb +0 -0
  273. data/spec/unit/network/http/nocache_pool_spec.rb +0 -0
  274. data/spec/unit/network/http/pool_spec.rb +0 -0
  275. data/spec/unit/network/http/rack/rest_spec.rb +7 -0
  276. data/spec/unit/network/http/rack_spec.rb +0 -0
  277. data/spec/unit/network/http/session_spec.rb +0 -0
  278. data/spec/unit/network/http/site_spec.rb +0 -0
  279. data/spec/unit/network/http/webrick/rest_spec.rb +0 -0
  280. data/spec/unit/network/http/webrick_spec.rb +0 -0
  281. data/spec/unit/network/http_pool_spec.rb +0 -0
  282. data/spec/unit/network/http_spec.rb +0 -0
  283. data/spec/unit/network/resolver_spec.rb +0 -0
  284. data/spec/unit/network/rights_spec.rb +0 -0
  285. data/spec/unit/network/server_spec.rb +0 -0
  286. data/spec/unit/node/environment_spec.rb +0 -0
  287. data/spec/unit/node/facts_spec.rb +0 -0
  288. data/spec/unit/node_spec.rb +0 -0
  289. data/spec/unit/other/selinux_spec.rb +0 -0
  290. data/spec/unit/parameter/path_spec.rb +0 -0
  291. data/spec/unit/parameter/value_collection_spec.rb +0 -0
  292. data/spec/unit/parameter/value_spec.rb +0 -0
  293. data/spec/unit/parameter_spec.rb +0 -0
  294. data/spec/unit/parser/ast/leaf_spec.rb +0 -0
  295. data/spec/unit/parser/compiler_spec.rb +0 -0
  296. data/spec/unit/parser/files_spec.rb +0 -0
  297. data/spec/unit/parser/functions/create_resources_spec.rb +0 -0
  298. data/spec/unit/parser/functions/defined_spec.rb +0 -0
  299. data/spec/unit/parser/functions/digest_spec.rb +0 -0
  300. data/spec/unit/parser/functions/fail_spec.rb +0 -0
  301. data/spec/unit/parser/functions/file_spec.rb +0 -0
  302. data/spec/unit/parser/functions/fqdn_rand_spec.rb +0 -0
  303. data/spec/unit/parser/functions/generate_spec.rb +0 -0
  304. data/spec/unit/parser/functions/hiera_spec.rb +0 -0
  305. data/spec/unit/parser/functions/include_spec.rb +0 -0
  306. data/spec/unit/parser/functions/inline_template_spec.rb +0 -0
  307. data/spec/unit/parser/functions/realize_spec.rb +0 -0
  308. data/spec/unit/parser/functions/regsubst_spec.rb +0 -0
  309. data/spec/unit/parser/functions/require_spec.rb +0 -0
  310. data/spec/unit/parser/functions/scanf_spec.rb +0 -0
  311. data/spec/unit/parser/functions/shellquote_spec.rb +0 -0
  312. data/spec/unit/parser/functions/split_spec.rb +0 -0
  313. data/spec/unit/parser/functions/sprintf_spec.rb +0 -0
  314. data/spec/unit/parser/functions/tag_spec.rb +0 -0
  315. data/spec/unit/parser/functions/template_spec.rb +0 -0
  316. data/spec/unit/parser/functions/versioncmp_spec.rb +0 -0
  317. data/spec/unit/parser/functions_spec.rb +0 -0
  318. data/spec/unit/parser/relationship_spec.rb +0 -0
  319. data/spec/unit/parser/resource/param_spec.rb +0 -0
  320. data/spec/unit/parser/resource_spec.rb +0 -0
  321. data/spec/unit/parser/scope_spec.rb +0 -0
  322. data/spec/unit/parser/templatewrapper_spec.rb +0 -0
  323. data/spec/unit/parser/type_loader_spec.rb +0 -0
  324. data/spec/unit/pops/loaders/loaders_spec.rb +8 -8
  325. data/spec/unit/pops/types/type_asserter_spec.rb +3 -3
  326. data/spec/unit/pops/types/type_calculator_spec.rb +32 -6
  327. data/spec/unit/pops/types/type_factory_spec.rb +26 -0
  328. data/spec/unit/pops/types/type_formatter_spec.rb +7 -2
  329. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +25 -0
  330. data/spec/unit/pops/types/type_parser_spec.rb +1 -1
  331. data/spec/unit/pops/types/types_spec.rb +215 -0
  332. data/spec/unit/property/ensure_spec.rb +0 -0
  333. data/spec/unit/property/keyvalue_spec.rb +0 -0
  334. data/spec/unit/property/list_spec.rb +0 -0
  335. data/spec/unit/property/ordered_list_spec.rb +0 -0
  336. data/spec/unit/property_spec.rb +0 -0
  337. data/spec/unit/provider/augeas/augeas_spec.rb +0 -0
  338. data/spec/unit/provider/cisco_spec.rb +0 -0
  339. data/spec/unit/provider/command_spec.rb +0 -0
  340. data/spec/unit/provider/cron/crontab_spec.rb +0 -0
  341. data/spec/unit/provider/exec/posix_spec.rb +0 -0
  342. data/spec/unit/provider/exec/shell_spec.rb +0 -0
  343. data/spec/unit/provider/exec/windows_spec.rb +0 -0
  344. data/spec/unit/provider/exec_spec.rb +0 -0
  345. data/spec/unit/provider/file/posix_spec.rb +0 -0
  346. data/spec/unit/provider/file/windows_spec.rb +0 -0
  347. data/spec/unit/provider/group/groupadd_spec.rb +0 -0
  348. data/spec/unit/provider/group/ldap_spec.rb +0 -0
  349. data/spec/unit/provider/group/pw_spec.rb +0 -0
  350. data/spec/unit/provider/group/windows_adsi_spec.rb +0 -0
  351. data/spec/unit/provider/host/parsed_spec.rb +0 -0
  352. data/spec/unit/provider/interface/cisco_spec.rb +0 -0
  353. data/spec/unit/provider/ldap_spec.rb +0 -0
  354. data/spec/unit/provider/macauthorization_spec.rb +0 -0
  355. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -0
  356. data/spec/unit/provider/mount/parsed_spec.rb +0 -0
  357. data/spec/unit/provider/mount_spec.rb +0 -0
  358. data/spec/unit/provider/naginator_spec.rb +0 -0
  359. data/spec/unit/provider/nameservice/directoryservice_spec.rb +0 -0
  360. data/spec/unit/provider/nameservice_spec.rb +0 -0
  361. data/spec/unit/provider/network_device_spec.rb +0 -0
  362. data/spec/unit/provider/package/aix_spec.rb +0 -0
  363. data/spec/unit/provider/package/appdmg_spec.rb +0 -0
  364. data/spec/unit/provider/package/apt_spec.rb +0 -0
  365. data/spec/unit/provider/package/aptitude_spec.rb +0 -0
  366. data/spec/unit/provider/package/aptrpm_spec.rb +0 -0
  367. data/spec/unit/provider/package/dpkg_spec.rb +0 -0
  368. data/spec/unit/provider/package/freebsd_spec.rb +0 -0
  369. data/spec/unit/provider/package/gem_spec.rb +0 -0
  370. data/spec/unit/provider/package/hpux_spec.rb +0 -0
  371. data/spec/unit/provider/package/macports_spec.rb +0 -0
  372. data/spec/unit/provider/package/nim_spec.rb +0 -0
  373. data/spec/unit/provider/package/openbsd_spec.rb +0 -0
  374. data/spec/unit/provider/package/opkg_spec.rb +0 -0
  375. data/spec/unit/provider/package/pacman_spec.rb +0 -0
  376. data/spec/unit/provider/package/pip3_spec.rb +0 -0
  377. data/spec/unit/provider/package/pip_spec.rb +0 -0
  378. data/spec/unit/provider/package/pkg_spec.rb +0 -0
  379. data/spec/unit/provider/package/pkgutil_spec.rb +0 -0
  380. data/spec/unit/provider/package/puppet_gem_spec.rb +0 -0
  381. data/spec/unit/provider/package/rpm_spec.rb +0 -0
  382. data/spec/unit/provider/package/sun_spec.rb +0 -0
  383. data/spec/unit/provider/package/windows/package_spec.rb +0 -0
  384. data/spec/unit/provider/package/windows_spec.rb +0 -0
  385. data/spec/unit/provider/package/yum_spec.rb +0 -0
  386. data/spec/unit/provider/package/zypper_spec.rb +0 -0
  387. data/spec/unit/provider/parsedfile_spec.rb +0 -0
  388. data/spec/unit/provider/selboolean_spec.rb +0 -0
  389. data/spec/unit/provider/selmodule_spec.rb +0 -0
  390. data/spec/unit/provider/service/base_spec.rb +0 -0
  391. data/spec/unit/provider/service/bsd_spec.rb +0 -0
  392. data/spec/unit/provider/service/daemontools_spec.rb +0 -0
  393. data/spec/unit/provider/service/debian_spec.rb +0 -0
  394. data/spec/unit/provider/service/freebsd_spec.rb +0 -0
  395. data/spec/unit/provider/service/gentoo_spec.rb +0 -0
  396. data/spec/unit/provider/service/init_spec.rb +0 -0
  397. data/spec/unit/provider/service/launchd_spec.rb +0 -0
  398. data/spec/unit/provider/service/openbsd_spec.rb +0 -0
  399. data/spec/unit/provider/service/openrc_spec.rb +0 -0
  400. data/spec/unit/provider/service/openwrt_spec.rb +0 -0
  401. data/spec/unit/provider/service/rcng_spec.rb +0 -0
  402. data/spec/unit/provider/service/redhat_spec.rb +0 -0
  403. data/spec/unit/provider/service/runit_spec.rb +0 -0
  404. data/spec/unit/provider/service/smf_spec.rb +0 -0
  405. data/spec/unit/provider/service/src_spec.rb +0 -0
  406. data/spec/unit/provider/service/systemd_spec.rb +0 -0
  407. data/spec/unit/provider/service/upstart_spec.rb +0 -0
  408. data/spec/unit/provider/service/windows_spec.rb +0 -0
  409. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +0 -0
  410. data/spec/unit/provider/sshkey/parsed_spec.rb +0 -0
  411. data/spec/unit/provider/user/directoryservice_spec.rb +0 -0
  412. data/spec/unit/provider/user/hpux_spec.rb +0 -0
  413. data/spec/unit/provider/user/ldap_spec.rb +0 -0
  414. data/spec/unit/provider/user/openbsd_spec.rb +0 -0
  415. data/spec/unit/provider/user/pw_spec.rb +0 -0
  416. data/spec/unit/provider/user/user_role_add_spec.rb +0 -0
  417. data/spec/unit/provider/user/useradd_spec.rb +0 -0
  418. data/spec/unit/provider/user/windows_adsi_spec.rb +0 -0
  419. data/spec/unit/provider/vlan/cisco_spec.rb +0 -0
  420. data/spec/unit/provider/zfs/zfs_spec.rb +0 -0
  421. data/spec/unit/provider/zone/solaris_spec.rb +0 -0
  422. data/spec/unit/provider/zpool/zpool_spec.rb +0 -0
  423. data/spec/unit/provider_spec.rb +0 -0
  424. data/spec/unit/puppet_spec.rb +0 -0
  425. data/spec/unit/relationship_spec.rb +0 -0
  426. data/spec/unit/reports/http_spec.rb +0 -0
  427. data/spec/unit/reports/store_spec.rb +0 -0
  428. data/spec/unit/reports_spec.rb +0 -0
  429. data/spec/unit/resource/catalog_spec.rb +0 -0
  430. data/spec/unit/resource/status_spec.rb +0 -0
  431. data/spec/unit/resource/type_collection_helper_spec.rb +0 -0
  432. data/spec/unit/resource/type_collection_spec.rb +0 -0
  433. data/spec/unit/resource/type_spec.rb +0 -0
  434. data/spec/unit/resource_spec.rb +0 -0
  435. data/spec/unit/settings/directory_setting_spec.rb +0 -0
  436. data/spec/unit/settings/duration_setting_spec.rb +0 -0
  437. data/spec/unit/settings/file_setting_spec.rb +0 -0
  438. data/spec/unit/settings/path_setting_spec.rb +0 -0
  439. data/spec/unit/settings/priority_setting_spec.rb +0 -0
  440. data/spec/unit/settings_spec.rb +1 -1
  441. data/spec/unit/ssl/base_spec.rb +0 -0
  442. data/spec/unit/ssl/certificate_authority/interface_spec.rb +0 -0
  443. data/spec/unit/ssl/certificate_authority_spec.rb +0 -0
  444. data/spec/unit/ssl/certificate_factory_spec.rb +0 -0
  445. data/spec/unit/ssl/certificate_request_spec.rb +0 -0
  446. data/spec/unit/ssl/certificate_revocation_list_spec.rb +0 -0
  447. data/spec/unit/ssl/certificate_spec.rb +0 -0
  448. data/spec/unit/ssl/configuration_spec.rb +0 -0
  449. data/spec/unit/ssl/host_spec.rb +0 -0
  450. data/spec/unit/ssl/inventory_spec.rb +0 -0
  451. data/spec/unit/ssl/key_spec.rb +0 -0
  452. data/spec/unit/status_spec.rb +0 -0
  453. data/spec/unit/transaction/event_manager_spec.rb +0 -0
  454. data/spec/unit/transaction/event_spec.rb +0 -0
  455. data/spec/unit/transaction/report_spec.rb +0 -0
  456. data/spec/unit/transaction/resource_harness_spec.rb +0 -0
  457. data/spec/unit/transaction_spec.rb +0 -0
  458. data/spec/unit/type/augeas_spec.rb +0 -0
  459. data/spec/unit/type/component_spec.rb +0 -0
  460. data/spec/unit/type/computer_spec.rb +0 -0
  461. data/spec/unit/type/cron_spec.rb +0 -0
  462. data/spec/unit/type/exec_spec.rb +0 -0
  463. data/spec/unit/type/file/checksum_spec.rb +0 -0
  464. data/spec/unit/type/file/checksum_value_spec.rb +0 -0
  465. data/spec/unit/type/file/content_spec.rb +0 -0
  466. data/spec/unit/type/file/ctime_spec.rb +0 -0
  467. data/spec/unit/type/file/ensure_spec.rb +0 -0
  468. data/spec/unit/type/file/group_spec.rb +0 -0
  469. data/spec/unit/type/file/mode_spec.rb +0 -0
  470. data/spec/unit/type/file/mtime_spec.rb +0 -0
  471. data/spec/unit/type/file/owner_spec.rb +0 -0
  472. data/spec/unit/type/file/selinux_spec.rb +0 -0
  473. data/spec/unit/type/file/source_spec.rb +0 -0
  474. data/spec/unit/type/file/type_spec.rb +0 -0
  475. data/spec/unit/type/file_spec.rb +0 -0
  476. data/spec/unit/type/filebucket_spec.rb +0 -0
  477. data/spec/unit/type/group_spec.rb +0 -0
  478. data/spec/unit/type/host_spec.rb +0 -0
  479. data/spec/unit/type/interface_spec.rb +0 -0
  480. data/spec/unit/type/k5login_spec.rb +0 -0
  481. data/spec/unit/type/macauthorization_spec.rb +0 -0
  482. data/spec/unit/type/mailalias_spec.rb +0 -0
  483. data/spec/unit/type/maillist_spec.rb +0 -0
  484. data/spec/unit/type/mcx_spec.rb +0 -0
  485. data/spec/unit/type/mount_spec.rb +0 -0
  486. data/spec/unit/type/nagios_spec.rb +0 -0
  487. data/spec/unit/type/noop_metaparam_spec.rb +0 -0
  488. data/spec/unit/type/package/package_settings_spec.rb +0 -0
  489. data/spec/unit/type/package_spec.rb +0 -0
  490. data/spec/unit/type/resources_spec.rb +0 -0
  491. data/spec/unit/type/schedule_spec.rb +0 -0
  492. data/spec/unit/type/selboolean_spec.rb +0 -0
  493. data/spec/unit/type/selmodule_spec.rb +0 -0
  494. data/spec/unit/type/service_spec.rb +0 -0
  495. data/spec/unit/type/ssh_authorized_key_spec.rb +0 -0
  496. data/spec/unit/type/sshkey_spec.rb +0 -0
  497. data/spec/unit/type/stage_spec.rb +0 -0
  498. data/spec/unit/type/tidy_spec.rb +0 -0
  499. data/spec/unit/type/user_spec.rb +0 -0
  500. data/spec/unit/type/vlan_spec.rb +0 -0
  501. data/spec/unit/type/whit_spec.rb +0 -0
  502. data/spec/unit/type/yumrepo_spec.rb +0 -0
  503. data/spec/unit/type/zfs_spec.rb +0 -0
  504. data/spec/unit/type/zone_spec.rb +0 -0
  505. data/spec/unit/type/zpool_spec.rb +0 -0
  506. data/spec/unit/type_spec.rb +0 -0
  507. data/spec/unit/util/autoload_spec.rb +0 -0
  508. data/spec/unit/util/backups_spec.rb +0 -0
  509. data/spec/unit/util/checksums_spec.rb +0 -0
  510. data/spec/unit/util/colors_spec.rb +0 -0
  511. data/spec/unit/util/command_line_spec.rb +0 -0
  512. data/spec/unit/util/constant_inflector_spec.rb +0 -0
  513. data/spec/unit/util/diff_spec.rb +0 -0
  514. data/spec/unit/util/errors_spec.rb +0 -0
  515. data/spec/unit/util/execution_spec.rb +0 -0
  516. data/spec/unit/util/execution_stub_spec.rb +0 -0
  517. data/spec/unit/util/feature_spec.rb +0 -0
  518. data/spec/unit/util/filetype_spec.rb +0 -0
  519. data/spec/unit/util/ldap/connection_spec.rb +0 -0
  520. data/spec/unit/util/ldap/generator_spec.rb +0 -0
  521. data/spec/unit/util/ldap/manager_spec.rb +0 -0
  522. data/spec/unit/util/log/destinations_spec.rb +0 -0
  523. data/spec/unit/util/log_spec.rb +0 -0
  524. data/spec/unit/util/logging_spec.rb +0 -0
  525. data/spec/unit/util/metric_spec.rb +0 -0
  526. data/spec/unit/util/monkey_patches_spec.rb +19 -3
  527. data/spec/unit/util/nagios_maker_spec.rb +0 -0
  528. data/spec/unit/util/network_device/cisco/device_spec.rb +0 -0
  529. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -0
  530. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -0
  531. data/spec/unit/util/network_device/config_spec.rb +0 -0
  532. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -0
  533. data/spec/unit/util/network_device/transport/base_spec.rb +0 -0
  534. data/spec/unit/util/network_device/transport/ssh_spec.rb +0 -0
  535. data/spec/unit/util/network_device/transport/telnet_spec.rb +0 -0
  536. data/spec/unit/util/package_spec.rb +0 -0
  537. data/spec/unit/util/posix_spec.rb +0 -0
  538. data/spec/unit/util/rdoc_spec.rb +0 -0
  539. data/spec/unit/util/resource_template_spec.rb +0 -0
  540. data/spec/unit/util/retry_action_spec.rb +0 -0
  541. data/spec/unit/util/run_mode_spec.rb +0 -0
  542. data/spec/unit/util/selinux_spec.rb +0 -0
  543. data/spec/unit/util/storage_spec.rb +0 -0
  544. data/spec/unit/util/suidmanager_spec.rb +0 -0
  545. data/spec/unit/util/symbolic_file_mode_spec.rb +0 -0
  546. data/spec/unit/util/tagging_spec.rb +0 -0
  547. data/spec/unit/util/user_attr_spec.rb +0 -0
  548. data/spec/unit/util/warnings_spec.rb +0 -0
  549. data/spec/unit/util/windows/adsi_spec.rb +0 -0
  550. data/spec/unit/util/windows/file_spec.rb +34 -0
  551. data/spec/unit/util/windows/root_certs_spec.rb +0 -0
  552. data/spec/unit/util/windows/sid_spec.rb +0 -0
  553. data/spec/unit/util_spec.rb +0 -0
  554. data/spec/watchr.rb +0 -0
  555. metadata +3386 -3358
  556. checksums.yaml +0 -7
@@ -8,19 +8,19 @@ describe 'the type asserter' do
8
8
  context 'when deferring formatting of subject'
9
9
  it 'can use an array' do
10
10
  expect{ asserter.assert_instance_of(['The %s in the %s', 'gizmo', 'gadget'], PIntegerType::DEFAULT, 'lens') }.to(
11
- raise_error(TypeAssertionError, 'The gizmo in the gadget has wrong type, expected an Integer value, got String'))
11
+ raise_error(TypeAssertionError, 'The gizmo in the gadget had wrong type, expected an Integer value, got String'))
12
12
  end
13
13
 
14
14
  it 'can use an array obtained from block' do
15
15
  expect do
16
16
  asserter.assert_instance_of('gizmo', PIntegerType::DEFAULT, 'lens') { |s| ['The %s in the %s', s, 'gadget'] }
17
- end.to(raise_error(TypeAssertionError, 'The gizmo in the gadget has wrong type, expected an Integer value, got String'))
17
+ end.to(raise_error(TypeAssertionError, 'The gizmo in the gadget had wrong type, expected an Integer value, got String'))
18
18
  end
19
19
 
20
20
  it 'can use an subject obtained from zero argument block' do
21
21
  expect do
22
22
  asserter.assert_instance_of(nil, PIntegerType::DEFAULT, 'lens') { 'The gizmo in the gadget' }
23
- end.to(raise_error(TypeAssertionError, 'The gizmo in the gadget has wrong type, expected an Integer value, got String'))
23
+ end.to(raise_error(TypeAssertionError, 'The gizmo in the gadget had wrong type, expected an Integer value, got String'))
24
24
  end
25
25
 
26
26
  it 'does not produce a string unless the assertion fails' do
@@ -833,6 +833,12 @@ describe 'The type calculator' do
833
833
  tested_types.each {|t2| expect(t).not_to be_assignable_to(t2::DEFAULT) }
834
834
  end
835
835
 
836
+ it 'A tuple with parameters is assignable to the default Tuple' do
837
+ t = Puppet::Pops::Types::PTupleType::DEFAULT
838
+ t2 = Puppet::Pops::Types::PTupleType.new([Puppet::Pops::Types::PStringType::DEFAULT])
839
+ expect(t2).to be_assignable_to(t)
840
+ end
841
+
836
842
  it 'Tuple is not assignable to any disjunct type' do
837
843
  tested_types = all_types - [
838
844
  Puppet::Pops::Types::PAnyType,
@@ -894,6 +900,18 @@ describe 'The type calculator' do
894
900
  t2 = struct_t({not_undef_t('other_member') => string_t})
895
901
  expect(t2).not_to be_assignable_to(t1)
896
902
  end
903
+
904
+ it 'A hash of string is not assignable to struct with integer value' do
905
+ t1 = struct_t({'foo' => integer_t, 'bar' => string_t})
906
+ t2 = hash_t(string_t, string_t, range_t(2, 2))
907
+ expect(t1.assignable?(t2)).to eql(false)
908
+ end
909
+
910
+ it 'A hash of with integer key is not assignable to struct with string key' do
911
+ t1 = struct_t({'foo' => string_t, 'bar' => string_t})
912
+ t2 = hash_t(integer_t, string_t, range_t(2, 2))
913
+ expect(t1.assignable?(t2)).to eql(false)
914
+ end
897
915
  end
898
916
 
899
917
  context 'for Callable, such that' do
@@ -906,6 +924,14 @@ describe 'The type calculator' do
906
924
  Puppet::Pops::Types::PNotUndefType]
907
925
  tested_types.each {|t2| expect(t).to_not be_assignable_to(t2::DEFAULT) }
908
926
  end
927
+
928
+ it 'a callable with parameter is assignable to the default callable' do
929
+ expect(callable_t(string_t)).to be_assignable_to(Puppet::Pops::Types::PCallableType::DEFAULT)
930
+ end
931
+
932
+ it 'the default callable is not assignable to a callable with parameter' do
933
+ expect(Puppet::Pops::Types::PCallableType::DEFAULT).not_to be_assignable_to(callable_t(string_t))
934
+ end
909
935
  end
910
936
 
911
937
  it 'should recognize mapped ruby types' do
@@ -1091,11 +1117,11 @@ describe 'The type calculator' do
1091
1117
  end
1092
1118
 
1093
1119
  it 'accepts an empty tuple as assignable to a tuple with a min size of 0' do
1094
- tuple1 = constrained_tuple_t(range_t(0, :default), Object)
1095
- tuple2 = tuple_t
1120
+ tuple1 = constrained_tuple_t(range_t(0, :default))
1121
+ tuple2 = tuple_t()
1096
1122
 
1097
1123
  expect(calculator.assignable?(tuple1, tuple2)).to eq(true)
1098
- expect(calculator.assignable?(tuple2, tuple1)).to eq(false)
1124
+ expect(calculator.assignable?(tuple2, tuple1)).to eq(true)
1099
1125
  end
1100
1126
 
1101
1127
  it 'should accept matching tuples' do
@@ -1157,7 +1183,7 @@ describe 'The type calculator' do
1157
1183
 
1158
1184
  it 'should accept empty array when tuple allows min of 0' do
1159
1185
  tuple1 = constrained_tuple_t(range_t(0, 1), Integer)
1160
- array = array_t(Integer, range_t(0, 0))
1186
+ array = array_t(unit_t, range_t(0, 0))
1161
1187
  expect(calculator.assignable?(tuple1, array)).to eq(true)
1162
1188
  expect(calculator.assignable?(array, tuple1)).to eq(false)
1163
1189
  end
@@ -1210,9 +1236,9 @@ describe 'The type calculator' do
1210
1236
  expect(calculator.assignable?(hsh, struct1)).to eq(true)
1211
1237
  end
1212
1238
 
1213
- it 'should accept empty hash with key_type undef' do
1239
+ it 'should accept empty hash with key_type unit' do
1214
1240
  struct1 = struct_t({'a'=>optional_t(Integer)})
1215
- hsh = hash_t(undef_t, undef_t, range_t(0, 0))
1241
+ hsh = hash_t(unit_t, unit_t, range_t(0, 0))
1216
1242
  expect(calculator.assignable?(struct1, hsh)).to eq(true)
1217
1243
  end
1218
1244
  end
@@ -175,6 +175,32 @@ describe 'The type factory' do
175
175
  expect(t.size_type.to).to eq(2)
176
176
  end
177
177
 
178
+ it 'it is illegal to create a typed empty array' do
179
+ expect {
180
+ Puppet::Pops::Types::TypeFactory.array_of(Puppet::Pops::Types::TypeFactory.data, Puppet::Pops::Types::TypeFactory.range(0,0))
181
+ }.to raise_error(/An empty collection may not specify an element type/)
182
+ end
183
+
184
+ it 'it is legal to create an empty array of unit element type' do
185
+ t = Puppet::Pops::Types::TypeFactory.array_of(Puppet::Pops::Types::PUnitType::DEFAULT, Puppet::Pops::Types::TypeFactory.range(0,0))
186
+ expect(t.size_type.class).to eq(Puppet::Pops::Types::PIntegerType)
187
+ expect(t.size_type.from).to eq(0)
188
+ expect(t.size_type.to).to eq(0)
189
+ end
190
+
191
+ it 'it is illegal to create a typed empty hash' do
192
+ expect {
193
+ Puppet::Pops::Types::TypeFactory.hash_of(Puppet::Pops::Types::TypeFactory.scalar, Puppet::Pops::Types::TypeFactory.data, Puppet::Pops::Types::TypeFactory.range(0,0))
194
+ }.to raise_error(/An empty collection may not specify an element type/)
195
+ end
196
+
197
+ it 'it is legal to create an empty hash where key and value types are of Unit type' do
198
+ t = Puppet::Pops::Types::TypeFactory.hash_of(Puppet::Pops::Types::PUnitType::DEFAULT, Puppet::Pops::Types::PUnitType::DEFAULT, Puppet::Pops::Types::TypeFactory.range(0,0))
199
+ expect(t.size_type.class).to eq(Puppet::Pops::Types::PIntegerType)
200
+ expect(t.size_type.from).to eq(0)
201
+ expect(t.size_type.to).to eq(0)
202
+ end
203
+
178
204
  context 'callable types' do
179
205
  it 'the callable methods produces a Callable' do
180
206
  t = Puppet::Pops::Types::TypeFactory.callable()
@@ -76,9 +76,14 @@ describe 'The type formatter' do
76
76
  expect(s.string(f.array_of_data)).to eq('Array')
77
77
  end
78
78
 
79
- it "should yield 'Array[Unit, 0, 0]' for an empty array" do
79
+ it "should yield 'Array[0, 0]' for an empty array" do
80
80
  t = f.array_of(PUnitType::DEFAULT, f.range(0,0))
81
- expect(s.string(t)).to eq('Array[Unit, 0, 0]')
81
+ expect(s.string(t)).to eq('Array[0, 0]')
82
+ end
83
+
84
+ it "should yield 'Hash[0, 0]' for an empty hash" do
85
+ t = f.hash_of(PUnitType::DEFAULT, PUnitType::DEFAULT, f.range(0,0))
86
+ expect(s.string(t)).to eq('Hash[0, 0]')
82
87
  end
83
88
 
84
89
  it "should yield 'Collection' and from/to for PCollectionType" do
@@ -92,6 +92,31 @@ describe 'the type mismatch describer' do
92
92
  /parameter 'evars' expects a match for EVariants = Enum\['a', 'b', 'c', 'd'\], got 'n'/))
93
93
  end
94
94
 
95
+ context 'when reporting a mismatch between' do
96
+ let(:parser) { TypeParser.new }
97
+ let(:subject) { TypeMismatchDescriber.singleton }
98
+
99
+ context 'hash and struct' do
100
+ it 'reports a size mismatch when hash has unlimited size' do
101
+ expected = parser.parse('Struct[{a=>Integer,b=>Integer}]')
102
+ actual = parser.parse('Hash[String,Integer]')
103
+ expect(subject.describe_mismatch('', expected, actual)).to eq('expected size to be 2, got unlimited')
104
+ end
105
+
106
+ it 'reports a size mismatch when hash has specified but incorrect size' do
107
+ expected = parser.parse('Struct[{a=>Integer,b=>Integer}]')
108
+ actual = parser.parse('Hash[String,Integer,1,1]')
109
+ expect(subject.describe_mismatch('', expected, actual)).to eq('expected size to be 2, got 1')
110
+ end
111
+
112
+ it 'reports a full type mismatch when size is correct but hash value type is incorrect' do
113
+ expected = parser.parse('Struct[{a=>Integer,b=>String}]')
114
+ actual = parser.parse('Hash[String,Integer,2,2]')
115
+ expect(subject.describe_mismatch('', expected, actual)).to eq("expected a Struct[{'a' => Integer, 'b' => String}] value, got Hash[String, Integer]")
116
+ end
117
+ end
118
+ end
119
+
95
120
  context 'when using present tense' do
96
121
  let(:parser) { TypeParser.new }
97
122
  let(:subject) { TypeMismatchDescriber.singleton }
@@ -243,7 +243,7 @@ describe Puppet::Pops::Types::TypeParser do
243
243
 
244
244
  it 'parses a parameterized callable type with 0 min/max' do
245
245
  t = parser.parse("Callable[0,0]")
246
- expect(t).to be_the_type(types.callable())
246
+ expect(t).to be_the_type(types.callable(0,0))
247
247
  expect(t.param_types.types).to be_empty
248
248
  end
249
249
 
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/pops'
3
+ require 'puppet_spec/compiler'
3
4
 
4
5
  module Puppet::Pops
5
6
  module Types
@@ -150,6 +151,92 @@ describe 'Puppet Type System' do
150
151
  end
151
152
  end
152
153
 
154
+ context 'Iterable type' do
155
+ include PuppetSpec::Compiler
156
+
157
+ it 'can be parameterized with element type' do
158
+ code = <<-CODE
159
+ function foo(Iterable[String] $x) {
160
+ $x.each |$e| {
161
+ notice $e
162
+ }
163
+ }
164
+ foo([bar, baz, cake])
165
+ CODE
166
+ expect(eval_and_collect_notices(code)).to eq(['bar', 'baz', 'cake'])
167
+ end
168
+ end
169
+
170
+ context 'Iterator type' do
171
+ include PuppetSpec::Compiler
172
+
173
+ let!(:iterint) { tf.iterator(tf.integer) }
174
+
175
+ context 'when testing instance?' do
176
+ it 'will consider an iterable on an integer is an instance of Iterator[Integer]' do
177
+ expect(iterint.instance?(Iterable.on(3))).to be_truthy
178
+ end
179
+
180
+ it 'will consider an iterable on string to be an instance of Iterator[Integer]' do
181
+ expect(iterint.instance?(Iterable.on('string'))).to be_falsey
182
+ end
183
+ end
184
+
185
+ context 'when testing assignable?' do
186
+ it 'will consider an iterator with an assignable type as assignable' do
187
+ expect(tf.iterator(tf.numeric).assignable?(iterint)).to be_truthy
188
+ end
189
+
190
+ it 'will not consider an iterator with a non assignable type as assignable' do
191
+ expect(tf.iterator(tf.string).assignable?(iterint)).to be_falsey
192
+ end
193
+ end
194
+
195
+ context 'when asked for an iterable type' do
196
+ it 'the default iterator type returns the default iterable type' do
197
+ expect(PIteratorType::DEFAULT.iterable_type).to be(PIterableType::DEFAULT)
198
+ end
199
+
200
+ it 'a typed iterator type returns the an equally typed iterable type' do
201
+ expect(iterint.iterable_type).to eq(tf.iterable(tf.integer))
202
+ end
203
+ end
204
+
205
+ it 'can be parameterized with an element type' do
206
+ code = <<-CODE
207
+ function foo(Iterator[String] $x) {
208
+ $x.each |$e| {
209
+ notice $e
210
+ }
211
+ }
212
+ foo([bar, baz, cake].reverse_each)
213
+ CODE
214
+ expect(eval_and_collect_notices(code)).to eq(['cake', 'baz', 'bar'])
215
+ end
216
+ end
217
+
218
+ context 'Collection type' do
219
+ include PuppetSpec::Compiler
220
+
221
+ it 'can be parameterized with a range' do
222
+ code = <<-CODE
223
+ notice(Collection[5, default] == Collection[5])
224
+ notice(Collection[5, 5] > Tuple[Integer, 0, 10])
225
+ CODE
226
+ expect(eval_and_collect_notices(code)).to eq(['true', 'false'])
227
+ end
228
+ end
229
+
230
+ context 'Struct type' do
231
+ context 'can be used as key in hash' do
232
+ it 'compacts optional in optional in optional to just optional' do
233
+ key1 = tf.struct({'foo' => tf.string})
234
+ key2 = tf.struct({'foo' => tf.string})
235
+ expect({key1 => 'hi'}[key2]).to eq('hi')
236
+ end
237
+ end
238
+ end
239
+
153
240
  context 'Optional type' do
154
241
  let!(:overlapping_ints) { tf.variant(tf.range(10, 20), tf.range(18, 28)) }
155
242
  let!(:optoptopt) { tf.optional(tf.optional(tf.optional(overlapping_ints))) }
@@ -169,6 +256,7 @@ describe 'Puppet Type System' do
169
256
  context 'NotUndef type' do
170
257
  let!(:nununu) { tf.not_undef(tf.not_undef(tf.not_undef(tf.any))) }
171
258
  let!(:nuopt) { tf.not_undef(tf.optional(tf.any)) }
259
+ let!(:nuoptint) { tf.not_undef(tf.optional(tf.integer)) }
172
260
 
173
261
  context 'when normalizing' do
174
262
  it 'compacts NotUndef in NotUndef in NotUndef to just NotUndef' do
@@ -178,6 +266,10 @@ describe 'Puppet Type System' do
178
266
  it 'compacts Optional in NotUndef to just NotUndef' do
179
267
  expect(nuopt.normalize).to eq(tf.not_undef(tf.any))
180
268
  end
269
+
270
+ it 'compacts NotUndef[Optional[Integer]] in NotUndef to just Integer' do
271
+ expect(nuoptint.normalize).to eq(tf.integer)
272
+ end
181
273
  end
182
274
  end
183
275
 
@@ -235,6 +327,129 @@ describe 'Puppet Type System' do
235
327
  )
236
328
  end
237
329
  end
330
+
331
+ context 'when generalizing' do
332
+ it 'will generalize and compact contained types' do
333
+ expect(tf.variant(tf.string(tf.range(3,3)), tf.string(tf.range(5,5))).generalize).to eq(tf.variant(tf.string))
334
+ end
335
+ end
336
+ end
337
+
338
+ context 'Type aliases' do
339
+ include PuppetSpec::Compiler
340
+
341
+ it 'will resolve nested objects using self recursion' do
342
+ code = <<-CODE
343
+ type Tree = Hash[String,Variant[String,Tree]]
344
+ notice({a => {b => {c => d}}} =~ Tree)
345
+ CODE
346
+ expect(eval_and_collect_notices(code)).to eq(['true'])
347
+ end
348
+
349
+ it 'will find mismatches using self recursion' do
350
+ code = <<-CODE
351
+ type Tree = Hash[String,Variant[String,Tree]]
352
+ notice({a => {b => {c => 1}}} =~ Tree)
353
+ CODE
354
+ expect(eval_and_collect_notices(code)).to eq(['false'])
355
+ end
356
+
357
+ it 'will not allow an alias chain to only contain aliases' do
358
+ code = <<-CODE
359
+ type Foo = Bar
360
+ type Fee = Foo
361
+ type Bar = Fee
362
+ notice(0 =~ Bar)
363
+ CODE
364
+ expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Foo' cannot be resolved to a real type/)
365
+ end
366
+
367
+ it 'will not allow an alias chain that contains nothing but aliases and variants' do
368
+ code = <<-CODE
369
+ type Foo = Bar
370
+ type Fee = Foo
371
+ type Bar = Variant[Fee,Foo]
372
+ notice(0 =~ Bar)
373
+ CODE
374
+ expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Foo' cannot be resolved to a real type/)
375
+ end
376
+
377
+ it 'will not allow an alias to directly reference itself' do
378
+ code = <<-CODE
379
+ type Foo = Foo
380
+ notice(0 =~ Foo)
381
+ CODE
382
+ expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Foo' cannot be resolved to a real type/)
383
+ end
384
+
385
+ it 'will allow an alias to directly reference itself in a variant with other types' do
386
+ code = <<-CODE
387
+ type Foo = Variant[Foo,String]
388
+ notice(a =~ Foo)
389
+ CODE
390
+ expect(eval_and_collect_notices(code)).to eq(['true'])
391
+ end
392
+
393
+ it 'will allow an alias where a variant references an alias with a variant that references itself' do
394
+ code = <<-CODE
395
+ type X = Variant[Y, Integer]
396
+ type Y = Variant[X, String]
397
+
398
+ notice(X >= X)
399
+ notice(X >= Y)
400
+ notice(Y >= X)
401
+ CODE
402
+ expect(eval_and_collect_notices(code)).to eq(['true','true','true'])
403
+ end
404
+
405
+ it 'will detect a mismatch in an alias that directly references itself in a variant with other types' do
406
+ code = <<-CODE
407
+ type Foo = Variant[Foo,String]
408
+ notice(3 =~ Foo)
409
+ CODE
410
+ expect(eval_and_collect_notices(code)).to eq(['false'])
411
+ end
412
+
413
+ it 'will normalize a Variant containing a self reference so that the self reference is removed' do
414
+ code = <<-CODE
415
+ type Foo = Variant[Foo,String,Integer]
416
+ assert_type(Foo, /x/)
417
+ CODE
418
+ expect { eval_and_collect_notices(code) }.to raise_error(/expected a value of type String or Integer, got Regexp/)
419
+ end
420
+
421
+ it 'will handle a scalar correctly in combinations of nested aliased variants' do
422
+ code = <<-CODE
423
+ type Bar = Variant[Foo,Integer]
424
+ type Foo = Variant[Bar,String]
425
+ notice(a =~ Foo)
426
+ notice(1 =~ Foo)
427
+ notice(/x/ =~ Foo)
428
+ CODE
429
+ expect(eval_and_collect_notices(code)).to eq(['true', 'true', 'false'])
430
+ end
431
+
432
+ it 'will handle a non scalar correctly in combinations of nested aliased array with nested variants' do
433
+ code = <<-CODE
434
+ type Bar = Variant[Foo,Integer]
435
+ type Foo = Array[Variant[Bar,String]]
436
+ notice([a] =~ Foo)
437
+ notice([1] =~ Foo)
438
+ notice([/x/] =~ Foo)
439
+ CODE
440
+ expect(eval_and_collect_notices(code)).to eq(['true', 'true', 'false'])
441
+ end
442
+
443
+ it 'will handle a non scalar correctly in combinations of nested aliased variants with array' do
444
+ code = <<-CODE
445
+ type Bar = Variant[Foo,Array[Integer]]
446
+ type Foo = Variant[Bar,Array[String]]
447
+ notice([a] =~ Foo)
448
+ notice([1] =~ Foo)
449
+ notice([/x/] =~ Foo)
450
+ CODE
451
+ expect(eval_and_collect_notices(code)).to eq(['true', 'true', 'false'])
452
+ end
238
453
  end
239
454
  end
240
455
  end
File without changes
File without changes
File without changes