sproutit-sproutcore 1.0.0.20090407205609

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. data/Buildfile +115 -0
  2. data/History.txt +7 -0
  3. data/README.txt +102 -0
  4. data/Rakefile +54 -0
  5. data/Todo.txt +1 -0
  6. data/bin/sc-build +13 -0
  7. data/bin/sc-build-number +13 -0
  8. data/bin/sc-gen +13 -0
  9. data/bin/sc-init +13 -0
  10. data/bin/sc-manifest +13 -0
  11. data/bin/sc-server +13 -0
  12. data/bin/sproutcore +14 -0
  13. data/buildtasks/build.rake +73 -0
  14. data/buildtasks/entry.rake +59 -0
  15. data/buildtasks/manifest.rake +469 -0
  16. data/buildtasks/render.rake +21 -0
  17. data/buildtasks/target.rake +42 -0
  18. data/gen/Buildfile +16 -0
  19. data/gen/app/Buildfile +36 -0
  20. data/gen/app/README +1 -0
  21. data/gen/app/USAGE +13 -0
  22. data/gen/app/templates/apps/{target_name}/core.js +27 -0
  23. data/gen/app/templates/apps/{target_name}/english.lproj/loading.rhtml +9 -0
  24. data/gen/app/templates/apps/{target_name}/english.lproj/main_page.js +22 -0
  25. data/gen/app/templates/apps/{target_name}/english.lproj/strings.js +15 -0
  26. data/gen/app/templates/apps/{target_name}/main.js +30 -0
  27. data/gen/controller/Buildfile +18 -0
  28. data/gen/controller/README +1 -0
  29. data/gen/controller/USAGE +13 -0
  30. data/gen/controller/templates/controllers/{filename}.js +18 -0
  31. data/gen/controller/templates/tests/controllers/{filename}.js +15 -0
  32. data/gen/framework/Buildfile +36 -0
  33. data/gen/framework/README +1 -0
  34. data/gen/framework/USAGE +13 -0
  35. data/gen/framework/templates/frameworks/{target_name}/core.js +21 -0
  36. data/gen/framework/templates/frameworks/{target_name}/english.lproj/strings.js +15 -0
  37. data/gen/language/Buildfile +26 -0
  38. data/gen/language/README +1 -0
  39. data/gen/language/USAGE +13 -0
  40. data/gen/language/templates/{filename}/strings.js +14 -0
  41. data/gen/model/Buildfile +16 -0
  42. data/gen/model/README +1 -0
  43. data/gen/model/USAGE +15 -0
  44. data/gen/model/templates/fixtures/{filename}.js +35 -0
  45. data/gen/model/templates/models/{filename}.js +19 -0
  46. data/gen/model/templates/tests/models/{filename}.js +15 -0
  47. data/gen/project/Buildfile +45 -0
  48. data/gen/project/INIT +3 -0
  49. data/gen/project/README +1 -0
  50. data/gen/project/USAGE +2 -0
  51. data/gen/project/templates/{filename}/Buildfile +7 -0
  52. data/gen/project/templates/{filename}/README +7 -0
  53. data/gen/test/Buildfile +25 -0
  54. data/gen/test/README +1 -0
  55. data/gen/test/USAGE +12 -0
  56. data/gen/test/templates/tests/{filename}.js +15 -0
  57. data/gen/theme/Buildfile +36 -0
  58. data/gen/theme/README +1 -0
  59. data/gen/theme/USAGE +13 -0
  60. data/gen/theme/templates/themes/{target_name}/english.lproj/strings.js +15 -0
  61. data/gen/view/Buildfile +18 -0
  62. data/gen/view/README +1 -0
  63. data/gen/view/USAGE +13 -0
  64. data/gen/view/templates/tests/views/{filename}.js +15 -0
  65. data/gen/view/templates/views/{filename}.js +18 -0
  66. data/lib/sproutcore.rb +130 -0
  67. data/lib/sproutcore/builders/base.rb +79 -0
  68. data/lib/sproutcore/builders/combine.rb +37 -0
  69. data/lib/sproutcore/builders/html.rb +177 -0
  70. data/lib/sproutcore/builders/javascript.rb +55 -0
  71. data/lib/sproutcore/builders/minify.rb +67 -0
  72. data/lib/sproutcore/builders/sass.rb +55 -0
  73. data/lib/sproutcore/builders/strings.rb +44 -0
  74. data/lib/sproutcore/builders/stylesheet.rb +40 -0
  75. data/lib/sproutcore/builders/test.rb +58 -0
  76. data/lib/sproutcore/builders/test_index.rb +26 -0
  77. data/lib/sproutcore/buildfile.rb +483 -0
  78. data/lib/sproutcore/buildfile/build_task.rb +33 -0
  79. data/lib/sproutcore/buildfile/buildfile_dsl.rb +162 -0
  80. data/lib/sproutcore/buildfile/cloneable.rb +34 -0
  81. data/lib/sproutcore/buildfile/early_time.rb +29 -0
  82. data/lib/sproutcore/buildfile/invocation_chain.rb +64 -0
  83. data/lib/sproutcore/buildfile/namespace.rb +33 -0
  84. data/lib/sproutcore/buildfile/string_ext.rb +198 -0
  85. data/lib/sproutcore/buildfile/task.rb +304 -0
  86. data/lib/sproutcore/buildfile/task_arguments.rb +86 -0
  87. data/lib/sproutcore/buildfile/task_manager.rb +193 -0
  88. data/lib/sproutcore/deprecated/view_helper.rb +662 -0
  89. data/lib/sproutcore/helpers/capture_helper.rb +30 -0
  90. data/lib/sproutcore/helpers/cssmin.rb +202 -0
  91. data/lib/sproutcore/helpers/dom_id_helper.rb +21 -0
  92. data/lib/sproutcore/helpers/entry_sorter.rb +105 -0
  93. data/lib/sproutcore/helpers/packed_optimizer.rb +102 -0
  94. data/lib/sproutcore/helpers/static_helper.rb +268 -0
  95. data/lib/sproutcore/helpers/tag_helper.rb +117 -0
  96. data/lib/sproutcore/helpers/text_helper.rb +303 -0
  97. data/lib/sproutcore/models/generator.rb +493 -0
  98. data/lib/sproutcore/models/hash_struct.rb +109 -0
  99. data/lib/sproutcore/models/manifest.rb +342 -0
  100. data/lib/sproutcore/models/manifest_entry.rb +232 -0
  101. data/lib/sproutcore/models/project.rb +270 -0
  102. data/lib/sproutcore/models/target.rb +403 -0
  103. data/lib/sproutcore/rack/builder.rb +269 -0
  104. data/lib/sproutcore/rack/dev.rb +51 -0
  105. data/lib/sproutcore/rack/docs.rb +24 -0
  106. data/lib/sproutcore/rack/proxy.rb +92 -0
  107. data/lib/sproutcore/rack/service.rb +141 -0
  108. data/lib/sproutcore/rack/test_runner.rb +24 -0
  109. data/lib/sproutcore/render_engines/erubis.rb +55 -0
  110. data/lib/sproutcore/render_engines/haml.rb +39 -0
  111. data/lib/sproutcore/tools.rb +311 -0
  112. data/lib/sproutcore/tools/build.rb +80 -0
  113. data/lib/sproutcore/tools/build_number.rb +23 -0
  114. data/lib/sproutcore/tools/gen.rb +99 -0
  115. data/lib/sproutcore/tools/init.rb +40 -0
  116. data/lib/sproutcore/tools/manifest.rb +84 -0
  117. data/lib/sproutcore/tools/server.rb +45 -0
  118. data/spec/buildtasks/build/copy_spec.rb +60 -0
  119. data/spec/buildtasks/build/spec_helper.rb +36 -0
  120. data/spec/buildtasks/manifest/catalog_spec.rb +48 -0
  121. data/spec/buildtasks/manifest/hide_buildfiles_spec.rb +125 -0
  122. data/spec/buildtasks/manifest/localize_spec.rb +97 -0
  123. data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +246 -0
  124. data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +87 -0
  125. data/spec/buildtasks/manifest/prepare_build_tasks/html_spec.rb +175 -0
  126. data/spec/buildtasks/manifest/prepare_build_tasks/javascript_spec.rb +65 -0
  127. data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +70 -0
  128. data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +152 -0
  129. data/spec/buildtasks/manifest/prepare_build_tasks/sass_spec.rb +98 -0
  130. data/spec/buildtasks/manifest/prepare_build_tasks/strings_spec.rb +64 -0
  131. data/spec/buildtasks/manifest/prepare_build_tasks/tests_spec.rb +163 -0
  132. data/spec/buildtasks/manifest/prepare_spec.rb +43 -0
  133. data/spec/buildtasks/manifest/spec_helper.rb +35 -0
  134. data/spec/buildtasks/target_spec.rb +214 -0
  135. data/spec/fixtures/builder_tests/Buildfile +15 -0
  136. data/spec/fixtures/builder_tests/apps/combine_test/a.js +1 -0
  137. data/spec/fixtures/builder_tests/apps/combine_test/b.js +1 -0
  138. data/spec/fixtures/builder_tests/apps/combine_test/c.js +1 -0
  139. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/a.css +1 -0
  140. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/b.css +1 -0
  141. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/c.css +1 -0
  142. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/bar1_sample.rhtml +2 -0
  143. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/erb_sample.html.erb +1 -0
  144. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/icons/image.png +0 -0
  145. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/image.jpg +0 -0
  146. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/rhtml_sample.rhtml +1 -0
  147. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/strings.js +4 -0
  148. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/style.css +0 -0
  149. data/spec/fixtures/builder_tests/apps/html_test/french.lproj/french-icons/fr.png +0 -0
  150. data/spec/fixtures/builder_tests/apps/html_test/french.lproj/strings.js +4 -0
  151. data/spec/fixtures/builder_tests/apps/html_test/lib/layout_template.rhtml +1 -0
  152. data/spec/fixtures/builder_tests/apps/html_test/scripts.js +0 -0
  153. data/spec/fixtures/builder_tests/apps/javascript_test/sc_static.js +15 -0
  154. data/spec/fixtures/builder_tests/apps/javascript_test/sc_super.js +4 -0
  155. data/spec/fixtures/builder_tests/apps/javascript_test/strings.js +7 -0
  156. data/spec/fixtures/builder_tests/apps/sass_test/sample.sass +3 -0
  157. data/spec/fixtures/builder_tests/apps/strings_test/lproj/strings.js +8 -0
  158. data/spec/fixtures/builder_tests/apps/stylesheet_test/build_directives.css +9 -0
  159. data/spec/fixtures/builder_tests/apps/stylesheet_test/sc_static.css +12 -0
  160. data/spec/fixtures/builder_tests/apps/test_test/lib/alt_layout.rhtml +1 -0
  161. data/spec/fixtures/builder_tests/apps/test_test/lib/test_layout.rhtml +3 -0
  162. data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test.js +1 -0
  163. data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test2.js +1 -0
  164. data/spec/fixtures/builder_tests/apps/test_test/tests/rhtml_test.rhtml +4 -0
  165. data/spec/fixtures/builder_tests/frameworks/debug/core.js +0 -0
  166. data/spec/fixtures/builder_tests/frameworks/debug/english.lproj/dummy.css +0 -0
  167. data/spec/fixtures/builder_tests/frameworks/qunit/core.js +0 -0
  168. data/spec/fixtures/builder_tests/frameworks/qunit/english.lproj/dummy.css +0 -0
  169. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/req_style_1.css +0 -0
  170. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/strings.js +4 -0
  171. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/test.rhtml +1 -0
  172. data/spec/fixtures/builder_tests/frameworks/req_target_1/req_js_1.js +0 -0
  173. data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/req_style_2.css +0 -0
  174. data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/test.rhtml +1 -0
  175. data/spec/fixtures/builder_tests/frameworks/req_target_2/javascript.js +1 -0
  176. data/spec/fixtures/builder_tests/frameworks/req_target_2/lib/alt_layout.rhtml +0 -0
  177. data/spec/fixtures/builder_tests/frameworks/req_target_2/req_js_2.js +0 -0
  178. data/spec/fixtures/builder_tests/themes/sample_theme/Buildfile +1 -0
  179. data/spec/fixtures/buildfiles/basic/Buildfile +16 -0
  180. data/spec/fixtures/buildfiles/basic/task_module.rake +6 -0
  181. data/spec/fixtures/buildfiles/installed/Buildfile +7 -0
  182. data/spec/fixtures/buildfiles/installed/Buildfile2 +5 -0
  183. data/spec/fixtures/buildfiles/project_test/Buildfile +4 -0
  184. data/spec/fixtures/buildfiles/project_test/not_project/Buildfile +2 -0
  185. data/spec/fixtures/buildfiles/project_test/not_project/child/PLACEHOLDER +0 -0
  186. data/spec/fixtures/entry_for_project/Buildfile +1 -0
  187. data/spec/fixtures/entry_for_project/apps/test_app/entry.txt +0 -0
  188. data/spec/fixtures/entry_for_project/apps/test_app/frameworks/nested/PLACEHOLDER +0 -0
  189. data/spec/fixtures/entry_for_project/frameworks/shared/PLACEHOLDER +0 -0
  190. data/spec/fixtures/find_targets/custom/Buildfile +8 -0
  191. data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar1/PLACEHOLDER +0 -0
  192. data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar2/PLACEHOLDER +0 -0
  193. data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo1/PLACEHOLDER +0 -0
  194. data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo2/PLACEHOLDER +0 -0
  195. data/spec/fixtures/find_targets/custom/foos/custom_foos/Buildfile +5 -0
  196. data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo1/PLACEHOLDER +0 -0
  197. data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo2/PLACEHOLDER +0 -0
  198. data/spec/fixtures/find_targets/custom/foos/custom_foos/foos/not_foo1/PLACEHOLDER +0 -0
  199. data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar1/PLACEHOLDER +0 -0
  200. data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar2/PLACEHOLDER +0 -0
  201. data/spec/fixtures/find_targets/nested/Buildfile +8 -0
  202. data/spec/fixtures/find_targets/nested/apps/app1/Buildfile +1 -0
  203. data/spec/fixtures/find_targets/nested/apps/app1/apps/nested_app/PLACEHOLDER +0 -0
  204. data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework1/PLACEHOLDER +0 -0
  205. data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework2/PLACEHOLDER +0 -0
  206. data/spec/fixtures/find_targets/standard/clients/client1/PLACEHOLDER +0 -0
  207. data/spec/fixtures/find_targets/standard/frameworks/framework1/frameworks/framework1/PLACEHOLDER +0 -0
  208. data/spec/fixtures/find_targets/standard/frameworks/framework2/PLACEHOLDER +0 -0
  209. data/spec/fixtures/find_targets/standard/themes/theme1/PLACEHOLDER +0 -0
  210. data/spec/fixtures/find_targets/standard/themes/theme2/PLACEHOLDER +0 -0
  211. data/spec/fixtures/languages/apps/caps_long_names/English.lproj/PLACEHOLDER +0 -0
  212. data/spec/fixtures/languages/apps/caps_long_names/FreNCH.lproj/PLACEHOLDER +0 -0
  213. data/spec/fixtures/languages/apps/caps_long_names/UnknOWN.lproj/PLACEHOLDER +0 -0
  214. data/spec/fixtures/languages/apps/long_names/english.lproj/PLACEHOLDER +0 -0
  215. data/spec/fixtures/languages/apps/long_names/french.lproj/PLACEHOLDER +0 -0
  216. data/spec/fixtures/languages/apps/long_names/german.lproj/PLACEHOLDER +0 -0
  217. data/spec/fixtures/languages/apps/long_names/italian.lproj/PLACEHOLDER +0 -0
  218. data/spec/fixtures/languages/apps/long_names/japanese.lproj/PLACEHOLDER +0 -0
  219. data/spec/fixtures/languages/apps/long_names/spanish.lproj/PLACEHOLDER +0 -0
  220. data/spec/fixtures/languages/apps/long_names/unknown.lproj/PLACEHOLDER +0 -0
  221. data/spec/fixtures/languages/apps/no_names/PLACEHOLDER +0 -0
  222. data/spec/fixtures/languages/apps/short_names/de.lproj/PLACEHOLDER +0 -0
  223. data/spec/fixtures/languages/apps/short_names/en-CA.lproj/PLACEHOLDER +0 -0
  224. data/spec/fixtures/languages/apps/short_names/en-GB.lproj/PLACEHOLDER +0 -0
  225. data/spec/fixtures/languages/apps/short_names/en-US.lproj/PLACEHOLDER +0 -0
  226. data/spec/fixtures/languages/apps/short_names/en.lproj/PLACEHOLDER +0 -0
  227. data/spec/fixtures/languages/apps/short_names/es.lproj/PLACEHOLDER +0 -0
  228. data/spec/fixtures/languages/apps/short_names/foo.lproj/PLACEHOLDER +0 -0
  229. data/spec/fixtures/languages/apps/short_names/fr.lproj/PLACEHOLDER +0 -0
  230. data/spec/fixtures/languages/apps/short_names/it.lproj/PLACEHOLDER +0 -0
  231. data/spec/fixtures/languages/apps/short_names/ja.lproj/PLACEHOLDER +0 -0
  232. data/spec/fixtures/ordered_entries/apps/no_requires/1.js +1 -0
  233. data/spec/fixtures/ordered_entries/apps/no_requires/B.js +1 -0
  234. data/spec/fixtures/ordered_entries/apps/no_requires/a.js +1 -0
  235. data/spec/fixtures/ordered_entries/apps/no_requires/a/a.js +1 -0
  236. data/spec/fixtures/ordered_entries/apps/no_requires/a/b.js +1 -0
  237. data/spec/fixtures/ordered_entries/apps/no_requires/b/a.js +1 -0
  238. data/spec/fixtures/ordered_entries/apps/no_requires/c.js +1 -0
  239. data/spec/fixtures/ordered_entries/apps/no_requires/core.js +1 -0
  240. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/B.css +0 -0
  241. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a.css +0 -0
  242. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/a.css +0 -0
  243. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/b.css +0 -0
  244. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/b/a.css +0 -0
  245. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/c.css +0 -0
  246. data/spec/fixtures/ordered_entries/apps/no_requires/lproj/strings.js +1 -0
  247. data/spec/fixtures/ordered_entries/apps/no_requires/utils.js +1 -0
  248. data/spec/fixtures/ordered_entries/apps/with_requires/a.js +2 -0
  249. data/spec/fixtures/ordered_entries/apps/with_requires/b.js +3 -0
  250. data/spec/fixtures/ordered_entries/apps/with_requires/c.js +2 -0
  251. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/a.css +2 -0
  252. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/b.css +2 -0
  253. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/c.css +2 -0
  254. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/d.js +1 -0
  255. data/spec/fixtures/real_world/Buildfile +12 -0
  256. data/spec/fixtures/real_world/apps/account/README +1 -0
  257. data/spec/fixtures/real_world/apps/calendar/README +1 -0
  258. data/spec/fixtures/real_world/apps/contacts/README_BEFORE_EDITING +1 -0
  259. data/spec/fixtures/real_world/apps/files/README +1 -0
  260. data/spec/fixtures/real_world/apps/mail/README +1 -0
  261. data/spec/fixtures/real_world/apps/mobile_photos/README +1 -0
  262. data/spec/fixtures/real_world/apps/photos/README +1 -0
  263. data/spec/fixtures/real_world/apps/uploader/README +1 -0
  264. data/spec/fixtures/real_world/frameworks/core_files/PLACEHOLDER +0 -0
  265. data/spec/fixtures/real_world/frameworks/core_photos/PLACEHOLDER +0 -0
  266. data/spec/fixtures/real_world/frameworks/shared/PLACEHOLDER +0 -0
  267. data/spec/fixtures/real_world/frameworks/sproutcore/Buildfile +26 -0
  268. data/spec/fixtures/real_world/frameworks/sproutcore/README +1 -0
  269. data/spec/fixtures/real_world/frameworks/sproutcore/apps/docs/PLACEHOLDER +0 -0
  270. data/spec/fixtures/real_world/frameworks/sproutcore/apps/test_runner/PLACEHOLDER +0 -0
  271. data/spec/fixtures/real_world/frameworks/sproutcore/core.js +0 -0
  272. data/spec/fixtures/real_world/frameworks/sproutcore/debug/debug-resource.html +0 -0
  273. data/spec/fixtures/real_world/frameworks/sproutcore/debug/sample_debug.js +0 -0
  274. data/spec/fixtures/real_world/frameworks/sproutcore/demo2.js +0 -0
  275. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/debug/sample_debug-loc.js +0 -0
  276. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.css +4 -0
  277. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.html +1 -0
  278. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo2.sass +0 -0
  279. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.haml +0 -0
  280. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.html.erb +1 -0
  281. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.rhtml +0 -0
  282. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/fixtures/sample_fixtures-loc.js +0 -0
  283. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/has_require.css +4 -0
  284. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_require.css +1 -0
  285. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_sc_resource.rhtml +1 -0
  286. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/protocols/sample-loc.js +0 -0
  287. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.css +6 -0
  288. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.rhtml +3 -0
  289. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/strings.js +1 -0
  290. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/tests/sample-loc.js +0 -0
  291. data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample-json-fixture.json +1 -0
  292. data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample_fixtures.js +0 -0
  293. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/application/PLACEHOLDER +0 -0
  294. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/costello/core.js +0 -0
  295. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/data_store/PLACEHOLDER +0 -0
  296. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/debug/PLACEHOLDER +0 -0
  297. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/desktop/PLACEHOLDER +0 -0
  298. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/empty_theme/PLACEHOLDER +0 -0
  299. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/foundation/PLACEHOLDER +0 -0
  300. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/mobile/PLACEHOLDER +0 -0
  301. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/qunit/PLACEHOLDER +0 -0
  302. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/uploader/PLACEHOLDER +0 -0
  303. data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/french-resource.js +0 -0
  304. data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/strings.js +1 -0
  305. data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/german-resource.js +0 -0
  306. data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/strings.js +0 -0
  307. data/spec/fixtures/real_world/frameworks/sproutcore/has_require.js +4 -0
  308. data/spec/fixtures/real_world/frameworks/sproutcore/lib/index.html +1 -0
  309. data/spec/fixtures/real_world/frameworks/sproutcore/no_require.js +1 -0
  310. data/spec/fixtures/real_world/frameworks/sproutcore/protocols/sample.js +0 -0
  311. data/spec/fixtures/real_world/frameworks/sproutcore/sc_resource.js +6 -0
  312. data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample1.js +0 -0
  313. data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample2.js +0 -0
  314. data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.js +0 -0
  315. data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.rhtml +1 -0
  316. data/spec/fixtures/real_world/frameworks/sproutcore/themes/standard_theme/README +0 -0
  317. data/spec/fixtures/real_world/frameworks/sproutcore/views/view.js +1 -0
  318. data/spec/fixtures/real_world/generators/sample_custom/Buildfile +0 -0
  319. data/spec/fixtures/real_world/generators/sample_custom/templates/{filename}.js +1 -0
  320. data/spec/fixtures/recursive_project/Buildfile +8 -0
  321. data/spec/fixtures/recursive_project/frameworks/sproutcore/frameworks/costello/PLACEHOLDER +0 -0
  322. data/spec/lib/builders/combine_spec.rb +67 -0
  323. data/spec/lib/builders/html_spec.rb +577 -0
  324. data/spec/lib/builders/javascript_spec.rb +81 -0
  325. data/spec/lib/builders/sass_spec.rb +43 -0
  326. data/spec/lib/builders/spec_helper.rb +30 -0
  327. data/spec/lib/builders/strings_spec.rb +52 -0
  328. data/spec/lib/builders/stylesheet_spec.rb +63 -0
  329. data/spec/lib/builders/test_index_spec.rb +44 -0
  330. data/spec/lib/builders/test_spec.rb +135 -0
  331. data/spec/lib/buildfile/config_for_spec.rb +81 -0
  332. data/spec/lib/buildfile/define_spec.rb +59 -0
  333. data/spec/lib/buildfile/dup_spec.rb +65 -0
  334. data/spec/lib/buildfile/invoke_spec.rb +130 -0
  335. data/spec/lib/buildfile/load_spec.rb +49 -0
  336. data/spec/lib/buildfile/task/dup_spec.rb +55 -0
  337. data/spec/lib/buildfile/task_defined_spec.rb +17 -0
  338. data/spec/lib/buildfile_commands/build_task_spec.rb +19 -0
  339. data/spec/lib/buildfile_commands/config_spec.rb +97 -0
  340. data/spec/lib/buildfile_commands/import_spec.rb +17 -0
  341. data/spec/lib/buildfile_commands/namespace_spec.rb +18 -0
  342. data/spec/lib/buildfile_commands/proxies_spec.rb +38 -0
  343. data/spec/lib/buildfile_commands/replace_task_spec.rb +29 -0
  344. data/spec/lib/buildfile_commands/task_spec.rb +36 -0
  345. data/spec/lib/helpers/packing_optimizer/optimize_spec.rb +26 -0
  346. data/spec/lib/models/hash_struct/deep_clone_spec.rb +27 -0
  347. data/spec/lib/models/hash_struct/has_options_spec.rb +32 -0
  348. data/spec/lib/models/hash_struct/hash_spec.rb +64 -0
  349. data/spec/lib/models/hash_struct/merge_spec.rb +26 -0
  350. data/spec/lib/models/hash_struct/method_missing.rb +41 -0
  351. data/spec/lib/models/manifest/add_entry_spec.rb +36 -0
  352. data/spec/lib/models/manifest/add_transform_spec.rb +90 -0
  353. data/spec/lib/models/manifest/build_spec.rb +78 -0
  354. data/spec/lib/models/manifest/entry_for_spec.rb +94 -0
  355. data/spec/lib/models/manifest/find_entry.rb +84 -0
  356. data/spec/lib/models/manifest/prepare_spec.rb +62 -0
  357. data/spec/lib/models/manifest_entry/cacheable_url_spec.rb +31 -0
  358. data/spec/lib/models/manifest_entry/prepare_spec.rb +54 -0
  359. data/spec/lib/models/project/add_target_spec.rb +44 -0
  360. data/spec/lib/models/project/buildfile_spec.rb +35 -0
  361. data/spec/lib/models/project/find_targets_for_spec.rb +77 -0
  362. data/spec/lib/models/project/load_nearest_project_spec.rb +23 -0
  363. data/spec/lib/models/project/target_for_spec.rb +33 -0
  364. data/spec/lib/models/project/targets_spec.rb +62 -0
  365. data/spec/lib/models/target/compute_build_number_spec.rb +125 -0
  366. data/spec/lib/models/target/config_spec.rb +30 -0
  367. data/spec/lib/models/target/expand_required_targets_spec.rb +48 -0
  368. data/spec/lib/models/target/installed_languages_spec.rb +47 -0
  369. data/spec/lib/models/target/lproj_for_spec.rb +38 -0
  370. data/spec/lib/models/target/manifest_for_spec.rb +42 -0
  371. data/spec/lib/models/target/parent_target_spec.rb +21 -0
  372. data/spec/lib/models/target/prepare_spec.rb +53 -0
  373. data/spec/lib/models/target/required_targets_spec.rb +119 -0
  374. data/spec/lib/models/target/target_for_spec.rb +56 -0
  375. data/spec/lib/tools/build_number_spec.rb +28 -0
  376. data/spec/lib/tools/gen_spec.rb +207 -0
  377. data/spec/lib/tools/tools_spec.rb +78 -0
  378. data/spec/spec_helper.rb +138 -0
  379. data/sproutcore.gemspec +47 -0
  380. data/vendor/github_gem_lint.rb +22 -0
  381. data/vendor/yui-compressor/yuicompressor-2.4.2.jar +0 -0
  382. metadata +1084 -0
