puppet 3.6.2-x86-mingw32 → 3.7.0-x86-mingw32

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

Potentially problematic release.


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

Files changed (751) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +2 -3
  3. data/Gemfile +14 -10
  4. data/README.md +1 -1
  5. data/ext/build_defaults.yaml +16 -1
  6. data/ext/debian/control +3 -2
  7. data/ext/debian/puppet-common.dirs +1 -0
  8. data/ext/debian/puppet-common.postinst +8 -8
  9. data/ext/debian/puppet-common.postrm +2 -1
  10. data/ext/project_data.yaml +16 -12
  11. data/ext/rack/example-passenger-vhost.conf +2 -2
  12. data/ext/redhat/puppet.spec.erb +6 -3
  13. data/ext/windows/service/daemon.rb +47 -41
  14. data/install.rb +1 -1
  15. data/lib/puppet.rb +34 -24
  16. data/lib/puppet/application.rb +34 -1
  17. data/lib/puppet/application/agent.rb +9 -8
  18. data/lib/puppet/application/apply.rb +14 -5
  19. data/lib/puppet/application/doc.rb +4 -11
  20. data/lib/puppet/application/master.rb +19 -17
  21. data/lib/puppet/application/queue.rb +1 -1
  22. data/lib/puppet/application/resource.rb +0 -1
  23. data/lib/puppet/configurer.rb +39 -2
  24. data/lib/puppet/configurer/downloader.rb +5 -10
  25. data/lib/puppet/configurer/downloader_factory.rb +34 -0
  26. data/lib/puppet/configurer/plugin_handler.rb +11 -17
  27. data/lib/puppet/defaults.rb +244 -119
  28. data/lib/puppet/environments.rb +8 -0
  29. data/lib/puppet/external/nagios/base.rb +1 -1
  30. data/lib/puppet/external/pson/pure/generator.rb +1 -8
  31. data/lib/puppet/face/ca.rb +7 -0
  32. data/lib/puppet/face/file/download.rb +5 -2
  33. data/lib/puppet/face/file/store.rb +1 -1
  34. data/lib/puppet/face/instrumentation_data.rb +2 -1
  35. data/lib/puppet/face/instrumentation_listener.rb +2 -1
  36. data/lib/puppet/face/instrumentation_probe.rb +2 -1
  37. data/lib/puppet/face/module/build.rb +2 -2
  38. data/lib/puppet/face/module/generate.rb +20 -12
  39. data/lib/puppet/face/module/install.rb +4 -3
  40. data/lib/puppet/face/module/uninstall.rb +7 -0
  41. data/lib/puppet/face/module/upgrade.rb +11 -3
  42. data/lib/puppet/face/node/clean.rb +1 -1
  43. data/lib/puppet/face/parser.rb +99 -7
  44. data/lib/puppet/feature/base.rb +18 -12
  45. data/lib/puppet/feature/cfacter.rb +14 -0
  46. data/lib/puppet/feature/pe_license.rb +4 -0
  47. data/lib/puppet/file_bucket/dipper.rb +19 -12
  48. data/lib/puppet/file_bucket/file.rb +73 -10
  49. data/lib/puppet/file_serving/configuration/parser.rb +3 -3
  50. data/lib/puppet/file_system.rb +1 -1
  51. data/lib/puppet/file_system/file19.rb +41 -0
  52. data/lib/puppet/file_system/file19windows.rb +0 -1
  53. data/lib/puppet/file_system/uniquefile.rb +190 -0
  54. data/lib/puppet/forge.rb +34 -7
  55. data/lib/puppet/forge/errors.rb +5 -6
  56. data/lib/puppet/forge/repository.rb +14 -2
  57. data/lib/puppet/functions.rb +19 -12
  58. data/lib/puppet/functions/assert_type.rb +27 -10
  59. data/lib/puppet/functions/each.rb +111 -0
  60. data/lib/puppet/functions/epp.rb +54 -0
  61. data/lib/puppet/functions/filter.rb +113 -0
  62. data/lib/puppet/functions/inline_epp.rb +88 -0
  63. data/lib/puppet/functions/map.rb +97 -0
  64. data/lib/puppet/functions/match.rb +102 -0
  65. data/lib/puppet/functions/reduce.rb +94 -0
  66. data/lib/puppet/functions/slice.rb +126 -0
  67. data/lib/puppet/functions/with.rb +23 -0
  68. data/lib/puppet/indirector/catalog/compiler.rb +4 -4
  69. data/lib/puppet/indirector/data_binding/hiera.rb +2 -45
  70. data/lib/puppet/indirector/facts/couch.rb +3 -1
  71. data/lib/puppet/indirector/facts/facter.rb +52 -65
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +6 -3
  73. data/lib/puppet/indirector/hiera.rb +48 -0
  74. data/lib/puppet/indirector/indirection.rb +1 -1
  75. data/lib/puppet/indirector/request.rb +9 -3
  76. data/lib/puppet/indirector/resource/ral.rb +1 -1
  77. data/lib/puppet/indirector/rest.rb +7 -3
  78. data/lib/puppet/loaders.rb +0 -1
  79. data/lib/puppet/module.rb +2 -1
  80. data/lib/puppet/module_tool.rb +2 -0
  81. data/lib/puppet/module_tool/applications/application.rb +4 -5
  82. data/lib/puppet/module_tool/applications/builder.rb +64 -5
  83. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -2
  84. data/lib/puppet/module_tool/applications/unpacker.rb +14 -0
  85. data/lib/puppet/module_tool/applications/upgrader.rb +23 -13
  86. data/lib/puppet/module_tool/dependency.rb +12 -0
  87. data/lib/puppet/module_tool/errors/shared.rb +1 -1
  88. data/lib/puppet/module_tool/errors/upgrader.rb +20 -0
  89. data/lib/puppet/module_tool/installed_modules.rb +6 -1
  90. data/lib/puppet/module_tool/metadata.rb +53 -3
  91. data/lib/puppet/module_tool/modulefile.rb +1 -1
  92. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +7 -0
  93. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
  94. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -17
  95. data/lib/puppet/module_tool/tar/mini.rb +20 -2
  96. data/lib/puppet/network/http.rb +5 -0
  97. data/lib/puppet/network/http/api/v1.rb +2 -2
  98. data/lib/puppet/network/http/api/v2/environments.rb +15 -1
  99. data/lib/puppet/network/http/connection.rb +54 -68
  100. data/lib/puppet/network/http/factory.rb +44 -0
  101. data/lib/puppet/network/http/handler.rb +12 -6
  102. data/lib/puppet/network/http/nocache_pool.rb +21 -0
  103. data/lib/puppet/network/http/pool.rb +120 -0
  104. data/lib/puppet/network/http/rack/rest.rb +3 -1
  105. data/lib/puppet/network/http/session.rb +17 -0
  106. data/lib/puppet/network/http/site.rb +39 -0
  107. data/lib/puppet/network/http/webrick/rest.rb +3 -1
  108. data/lib/puppet/network/http_pool.rb +3 -4
  109. data/lib/puppet/node.rb +19 -6
  110. data/lib/puppet/node/environment.rb +34 -8
  111. data/lib/puppet/parser/ast/collection.rb +4 -0
  112. data/lib/puppet/parser/ast/collexpr.rb +1 -1
  113. data/lib/puppet/parser/ast/node.rb +5 -0
  114. data/lib/puppet/parser/ast/pops_bridge.rb +49 -6
  115. data/lib/puppet/parser/compiler.rb +66 -38
  116. data/lib/puppet/parser/e4_parser_adapter.rb +2 -2
  117. data/lib/puppet/parser/files.rb +76 -33
  118. data/lib/puppet/parser/functions.rb +1 -7
  119. data/lib/puppet/parser/functions/assert_type.rb +31 -0
  120. data/lib/puppet/parser/functions/contain.rb +15 -5
  121. data/lib/puppet/parser/functions/create_resources.rb +5 -1
  122. data/lib/puppet/parser/functions/digest.rb +5 -0
  123. data/lib/puppet/parser/functions/each.rb +46 -107
  124. data/lib/puppet/parser/functions/epp.rb +13 -9
  125. data/lib/puppet/parser/functions/file.rb +20 -12
  126. data/lib/puppet/parser/functions/filter.rb +32 -88
  127. data/lib/puppet/parser/functions/include.rb +12 -24
  128. data/lib/puppet/parser/functions/inline_epp.rb +9 -12
  129. data/lib/puppet/parser/functions/lookup.rb +1 -1
  130. data/lib/puppet/parser/functions/map.rb +30 -83
  131. data/lib/puppet/parser/functions/match.rb +28 -0
  132. data/lib/puppet/parser/functions/reduce.rb +69 -98
  133. data/lib/puppet/parser/functions/require.rb +13 -5
  134. data/lib/puppet/parser/functions/search.rb +6 -1
  135. data/lib/puppet/parser/functions/slice.rb +35 -103
  136. data/lib/puppet/parser/functions/template.rb +12 -5
  137. data/lib/puppet/parser/functions/with.rb +21 -0
  138. data/lib/puppet/parser/lexer.rb +1 -1
  139. data/lib/puppet/parser/parser_factory.rb +21 -33
  140. data/lib/puppet/parser/resource.rb +2 -3
  141. data/lib/puppet/parser/scope.rb +85 -15
  142. data/lib/puppet/pops.rb +9 -11
  143. data/lib/puppet/pops/adapters.rb +2 -1
  144. data/lib/puppet/pops/binder/bindings_checker.rb +4 -4
  145. data/lib/puppet/pops/binder/bindings_factory.rb +6 -6
  146. data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/bindings_loader.rb +2 -2
  148. data/lib/puppet/pops/binder/bindings_model.rb +58 -191
  149. data/lib/puppet/pops/binder/bindings_model_dumper.rb +1 -1
  150. data/lib/puppet/pops/binder/bindings_model_meta.rb +215 -0
  151. data/lib/puppet/pops/binder/injector.rb +9 -9
  152. data/lib/puppet/pops/binder/key_factory.rb +2 -2
  153. data/lib/puppet/pops/binder/lookup.rb +14 -6
  154. data/lib/puppet/pops/binder/producers.rb +9 -12
  155. data/lib/puppet/pops/evaluator/access_operator.rb +35 -29
  156. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +175 -0
  157. data/lib/puppet/pops/evaluator/callable_signature.rb +1 -2
  158. data/lib/puppet/pops/evaluator/closure.rb +151 -35
  159. data/lib/puppet/pops/evaluator/compare_operator.rb +26 -22
  160. data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -15
  161. data/lib/puppet/pops/evaluator/evaluator_impl.rb +277 -229
  162. data/lib/puppet/pops/evaluator/relationship_operator.rb +3 -2
  163. data/lib/puppet/pops/evaluator/runtime3_support.rb +86 -53
  164. data/lib/puppet/pops/functions/dispatch.rb +9 -4
  165. data/lib/puppet/pops/functions/dispatcher.rb +2 -169
  166. data/lib/puppet/pops/issue_reporter.rb +14 -6
  167. data/lib/puppet/pops/issues.rb +96 -21
  168. data/lib/puppet/pops/loader/base_loader.rb +3 -3
  169. data/lib/puppet/pops/loader/loader.rb +1 -1
  170. data/lib/puppet/pops/loader/loader_paths.rb +2 -21
  171. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
  172. data/lib/puppet/pops/loader/static_loader.rb +12 -2
  173. data/lib/puppet/pops/model/ast_transformer.rb +4 -24
  174. data/lib/puppet/pops/model/factory.rb +72 -10
  175. data/lib/puppet/pops/model/model.rb +82 -574
  176. data/lib/puppet/pops/model/model_label_provider.rb +4 -2
  177. data/lib/puppet/pops/model/model_meta.rb +576 -0
  178. data/lib/puppet/pops/model/model_tree_dumper.rb +27 -5
  179. data/lib/puppet/pops/parser/egrammar.ra +209 -221
  180. data/lib/puppet/pops/parser/eparser.rb +1459 -1431
  181. data/lib/puppet/pops/parser/evaluating_parser.rb +15 -75
  182. data/lib/puppet/pops/parser/lexer2.rb +14 -10
  183. data/lib/puppet/pops/parser/lexer_support.rb +6 -0
  184. data/lib/puppet/pops/parser/locator.rb +1 -1
  185. data/lib/puppet/pops/parser/parser_support.rb +31 -49
  186. data/lib/puppet/pops/patterns.rb +10 -10
  187. data/lib/puppet/pops/semantic_error.rb +1 -1
  188. data/lib/puppet/pops/types/class_loader.rb +24 -13
  189. data/lib/puppet/pops/types/type_calculator.rb +188 -87
  190. data/lib/puppet/pops/types/type_factory.rb +79 -53
  191. data/lib/puppet/pops/types/type_parser.rb +22 -16
  192. data/lib/puppet/pops/types/types.rb +283 -392
  193. data/lib/puppet/pops/types/types_meta.rb +223 -0
  194. data/lib/puppet/pops/utils.rb +16 -14
  195. data/lib/puppet/pops/validation/checker4_0.rb +264 -18
  196. data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
  197. data/lib/puppet/pops/visitor.rb +0 -103
  198. data/lib/puppet/provider/exec.rb +10 -1
  199. data/lib/puppet/provider/file/windows.rb +3 -4
  200. data/lib/puppet/provider/group/windows_adsi.rb +10 -10
  201. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -4
  202. data/lib/puppet/provider/package/apt.rb +5 -1
  203. data/lib/puppet/provider/package/gem.rb +7 -3
  204. data/lib/puppet/provider/package/openbsd.rb +84 -7
  205. data/lib/puppet/provider/package/pacman.rb +29 -4
  206. data/lib/puppet/provider/package/rpm.rb +5 -7
  207. data/lib/puppet/provider/package/sun.rb +5 -1
  208. data/lib/puppet/provider/package/windows.rb +6 -1
  209. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  210. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  211. data/lib/puppet/provider/package/windows/package.rb +13 -1
  212. data/lib/puppet/provider/package/yum.rb +7 -3
  213. data/lib/puppet/provider/package/zypper.rb +5 -1
  214. data/lib/puppet/provider/parsedfile.rb +17 -1
  215. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +6 -12
  216. data/lib/puppet/provider/service/freebsd.rb +12 -12
  217. data/lib/puppet/provider/service/init.rb +5 -0
  218. data/lib/puppet/provider/service/launchd.rb +0 -3
  219. data/lib/puppet/provider/service/openbsd.rb +8 -7
  220. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  221. data/lib/puppet/provider/sshkey/parsed.rb +5 -0
  222. data/lib/puppet/provider/user/user_role_add.rb +5 -4
  223. data/lib/puppet/provider/user/windows_adsi.rb +8 -8
  224. data/lib/puppet/provider/zone/solaris.rb +1 -1
  225. data/lib/puppet/reference/metaparameter.rb +8 -6
  226. data/lib/puppet/reports/store.rb +4 -9
  227. data/lib/puppet/resource.rb +75 -11
  228. data/lib/puppet/resource/catalog.rb +9 -7
  229. data/lib/puppet/resource/type.rb +27 -0
  230. data/lib/puppet/settings.rb +61 -41
  231. data/lib/puppet/settings/base_setting.rb +9 -3
  232. data/lib/puppet/settings/environment_conf.rb +32 -4
  233. data/lib/puppet/settings/file_setting.rb +9 -1
  234. data/lib/puppet/settings/priority_setting.rb +5 -5
  235. data/lib/puppet/ssl.rb +1 -0
  236. data/lib/puppet/ssl/certificate_authority.rb +15 -6
  237. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +2 -1
  238. data/lib/puppet/ssl/host.rb +3 -2
  239. data/lib/puppet/ssl/inventory.rb +11 -6
  240. data/lib/puppet/ssl/validator/default_validator.rb +1 -0
  241. data/lib/puppet/ssl/validator/no_validator.rb +3 -0
  242. data/lib/puppet/transaction.rb +29 -0
  243. data/lib/puppet/transaction/resource_harness.rb +16 -3
  244. data/lib/puppet/type.rb +71 -49
  245. data/lib/puppet/type/exec.rb +36 -8
  246. data/lib/puppet/type/file.rb +56 -16
  247. data/lib/puppet/type/file/content.rb +3 -3
  248. data/lib/puppet/type/file/mode.rb +12 -3
  249. data/lib/puppet/type/file/source.rb +4 -1
  250. data/lib/puppet/type/group.rb +1 -1
  251. data/lib/puppet/type/mount.rb +1 -3
  252. data/lib/puppet/type/resources.rb +59 -35
  253. data/lib/puppet/type/ssh_authorized_key.rb +54 -16
  254. data/lib/puppet/type/sshkey.rb +1 -1
  255. data/lib/puppet/type/user.rb +17 -11
  256. data/lib/puppet/type/yumrepo.rb +59 -8
  257. data/lib/puppet/type/zone.rb +3 -6
  258. data/lib/puppet/util.rb +64 -55
  259. data/lib/puppet/util/autoload.rb +2 -2
  260. data/lib/puppet/util/colors.rb +61 -19
  261. data/lib/puppet/util/command_line.rb +21 -4
  262. data/lib/puppet/util/execution.rb +41 -29
  263. data/lib/puppet/util/feature.rb +15 -4
  264. data/lib/puppet/util/filetype.rb +6 -2
  265. data/lib/puppet/util/http_proxy.rb +29 -2
  266. data/lib/puppet/util/lockfile.rb +1 -1
  267. data/lib/puppet/util/log/destinations.rb +7 -3
  268. data/lib/puppet/util/logging.rb +44 -14
  269. data/lib/puppet/util/pidlock.rb +11 -5
  270. data/lib/puppet/util/posix.rb +21 -31
  271. data/lib/puppet/util/profiler.rb +17 -9
  272. data/lib/puppet/util/profiler/aggregate.rb +85 -0
  273. data/lib/puppet/util/profiler/around_profiler.rb +67 -0
  274. data/lib/puppet/util/profiler/logging.rb +12 -11
  275. data/lib/puppet/util/profiler/wall_clock.rb +7 -6
  276. data/lib/puppet/util/rdoc.rb +8 -1
  277. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  278. data/lib/puppet/util/suidmanager.rb +1 -8
  279. data/lib/puppet/util/windows.rb +14 -3
  280. data/lib/puppet/util/windows/access_control_list.rb +4 -4
  281. data/lib/puppet/util/{adsi.rb → windows/adsi.rb} +99 -37
  282. data/lib/puppet/util/windows/api_types.rb +255 -0
  283. data/lib/puppet/util/windows/com.rb +224 -0
  284. data/lib/puppet/util/windows/error.rb +72 -5
  285. data/lib/puppet/util/windows/file.rb +254 -132
  286. data/lib/puppet/util/windows/process.rb +293 -177
  287. data/lib/puppet/util/windows/registry.rb +12 -2
  288. data/lib/puppet/util/windows/root_certs.rb +16 -9
  289. data/lib/puppet/util/windows/security.rb +501 -232
  290. data/lib/puppet/util/windows/sid.rb +80 -36
  291. data/lib/puppet/util/windows/string.rb +2 -0
  292. data/lib/puppet/util/windows/taskscheduler.rb +1241 -0
  293. data/lib/puppet/util/windows/user.rb +241 -57
  294. data/lib/puppet/vendor.rb +3 -1
  295. data/lib/puppet/vendor/load_pathspec.rb +1 -0
  296. data/lib/puppet/vendor/load_rgen.rb +1 -0
  297. data/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
  298. data/lib/puppet/vendor/pathspec/LICENSE +201 -0
  299. data/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
  300. data/lib/puppet/vendor/pathspec/README.md +53 -0
  301. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +121 -0
  302. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
  303. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
  304. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
  305. data/lib/puppet/vendor/require_vendored.rb +2 -0
  306. data/lib/puppet/vendor/rgen/CHANGELOG +197 -0
  307. data/lib/puppet/vendor/rgen/MIT-LICENSE +20 -0
  308. data/lib/puppet/vendor/rgen/PUPPET_README.md +6 -0
  309. data/lib/puppet/vendor/rgen/README.rdoc +78 -0
  310. data/lib/puppet/vendor/rgen/Rakefile +41 -0
  311. data/lib/puppet/vendor/rgen/TODO +41 -0
  312. data/lib/puppet/vendor/rgen/anounce.txt +61 -0
  313. data/lib/puppet/vendor/rgen/design_rationale.txt +71 -0
  314. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +54 -0
  315. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +32 -0
  316. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +562 -0
  317. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +45 -0
  318. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +43 -0
  319. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +103 -0
  320. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +89 -0
  321. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +559 -0
  322. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +26 -0
  323. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +20 -0
  324. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +91 -0
  325. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +28 -0
  326. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +37 -0
  327. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +172 -0
  328. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +45 -0
  329. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +218 -0
  330. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +81 -0
  331. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +69 -0
  332. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +47 -0
  333. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +167 -0
  334. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +91 -0
  335. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +129 -0
  336. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +63 -0
  337. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +140 -0
  338. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +289 -0
  339. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +66 -0
  340. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +66 -0
  341. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
  342. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +169 -0
  343. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +126 -0
  344. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +331 -0
  345. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +94 -0
  346. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +137 -0
  347. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +97 -0
  348. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +128 -0
  349. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +47 -0
  350. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +168 -0
  351. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +224 -0
  352. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +556 -0
  353. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +174 -0
  354. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +89 -0
  355. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +77 -0
  356. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
  357. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +168 -0
  358. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
  359. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +42 -0
  360. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +32 -0
  361. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +334 -0
  362. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +225 -0
  363. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +156 -0
  364. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +121 -0
  365. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +18 -0
  366. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +47 -0
  367. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +116 -0
  368. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +71 -0
  369. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +98 -0
  370. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +297 -0
  371. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +83 -0
  372. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +87 -0
  373. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +234 -0
  374. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +26 -0
  375. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +475 -0
  376. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +61 -0
  377. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +67 -0
  378. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +124 -0
  379. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +84 -0
  380. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +114 -0
  381. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +68 -0
  382. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +142 -0
  383. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +29 -0
  384. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +42 -0
  385. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +329 -0
  386. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +79 -0
  387. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +127 -0
  388. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +64 -0
  389. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +35 -0
  390. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +23 -0
  391. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +54 -0
  392. data/lib/puppet/vendor/rgen/test/environment_test.rb +90 -0
  393. data/lib/puppet/vendor/rgen/test/json_test.rb +171 -0
  394. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +1482 -0
  395. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +57 -0
  396. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +131 -0
  397. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +98 -0
  398. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +70 -0
  399. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +42 -0
  400. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +44 -0
  401. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +9 -0
  402. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +178 -0
  403. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +59 -0
  404. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +242 -0
  405. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +163 -0
  406. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +163 -0
  407. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +156 -0
  408. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +94 -0
  409. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +42 -0
  410. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +23 -0
  411. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +6 -0
  412. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +30 -0
  413. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +58 -0
  414. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +48 -0
  415. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +102 -0
  416. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +117 -0
  417. data/lib/puppet/vendor/rgen/test/rgen_test.rb +26 -0
  418. data/lib/puppet/vendor/rgen/test/template_language_test.rb +163 -0
  419. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +29 -0
  420. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +9 -0
  421. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +4 -0
  422. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
  423. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +1 -0
  424. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +12 -0
  425. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +5 -0
  426. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +11 -0
  427. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +7 -0
  428. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +5 -0
  429. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +8 -0
  430. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +8 -0
  431. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +7 -0
  432. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +12 -0
  433. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +1 -0
  434. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +3 -0
  435. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +5 -0
  436. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +3 -0
  437. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +3 -0
  438. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +24 -0
  439. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +13 -0
  440. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +10 -0
  441. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +17 -0
  442. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +31 -0
  443. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +9 -0
  444. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +3 -0
  445. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +4 -0
  446. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +29 -0
  447. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +119 -0
  448. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  449. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +1029 -0
  450. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +317 -0
  451. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +101 -0
  452. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +22 -0
  453. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +67 -0
  454. data/lib/puppet/vendor/rgen/test/transformer_test.rb +254 -0
  455. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +99 -0
  456. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +97 -0
  457. data/lib/puppet/vendor/rgen/test/util_test.rb +5 -0
  458. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +160 -0
  459. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
  460. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
  461. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
  462. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
  463. data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +6 -0
  464. data/lib/puppet/vendor/semantic/PUPPET_README.md +6 -0
  465. data/lib/puppet/version.rb +1 -1
  466. data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
  467. data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
  468. data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
  469. data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
  470. data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +1 -1
  471. data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
  472. data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
  473. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
  474. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
  475. data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +2 -2
  476. data/spec/fixtures/unit/parser/lexer/casestatement.pp +14 -14
  477. data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +3 -3
  478. data/spec/fixtures/unit/parser/lexer/classincludes.pp +3 -3
  479. data/spec/fixtures/unit/parser/lexer/classpathtest.pp +1 -1
  480. data/spec/fixtures/unit/parser/lexer/collection_override.pp +1 -1
  481. data/spec/fixtures/unit/parser/lexer/componentrequire.pp +2 -2
  482. data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +5 -5
  483. data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +2 -2
  484. data/spec/fixtures/unit/parser/lexer/filecreate.pp +2 -2
  485. data/spec/fixtures/unit/parser/lexer/ifexpression.pp +1 -1
  486. data/spec/fixtures/unit/parser/lexer/implicititeration.pp +4 -4
  487. data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +3 -3
  488. data/spec/fixtures/unit/parser/lexer/multisubs.pp +2 -2
  489. data/spec/fixtures/unit/parser/lexer/namevartest.pp +2 -2
  490. data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +1 -1
  491. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +1 -1
  492. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +14 -14
  493. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +3 -3
  494. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +3 -3
  495. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +1 -1
  496. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +1 -1
  497. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +2 -2
  498. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +5 -5
  499. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +2 -2
  500. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +2 -2
  501. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +1 -1
  502. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +4 -4
  503. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +3 -3
  504. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +2 -2
  505. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +2 -2
  506. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +1 -1
  507. data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
  508. data/spec/fixtures/unit/type/user/authorized_keys +1 -1
  509. data/spec/integration/agent/logging_spec.rb +4 -0
  510. data/spec/integration/application/doc_spec.rb +4 -3
  511. data/spec/integration/configurer_spec.rb +0 -14
  512. data/spec/integration/defaults_spec.rb +26 -0
  513. data/spec/integration/environments/default_manifest_spec.rb +274 -0
  514. data/spec/integration/faces/documentation_spec.rb +0 -4
  515. data/spec/integration/file_bucket/file_spec.rb +21 -0
  516. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -2
  517. data/spec/integration/indirector/catalog/queue_spec.rb +0 -2
  518. data/spec/integration/indirector/facts/facter_spec.rb +1 -1
  519. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  520. data/spec/integration/node/environment_spec.rb +24 -8
  521. data/spec/integration/parser/catalog_spec.rb +10 -10
  522. data/spec/integration/parser/class_spec.rb +37 -0
  523. data/spec/integration/parser/collector_spec.rb +234 -75
  524. data/spec/integration/parser/compiler_spec.rb +385 -401
  525. data/spec/integration/parser/conditionals_spec.rb +117 -0
  526. data/spec/integration/parser/future_compiler_spec.rb +359 -8
  527. data/spec/integration/parser/node_spec.rb +185 -0
  528. data/spec/integration/parser/resource_expressions_spec.rb +286 -0
  529. data/spec/integration/parser/ruby_manifest_spec.rb +0 -4
  530. data/spec/integration/parser/scope_spec.rb +94 -151
  531. data/spec/integration/provider/cron/crontab_spec.rb +137 -148
  532. data/spec/integration/ssl/certificate_authority_spec.rb +26 -0
  533. data/spec/integration/ssl/certificate_request_spec.rb +0 -6
  534. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -2
  535. data/spec/integration/ssl/host_spec.rb +0 -2
  536. data/spec/integration/transaction_spec.rb +16 -0
  537. data/spec/integration/type/file_spec.rb +14 -13
  538. data/spec/integration/type/nagios_spec.rb +6 -15
  539. data/spec/integration/type/sshkey_spec.rb +22 -0
  540. data/spec/integration/type/tidy_spec.rb +3 -0
  541. data/spec/integration/type/user_spec.rb +8 -3
  542. data/spec/integration/util/autoload_spec.rb +6 -6
  543. data/spec/integration/util/rdoc/parser_spec.rb +7 -0
  544. data/spec/integration/util/windows/process_spec.rb +12 -0
  545. data/spec/integration/util/windows/security_spec.rb +36 -35
  546. data/spec/integration/util/windows/user_spec.rb +75 -9
  547. data/spec/integration/util_spec.rb +2 -2
  548. data/spec/lib/matchers/resource.rb +1 -0
  549. data/spec/lib/puppet_spec/compiler.rb +15 -2
  550. data/spec/lib/puppet_spec/files.rb +10 -0
  551. data/spec/lib/puppet_spec/language.rb +74 -0
  552. data/spec/lib/puppet_spec/matchers.rb +59 -32
  553. data/spec/lib/puppet_spec/module_tool/stub_source.rb +3 -0
  554. data/spec/shared_behaviours/hiera_indirections.rb +99 -0
  555. data/spec/shared_behaviours/iterative_functions.rb +69 -0
  556. data/spec/unit/application/apply_spec.rb +4 -2
  557. data/spec/unit/application/doc_spec.rb +17 -13
  558. data/spec/unit/application/master_spec.rb +35 -27
  559. data/spec/unit/application/resource_spec.rb +0 -5
  560. data/spec/unit/configurer/downloader_factory_spec.rb +96 -0
  561. data/spec/unit/configurer/downloader_spec.rb +3 -24
  562. data/spec/unit/configurer/plugin_handler_spec.rb +22 -22
  563. data/spec/unit/configurer_spec.rb +0 -4
  564. data/spec/unit/defaults_spec.rb +30 -0
  565. data/spec/unit/face/config_spec.rb +2 -1
  566. data/spec/unit/face/module/build_spec.rb +2 -2
  567. data/spec/unit/face/module/install_spec.rb +8 -8
  568. data/spec/unit/face/parser_spec.rb +71 -33
  569. data/spec/unit/file_bucket/file_spec.rb +2 -2
  570. data/spec/unit/file_system/uniquefile_spec.rb +184 -0
  571. data/spec/unit/forge/errors_spec.rb +4 -6
  572. data/spec/unit/forge/module_release_spec.rb +178 -89
  573. data/spec/unit/forge/repository_spec.rb +110 -2
  574. data/spec/unit/forge_spec.rb +39 -3
  575. data/spec/unit/functions/assert_type_spec.rb +22 -3
  576. data/spec/unit/{parser/methods → functions}/each_spec.rb +21 -1
  577. data/spec/unit/{parser/functions → functions}/epp_spec.rb +61 -9
  578. data/spec/unit/{parser/methods → functions}/filter_spec.rb +34 -38
  579. data/spec/unit/{parser/functions → functions}/inline_epp_spec.rb +18 -3
  580. data/spec/unit/functions/map_spec.rb +169 -0
  581. data/spec/unit/functions/match_spec.rb +57 -0
  582. data/spec/unit/{parser/methods → functions}/reduce_spec.rb +23 -5
  583. data/spec/unit/{parser/methods → functions}/slice_spec.rb +34 -21
  584. data/spec/unit/functions/with_spec.rb +35 -0
  585. data/spec/unit/functions4_spec.rb +7 -8
  586. data/spec/unit/indirector/catalog/compiler_spec.rb +0 -2
  587. data/spec/unit/indirector/catalog/static_compiler_spec.rb +11 -0
  588. data/spec/unit/indirector/data_binding/hiera_spec.rb +1 -96
  589. data/spec/unit/indirector/facts/facter_spec.rb +69 -102
  590. data/spec/unit/indirector/hiera_spec.rb +17 -0
  591. data/spec/unit/indirector/request_spec.rb +2 -4
  592. data/spec/unit/indirector/resource/ral_spec.rb +5 -0
  593. data/spec/unit/indirector/resource_type/parser_spec.rb +17 -12
  594. data/spec/unit/indirector/rest_spec.rb +36 -6
  595. data/spec/unit/interface/face_collection_spec.rb +2 -2
  596. data/spec/unit/module_tool/applications/builder_spec.rb +364 -14
  597. data/spec/unit/module_tool/applications/uninstaller_spec.rb +22 -0
  598. data/spec/unit/module_tool/applications/unpacker_spec.rb +40 -0
  599. data/spec/unit/module_tool/applications/upgrader_spec.rb +22 -0
  600. data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
  601. data/spec/unit/module_tool/metadata_spec.rb +72 -4
  602. data/spec/unit/module_tool/tar/mini_spec.rb +2 -1
  603. data/spec/unit/network/authentication_spec.rb +4 -0
  604. data/spec/unit/network/http/api/v2/environments_spec.rb +24 -3
  605. data/spec/unit/network/http/connection_spec.rb +127 -92
  606. data/spec/unit/network/http/factory_spec.rb +82 -0
  607. data/spec/unit/network/http/handler_spec.rb +23 -13
  608. data/spec/unit/network/http/nocache_pool_spec.rb +43 -0
  609. data/spec/unit/network/http/pool_spec.rb +269 -0
  610. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  611. data/spec/unit/network/http/session_spec.rb +43 -0
  612. data/spec/unit/network/http/site_spec.rb +90 -0
  613. data/spec/unit/network/http/webrick_spec.rb +1 -1
  614. data/spec/unit/network/http_pool_spec.rb +9 -6
  615. data/spec/unit/network/http_spec.rb +10 -0
  616. data/spec/unit/node/environment_spec.rb +54 -0
  617. data/spec/unit/node_spec.rb +3 -5
  618. data/spec/unit/parser/compiler_spec.rb +9 -2
  619. data/spec/unit/parser/files_spec.rb +19 -0
  620. data/spec/unit/parser/functions/contain_spec.rb +51 -0
  621. data/spec/unit/parser/functions/create_resources_spec.rb +8 -1
  622. data/spec/unit/parser/functions/digest_spec.rb +31 -0
  623. data/spec/unit/parser/functions/file_spec.rb +48 -5
  624. data/spec/unit/parser/functions/include_spec.rb +15 -1
  625. data/spec/unit/parser/functions/realize_spec.rb +43 -35
  626. data/spec/unit/parser/functions/require_spec.rb +19 -5
  627. data/spec/unit/parser/functions/search_spec.rb +5 -0
  628. data/spec/unit/parser/functions/shared.rb +82 -0
  629. data/spec/unit/parser/functions_spec.rb +1 -1
  630. data/spec/unit/parser/lexer_spec.rb +10 -1
  631. data/spec/unit/parser/type_loader_spec.rb +0 -1
  632. data/spec/unit/pops/benchmark_spec.rb +1 -1
  633. data/spec/unit/pops/binder/bindings_composer_spec.rb +24 -22
  634. data/spec/unit/pops/binder/injector_spec.rb +8 -6
  635. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  636. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +7 -4
  637. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +250 -30
  638. data/spec/unit/pops/evaluator/logical_ops_spec.rb +2 -2
  639. data/spec/unit/pops/evaluator/variables_spec.rb +0 -105
  640. data/spec/unit/pops/issues_spec.rb +170 -0
  641. data/spec/unit/pops/loaders/dependency_loader_spec.rb +17 -0
  642. data/spec/unit/pops/loaders/loader_paths_spec.rb +4 -15
  643. data/spec/unit/pops/loaders/loaders_spec.rb +31 -11
  644. data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -29
  645. data/spec/unit/pops/loaders/static_loader_spec.rb +6 -0
  646. data/spec/unit/pops/parser/epp_parser_spec.rb +38 -9
  647. data/spec/unit/pops/parser/evaluating_parser_spec.rb +0 -1
  648. data/spec/unit/pops/parser/lexer2_spec.rb +21 -4
  649. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +5 -0
  650. data/spec/unit/pops/parser/parse_calls_spec.rb +6 -3
  651. data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -5
  652. data/spec/unit/pops/parser/parse_containers_spec.rb +62 -7
  653. data/spec/unit/pops/parser/parse_resource_spec.rb +155 -73
  654. data/spec/unit/pops/parser/parser_spec.rb +16 -0
  655. data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +72 -0
  656. data/spec/unit/pops/transformer/transform_calls_spec.rb +1 -1
  657. data/spec/unit/pops/types/type_calculator_spec.rb +254 -57
  658. data/spec/unit/pops/types/type_factory_spec.rb +8 -3
  659. data/spec/unit/pops/types/type_parser_spec.rb +26 -5
  660. data/spec/unit/pops/validator/validator_spec.rb +143 -27
  661. data/spec/unit/provider/exec/posix_spec.rb +22 -14
  662. data/spec/unit/provider/exec/shell_spec.rb +2 -2
  663. data/spec/unit/provider/file/windows_spec.rb +7 -7
  664. data/spec/unit/provider/group/windows_adsi_spec.rb +17 -17
  665. data/spec/unit/provider/package/gem_spec.rb +10 -0
  666. data/spec/unit/provider/package/openbsd_spec.rb +66 -9
  667. data/spec/unit/provider/package/pacman_spec.rb +90 -71
  668. data/spec/unit/provider/package/windows/package_spec.rb +21 -6
  669. data/spec/unit/provider/package/yum_spec.rb +1 -0
  670. data/spec/unit/provider/parsedfile_spec.rb +1 -1
  671. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +9 -9
  672. data/spec/unit/provider/service/openbsd_spec.rb +26 -2
  673. data/spec/unit/provider/service/upstart_spec.rb +12 -1
  674. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +6 -0
  675. data/spec/unit/provider/user/user_role_add_spec.rb +23 -1
  676. data/spec/unit/provider/user/windows_adsi_spec.rb +17 -17
  677. data/spec/unit/reports/store_spec.rb +0 -16
  678. data/spec/unit/resource/catalog_spec.rb +0 -5
  679. data/spec/unit/resource_spec.rb +2 -2
  680. data/spec/unit/settings/autosign_setting_spec.rb +2 -2
  681. data/spec/unit/settings/environment_conf_spec.rb +77 -10
  682. data/spec/unit/settings/file_setting_spec.rb +5 -4
  683. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  684. data/spec/unit/settings_spec.rb +41 -3
  685. data/spec/unit/ssl/certificate_authority_spec.rb +25 -2
  686. data/spec/unit/ssl/inventory_spec.rb +13 -0
  687. data/spec/unit/ssl/validator_spec.rb +0 -1
  688. data/spec/unit/transaction/resource_harness_spec.rb +64 -0
  689. data/spec/unit/transaction_spec.rb +98 -47
  690. data/spec/unit/type/cron_spec.rb +3 -3
  691. data/spec/unit/type/exec_spec.rb +9 -0
  692. data/spec/unit/type/file/content_spec.rb +54 -71
  693. data/spec/unit/type/file/mode_spec.rb +26 -1
  694. data/spec/unit/type/file/source_spec.rb +26 -4
  695. data/spec/unit/type/file_spec.rb +3 -3
  696. data/spec/unit/type/nagios_spec.rb +12 -3
  697. data/spec/unit/type/resources_spec.rb +64 -30
  698. data/spec/unit/type/user_spec.rb +1 -1
  699. data/spec/unit/type/yumrepo_spec.rb +136 -0
  700. data/spec/unit/type/zone_spec.rb +44 -1
  701. data/spec/unit/type_spec.rb +20 -0
  702. data/spec/unit/util/colors_spec.rb +14 -8
  703. data/spec/unit/util/command_line_spec.rb +11 -7
  704. data/spec/unit/util/execution_spec.rb +35 -42
  705. data/spec/unit/util/feature_spec.rb +12 -0
  706. data/spec/unit/util/http_proxy_spec.rb +43 -1
  707. data/spec/unit/util/log/destinations_spec.rb +45 -1
  708. data/spec/unit/util/logging_spec.rb +38 -0
  709. data/spec/unit/util/pidlock_spec.rb +37 -1
  710. data/spec/unit/util/profiler/aggregate_spec.rb +59 -0
  711. data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
  712. data/spec/unit/util/profiler/logging_spec.rb +18 -29
  713. data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
  714. data/spec/unit/util/profiler_spec.rb +55 -0
  715. data/spec/unit/util/queue_spec.rb +0 -1
  716. data/spec/unit/util/rdoc/parser_spec.rb +14 -6
  717. data/spec/unit/util/tagging_spec.rb +1 -1
  718. data/spec/unit/util/windows/access_control_entry_spec.rb +1 -1
  719. data/spec/unit/util/{adsi_spec.rb → windows/adsi_spec.rb} +111 -108
  720. data/spec/unit/util/windows/api_types_spec.rb +28 -0
  721. data/spec/unit/util/windows/registry_spec.rb +7 -6
  722. data/spec/unit/util/windows/sid_spec.rb +3 -6
  723. data/spec/unit/util/windows/string_spec.rb +4 -0
  724. data/spec/unit/util/zaml_spec.rb +5 -1
  725. data/tasks/benchmark.rake +40 -5
  726. data/tasks/parser.rake +16 -2
  727. data/tasks/yard.rake +1 -1
  728. metadata +308 -150
  729. data/lib/puppet/file_system/tempfile.rb +0 -20
  730. data/lib/puppet/parser/e_parser_adapter.rb +0 -119
  731. data/lib/puppet/parser/functions/collect.rb +0 -15
  732. data/lib/puppet/parser/functions/select.rb +0 -15
  733. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +0 -109
  734. data/lib/puppet/pops/parser/lexer.rb +0 -753
  735. data/lib/puppet/pops/parser/makefile +0 -6
  736. data/lib/puppet/pops/validation/checker3_1.rb +0 -558
  737. data/lib/puppet/pops/validation/validator_factory_3_1.rb +0 -31
  738. data/lib/puppet/util/profiler/none.rb +0 -8
  739. data/spec/unit/face/certificate_request_spec.rb +0 -7
  740. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -7
  741. data/spec/unit/face/key_spec.rb +0 -7
  742. data/spec/unit/face/report_spec.rb +0 -7
  743. data/spec/unit/face/resource_spec.rb +0 -7
  744. data/spec/unit/face/resource_type_spec.rb +0 -7
  745. data/spec/unit/file_system/tempfile_spec.rb +0 -48
  746. data/spec/unit/parser/eparser_adapter_spec.rb +0 -407
  747. data/spec/unit/parser/methods/map_spec.rb +0 -184
  748. data/spec/unit/parser/methods/shared.rb +0 -45
  749. data/spec/unit/pops/parser/lexer_spec.rb +0 -840
  750. data/spec/unit/pops/transformer/transform_resource_spec.rb +0 -185
  751. data/spec/unit/util/profiler/none_spec.rb +0 -12
