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,31 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::ManifestEntry, 'timestamp_url' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+ @target = @project.target_for :contacts
10
+ @manifest = @target.manifest_for(:language => :en)
11
+
12
+ # create entry manually to avoid calling prepare
13
+ @entry = SC::ManifestEntry.new @manifest,
14
+ :filename => "filename",
15
+ :url => "foo",
16
+ :source_path => "imaginary" / "path"
17
+ end
18
+
19
+ it "should return url itself if timestamp_url config is false" do
20
+ @target.config.timestamp_urls = false # preconditon
21
+ @entry.cacheable_url.should == 'foo'
22
+ end
23
+
24
+ it "should return url with timestamp token appended as query string if timestamp_url is true" do
25
+ @target.config.timestamp_urls = true # preconditon
26
+ @entry.timestamp.should_not be_blank # preconditon
27
+ @entry.cacheable_url.should == "foo?#{@entry.timestamp}"
28
+ end
29
+
30
+
31
+ end
@@ -0,0 +1,54 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::ManifestEntry, 'prepare!' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+ @target = @project.target_for :contacts
10
+
11
+ @target.buildfile.define! do
12
+ replace_task 'entry:prepare' do
13
+ ENTRY.task_did_run = (ENTRY.task_did_run || 0) + 1
14
+ end
15
+ end
16
+
17
+ @manifest = @target.manifest_for(:language => :en)
18
+
19
+ # create entry manually to avoid calling prepare
20
+ @entry = SC::ManifestEntry.new(@manifest, :filename => "filename")
21
+ end
22
+
23
+ it "should return self" do
24
+ @entry.prepare!.should eql(@entry)
25
+ end
26
+
27
+ it "should execute entry:prepare if defined" do
28
+ @entry.prepared?.should be_false # check precondition
29
+ @entry.prepare!
30
+ @entry.prepared?.should be_true
31
+ @entry.task_did_run.should eql(1) # ran?
32
+ end
33
+
34
+ it "should do nothing if entry:prepare is not defined" do
35
+
36
+ # get an empty project with no build tasks...
37
+ project = empty_project
38
+ project.add_target '/default', :default, :source_root => project.project_root
39
+ target = project.targets['/default']
40
+ target.buildfile.lookup('entry:prepare').should be_nil
41
+ manifest = target.manifest_for :language => :en
42
+ entry = SC::ManifestEntry.new(manifest, :filename => 'filename')
43
+ lambda { entry.prepare! }.should_not raise_error
44
+
45
+ end
46
+
47
+ it "should execute entry:prepare only once" do
48
+ @entry.prepared?.should be_false # check precondition
49
+ @entry.prepare!.prepare!.prepare!
50
+ @entry.prepared?.should be_true
51
+ @entry.task_did_run.should eql(1) # ran only once?
52
+ end
53
+
54
+ end
@@ -0,0 +1,44 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Project, 'add_target' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = SC::Project.new fixture_path('buildfiles', 'empty_project')
9
+ end
10
+
11
+ it "should add a target with the passed name" do
12
+ @project.add_target :target_name, :target_type
13
+ target = @project.targets[:target_name]
14
+ target.should_not be_nil
15
+ target.target_name.should eql(:target_name)
16
+ target.target_type.should eql(:target_type)
17
+ end
18
+
19
+ it "should set the target.project automatically" do
20
+ @project.add_target :target_name, :target_type
21
+ @project.targets[:target_name].project.should eql(@project)
22
+ end
23
+
24
+ it "should set any other passed options on the target itself" do
25
+ @project.add_target :target_name, :target_type, :foo => :foo, :bar => :bar
26
+ target = @project.targets[:target_name]
27
+
28
+ target.should_not be_nil
29
+ target.foo.should eql(:foo)
30
+ target.bar.should eql(:bar)
31
+ end
32
+
33
+ it "should replace an existing target if defined" do
34
+ @project.add_target :test1, :dummy
35
+ target1 = @project.targets[:test1]
36
+
37
+ @project.add_target :test1, :dummy2
38
+ target2 = @project.targets[:test1]
39
+
40
+ target2.should_not eql(target1)
41
+ target2.target_type.should eql(:dummy2)
42
+ end
43
+
44
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Project, 'buildfile' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ it "should return a new, empty buildfile if no Buildfile can be found in the project" do
8
+ project = SC::Project.new fixture_path('buildfiles', 'empty_project')
9
+ puts project.buildfile.loaded_paths
10
+ project.buildfile.loaded_paths.size.should eql(0)
11
+ project.buildfile.tasks.size.should eql(0)
12
+ end
13
+
14
+ it "should load a buildfile if one is found in project_root" do
15
+ project = SC::Project.new fixture_path('buildfiles', 'installed')
16
+ project.buildfile.loaded_paths.size.should eql(1)
17
+ project.buildfile.tasks.size.should eql(2)
18
+ end
19
+
20
+ it "should load all files matching SC.env.buildfile_names" do
21
+ SC.env.buildfile_names = ['Buildfile', 'Buildfile2']
22
+ project = SC::Project.new fixture_path('buildfiles', 'installed')
23
+ project.buildfile.loaded_paths.size.should eql(2)
24
+ SC.env.delete :buildfile_names
25
+ end
26
+
27
+ it "should merge over top of a parent project buildfile if there is one" do
28
+ installed = SC::Project.new fixture_path('buildfiles', 'installed')
29
+ basic = SC::Project.new fixture_path('buildfiles', 'basic'), :parent => installed
30
+ basic.buildfile.lookup(:installed_task).should_not be_nil
31
+ basic.buildfile.lookup(:test_task1).should_not be_nil
32
+ end
33
+
34
+ end
35
+
@@ -0,0 +1,77 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Project, 'find_targets_for' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ # path for a target inside fixtures for this test
8
+ def target_path(*args)
9
+ fixture_path(*args.unshift('find_targets'))
10
+ end
11
+
12
+ # Should be a hash of target type -> array of expected target names
13
+ def expect_targets(targets, expected_targets = {})
14
+ known_targets = targets.keys
15
+ expected_targets.each do | target_type, expected |
16
+ expected.each do |target_name|
17
+ target_name = target_name.to_sym
18
+ known_targets.should include(target_name)
19
+ targets[target_name].target_type.should eql(target_type)
20
+ known_targets.delete target_name
21
+ end
22
+ end
23
+ end
24
+
25
+ it "should search recursively for apps, clients, themes, and frameworks dirs with standard options -- also should ignore CaSeOfDir" do
26
+
27
+ project = SC::Project.new(target_path('standard'), :parent => builtin_project)
28
+
29
+ # verify preconditions
30
+ target_types = project.config.target_types
31
+ target_types.size.should eql(4)
32
+ target_types[:apps].should eql(:app)
33
+ target_types[:clients].should eql(:app)
34
+ target_types[:frameworks].should eql(:framework)
35
+ target_types[:themes].should eql(:theme)
36
+ project.config.allow_nested_targets.should be_true
37
+
38
+ # Note, this expectation assumes the fixtures in find_targets/standard has
39
+ # the following:
40
+ # - different cases (see Apps + apps dirs)
41
+ # - an apps, clients, and frameworks directory
42
+ # - multiple targets in same dir (see framework1, framework2)
43
+ # - nesting one type inside another (see app1/framework1, app1/fmwk2)
44
+ # - nesting same type inside another (see framework1/framework1)
45
+ #
46
+ expect_targets project.targets,
47
+ :app => %w(/app1 /client1),
48
+ :framework => %w(/framework1 /framework2 /app1/framework1 /app1/framework2 /framework1/framework1),
49
+ :theme => %w(/theme1 /theme2)
50
+ end
51
+
52
+ it "should find targets based on target_types hash, including overrides in target Buildfiles" do
53
+
54
+ project = SC::Project.new(target_path('custom'))
55
+
56
+ # NOTE: find_targets_spec/custom/Buildfile defines foo & bar types
57
+ # custom/foos/custom_foos/Buildfiels overrides.
58
+ expect_targets project.targets,
59
+ :foo => %w(/foo1 /custom_foos /custom_foos/foo1 /custom_foos/foo2 /bar1/foo1 /bar1/foo2),
60
+ :bar => %w(/bar1 /bar1/bar1 /bar1/bar2 /foo1/bar1 /foo1/bar2)
61
+
62
+ end
63
+
64
+ it "should recursively find targets unless allows_nested_targets = false; should respect overrides in Buildfiles" do
65
+
66
+ project = SC::Project.new(target_path('nested'))
67
+
68
+ # NOTE: find_targets_spec/custom/Buildfile defines foo & bar types
69
+ # custom/foos/custom_foos/Buildfiels overrides.
70
+ expect_targets project.targets,
71
+ :app => %w(/app1)
72
+ project.targets['/app1/nested_app'].should be_nil
73
+ end
74
+
75
+
76
+ end
77
+
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Project, 'load_nearest_project' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ it "should find the highest-level directory with a Buildfile" do
8
+ # Note: since the fixtures live INSIDE the source directory and the
9
+ # source directory contains a Buildfile, the _proper_ result here is to
10
+ # actually return the top-level directory...
11
+ project = SC::Project.load_nearest_project fixture_path('buildfiles', 'basic')
12
+ project.project_root.should eql(fixture_path('..', '..'))
13
+ end
14
+
15
+ it "should stop if it finds a Buildfile with project! set" do
16
+ project = SC::Project.load_nearest_project fixture_path('buildfiles', 'project_test', 'not_project', 'child')
17
+
18
+ # The Buildfile at project_test indicates that it is a project -- so it
19
+ # should stop searching here...
20
+ project.project_root.should eql(fixture_path('buildfiles', 'project_test'))
21
+ end
22
+
23
+ end
@@ -0,0 +1,33 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Project, 'target_for' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ before do
8
+ @project = fixture_project(:real_world)
9
+ end
10
+
11
+ it "should lookup absolute target names (/foo) from the top" do
12
+ target = @project.target_for('/sproutcore')
13
+ target.should_not be_nil
14
+ target.target_name.to_s.should eql('/sproutcore')
15
+ end
16
+
17
+ it "should lookup relative target names from the top (like absolute)" do
18
+ target = @project.target_for(:sproutcore)
19
+ target.should_not be_nil
20
+ target.target_name.to_s.should eql('/sproutcore')
21
+ end
22
+
23
+ it "should return nil if no matching target could be found" do
24
+ target = @project.target_for(:does_not_exist)
25
+ target.should be_nil
26
+ end
27
+
28
+ it "should NOT call prepare! on new targets" do
29
+ target = @project.target_for(:contacts)
30
+ target.prepared?.should be_false
31
+ end
32
+
33
+ end
@@ -0,0 +1,62 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+
3
+ describe SC::Project, 'targets' do
4
+
5
+ include SC::SpecHelpers
6
+
7
+ it "should clone targets from a parent project" do
8
+
9
+ # Generate a dummy class to manually add a target. This way we isolate
10
+ # the tests for merging from tests of finding targets...
11
+ test_project = Class.new(SC::Project) do
12
+ def find_targets_for(root_path, root_name, config)
13
+ self.add_target :base1, :dummy_type, { :source_root => "foo" }
14
+ end
15
+ end
16
+ parent = test_project.new fixture_path('buildfiles', 'empty_project')
17
+
18
+ # Now generate a real project with an empty path. This should clone
19
+ # targets from the parent...
20
+ project = SC::Project.new fixture_path('buildfiles', 'empty_project'), :parent => parent
21
+ project.targets.size.should eql(1)
22
+
23
+ t = project.targets['base1']
24
+ t.target_name.should == :base1
25
+ t.target_type.should == :dummy_type
26
+ t.source_root.should == "foo"
27
+ end
28
+
29
+ # We want to test this because find_targets_for() is a callback we expect
30
+ # people who customize the build tools to override.
31
+ it "should invoke the find_targets_for method on itself" do
32
+
33
+ # Generate dummy class with custom find_targets_for.
34
+ test_project = Class.new(SC::Project) do
35
+
36
+ attr_reader :did_call_find_targets_for
37
+ attr_reader :passed_root_path
38
+ attr_reader :passed_root_name
39
+ attr_reader :passed_config
40
+
41
+ def find_targets_for(root_path, root_name, config)
42
+ @did_call_find_targets_for = true
43
+ @passed_root_path = root_path
44
+ @passed_root_name = root_name
45
+ @passed_config = config
46
+ return self
47
+ end
48
+ end
49
+
50
+ # create project & get targets
51
+ project = test_project.new fixture_path('buildfiles', 'empty_project')
52
+ project.targets.size.should eql(0)
53
+
54
+ # verify that callback method was run
55
+ project.did_call_find_targets_for.should be_true
56
+ project.passed_root_path.should eql(project.project_root)
57
+ project.passed_root_name.should be_nil
58
+ project.passed_config.should eql(project.config)
59
+ end
60
+
61
+ end
62
+
@@ -0,0 +1,125 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. .. spec_helper])
2
+ require 'tempfile'
3
+ require 'fileutils'
4
+
5
+ describe SC::Target, 'compute_build_number' do
6
+
7
+ include SC::SpecHelpers
8
+
9
+ before do
10
+ @project = temp_project(:real_world)
11
+ end
12
+
13
+ after do
14
+ @project.cleanup
15
+ end
16
+
17
+ def add_dummyfile(project)
18
+ file = File.new(File.join(project.source_root, 'dummyfile'), 'w')
19
+ file.write "TEST!"
20
+ file.close
21
+ end
22
+
23
+ it "uses the config.build_number if specified for the target" do
24
+ # add build number for target to general buildfile
25
+ @project.buildfile.define! do
26
+ config :sproutcore, :build_number => 'foo'
27
+ end
28
+ target = @project.target_for(:sproutcore)
29
+ target.compute_build_number.should eql('foo')
30
+ end
31
+
32
+ it "uses the config.build_numbers.target_name if specified" do
33
+ # add a build_numbers hash
34
+ @project.buildfile.define! do
35
+ config :all, :build_numbers => { '/sproutcore' => 'foo' }
36
+ end
37
+ target = @project.target_for(:sproutcore)
38
+ target.compute_build_number.should eql('foo')
39
+ end
40
+
41
+ it "uses config.build_numbers.target_name, even if specified with symbols" do
42
+ @project.buildfile.define! do
43
+ config :all, :build_numbers => { :'/sproutcore' => :foo }
44
+ end
45
+ target = @project.target_for(:sproutcore)
46
+ target.compute_build_number.should eql('foo')
47
+ end
48
+
49
+
50
+ describe "accurate method to compute build number" do
51
+
52
+ before do
53
+ @target = @project.target_for(:sproutcore)
54
+ @target.config.build_numbers = nil #precondition
55
+ @target.config.build_number = nil #precondition
56
+ end
57
+
58
+ it "generates a unique build number based on content if nothing is explicitly set" do
59
+ @target.compute_build_number.should_not be_nil
60
+ end
61
+
62
+ it "changes its generated build number if contents of source files change" do
63
+ old_build_number = @target.compute_build_number
64
+
65
+ # write an extra file into target for testing
66
+ add_dummyfile(@target)
67
+
68
+ # get new build number
69
+ new_build_number = @target.compute_build_number
70
+ new_build_number.should_not eql(old_build_number)
71
+ end
72
+ end
73
+
74
+ it "changes generated build number if build number for a required target changes" do
75
+ target = @project.target_for(:sproutcore)
76
+ target.should_not be_nil
77
+
78
+ required = target.target_for(:desktop)
79
+ required.should_not be_nil
80
+ required.config.build_numbers = nil #precondition
81
+ required.config.build_number = nil #precondition
82
+
83
+ target.config.build_numbers = nil #precondition
84
+ target.config.build_number = nil #precondition
85
+ target.required_targets.should include(required) #precondition
86
+
87
+ old_build_number = target.compute_build_number
88
+
89
+ # write an extra file into required target for testing -- changes number
90
+ add_dummyfile(required)
91
+
92
+ # get new build number
93
+ new_build_number = target.compute_build_number
94
+ new_build_number.should_not eql(old_build_number)
95
+ end
96
+
97
+ it "does not change generated build number if a nested target that is not required by target changes" do
98
+ target = @project.target_for(:sproutcore)
99
+ target.should_not be_nil
100
+
101
+ not_required = target.target_for(:mobile)
102
+ not_required.should_not be_nil
103
+
104
+ #precondition
105
+ target.expand_required_targets.should_not include(not_required)
106
+
107
+ target = @project.target_for(:sproutcore)
108
+ old_build_number = target.compute_build_number
109
+
110
+ # write an extra file into required target for testing -- changes number
111
+ add_dummyfile(not_required)
112
+
113
+ # get new build number
114
+ new_build_number = target.compute_build_number
115
+ new_build_number.should eql(old_build_number)
116
+ end
117
+
118
+ it "recursively required project should not cause an error" do
119
+ recursive = fixture_project(:recursive_project)
120
+ target = recursive.target_for :sproutcore
121
+ lambda { target.compute_build_number }.should_not raise_error
122
+ end
123
+
124
+ end
125
+