@@ -0,0 +1,30 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'config' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+ end
10
+
11
+ it "should pickup global config setting when target does not override" do
12
+ # required property is defined in real_world/Buildfile
13
+ @target = @project.target_for :contacts
14
+ @target.config.required.should eql(:sproutcore)
15
+ end
16
+
17
+ it "should pickup config setting overidden in target's Buildfile config" do
18
+ # define in real_world/frameworks/sproutcore/Buildfile
19
+ @target = @project.target_for :sproutcore
20
+ @target.config.required.should eql(:desktop)
21
+
22
+ end
23
+
24
+ it "should pickup config from parent buildfiles" do
25
+ # define in real_world/frameworks/sproutcore/Buildfile
26
+ @target = @project.target_for 'sproutcore/foundation'
27
+ @target.config.required.should eql(:costello)
28
+ end
29
+
30
+ end
@@ -0,0 +1,48 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'expand_required_targets' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ it "should return all of targets required by a target in proper order" do
8
+ @project = fixture_project(:real_world)
9
+ target = @project.target_for :sproutcore
10
+ required = target.expand_required_targets.map { |x| x.target_name }
11
+ required.should eql([
12
+ :"/sproutcore/costello",
13
+ :"/sproutcore/foundation",
14
+ :"/sproutcore/application",
15
+ :"/sproutcore/data_store",
16
+ :"/sproutcore/desktop"])
17
+ end
18
+
19
+ it "should still return a valid response even with a recursive project" do
20
+ @project = fixture_project(:recursive_project)
21
+ target = @project.target_for :sproutcore
22
+
23
+ required = nil
24
+ lambda { required = target.expand_required_targets }.should_not raise_error
25
+
26
+ required.map! { |x| x.target_name }
27
+ required.should eql([:'/sproutcore/costello'])
28
+ end
29
+
30
+ it "should include test or debug required if passed as options" do
31
+ @project = fixture_project(:real_world)
32
+ target = @project.target_for :sproutcore
33
+ target.config.debug_required = 'sproutcore/debug'
34
+ target.config.test_required = 'sproutcore/qunit'
35
+
36
+ debug_expected = @project.target_for 'sproutcore/debug'
37
+ test_expected = @project.target_for 'sproutcore/qunit'
38
+
39
+ target.expand_required_targets().should_not include(debug_expected)
40
+ target.expand_required_targets(:debug => false ).should_not include(debug_expected)
41
+ target.expand_required_targets(:debug => true).should include(debug_expected)
42
+
43
+ target.expand_required_targets().should_not include(test_expected)
44
+ target.expand_required_targets(:test => false ).should_not include(test_expected)
45
+ target.expand_required_targets(:test => true).should include(test_expected)
46
+ end
47
+
48
+ end
@@ -0,0 +1,47 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'installed_languages' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project 'languages'
9
+ end
10
+
11
+ def langs(langs)
12
+ langs.map { |l| l.to_s }.sort.map { |l| l.to_sym }
13
+ end
14
+
15
+ it "should detect all installed languages with short names" do
16
+ expected = langs %w(de en-CA en-GB en-US en es foo fr it ja)
17
+ @short_names = @project.target_for :short_names
18
+ @short_names.installed_languages.should eql(expected)
19
+ end
20
+
21
+ it "should map long languages to short names, and pass through others" do
22
+ expected = langs %w(en fr de it ja es unknown)
23
+ @long_names = @project.target_for :long_names
24
+ @long_names.installed_languages.should eql(expected)
25
+ end
26
+
27
+ it "should always return the preferred language, even if no languages" do
28
+ @no_names = @project.target_for :no_names
29
+ @no_names.installed_languages.should eql([:en])
30
+ end
31
+
32
+ it "should ignore case for long names and respect case for unknown" do
33
+ @long_names = @project.target_for :caps_long_names
34
+ @long_names.installed_languages.should eql([:en, :fr, :UnknOWN])
35
+ end
36
+
37
+ # NOTE: This is the same test as above, but it is placed here to test
38
+ # case-sensitivity explicitly. On some platforms, sorting will differ
39
+ # depending on the case...
40
+ it "should always return names using case insensitive sort" do
41
+ @long_names = @project.target_for :caps_long_names
42
+ @long_names.installed_languages.should eql([:en, :fr, :UnknOWN])
43
+ end
44
+
45
+
46
+
47
+ end
@@ -0,0 +1,38 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'lproj_for' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project 'languages'
9
+ @long_names = @project.target_for :long_names
10
+ @short_names = @project.target_for :short_names
11
+ end
12
+
13
+
14
+ it "should return the long name of a language if installed" do
15
+ SC::Target::SHORT_LANGUAGE_MAP.each do |short_name, long_name|
16
+ @long_names.lproj_for(short_name.to_sym).should eql("#{long_name}.lproj")
17
+ end
18
+ end
19
+
20
+ it "should return the short name of a language if installed" do
21
+ SC::Target::SHORT_LANGUAGE_MAP.each do |short_name, long_name|
22
+ @short_names.lproj_for(short_name.to_sym).should eql("#{short_name}.lproj")
23
+ end
24
+ end
25
+
26
+ it "should return the language name if installed + no explicit mapping" do
27
+ @short_names.lproj_for('en-GB').should eql('en-GB.lproj')
28
+ end
29
+
30
+ it "should return nil for a non-existant language" do
31
+ @short_names.lproj_for('imaginary').should be_nil
32
+ end
33
+
34
+ it "should return long language name if no mapping is known" do
35
+ @long_names.lproj_for(:unknown).should eql('unknown.lproj')
36
+ end
37
+
38
+ end
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'manifest_for' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+ @target = @project.target_for :sproutcore
10
+ end
11
+
12
+ it "should return a new manifest instance for a new variation with variation properties set" do
13
+ manifest = @target.manifest_for :language => :en
14
+ manifest.should_not be_nil
15
+ manifest.language.should eql(:en)
16
+ end
17
+
18
+ it "should return the same manifest instance for the same variation" do
19
+ manifest_en = @target.manifest_for :language => :en
20
+ manifest_fr = @target.manifest_for :language => :fr
21
+
22
+ @target.manifest_for(:language => :en).should eql(manifest_en)
23
+ @target.manifest_for(:language => :fr).should eql(manifest_fr)
24
+ end
25
+
26
+ it "should return first manifest matching variation if multiples match" do
27
+ manifest1 = @target.manifest_for :language => :en, :vers => 1
28
+ manifest2 = @target.manifest_for :language => :en, :vers => 2
29
+
30
+ found = @target.manifest_for(:language => :en)
31
+ found.vers.should eql(1)
32
+ end
33
+
34
+ # IMPORTANT: This condition is assumed by the manifest/prepare_spec.
35
+ it "should NOT call prepare! when creating a new manifest" do
36
+ manifest = @target.manifest_for :language => :en
37
+ manifest.prepared?.should be_false
38
+ end
39
+
40
+ end
41
+
42
+
@@ -0,0 +1,21 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'parent_target' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+ end
10
+
11
+ it "should return next direct parent when nested" do
12
+ target = @project.target_for('sproutcore/costello')
13
+ target.parent_target.should eql(@project.target_for(:sproutcore))
14
+ end
15
+
16
+ it "should return project if top-level" do
17
+ target = @project.target_for(:sproutcore)
18
+ target.parent_target.should eql(@project)
19
+ end
20
+
21
+ end
@@ -0,0 +1,53 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'prepare!' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+
10
+ # get target from project manually since target_for() calls prepare!
11
+ @target = @project.targets['/contacts']
12
+
13
+ @target.buildfile.define! do
14
+ replace_task 'target:prepare' do
15
+ TARGET.task_did_run = (TARGET.task_did_run || 0) + 1
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ it "should return self" do
22
+ @target.prepare!.should eql(@target)
23
+ end
24
+
25
+ it "should execute target:prepare if defined" do
26
+ @target.prepared?.should be_false # check precondition
27
+ @target.prepare!
28
+ @target.prepared?.should be_true
29
+ @target.task_did_run.should eql(1) # ran?
30
+ end
31
+
32
+ it "should do nothing if target:prepare is not defined" do
33
+
34
+ # get an empty project with no build tasks...
35
+ project = empty_project
36
+ project.add_target '/default', :default, :source_root => project.project_root
37
+ target = project.targets['/default']
38
+ target.buildfile.lookup('target:prepare').should be_nil
39
+
40
+ lambda { target.prepare! }.should_not raise_error
41
+
42
+ end
43
+
44
+ it "should execute target:prepare only once" do
45
+ @target.prepared?.should be_false # check precondition
46
+ @target.prepare!.prepare!.prepare!
47
+ @target.prepared?.should be_true
48
+ @target.task_did_run.should eql(1) # ran only once?
49
+ end
50
+
51
+ end
52
+
53
+
@@ -0,0 +1,119 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'required_targets' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+ end
10
+
11
+ it "should resolve references to child targets" do
12
+ target = @project.target_for :sproutcore
13
+
14
+ # verify precondition
15
+ # -- the required property should NOT be array ...
16
+ target.config.required.should eql(:desktop)
17
+
18
+ expected = @project.target_for('sproutcore/desktop')
19
+
20
+ target.required_targets.size.should eql(1)
21
+ target.required_targets.first.should eql(expected)
22
+ end
23
+
24
+ it "should resolve references to siblings" do
25
+ target = @project.target_for 'sproutcore/application'
26
+
27
+ # verify precondition
28
+ # -- the required config should be an array
29
+ target.config.required.size.should eql(2)
30
+
31
+ expected = @project.target_for('sproutcore/costello')
32
+ target.required_targets.size.should eql(2)
33
+ target.required_targets.should include(expected)
34
+ end
35
+
36
+ it "should resolve references to other subtargets" do
37
+ target = @project.target_for :mobile_photos
38
+ target.required_targets.size.should eql(1)
39
+
40
+ expected = @project.target_for('sproutcore/mobile')
41
+ target.required_targets.first.should eql(expected)
42
+ end
43
+
44
+ it "should include any debug_required if passed :debug => true" do
45
+
46
+ expected = @project.target_for 'sproutcore/debug'
47
+
48
+ # verify load_debug = false
49
+ target = @project.target_for 'sproutcore/desktop'
50
+ target.config.debug_required = 'sproutcore/debug'
51
+ target.required_targets().should_not include(expected)
52
+ target.required_targets(:debug => false).should_not include(expected)
53
+ target.required_targets(:debug => true).should include(expected)
54
+ end
55
+
56
+ it "should include any test_required if passed :test => true" do
57
+
58
+ expected = @project.target_for 'sproutcore/qunit'
59
+
60
+ # verify load_debug = false
61
+ target = @project.target_for 'sproutcore/desktop'
62
+ target.config.test_required = 'sproutcore/qunit'
63
+ target.required_targets().should_not include(expected)
64
+ target.required_targets(:test => false).should_not include(expected)
65
+ target.required_targets(:test => true).should include(expected)
66
+ end
67
+
68
+ it "should log a warning if a required test or debug target could not be found" do
69
+ target = @project.target_for :sproutcore
70
+ target.config.test_required = 'imaginary_foo'
71
+ target.config.debug_required = 'imaginary_bar'
72
+
73
+ capture('stderr') { target.required_targets(:test => true) }.size.should_not == 0
74
+ capture('stderr') { target.required_targets(:debug => true) }.size.should_not == 0
75
+ end
76
+
77
+ it "should include any CONFIG.theme if passed :theme => true && target_type == :app" do
78
+ expected = @project.target_for 'sproutcore/standard_theme'
79
+
80
+ target = @project.target_for :contacts
81
+ target.target_type.should == :app # precondition
82
+ target.config.theme = 'sproutcore/standard_theme'
83
+ target.required_targets().should_not include(expected)
84
+ target.required_targets(:theme => false).should_not include(expected)
85
+ target.required_targets(:theme => true).should include(expected)
86
+
87
+ target = @project.target_for :sproutcore
88
+ target.target_type.should_not == :app # precondition
89
+ target.config.theme = 'sproutcore/standard_theme'
90
+ target.required_targets().should_not include(expected)
91
+ target.required_targets(:theme => false).should_not include(expected)
92
+ target.required_targets(:theme => true).should_not include(expected)
93
+ end
94
+
95
+ it "should only find targets with a target type of :theme for CONFIG.theme" do
96
+ # theme type
97
+ expected = @project.target_for 'sproutcore/standard_theme'
98
+ expected.target_type.should == :theme #precondition
99
+
100
+ target = @project.target_for :contacts
101
+ target.config.theme = 'sproutcore/standard_theme'
102
+ target.required_targets(:theme => true).should include(expected)
103
+
104
+ # non-theme type
105
+ expected = @project.target_for 'sproutcore/costello'
106
+ expected.target_type.should_not == :theme #precondition
107
+
108
+ target = @project.target_for :calendar
109
+ target.config.theme = 'sproutcore/costello'
110
+
111
+ # should warn!
112
+ result = nil
113
+ capture('stderr') { result = target.required_targets(:theme => true) }.size.should > 0
114
+
115
+ # and should not include theme
116
+ result.should_not include(expected)
117
+ end
118
+
119
+ end
@@ -0,0 +1,56 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Target, 'target_for' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+ @target = @project.target_for(:sproutcore)
10
+ end
11
+
12
+ it "should lookup absolute target names (/foo) from the top" do
13
+ target = @target.target_for('/contacts')
14
+ target.should_not be_nil
15
+ target.target_name.to_s.should eql('/contacts')
16
+ end
17
+
18
+ it "should look for relative names in children first" do
19
+ # note: uploader should exist both in /apps and /sproutcore/frameworks
20
+ target = @target.target_for(:uploader)
21
+ target.should_not be_nil
22
+ target.target_name.to_s.should eql('/sproutcore/uploader')
23
+ end
24
+
25
+ it "should look for relative names in sibling after children" do
26
+ target = @target.target_for(:core_photos)
27
+ target.should_not be_nil
28
+ target.target_name.to_s.should eql('/core_photos')
29
+ end
30
+
31
+ it "should look for relative names in parents after siblings" do
32
+ @target = @project.target_for('sproutcore/costello')
33
+ target = @target.target_for(:contacts)
34
+ target.should_not be_nil
35
+ target.target_name.to_s.should eql('/contacts')
36
+ end
37
+
38
+ it "should not find nested targets without naming parents" do
39
+ @target = @project.target_for(:contacts)
40
+ target = @target.target_for(:costello)
41
+ target.should be_nil
42
+ end
43
+
44
+ it "should be able to handle multiple/relative/names" do
45
+ @target = @project.target_for(:contacts)
46
+ target = @target.target_for('sproutcore/costello')
47
+ target.should_not be_nil
48
+ target.target_name.to_s.should eql('/sproutcore/costello')
49
+ end
50
+
51
+ it "should return nil if no matching target could be found" do
52
+ target = @target.target_for(:does_not_exist)
53
+ target.should be_nil
54
+ end
55
+
56
+ end