@@ -1,184 +0,0 @@
1
- require 'puppet'
2
- require 'spec_helper'
3
- require 'puppet_spec/compiler'
4
-
5
- require 'unit/parser/methods/shared'
6
-
7
- describe 'the map method' do
8
- include PuppetSpec::Compiler
9
-
10
- before :each do
11
- Puppet[:parser] = "future"
12
- end
13
-
14
- context "using future parser" do
15
- it 'map on an array (multiplying each value by 2)' do
16
- catalog = compile_to_catalog(<<-MANIFEST)
17
- $a = [1,2,3]
18
- $a.map |$x|{ $x*2}.each |$v|{
19
- file { "/file_$v": ensure => present }
20
- }
21
- MANIFEST
22
-
23
- catalog.resource(:file, "/file_2")['ensure'].should == 'present'
24
- catalog.resource(:file, "/file_4")['ensure'].should == 'present'
25
- catalog.resource(:file, "/file_6")['ensure'].should == 'present'
26
- end
27
-
28
- it 'map on an enumerable type (multiplying each value by 2)' do
29
- catalog = compile_to_catalog(<<-MANIFEST)
30
- $a = Integer[1,3]
31
- $a.map |$x|{ $x*2}.each |$v|{
32
- file { "/file_$v": ensure => present }
33
- }
34
- MANIFEST
35
-
36
- catalog.resource(:file, "/file_2")['ensure'].should == 'present'
37
- catalog.resource(:file, "/file_4")['ensure'].should == 'present'
38
- catalog.resource(:file, "/file_6")['ensure'].should == 'present'
39
- end
40
-
41
- it 'map on an integer (multiply each by 3)' do
42
- catalog = compile_to_catalog(<<-MANIFEST)
43
- 3.map |$x|{ $x*3}.each |$v|{
44
- file { "/file_$v": ensure => present }
45
- }
46
- MANIFEST
47
-
48
- catalog.resource(:file, "/file_0")['ensure'].should == 'present'
49
- catalog.resource(:file, "/file_3")['ensure'].should == 'present'
50
- catalog.resource(:file, "/file_6")['ensure'].should == 'present'
51
- end
52
-
53
- it 'map on a string' do
54
- catalog = compile_to_catalog(<<-MANIFEST)
55
- $a = {a=>x, b=>y}
56
- "ab".map |$x|{$a[$x]}.each |$v|{
57
- file { "/file_$v": ensure => present }
58
- }
59
- MANIFEST
60
-
61
- catalog.resource(:file, "/file_x")['ensure'].should == 'present'
62
- catalog.resource(:file, "/file_y")['ensure'].should == 'present'
63
- end
64
-
65
- it 'map on an array (multiplying value by 10 in even index position)' do
66
- catalog = compile_to_catalog(<<-MANIFEST)
67
- $a = [1,2,3]
68
- $a.map |$i, $x|{ if $i % 2 == 0 {$x} else {$x*10}}.each |$v|{
69
- file { "/file_$v": ensure => present }
70
- }
71
- MANIFEST
72
-
73
- catalog.resource(:file, "/file_1")['ensure'].should == 'present'
74
- catalog.resource(:file, "/file_20")['ensure'].should == 'present'
75
- catalog.resource(:file, "/file_3")['ensure'].should == 'present'
76
- end
77
-
78
- it 'map on a hash selecting keys' do
79
- catalog = compile_to_catalog(<<-MANIFEST)
80
- $a = {'a'=>1,'b'=>2,'c'=>3}
81
- $a.map |$x|{ $x[0]}.each |$k|{
82
- file { "/file_$k": ensure => present }
83
- }
84
- MANIFEST
85
-
86
- catalog.resource(:file, "/file_a")['ensure'].should == 'present'
87
- catalog.resource(:file, "/file_b")['ensure'].should == 'present'
88
- catalog.resource(:file, "/file_c")['ensure'].should == 'present'
89
- end
90
-
91
- it 'map on a hash selecting keys - using two block parameters' do
92
- catalog = compile_to_catalog(<<-MANIFEST)
93
- $a = {'a'=>1,'b'=>2,'c'=>3}
94
- $a.map |$k,$v|{ file { "/file_$k": ensure => present }
95
- }
96
- MANIFEST
97
-
98
- catalog.resource(:file, "/file_a")['ensure'].should == 'present'
99
- catalog.resource(:file, "/file_b")['ensure'].should == 'present'
100
- catalog.resource(:file, "/file_c")['ensure'].should == 'present'
101
- end
102
-
103
- it 'each on a hash selecting value' do
104
- catalog = compile_to_catalog(<<-MANIFEST)
105
- $a = {'a'=>1,'b'=>2,'c'=>3}
106
- $a.map |$x|{ $x[1]}.each |$k|{ file { "/file_$k": ensure => present } }
107
- MANIFEST
108
-
109
- catalog.resource(:file, "/file_1")['ensure'].should == 'present'
110
- catalog.resource(:file, "/file_2")['ensure'].should == 'present'
111
- catalog.resource(:file, "/file_3")['ensure'].should == 'present'
112
- end
113
-
114
- it 'each on a hash selecting value - using two bloc parameters' do
115
- catalog = compile_to_catalog(<<-MANIFEST)
116
- $a = {'a'=>1,'b'=>2,'c'=>3}
117
- $a.map |$k,$v|{ file { "/file_$v": ensure => present } }
118
- MANIFEST
119
-
120
- catalog.resource(:file, "/file_1")['ensure'].should == 'present'
121
- catalog.resource(:file, "/file_2")['ensure'].should == 'present'
122
- catalog.resource(:file, "/file_3")['ensure'].should == 'present'
123
- end
124
-
125
- context "handles data type corner cases" do
126
- it "map gets values that are false" do
127
- catalog = compile_to_catalog(<<-MANIFEST)
128
- $a = [false,false]
129
- $a.map |$x| { $x }.each |$i, $v| {
130
- file { "/file_$i.$v": ensure => present }
131
- }
132
- MANIFEST
133
-
134
- catalog.resource(:file, "/file_0.false")['ensure'].should == 'present'
135
- catalog.resource(:file, "/file_1.false")['ensure'].should == 'present'
136
- end
137
-
138
- it "map gets values that are nil" do
139
- Puppet::Parser::Functions.newfunction(:nil_array, :type => :rvalue) do |args|
140
- [nil]
141
- end
142
- catalog = compile_to_catalog(<<-MANIFEST)
143
- $a = nil_array()
144
- $a.map |$x| { $x }.each |$i, $v| {
145
- file { "/file_$i.$v": ensure => present }
146
- }
147
- MANIFEST
148
-
149
- catalog.resource(:file, "/file_0.")['ensure'].should == 'present'
150
- end
151
-
152
- it "map gets values that are undef" do
153
- catalog = compile_to_catalog(<<-MANIFEST)
154
- $a = [$does_not_exist]
155
- $a.map |$x = "something"| { $x }.each |$i, $v| {
156
- file { "/file_$i.$v": ensure => present }
157
- }
158
- MANIFEST
159
- catalog.resource(:file, "/file_0.something")['ensure'].should == 'present'
160
- end
161
- end
162
-
163
- context 'map checks arguments and' do
164
- it 'raises an error when block has more than 2 argument' do
165
- expect do
166
- compile_to_catalog(<<-MANIFEST)
167
- [1].map |$index, $x, $yikes|{ }
168
- MANIFEST
169
- end.to raise_error(Puppet::Error, /block must define at most two parameters/)
170
- end
171
-
172
- it 'raises an error when block has fewer than 1 argument' do
173
- expect do
174
- compile_to_catalog(<<-MANIFEST)
175
- [1].map || { }
176
- MANIFEST
177
- end.to raise_error(Puppet::Error, /block must define at least one parameter/)
178
- end
179
- end
180
-
181
- it_should_behave_like 'all iterative functions argument checks', 'map'
182
- it_should_behave_like 'all iterative functions hash handling', 'map'
183
- end
184
- end
@@ -1,45 +0,0 @@
1
-
2
- shared_examples_for 'all iterative functions hash handling' do |func|
3
- it 'passes a hash entry as an array of the key and value' do
4
- catalog = compile_to_catalog(<<-MANIFEST)
5
- {a=>1}.#{func} |$v| { notify { "${v[0]} ${v[1]}": } }
6
- MANIFEST
7
-
8
- catalog.resource(:notify, "a 1").should_not be_nil
9
- end
10
- end
11
-
12
- shared_examples_for 'all iterative functions argument checks' do |func|
13
-
14
- it 'raises an error when used against an unsupported type' do
15
- expect do
16
- compile_to_catalog(<<-MANIFEST)
17
- 3.14.#{func} |$v| { }
18
- MANIFEST
19
- end.to raise_error(Puppet::Error, /must be something enumerable/)
20
- end
21
-
22
- it 'raises an error when called with any parameters besides a block' do
23
- expect do
24
- compile_to_catalog(<<-MANIFEST)
25
- [1].#{func}(1) |$v| { }
26
- MANIFEST
27
- end.to raise_error(Puppet::Error, /Wrong number of arguments/)
28
- end
29
-
30
- it 'raises an error when called without a block' do
31
- expect do
32
- compile_to_catalog(<<-MANIFEST)
33
- [1].#{func}()
34
- MANIFEST
35
- end.to raise_error(Puppet::Error, /Wrong number of arguments/)
36
- end
37
-
38
- it 'raises an error when called without a block' do
39
- expect do
40
- compile_to_catalog(<<-MANIFEST)
41
- [1].#{func}(1)
42
- MANIFEST
43
- end.to raise_error(Puppet::Error, /must be a parameterized block/)
44
- end
45
- end
@@ -1,840 +0,0 @@
1
- #! /usr/bin/env ruby
2
- require 'spec_helper'
3
-
4
- require 'puppet/pops'
5
-
6
- # This is a special matcher to match easily lexer output
7
- RSpec::Matchers.define :be_like do |*expected|
8
- match do |actual|
9
- diffable
10
- expected.zip(actual).all? { |e,a| !e or a[0] == e or (e.is_a? Array and a[0] == e[0] and (a[1] == e[1] or (a[1].is_a?(Hash) and a[1][:value] == e[1]))) }
11
- end
12
- end
13
- __ = nil
14
-
15
- module EgrammarLexerSpec
16
- def self.tokens_scanned_from(s)
17
- lexer = Puppet::Pops::Parser::Lexer.new
18
- lexer.string = s
19
- tokens = lexer.fullscan[0..-2]
20
- tokens.map do |t|
21
- key = t[0]
22
- options = t[1]
23
- if options[:locator]
24
- # unresolved locations needs to be resolved for tests that check positioning
25
- [key,
26
- options[:locator].to_location_hash(
27
- options[:offset],
28
- options[:end_offset]).merge({:value => options[:value]}) ]
29
- else
30
- t
31
- end
32
- end
33
- end
34
- end
35
-
36
- describe Puppet::Pops::Parser::Lexer do
37
- include EgrammarLexerSpec
38
-
39
- describe "when reading strings" do
40
- before { @lexer = Puppet::Pops::Parser::Lexer.new }
41
-
42
- it "should increment the line count for every carriage return in the string" do
43
- @lexer.string = "'this\nis\natest'"
44
- @lexer.fullscan[0..-2]
45
-
46
- line = @lexer.line
47
- line.should == 3
48
- end
49
-
50
- it "should not increment the line count for escapes in the string" do
51
- @lexer.string = "'this\\nis\\natest'"
52
- @lexer.fullscan[0..-2]
53
-
54
- @lexer.line.should == 1
55
- end
56
-
57
- it "should not think the terminator is escaped, when preceeded by an even number of backslashes" do
58
- @lexer.string = "'here\nis\nthe\nstring\\\\'with\nextra\njunk"
59
- @lexer.fullscan[0..-2]
60
-
61
- @lexer.line.should == 6
62
- end
63
-
64
- {
65
- 'r' => "\r",
66
- 'n' => "\n",
67
- 't' => "\t",
68
- 's' => " "
69
- }.each do |esc, expected_result|
70
- it "should recognize \\#{esc} sequence" do
71
- @lexer.string = "\\#{esc}'"
72
- @lexer.slurpstring("'")[0].should == expected_result
73
- end
74
- end
75
- end
76
- end
77
-
78
- describe Puppet::Pops::Parser::Lexer::Token, "when initializing" do
79
- it "should create a regex if the first argument is a string" do
80
- Puppet::Pops::Parser::Lexer::Token.new("something", :NAME).regex.should == %r{something}
81
- end
82
-
83
- it "should set the string if the first argument is one" do
84
- Puppet::Pops::Parser::Lexer::Token.new("something", :NAME).string.should == "something"
85
- end
86
-
87
- it "should set the regex if the first argument is one" do
88
- Puppet::Pops::Parser::Lexer::Token.new(%r{something}, :NAME).regex.should == %r{something}
89
- end
90
- end
91
-
92
- describe Puppet::Pops::Parser::Lexer::TokenList do
93
- before do
94
- @list = Puppet::Pops::Parser::Lexer::TokenList.new
95
- end
96
-
97
- it "should have a method for retrieving tokens by the name" do
98
- token = @list.add_token :name, "whatever"
99
- @list[:name].should equal(token)
100
- end
101
-
102
- it "should have a method for retrieving string tokens by the string" do
103
- token = @list.add_token :name, "whatever"
104
- @list.lookup("whatever").should equal(token)
105
- end
106
-
107
- it "should add tokens to the list when directed" do
108
- token = @list.add_token :name, "whatever"
109
- @list[:name].should equal(token)
110
- end
111
-
112
- it "should have a method for adding multiple tokens at once" do
113
- @list.add_tokens "whatever" => :name, "foo" => :bar
114
- @list[:name].should_not be_nil
115
- @list[:bar].should_not be_nil
116
- end
117
-
118
- it "should fail to add tokens sharing a name with an existing token" do
119
- @list.add_token :name, "whatever"
120
- expect { @list.add_token :name, "whatever" }.to raise_error(ArgumentError)
121
- end
122
-
123
- it "should set provided options on tokens being added" do
124
- token = @list.add_token :name, "whatever", :skip_text => true
125
- token.skip_text.should == true
126
- end
127
-
128
- it "should define any provided blocks as a :convert method" do
129
- token = @list.add_token(:name, "whatever") do "foo" end
130
- token.convert.should == "foo"
131
- end
132
-
133
- it "should store all string tokens in the :string_tokens list" do
134
- one = @list.add_token(:name, "1")
135
- @list.string_tokens.should be_include(one)
136
- end
137
-
138
- it "should store all regex tokens in the :regex_tokens list" do
139
- one = @list.add_token(:name, %r{one})
140
- @list.regex_tokens.should be_include(one)
141
- end
142
-
143
- it "should not store string tokens in the :regex_tokens list" do
144
- one = @list.add_token(:name, "1")
145
- @list.regex_tokens.should_not be_include(one)
146
- end
147
-
148
- it "should not store regex tokens in the :string_tokens list" do
149
- one = @list.add_token(:name, %r{one})
150
- @list.string_tokens.should_not be_include(one)
151
- end
152
-
153
- it "should sort the string tokens inversely by length when asked" do
154
- one = @list.add_token(:name, "1")
155
- two = @list.add_token(:other, "12")
156
- @list.sort_tokens
157
- @list.string_tokens.should == [two, one]
158
- end
159
- end
160
-
161
- describe Puppet::Pops::Parser::Lexer::TOKENS do
162
- before do
163
- @lexer = Puppet::Pops::Parser::Lexer.new
164
- end
165
-
166
- {
167
- :LBRACK => '[',
168
- :RBRACK => ']',
169
- # :LBRACE => '{',
170
- # :RBRACE => '}',
171
- :LPAREN => '(',
172
- :RPAREN => ')',
173
- :EQUALS => '=',
174
- :ISEQUAL => '==',
175
- :GREATEREQUAL => '>=',
176
- :GREATERTHAN => '>',
177
- :LESSTHAN => '<',
178
- :LESSEQUAL => '<=',
179
- :NOTEQUAL => '!=',
180
- :NOT => '!',
181
- :COMMA => ',',
182
- :DOT => '.',
183
- :COLON => ':',
184
- :AT => '@',
185
- :LLCOLLECT => '<<|',
186
- :RRCOLLECT => '|>>',
187
- :LCOLLECT => '<|',
188
- :RCOLLECT => '|>',
189
- :SEMIC => ';',
190
- :QMARK => '?',
191
- :BACKSLASH => '\\',
192
- :FARROW => '=>',
193
- :PARROW => '+>',
194
- :APPENDS => '+=',
195
- :DELETES => '-=',
196
- :PLUS => '+',
197
- :MINUS => '-',
198
- :DIV => '/',
199
- :TIMES => '*',
200
- :LSHIFT => '<<',
201
- :RSHIFT => '>>',
202
- :MATCH => '=~',
203
- :NOMATCH => '!~',
204
- :IN_EDGE => '->',
205
- :OUT_EDGE => '<-',
206
- :IN_EDGE_SUB => '~>',
207
- :OUT_EDGE_SUB => '<~',
208
- :PIPE => '|',
209
- }.each do |name, string|
210
- it "should have a token named #{name.to_s}" do
211
- Puppet::Pops::Parser::Lexer::TOKENS[name].should_not be_nil
212
- end
213
-
214
- it "should match '#{string}' for the token #{name.to_s}" do
215
- Puppet::Pops::Parser::Lexer::TOKENS[name].string.should == string
216
- end
217
- end
218
-
219
- {
220
- "case" => :CASE,
221
- "class" => :CLASS,
222
- "default" => :DEFAULT,
223
- "define" => :DEFINE,
224
- # "import" => :IMPORT, # done as a function in egrammar
225
- "if" => :IF,
226
- "elsif" => :ELSIF,
227
- "else" => :ELSE,
228
- "inherits" => :INHERITS,
229
- "node" => :NODE,
230
- "and" => :AND,
231
- "or" => :OR,
232
- "undef" => :UNDEF,
233
- "false" => :FALSE,
234
- "true" => :TRUE,
235
- "in" => :IN,
236
- "unless" => :UNLESS,
237
- }.each do |string, name|
238
- it "should have a keyword named #{name.to_s}" do
239
- Puppet::Pops::Parser::Lexer::KEYWORDS[name].should_not be_nil
240
- end
241
-
242
- it "should have the keyword for #{name.to_s} set to #{string}" do
243
- Puppet::Pops::Parser::Lexer::KEYWORDS[name].string.should == string
244
- end
245
- end
246
-
247
- # These tokens' strings don't matter, just that the tokens exist.
248
- [:STRING, :DQPRE, :DQMID, :DQPOST, :BOOLEAN, :NAME, :NUMBER, :COMMENT, :MLCOMMENT,
249
- :LBRACE, :RBRACE,
250
- :RETURN, :SQUOTE, :DQUOTE, :VARIABLE].each do |name|
251
- it "should have a token named #{name.to_s}" do
252
- Puppet::Pops::Parser::Lexer::TOKENS[name].should_not be_nil
253
- end
254
- end
255
- end
256
-
257
- describe Puppet::Pops::Parser::Lexer::TOKENS[:CLASSREF] do
258
- before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:CLASSREF] }
259
-
260
- it "should match against single upper-case alpha-numeric terms" do
261
- @token.regex.should =~ "One"
262
- end
263
-
264
- it "should match against upper-case alpha-numeric terms separated by double colons" do
265
- @token.regex.should =~ "One::Two"
266
- end
267
-
268
- it "should match against many upper-case alpha-numeric terms separated by double colons" do
269
- @token.regex.should =~ "One::Two::Three::Four::Five"
270
- end
271
-
272
- it "should match against upper-case alpha-numeric terms prefixed by double colons" do
273
- @token.regex.should =~ "::One"
274
- end
275
- end
276
-
277
- describe Puppet::Pops::Parser::Lexer::TOKENS[:NAME] do
278
- before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:NAME] }
279
-
280
- it "should match against lower-case alpha-numeric terms" do
281
- @token.regex.should =~ "one-two"
282
- end
283
-
284
- it "should return itself and the value if the matched term is not a keyword" do
285
- Puppet::Pops::Parser::Lexer::KEYWORDS.expects(:lookup).returns(nil)
286
- @token.convert(stub("lexer"), "myval").should == [Puppet::Pops::Parser::Lexer::TOKENS[:NAME], "myval"]
287
- end
288
-
289
- it "should return the keyword token and the value if the matched term is a keyword" do
290
- keyword = stub 'keyword', :name => :testing
291
- Puppet::Pops::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
292
- @token.convert(stub("lexer"), "myval").should == [keyword, "myval"]
293
- end
294
-
295
- it "should return the BOOLEAN token and 'true' if the matched term is the string 'true'" do
296
- keyword = stub 'keyword', :name => :TRUE
297
- Puppet::Pops::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
298
- @token.convert(stub('lexer'), "true").should == [Puppet::Pops::Parser::Lexer::TOKENS[:BOOLEAN], true]
299
- end
300
-
301
- it "should return the BOOLEAN token and 'false' if the matched term is the string 'false'" do
302
- keyword = stub 'keyword', :name => :FALSE
303
- Puppet::Pops::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
304
- @token.convert(stub('lexer'), "false").should == [Puppet::Pops::Parser::Lexer::TOKENS[:BOOLEAN], false]
305
- end
306
-
307
- it "should match against lower-case alpha-numeric terms separated by double colons" do
308
- @token.regex.should =~ "one::two"
309
- end
310
-
311
- it "should match against many lower-case alpha-numeric terms separated by double colons" do
312
- @token.regex.should =~ "one::two::three::four::five"
313
- end
314
-
315
- it "should match against lower-case alpha-numeric terms prefixed by double colons" do
316
- @token.regex.should =~ "::one"
317
- end
318
-
319
- it "should match against nested terms starting with numbers" do
320
- @token.regex.should =~ "::1one::2two::3three"
321
- end
322
- end
323
-
324
- describe Puppet::Pops::Parser::Lexer::TOKENS[:NUMBER] do
325
- before do
326
- @token = Puppet::Pops::Parser::Lexer::TOKENS[:NUMBER]
327
- @regex = @token.regex
328
- end
329
-
330
- it "should match against numeric terms" do
331
- @regex.should =~ "2982383139"
332
- end
333
-
334
- it "should match against float terms" do
335
- @regex.should =~ "29823.235"
336
- end
337
-
338
- it "should match against hexadecimal terms" do
339
- @regex.should =~ "0xBEEF0023"
340
- end
341
-
342
- it "should match against float with exponent terms" do
343
- @regex.should =~ "10e23"
344
- end
345
-
346
- it "should match against float terms with negative exponents" do
347
- @regex.should =~ "10e-23"
348
- end
349
-
350
- it "should match against float terms with fractional parts and exponent" do
351
- @regex.should =~ "1.234e23"
352
- end
353
- end
354
-
355
- describe Puppet::Pops::Parser::Lexer::TOKENS[:COMMENT] do
356
- before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:COMMENT] }
357
-
358
- it "should match against lines starting with '#'" do
359
- @token.regex.should =~ "# this is a comment"
360
- end
361
-
362
- it "should be marked to get skipped" do
363
- @token.skip?.should be_true
364
- end
365
-
366
- it "'s block should return the comment without any text" do
367
- # This is a silly test, the original tested that the comments was processed, but
368
- # all comments are skipped anyway, and never collected for documentation.
369
- #
370
- @token.convert(@lexer,"# this is a comment")[1].should == ""
371
- end
372
- end
373
-
374
- describe Puppet::Pops::Parser::Lexer::TOKENS[:MLCOMMENT] do
375
- before do
376
- @token = Puppet::Pops::Parser::Lexer::TOKENS[:MLCOMMENT]
377
- @lexer = stub 'lexer', :line => 0
378
- end
379
-
380
- it "should match against lines enclosed with '/*' and '*/'" do
381
- @token.regex.should =~ "/* this is a comment */"
382
- end
383
-
384
- it "should match multiple lines enclosed with '/*' and '*/'" do
385
- @token.regex.should =~ """/*
386
- this is a comment
387
- */"""
388
- end
389
-
390
- # # TODO: REWRITE THIS TEST TO NOT BE BASED ON INTERNALS
391
- # it "should increase the lexer current line number by the amount of lines spanned by the comment" do
392
- # @lexer.expects(:line=).with(2)
393
- # @token.convert(@lexer, "1\n2\n3")
394
- # end
395
-
396
- it "should not greedily match comments" do
397
- match = @token.regex.match("/* first */ word /* second */")
398
- match[1].should == " first "
399
- end
400
-
401
- it "'s block should return the comment without the comment marks" do
402
- # This is a silly test, the original tested that the comments was processed, but
403
- # all comments are skipped anyway, and never collected for documentation.
404
- #
405
- @lexer.stubs(:line=).with(0)
406
-
407
- @token.convert(@lexer,"/* this is a comment */")[1].should == ""
408
- end
409
- end
410
-
411
- describe Puppet::Pops::Parser::Lexer::TOKENS[:RETURN] do
412
- before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:RETURN] }
413
-
414
- it "should match against carriage returns" do
415
- @token.regex.should =~ "\n"
416
- end
417
-
418
- it "should be marked to initiate text skipping" do
419
- @token.skip_text.should be_true
420
- end
421
- end
422
-
423
- shared_examples_for "handling `-` in standard variable names for egrammar" do |prefix|
424
- # Watch out - a regex might match a *prefix* on these, not just the whole
425
- # word, so make sure you don't have false positive or negative results based
426
- # on that.
427
- legal = %w{f foo f::b foo::b f::bar foo::bar 3 foo3 3foo}
428
- illegal = %w{f- f-o -f f::-o f::o- f::o-o}
429
-
430
- ["", "::"].each do |global_scope|
431
- legal.each do |name|
432
- var = prefix + global_scope + name
433
- it "should accept #{var.inspect} as a valid variable name" do
434
- (subject.regex.match(var) || [])[0].should == var
435
- end
436
- end
437
-
438
- illegal.each do |name|
439
- var = prefix + global_scope + name
440
- it "when `variable_with_dash` is disabled it should NOT accept #{var.inspect} as a valid variable name" do
441
- Puppet[:allow_variables_with_dashes] = false
442
- (subject.regex.match(var) || [])[0].should_not == var
443
- end
444
-
445
- it "when `variable_with_dash` is enabled it should NOT accept #{var.inspect} as a valid variable name" do
446
- Puppet[:allow_variables_with_dashes] = true
447
- (subject.regex.match(var) || [])[0].should_not == var
448
- end
449
- end
450
- end
451
- end
452
-
453
- describe Puppet::Pops::Parser::Lexer::TOKENS[:DOLLAR_VAR] do
454
- its(:skip_text) { should be_false }
455
-
456
- it_should_behave_like "handling `-` in standard variable names for egrammar", '$'
457
- end
458
-
459
- describe Puppet::Pops::Parser::Lexer::TOKENS[:VARIABLE] do
460
- its(:skip_text) { should be_false }
461
-
462
- it_should_behave_like "handling `-` in standard variable names for egrammar", ''
463
- end
464
-
465
- describe "the horrible deprecation / compatibility variables with dashes" do
466
-
467
- context "deprecation warnings" do
468
- before :each do Puppet[:allow_variables_with_dashes] = true end
469
-
470
- it "does not warn about a variable without a dash" do
471
- Puppet.expects(:deprecation_warning).never
472
-
473
- EgrammarLexerSpec.tokens_scanned_from('$c').should == [
474
- [:VARIABLE, {:value=>"c", :line=>1, :pos=>1, :offset=>0, :length=>2}]
475
- ]
476
- end
477
-
478
- it "does not warn about referencing a class name that contains a dash" do
479
- Puppet.expects(:deprecation_warning).never
480
-
481
- EgrammarLexerSpec.tokens_scanned_from('foo-bar').should == [
482
- [:NAME, {:value=>"foo-bar", :line=>1, :pos=>1, :offset=>0, :length=>7}]
483
- ]
484
- end
485
- end
486
- end
487
-
488
-
489
- describe Puppet::Pops::Parser::Lexer,"when lexing strings" do
490
- {
491
- %q{'single quoted string')} => [[:STRING,'single quoted string']],
492
- %q{"double quoted string"} => [[:STRING,'double quoted string']],
493
- %q{'single quoted string with an escaped "\\'"'} => [[:STRING,'single quoted string with an escaped "\'"']],
494
- %q{'single quoted string with an escaped "\$"'} => [[:STRING,'single quoted string with an escaped "\$"']],
495
- %q{'single quoted string with an escaped "\."'} => [[:STRING,'single quoted string with an escaped "\."']],
496
- %q{'single quoted string with an escaped "\r\n"'} => [[:STRING,'single quoted string with an escaped "\r\n"']],
497
- %q{'single quoted string with an escaped "\n"'} => [[:STRING,'single quoted string with an escaped "\n"']],
498
- %q{'single quoted string with an escaped "\\\\"'} => [[:STRING,'single quoted string with an escaped "\\\\"']],
499
- %q{"string with an escaped '\\"'"} => [[:STRING,"string with an escaped '\"'"]],
500
- %q{"string with an escaped '\\$'"} => [[:STRING,"string with an escaped '$'"]],
501
- %Q{"string with a line ending with a backslash: \\\nfoo"} => [[:STRING,"string with a line ending with a backslash: foo"]],
502
- %q{"string with $v (but no braces)"} => [[:DQPRE,"string with "],[:VARIABLE,'v'],[:DQPOST,' (but no braces)']],
503
- %q["string with ${v} in braces"] => [[:DQPRE,"string with "],[:VARIABLE,'v'],[:DQPOST,' in braces']],
504
- %q["string with ${qualified::var} in braces"] => [[:DQPRE,"string with "],[:VARIABLE,'qualified::var'],[:DQPOST,' in braces']],
505
- %q{"string with $v and $v (but no braces)"} => [[:DQPRE,"string with "],[:VARIABLE,"v"],[:DQMID," and "],[:VARIABLE,"v"],[:DQPOST," (but no braces)"]],
506
- %q["string with ${v} and ${v} in braces"] => [[:DQPRE,"string with "],[:VARIABLE,"v"],[:DQMID," and "],[:VARIABLE,"v"],[:DQPOST," in braces"]],
507
- %q["string with ${'a nested single quoted string'} inside it."] => [[:DQPRE,"string with "],[:STRING,'a nested single quoted string'],[:DQPOST,' inside it.']],
508
- %q["string with ${['an array ',$v2]} in it."] => [[:DQPRE,"string with "],:LBRACK,[:STRING,"an array "],:COMMA,[:VARIABLE,"v2"],:RBRACK,[:DQPOST," in it."]],
509
- %q{a simple "scanner" test} => [[:NAME,"a"],[:NAME,"simple"], [:STRING,"scanner"],[:NAME,"test"]],
510
- %q{a simple 'single quote scanner' test} => [[:NAME,"a"],[:NAME,"simple"], [:STRING,"single quote scanner"],[:NAME,"test"]],
511
- %q{a harder 'a $b \c"'} => [[:NAME,"a"],[:NAME,"harder"], [:STRING,'a $b \c"']],
512
- %q{a harder "scanner test"} => [[:NAME,"a"],[:NAME,"harder"], [:STRING,"scanner test"]],
513
- %q{a hardest "scanner \"test\""} => [[:NAME,"a"],[:NAME,"hardest"],[:STRING,'scanner "test"']],
514
- %Q{a hardestest "scanner \\"test\\"\n"} => [[:NAME,"a"],[:NAME,"hardestest"],[:STRING,%Q{scanner "test"\n}]],
515
- %q{function("call")} => [[:NAME,"function"],[:LPAREN,"("],[:STRING,'call'],[:RPAREN,")"]],
516
- %q["string with ${(3+5)/4} nested math."] => [[:DQPRE,"string with "],:LPAREN,[:NAME,"3"],:PLUS,[:NAME,"5"],:RPAREN,:DIV,[:NAME,"4"],[:DQPOST," nested math."]],
517
- %q["$$$$"] => [[:STRING,"$$$$"]],
518
- %q["$variable"] => [[:DQPRE,""],[:VARIABLE,"variable"],[:DQPOST,""]],
519
- %q["$var$other"] => [[:DQPRE,""],[:VARIABLE,"var"],[:DQMID,""],[:VARIABLE,"other"],[:DQPOST,""]],
520
- %q["foo$bar$"] => [[:DQPRE,"foo"],[:VARIABLE,"bar"],[:DQPOST,"$"]],
521
- %q["foo$$bar"] => [[:DQPRE,"foo$"],[:VARIABLE,"bar"],[:DQPOST,""]],
522
- %q[""] => [[:STRING,""]],
523
- %q["123 456 789 0"] => [[:STRING,"123 456 789 0"]],
524
- %q["${123} 456 $0"] => [[:DQPRE,""],[:VARIABLE,"123"],[:DQMID," 456 "],[:VARIABLE,"0"],[:DQPOST,""]],
525
- %q["$foo::::bar"] => [[:DQPRE,""],[:VARIABLE,"foo"],[:DQPOST,"::::bar"]],
526
- # Keyword variables
527
- %q["$true"] => [[:DQPRE,""],[:VARIABLE, "true"],[:DQPOST,""]],
528
- %q["$false"] => [[:DQPRE,""],[:VARIABLE, "false"],[:DQPOST,""]],
529
- %q["$if"] => [[:DQPRE,""],[:VARIABLE, "if"],[:DQPOST,""]],
530
- %q["$case"] => [[:DQPRE,""],[:VARIABLE, "case"],[:DQPOST,""]],
531
- %q["$unless"] => [[:DQPRE,""],[:VARIABLE, "unless"],[:DQPOST,""]],
532
- %q["$undef"] => [[:DQPRE,""],[:VARIABLE, "undef"],[:DQPOST,""]],
533
- # Expressions
534
- %q["${true}"] => [[:DQPRE,""],[:BOOLEAN, true],[:DQPOST,""]],
535
- %q["${false}"] => [[:DQPRE,""],[:BOOLEAN, false],[:DQPOST,""]],
536
- %q["${undef}"] => [[:DQPRE,""],:UNDEF,[:DQPOST,""]],
537
- %q["${if true {false}}"] => [[:DQPRE,""],:IF,[:BOOLEAN, true], :LBRACE, [:BOOLEAN, false], :RBRACE, [:DQPOST,""]],
538
- %q["${unless true {false}}"] => [[:DQPRE,""],:UNLESS,[:BOOLEAN, true], :LBRACE, [:BOOLEAN, false], :RBRACE, [:DQPOST,""]],
539
- %q["${case true {true:{false}}}"] => [
540
- [:DQPRE,""],:CASE,[:BOOLEAN, true], :LBRACE, [:BOOLEAN, true], :COLON, :LBRACE, [:BOOLEAN, false],
541
- :RBRACE, :RBRACE, [:DQPOST,""]],
542
- %q[{ "${a}" => 1 }] => [ :LBRACE, [:DQPRE,""], [:VARIABLE,"a"], [:DQPOST,""], :FARROW, [:NAME,"1"], :RBRACE ],
543
- }.each { |src,expected_result|
544
- it "should handle #{src} correctly" do
545
- EgrammarLexerSpec.tokens_scanned_from(src).should be_like(*expected_result)
546
- end
547
- }
548
- end
549
-
550
- describe Puppet::Pops::Parser::Lexer::TOKENS[:DOLLAR_VAR] do
551
- before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:DOLLAR_VAR] }
552
-
553
- it "should match against alpha words prefixed with '$'" do
554
- @token.regex.should =~ '$this_var'
555
- end
556
-
557
- it "should return the VARIABLE token and the variable name stripped of the '$'" do
558
- @token.convert(stub("lexer"), "$myval").should == [Puppet::Pops::Parser::Lexer::TOKENS[:VARIABLE], "myval"]
559
- end
560
- end
561
-
562
- describe Puppet::Pops::Parser::Lexer::TOKENS[:REGEX] do
563
- before { @token = Puppet::Pops::Parser::Lexer::TOKENS[:REGEX] }
564
-
565
- it "should match against any expression enclosed in //" do
566
- @token.regex.should =~ '/this is a regex/'
567
- end
568
-
569
- it 'should not match if there is \n in the regex' do
570
- @token.regex.should_not =~ "/this is \n a regex/"
571
- end
572
-
573
- describe "when scanning" do
574
- it "should not consider escaped slashes to be the end of a regex" do
575
- EgrammarLexerSpec.tokens_scanned_from("$x =~ /this \\/ foo/").should be_like(__,__,[:REGEX,%r{this / foo}])
576
- end
577
-
578
- it "should not lex chained division as a regex" do
579
- EgrammarLexerSpec.tokens_scanned_from("$x = $a/$b/$c").collect { |name, data| name }.should_not be_include( :REGEX )
580
- end
581
-
582
- it "should accept a regular expression after NODE" do
583
- EgrammarLexerSpec.tokens_scanned_from("node /www.*\.mysite\.org/").should be_like(__,[:REGEX,Regexp.new("www.*\.mysite\.org")])
584
- end
585
-
586
- it "should accept regular expressions in a CASE" do
587
- s = %q{case $variable {
588
- "something": {$othervar = 4096 / 2}
589
- /regex/: {notice("this notably sucks")}
590
- }
591
- }
592
- EgrammarLexerSpec.tokens_scanned_from(s).should be_like(
593
- :CASE,:VARIABLE,:LBRACE,:STRING,:COLON,:LBRACE,:VARIABLE,:EQUALS,:NAME,:DIV,:NAME,:RBRACE,[:REGEX,/regex/],:COLON,:LBRACE,:NAME,:LPAREN,:STRING,:RPAREN,:RBRACE,:RBRACE
594
- )
595
- end
596
- end
597
-
598
- it "should return the REGEX token and a Regexp" do
599
- @token.convert(stub("lexer"), "/myregex/").should == [Puppet::Pops::Parser::Lexer::TOKENS[:REGEX], Regexp.new(/myregex/)]
600
- end
601
- end
602
-
603
- describe Puppet::Pops::Parser::Lexer, "when lexing comments" do
604
- before { @lexer = Puppet::Pops::Parser::Lexer.new }
605
-
606
- it "should skip whitespace before lexing the next token after a non-token" do
607
- EgrammarLexerSpec.tokens_scanned_from("/* 1\n\n */ \ntest").should be_like([:NAME, "test"])
608
- end
609
- end
610
-
611
- # FIXME: We need to rewrite all of these tests, but I just don't want to take the time right now.
612
- describe "Puppet::Pops::Parser::Lexer in the old tests" do
613
- before { @lexer = Puppet::Pops::Parser::Lexer.new }
614
-
615
- it "should do simple lexing" do
616
- {
617
- %q{\\} => [[:BACKSLASH,"\\"]],
618
- %q{simplest scanner test} => [[:NAME,"simplest"],[:NAME,"scanner"],[:NAME,"test"]],
619
- %Q{returned scanner test\n} => [[:NAME,"returned"],[:NAME,"scanner"],[:NAME,"test"]]
620
- }.each { |source,expected|
621
- EgrammarLexerSpec.tokens_scanned_from(source).should be_like(*expected)
622
- }
623
- end
624
-
625
- it "should fail usefully" do
626
- expect { EgrammarLexerSpec.tokens_scanned_from('^') }.to raise_error(RuntimeError)
627
- end
628
-
629
- it "should fail if the string is not set" do
630
- expect { @lexer.fullscan }.to raise_error(Puppet::LexError)
631
- end
632
-
633
- it "should correctly identify keywords" do
634
- EgrammarLexerSpec.tokens_scanned_from("case").should be_like([:CASE, "case"])
635
- end
636
-
637
- it "should correctly parse class references" do
638
- %w{Many Different Words A Word}.each { |t| EgrammarLexerSpec.tokens_scanned_from(t).should be_like([:CLASSREF,t])}
639
- end
640
-
641
- # #774
642
- it "should correctly parse namespaced class refernces token" do
643
- %w{Foo ::Foo Foo::Bar ::Foo::Bar}.each { |t| EgrammarLexerSpec.tokens_scanned_from(t).should be_like([:CLASSREF, t]) }
644
- end
645
-
646
- it "should correctly parse names" do
647
- %w{this is a bunch of names}.each { |t| EgrammarLexerSpec.tokens_scanned_from(t).should be_like([:NAME,t]) }
648
- end
649
-
650
- it "should correctly parse names with numerals" do
651
- %w{1name name1 11names names11}.each { |t| EgrammarLexerSpec.tokens_scanned_from(t).should be_like([:NAME,t]) }
652
- end
653
-
654
- it "should correctly parse empty strings" do
655
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = ""') }.to_not raise_error
656
- end
657
-
658
- it "should correctly parse virtual resources" do
659
- EgrammarLexerSpec.tokens_scanned_from("@type {").should be_like([:AT, "@"], [:NAME, "type"], [:LBRACE, "{"])
660
- end
661
-
662
- it "should correctly deal with namespaces" do
663
- @lexer.string = %{class myclass}
664
- @lexer.fullscan
665
- @lexer.namespace.should == "myclass"
666
-
667
- @lexer.namepop
668
- @lexer.namespace.should == ""
669
-
670
- @lexer.string = "class base { class sub { class more"
671
- @lexer.fullscan
672
- @lexer.namespace.should == "base::sub::more"
673
-
674
- @lexer.namepop
675
- @lexer.namespace.should == "base::sub"
676
- end
677
-
678
- it "should not put class instantiation on the namespace" do
679
- @lexer.string = "class base { class sub { class { mode"
680
- @lexer.fullscan
681
- @lexer.namespace.should == "base::sub"
682
- end
683
-
684
- it "should correctly handle fully qualified names" do
685
- @lexer.string = "class base { class sub::more {"
686
- @lexer.fullscan
687
- @lexer.namespace.should == "base::sub::more"
688
-
689
- @lexer.namepop
690
- @lexer.namespace.should == "base"
691
- end
692
-
693
- it "should correctly lex variables" do
694
- ["$variable", "$::variable", "$qualified::variable", "$further::qualified::variable"].each do |string|
695
- EgrammarLexerSpec.tokens_scanned_from(string).should be_like([:VARIABLE,string.sub(/^\$/,'')])
696
- end
697
- end
698
-
699
- it "should end variables at `-`" do
700
- EgrammarLexerSpec.tokens_scanned_from('$hyphenated-variable').
701
- should be_like([:VARIABLE, "hyphenated"], [:MINUS, '-'], [:NAME, 'variable'])
702
- end
703
-
704
- it "should not include whitespace in a variable" do
705
- EgrammarLexerSpec.tokens_scanned_from("$foo bar").should_not be_like([:VARIABLE, "foo bar"])
706
- end
707
- it "should not include excess colons in a variable" do
708
- EgrammarLexerSpec.tokens_scanned_from("$foo::::bar").should_not be_like([:VARIABLE, "foo::::bar"])
709
- end
710
- end
711
-
712
- describe "Puppet::Pops::Parser::Lexer in the old tests when lexing example files" do
713
- my_fixtures('*.pp') do |file|
714
- it "should correctly lex #{file}" do
715
- lexer = Puppet::Pops::Parser::Lexer.new
716
- lexer.file = file
717
- expect { lexer.fullscan }.to_not raise_error
718
- end
719
- end
720
- end
721
-
722
- describe "when trying to lex a non-existent file" do
723
- include PuppetSpec::Files
724
-
725
- it "should return an empty list of tokens" do
726
- lexer = Puppet::Pops::Parser::Lexer.new
727
- lexer.file = nofile = tmpfile('lexer')
728
- Puppet::FileSystem.exist?(nofile).should == false
729
-
730
- lexer.fullscan.should == [[false,false]]
731
- end
732
- end
733
-
734
- describe "when string quotes are not closed" do
735
- it "should report with message including an \" opening quote" do
736
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = "') }.to raise_error(/after '"'/)
737
- end
738
-
739
- it "should report with message including an \' opening quote" do
740
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = \'') }.to raise_error(/after "'"/)
741
- end
742
-
743
- it "should report <eof> if immediately followed by eof" do
744
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = "') }.to raise_error(/followed by '<eof>'/)
745
- end
746
-
747
- it "should report max 5 chars following quote" do
748
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = "123456') }.to raise_error(/followed by '12345...'/)
749
- end
750
-
751
- it "should escape control chars" do
752
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = "12\n3456') }.to raise_error(/followed by '12\\n3...'/)
753
- end
754
-
755
- it "should resport position of opening quote" do
756
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = "123456') }.to raise_error(/at line 1:8/)
757
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = "123456') }.to raise_error(/at line 1:9/)
758
- end
759
- end
760
-
761
- describe "when lexing number, bad input should not go unpunished" do
762
- it "should slap bad octal as such" do
763
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = 0778') }.to raise_error(/Not a valid octal/)
764
- end
765
-
766
- it "should slap bad hex as such" do
767
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = 0xFG') }.to raise_error(/Not a valid hex/)
768
- expect { EgrammarLexerSpec.tokens_scanned_from('$var = 0xfg') }.to raise_error(/Not a valid hex/)
769
- end
770
- # Note, bad decimals are probably impossible to enter, as they are not recognized as complete numbers, instead,
771
- # the error will be something else, depending on what follows some initial digit.
772
- #
773
- end
774
-
775
- describe "when lexing interpolation detailed positioning should be correct" do
776
- it "should correctly position a string without interpolation" do
777
- EgrammarLexerSpec.tokens_scanned_from('"not interpolated"').should be_like(
778
- [:STRING, {:value=>"not interpolated", :line=>1, :offset=>0, :pos=>1, :length=>18}])
779
- end
780
-
781
- it "should correctly position a string with false start in interpolation" do
782
- EgrammarLexerSpec.tokens_scanned_from('"not $$$ rpolated"').should be_like(
783
- [:STRING, {:value=>"not $$$ rpolated", :line=>1, :offset=>0, :pos=>1, :length=>18}])
784
- end
785
-
786
- it "should correctly position pre-mid-end interpolation " do
787
- EgrammarLexerSpec.tokens_scanned_from('"pre $x mid $y end"').should be_like(
788
- [:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>6}],
789
- [:VARIABLE, {:value=>"x", :line=>1, :offset=>6, :pos=>7, :length=>1}],
790
- [:DQMID, {:value=>" mid ", :line=>1, :offset=>7, :pos=>8, :length=>6}],
791
- [:VARIABLE, {:value=>"y", :line=>1, :offset=>13, :pos=>14, :length=>1}],
792
- [:DQPOST, {:value=>" end", :line=>1, :offset=>14, :pos=>15, :length=>5}]
793
- )
794
- end
795
-
796
- it "should correctly position pre-mid-end interpolation using ${} " do
797
- EgrammarLexerSpec.tokens_scanned_from('"pre ${x} mid ${y} end"').should be_like(
798
- [:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>7}],
799
- [:VARIABLE, {:value=>"x", :line=>1, :offset=>7, :pos=>8, :length=>1}],
800
- [:DQMID, {:value=>" mid ", :line=>1, :offset=>8, :pos=>9, :length=>8}],
801
- [:VARIABLE, {:value=>"y", :line=>1, :offset=>16, :pos=>17, :length=>1}],
802
- [:DQPOST, {:value=>" end", :line=>1, :offset=>17, :pos=>18, :length=>6}]
803
- )
804
- end
805
-
806
- it "should correctly position pre-end interpolation using ${} with f call" do
807
- EgrammarLexerSpec.tokens_scanned_from('"pre ${x()} end"').should be_like(
808
- [:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>7}],
809
- [:NAME, {:value=>"x", :line=>1, :offset=>7, :pos=>8, :length=>1}],
810
- [:LPAREN, {:value=>"(", :line=>1, :offset=>8, :pos=>9, :length=>1}],
811
- [:RPAREN, {:value=>")", :line=>1, :offset=>9, :pos=>10, :length=>1}],
812
- [:DQPOST, {:value=>" end", :line=>1, :offset=>10, :pos=>11, :length=>6}]
813
- )
814
- end
815
-
816
- it "should correctly position pre-end interpolation using ${} with $x" do
817
- EgrammarLexerSpec.tokens_scanned_from('"pre ${$x} end"').should be_like(
818
- [:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>7}],
819
- [:VARIABLE, {:value=>"x", :line=>1, :offset=>7, :pos=>8, :length=>2}],
820
- [:DQPOST, {:value=>" end", :line=>1, :offset=>9, :pos=>10, :length=>6}]
821
- )
822
- end
823
-
824
- it "should correctly position pre-end interpolation across lines" do
825
- EgrammarLexerSpec.tokens_scanned_from(%Q["pre ${\n$x} end"]).should be_like(
826
- [:DQPRE, {:value=>"pre ", :line=>1, :offset=>0, :pos=>1, :length=>7}],
827
- [:VARIABLE, {:value=>"x", :line=>2, :offset=>8, :pos=>1, :length=>2}],
828
- [:DQPOST, {:value=>" end", :line=>2, :offset=>10, :pos=>3, :length=>6}]
829
- )
830
- end
831
-
832
- it "should correctly position interpolation across lines when strings have embedded newlines" do
833
- EgrammarLexerSpec.tokens_scanned_from(%Q["pre \n\n${$x}\n mid$y"]).should be_like(
834
- [:DQPRE, {:value=>"pre \n\n", :line=>1, :offset=>0, :pos=>1, :length=>9}],
835
- [:VARIABLE, {:value=>"x", :line=>3, :offset=>9, :pos=>3, :length=>2}],
836
- [:DQMID, {:value=>"\n mid", :line=>3, :offset=>11, :pos=>5, :length=>7}],
837
- [:VARIABLE, {:value=>"y", :line=>4, :offset=>18, :pos=>6, :length=>1}]
838
- )
839
- end
840
- end