thewoolleyman-webgen 0.5.8.20090419

Sign up to get free protection for your applications and to get access to all the features.
Files changed (309) hide show
  1. data/AUTHORS +8 -0
  2. data/COPYING +10 -0
  3. data/GPL +340 -0
  4. data/Rakefile +334 -0
  5. data/THANKS +18 -0
  6. data/bin/webgen +12 -0
  7. data/data/webgen/resources.yaml +3 -0
  8. data/data/webgen/webgui/controller/main.rb +135 -0
  9. data/data/webgen/webgui/overrides/win32console.rb +0 -0
  10. data/data/webgen/webgui/public/css/jquery.autocomplete.css +50 -0
  11. data/data/webgen/webgui/public/css/ramaze_error.css +90 -0
  12. data/data/webgen/webgui/public/css/style.css +55 -0
  13. data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
  14. data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
  15. data/data/webgen/webgui/public/js/jquery.autocomplete.js +15 -0
  16. data/data/webgen/webgui/public/js/jquery.js +32 -0
  17. data/data/webgen/webgui/view/create_website.xhtml +22 -0
  18. data/data/webgen/webgui/view/error.xhtml +64 -0
  19. data/data/webgen/webgui/view/index.xhtml +22 -0
  20. data/data/webgen/webgui/view/manage_website.xhtml +18 -0
  21. data/data/webgen/webgui/view/page.xhtml +40 -0
  22. data/data/webgen/website_skeleton/README +10 -0
  23. data/data/webgen/website_skeleton/Rakefile +40 -0
  24. data/data/webgen/website_skeleton/config.yaml +17 -0
  25. data/data/webgen/website_skeleton/ext/init.rb +10 -0
  26. data/data/webgen/website_styles/1024px/README +13 -0
  27. data/data/webgen/website_styles/1024px/src/default.css +188 -0
  28. data/data/webgen/website_styles/1024px/src/default.template +60 -0
  29. data/data/webgen/website_styles/1024px/src/images/background.gif +0 -0
  30. data/data/webgen/website_styles/andreas00/README +13 -0
  31. data/data/webgen/website_styles/andreas00/src/default.css +290 -0
  32. data/data/webgen/website_styles/andreas00/src/default.template +60 -0
  33. data/data/webgen/website_styles/andreas00/src/images/bg.gif +0 -0
  34. data/data/webgen/website_styles/andreas00/src/images/front.jpg +0 -0
  35. data/data/webgen/website_styles/andreas00/src/images/menubg.gif +0 -0
  36. data/data/webgen/website_styles/andreas00/src/images/menubg2.gif +0 -0
  37. data/data/webgen/website_styles/andreas01/README +14 -0
  38. data/data/webgen/website_styles/andreas01/src/default.css +310 -0
  39. data/data/webgen/website_styles/andreas01/src/default.template +62 -0
  40. data/data/webgen/website_styles/andreas01/src/images/bg.gif +0 -0
  41. data/data/webgen/website_styles/andreas01/src/images/front.jpg +0 -0
  42. data/data/webgen/website_styles/andreas01/src/print.css +35 -0
  43. data/data/webgen/website_styles/andreas03/README +14 -0
  44. data/data/webgen/website_styles/andreas03/src/default.css +223 -0
  45. data/data/webgen/website_styles/andreas03/src/default.template +58 -0
  46. data/data/webgen/website_styles/andreas03/src/images/bodybg.png +0 -0
  47. data/data/webgen/website_styles/andreas03/src/images/contbg.png +0 -0
  48. data/data/webgen/website_styles/andreas03/src/images/footerbg.png +0 -0
  49. data/data/webgen/website_styles/andreas03/src/images/gradient1.png +0 -0
  50. data/data/webgen/website_styles/andreas03/src/images/gradient2.png +0 -0
  51. data/data/webgen/website_styles/andreas04/README +15 -0
  52. data/data/webgen/website_styles/andreas04/src/default.css +290 -0
  53. data/data/webgen/website_styles/andreas04/src/default.template +81 -0
  54. data/data/webgen/website_styles/andreas04/src/images/blinkarrow.gif +0 -0
  55. data/data/webgen/website_styles/andreas04/src/images/bodybg.png +0 -0
  56. data/data/webgen/website_styles/andreas04/src/images/contentbg.png +0 -0
  57. data/data/webgen/website_styles/andreas04/src/images/entrybg.png +0 -0
  58. data/data/webgen/website_styles/andreas04/src/images/flash.gif +0 -0
  59. data/data/webgen/website_styles/andreas04/src/images/flash2.gif +0 -0
  60. data/data/webgen/website_styles/andreas04/src/images/globe.gif +0 -0
  61. data/data/webgen/website_styles/andreas04/src/images/globebottom.gif +0 -0
  62. data/data/webgen/website_styles/andreas04/src/images/linkarrow.gif +0 -0
  63. data/data/webgen/website_styles/andreas04/src/images/menuhover.png +0 -0
  64. data/data/webgen/website_styles/andreas05/README +14 -0
  65. data/data/webgen/website_styles/andreas05/src/default.css +33 -0
  66. data/data/webgen/website_styles/andreas05/src/default.template +40 -0
  67. data/data/webgen/website_styles/andreas05/src/images/bodybg.gif +0 -0
  68. data/data/webgen/website_styles/andreas05/src/images/front.png +0 -0
  69. data/data/webgen/website_styles/andreas06/README +14 -0
  70. data/data/webgen/website_styles/andreas06/src/default.css +354 -0
  71. data/data/webgen/website_styles/andreas06/src/default.template +70 -0
  72. data/data/webgen/website_styles/andreas06/src/images/bodybg.gif +0 -0
  73. data/data/webgen/website_styles/andreas06/src/images/boxbg.gif +0 -0
  74. data/data/webgen/website_styles/andreas06/src/images/greypx.gif +0 -0
  75. data/data/webgen/website_styles/andreas06/src/images/header.jpg +0 -0
  76. data/data/webgen/website_styles/andreas06/src/images/innerbg.gif +0 -0
  77. data/data/webgen/website_styles/andreas06/src/images/leaves.jpg +0 -0
  78. data/data/webgen/website_styles/andreas06/src/images/tabs.gif +0 -0
  79. data/data/webgen/website_styles/andreas07/README +15 -0
  80. data/data/webgen/website_styles/andreas07/src/browserfix.css +7 -0
  81. data/data/webgen/website_styles/andreas07/src/default.css +92 -0
  82. data/data/webgen/website_styles/andreas07/src/default.template +42 -0
  83. data/data/webgen/website_styles/andreas07/src/images/bodybg.gif +0 -0
  84. data/data/webgen/website_styles/andreas07/src/images/sidebarbg.gif +0 -0
  85. data/data/webgen/website_styles/andreas08/README +14 -0
  86. data/data/webgen/website_styles/andreas08/src/default.css +224 -0
  87. data/data/webgen/website_styles/andreas08/src/default.template +51 -0
  88. data/data/webgen/website_styles/andreas09/README +14 -0
  89. data/data/webgen/website_styles/andreas09/src/default.css +308 -0
  90. data/data/webgen/website_styles/andreas09/src/default.template +68 -0
  91. data/data/webgen/website_styles/andreas09/src/images/bodybg-black.jpg +0 -0
  92. data/data/webgen/website_styles/andreas09/src/images/bodybg-green.jpg +0 -0
  93. data/data/webgen/website_styles/andreas09/src/images/bodybg-orange.jpg +0 -0
  94. data/data/webgen/website_styles/andreas09/src/images/bodybg-purple.jpg +0 -0
  95. data/data/webgen/website_styles/andreas09/src/images/bodybg-red.jpg +0 -0
  96. data/data/webgen/website_styles/andreas09/src/images/bodybg.jpg +0 -0
  97. data/data/webgen/website_styles/andreas09/src/images/footerbg.jpg +0 -0
  98. data/data/webgen/website_styles/andreas09/src/images/menuhover-black.jpg +0 -0
  99. data/data/webgen/website_styles/andreas09/src/images/menuhover-green.jpg +0 -0
  100. data/data/webgen/website_styles/andreas09/src/images/menuhover-orange.jpg +0 -0
  101. data/data/webgen/website_styles/andreas09/src/images/menuhover-purple.jpg +0 -0
  102. data/data/webgen/website_styles/andreas09/src/images/menuhover-red.jpg +0 -0
  103. data/data/webgen/website_styles/andreas09/src/images/menuhover.jpg +0 -0
  104. data/data/webgen/website_styles/simple/README +6 -0
  105. data/data/webgen/website_styles/simple/src/default.css +84 -0
  106. data/data/webgen/website_styles/simple/src/default.template +36 -0
  107. data/data/webgen/website_templates/default/README +6 -0
  108. data/data/webgen/website_templates/default/src/index.page +8 -0
  109. data/data/webgen/website_templates/project/README +5 -0
  110. data/data/webgen/website_templates/project/src/about.page +12 -0
  111. data/data/webgen/website_templates/project/src/download.page +15 -0
  112. data/data/webgen/website_templates/project/src/features.page +8 -0
  113. data/data/webgen/website_templates/project/src/index.page +9 -0
  114. data/data/webgen/website_templates/project/src/screenshots.page +18 -0
  115. data/doc/contentprocessor.template +11 -0
  116. data/doc/contentprocessor/blocks.page +129 -0
  117. data/doc/contentprocessor/builder.page +80 -0
  118. data/doc/contentprocessor/erb.page +59 -0
  119. data/doc/contentprocessor/erubis.page +46 -0
  120. data/doc/contentprocessor/fragments.page +25 -0
  121. data/doc/contentprocessor/haml.page +47 -0
  122. data/doc/contentprocessor/maruku.page +41 -0
  123. data/doc/contentprocessor/rdiscount.page +37 -0
  124. data/doc/contentprocessor/rdoc.page +36 -0
  125. data/doc/contentprocessor/redcloth.page +39 -0
  126. data/doc/contentprocessor/sass.page +31 -0
  127. data/doc/contentprocessor/tags.page +73 -0
  128. data/doc/extensions.metainfo +29 -0
  129. data/doc/extensions.page +16 -0
  130. data/doc/extensions.template +17 -0
  131. data/doc/faq.page +219 -0
  132. data/doc/getting_started.page +135 -0
  133. data/doc/index.page +65 -0
  134. data/doc/manual.page +589 -0
  135. data/doc/reference_configuration.page +959 -0
  136. data/doc/reference_metainfo.page +222 -0
  137. data/doc/source/filesystem.page +39 -0
  138. data/doc/source/tararchive.page +40 -0
  139. data/doc/sourcehandler.template +21 -0
  140. data/doc/sourcehandler/copy.page +19 -0
  141. data/doc/sourcehandler/directory.page +27 -0
  142. data/doc/sourcehandler/feed.page +105 -0
  143. data/doc/sourcehandler/metainfo.page +41 -0
  144. data/doc/sourcehandler/page.page +14 -0
  145. data/doc/sourcehandler/sitemap.page +46 -0
  146. data/doc/sourcehandler/template.page +45 -0
  147. data/doc/sourcehandler/virtual.page +49 -0
  148. data/doc/tag.template +25 -0
  149. data/doc/tag/breadcrumbtrail.page +40 -0
  150. data/doc/tag/coderay.page +49 -0
  151. data/doc/tag/date.page +31 -0
  152. data/doc/tag/executecommand.page +26 -0
  153. data/doc/tag/includefile.page +32 -0
  154. data/doc/tag/langbar.page +44 -0
  155. data/doc/tag/link.page +44 -0
  156. data/doc/tag/menu.page +106 -0
  157. data/doc/tag/metainfo.page +29 -0
  158. data/doc/tag/relocatable.page +38 -0
  159. data/doc/tag/sitemap.page +31 -0
  160. data/doc/tag/tikz.page +158 -0
  161. data/doc/upgrading.page +139 -0
  162. data/doc/webgen_page_format.page +129 -0
  163. data/lib/webgen/blackboard.rb +78 -0
  164. data/lib/webgen/cache.rb +87 -0
  165. data/lib/webgen/cli.rb +124 -0
  166. data/lib/webgen/cli/apply_command.rb +64 -0
  167. data/lib/webgen/cli/create_command.rb +66 -0
  168. data/lib/webgen/cli/run_command.rb +22 -0
  169. data/lib/webgen/cli/utils.rb +88 -0
  170. data/lib/webgen/cli/webgui_command.rb +72 -0
  171. data/lib/webgen/common.rb +21 -0
  172. data/lib/webgen/common/sitemap.rb +83 -0
  173. data/lib/webgen/configuration.rb +153 -0
  174. data/lib/webgen/contentprocessor.rb +99 -0
  175. data/lib/webgen/contentprocessor/blocks.rb +60 -0
  176. data/lib/webgen/contentprocessor/builder.rb +30 -0
  177. data/lib/webgen/contentprocessor/context.rb +89 -0
  178. data/lib/webgen/contentprocessor/erb.rb +28 -0
  179. data/lib/webgen/contentprocessor/erubis.rb +40 -0
  180. data/lib/webgen/contentprocessor/fragments.rb +25 -0
  181. data/lib/webgen/contentprocessor/haml.rb +30 -0
  182. data/lib/webgen/contentprocessor/maruku.rb +20 -0
  183. data/lib/webgen/contentprocessor/rdiscount.rb +17 -0
  184. data/lib/webgen/contentprocessor/rdoc.rb +19 -0
  185. data/lib/webgen/contentprocessor/redcloth.rb +17 -0
  186. data/lib/webgen/contentprocessor/sass.rb +20 -0
  187. data/lib/webgen/contentprocessor/tags.rb +136 -0
  188. data/lib/webgen/coreext.rb +13 -0
  189. data/lib/webgen/default_config.rb +215 -0
  190. data/lib/webgen/languages.rb +589 -0
  191. data/lib/webgen/loggable.rb +25 -0
  192. data/lib/webgen/logger.rb +97 -0
  193. data/lib/webgen/node.rb +391 -0
  194. data/lib/webgen/output.rb +82 -0
  195. data/lib/webgen/output/filesystem.rb +69 -0
  196. data/lib/webgen/page.rb +153 -0
  197. data/lib/webgen/path.rb +194 -0
  198. data/lib/webgen/source.rb +54 -0
  199. data/lib/webgen/source/filesystem.rb +61 -0
  200. data/lib/webgen/source/resource.rb +44 -0
  201. data/lib/webgen/source/stacked.rb +55 -0
  202. data/lib/webgen/source/tararchive.rb +73 -0
  203. data/lib/webgen/sourcehandler.rb +226 -0
  204. data/lib/webgen/sourcehandler/base.rb +248 -0
  205. data/lib/webgen/sourcehandler/copy.rb +43 -0
  206. data/lib/webgen/sourcehandler/directory.rb +36 -0
  207. data/lib/webgen/sourcehandler/feed.rb +117 -0
  208. data/lib/webgen/sourcehandler/fragment.rb +68 -0
  209. data/lib/webgen/sourcehandler/memory.rb +43 -0
  210. data/lib/webgen/sourcehandler/metainfo.rb +128 -0
  211. data/lib/webgen/sourcehandler/page.rb +59 -0
  212. data/lib/webgen/sourcehandler/sitemap.rb +60 -0
  213. data/lib/webgen/sourcehandler/template.rb +66 -0
  214. data/lib/webgen/sourcehandler/virtual.rb +110 -0
  215. data/lib/webgen/tag.rb +27 -0
  216. data/lib/webgen/tag/base.rb +170 -0
  217. data/lib/webgen/tag/breadcrumbtrail.rb +70 -0
  218. data/lib/webgen/tag/coderay.rb +31 -0
  219. data/lib/webgen/tag/date.rb +18 -0
  220. data/lib/webgen/tag/executecommand.rb +30 -0
  221. data/lib/webgen/tag/includefile.rb +42 -0
  222. data/lib/webgen/tag/langbar.rb +52 -0
  223. data/lib/webgen/tag/link.rb +26 -0
  224. data/lib/webgen/tag/menu.rb +207 -0
  225. data/lib/webgen/tag/metainfo.rb +25 -0
  226. data/lib/webgen/tag/relocatable.rb +54 -0
  227. data/lib/webgen/tag/sitemap.rb +41 -0
  228. data/lib/webgen/tag/tikz.rb +119 -0
  229. data/lib/webgen/tree.rb +90 -0
  230. data/lib/webgen/version.rb +8 -0
  231. data/lib/webgen/webgentask.rb +152 -0
  232. data/lib/webgen/website.rb +342 -0
  233. data/lib/webgen/websiteaccess.rb +31 -0
  234. data/lib/webgen/websitemanager.rb +127 -0
  235. data/man/man1/webgen.1 +73 -0
  236. data/misc/default.css +384 -0
  237. data/misc/default.template +75 -0
  238. data/misc/htmldoc.metainfo +25 -0
  239. data/misc/htmldoc.virtual +5 -0
  240. data/misc/images/arrow.gif +0 -0
  241. data/misc/images/error.png +0 -0
  242. data/misc/images/headerbg.jpg +0 -0
  243. data/misc/images/important.png +0 -0
  244. data/misc/images/information.png +0 -0
  245. data/misc/images/quote.gif +0 -0
  246. data/misc/images/warning.png +0 -0
  247. data/setup.rb +1585 -0
  248. data/test/helper.rb +45 -0
  249. data/test/test_blackboard.rb +60 -0
  250. data/test/test_cache.rb +59 -0
  251. data/test/test_cli.rb +21 -0
  252. data/test/test_common.rb +18 -0
  253. data/test/test_common_sitemap.rb +58 -0
  254. data/test/test_configuration.rb +68 -0
  255. data/test/test_contentprocessor.rb +33 -0
  256. data/test/test_contentprocessor_blocks.rb +68 -0
  257. data/test/test_contentprocessor_builder.rb +23 -0
  258. data/test/test_contentprocessor_context.rb +40 -0
  259. data/test/test_contentprocessor_erb.rb +23 -0
  260. data/test/test_contentprocessor_erubis.rb +49 -0
  261. data/test/test_contentprocessor_fragments.rb +42 -0
  262. data/test/test_contentprocessor_haml.rb +23 -0
  263. data/test/test_contentprocessor_maruku.rb +29 -0
  264. data/test/test_contentprocessor_rdiscount.rb +17 -0
  265. data/test/test_contentprocessor_rdoc.rb +18 -0
  266. data/test/test_contentprocessor_redcloth.rb +15 -0
  267. data/test/test_contentprocessor_sass.rb +22 -0
  268. data/test/test_contentprocessor_tags.rb +99 -0
  269. data/test/test_languages.rb +67 -0
  270. data/test/test_loggable.rb +32 -0
  271. data/test/test_logger.rb +94 -0
  272. data/test/test_node.rb +367 -0
  273. data/test/test_output_filesystem.rb +60 -0
  274. data/test/test_page.rb +214 -0
  275. data/test/test_path.rb +165 -0
  276. data/test/test_source_filesystem.rb +76 -0
  277. data/test/test_source_resource.rb +28 -0
  278. data/test/test_source_stacked.rb +36 -0
  279. data/test/test_source_tararchive.rb +65 -0
  280. data/test/test_sourcehandler_base.rb +123 -0
  281. data/test/test_sourcehandler_copy.rb +47 -0
  282. data/test/test_sourcehandler_directory.rb +42 -0
  283. data/test/test_sourcehandler_feed.rb +77 -0
  284. data/test/test_sourcehandler_fragment.rb +69 -0
  285. data/test/test_sourcehandler_memory.rb +44 -0
  286. data/test/test_sourcehandler_metainfo.rb +118 -0
  287. data/test/test_sourcehandler_page.rb +65 -0
  288. data/test/test_sourcehandler_sitemap.rb +49 -0
  289. data/test/test_sourcehandler_template.rb +65 -0
  290. data/test/test_sourcehandler_virtual.rb +87 -0
  291. data/test/test_tag_base.rb +85 -0
  292. data/test/test_tag_breadcrumbtrail.rb +91 -0
  293. data/test/test_tag_coderay.rb +32 -0
  294. data/test/test_tag_date.rb +18 -0
  295. data/test/test_tag_executecommand.rb +41 -0
  296. data/test/test_tag_includefile.rb +50 -0
  297. data/test/test_tag_langbar.rb +72 -0
  298. data/test/test_tag_link.rb +69 -0
  299. data/test/test_tag_menu.rb +207 -0
  300. data/test/test_tag_metainfo.rb +19 -0
  301. data/test/test_tag_relocatable.rb +59 -0
  302. data/test/test_tag_sitemap.rb +47 -0
  303. data/test/test_tag_tikz.rb +69 -0
  304. data/test/test_tree.rb +70 -0
  305. data/test/test_webgentask.rb +23 -0
  306. data/test/test_website.rb +98 -0
  307. data/test/test_websiteaccess.rb +25 -0
  308. data/test/test_websitemanager.rb +70 -0
  309. metadata +613 -0
@@ -0,0 +1,60 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'test/unit'
4
+ require 'helper'
5
+ require 'webgen/output'
6
+ require 'tmpdir'
7
+ require 'fileutils'
8
+
9
+ class TestOutputFileSystem < Test::Unit::TestCase
10
+
11
+ include Test::WebsiteHelper
12
+
13
+ def setup
14
+ super
15
+ @website = Webgen::Website.new(File.join(Dir.tmpdir, 'test_webgen'), nil)
16
+ @website.init
17
+ Thread.current[:webgen_website] = @website
18
+ end
19
+
20
+ def teardown
21
+ super
22
+ FileUtils.rm_rf(File.join(Dir.tmpdir, 'test_webgen'))
23
+ end
24
+
25
+ def test_initialize
26
+ output = Webgen::Output::FileSystem.new('test')
27
+ assert_equal(File.join(@website.directory, 'test'), output.root)
28
+ output = Webgen::Output::FileSystem.new('/tmp/hallo')
29
+ assert_equal('/tmp/hallo', output.root)
30
+ output = Webgen::Output::FileSystem.new('../hallo')
31
+ assert_equal(File.join(@website.directory, '../hallo'), output.root)
32
+ end
33
+
34
+ def test_file_methods
35
+ output = Webgen::Output::FileSystem.new('test')
36
+ assert(!output.exists?('/dir/hallo'))
37
+
38
+ output.write('/dir/hallo', 'content', :file)
39
+ assert(File.file?(File.join(output.root, 'dir/hallo')))
40
+ assert(output.exists?('/dir/hallo'))
41
+ assert_equal('content', File.read(File.join(output.root, 'dir/hallo')))
42
+ assert_equal('content', output.read('/dir/hallo'))
43
+
44
+ output.delete('/dir/hallo')
45
+ assert(!output.exists?('/dir/hallo'))
46
+
47
+ output.write('/dir/hallo', Webgen::Path::SourceIO.new { StringIO.new('content')}, :file)
48
+ assert_equal('content', File.read(File.join(output.root, 'dir/hallo')))
49
+ assert(output.exists?('/dir/hallo'))
50
+
51
+ output.delete('/dir')
52
+ assert(!output.exists?('/dir'))
53
+
54
+ output.write('/dir', '', :directory)
55
+ assert(File.directory?(File.join(output.root, 'dir')))
56
+
57
+ assert_raise(RuntimeError) { output.write('other', '', :unknown) }
58
+ end
59
+
60
+ end
data/test/test_page.rb ADDED
@@ -0,0 +1,214 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'test/unit'
4
+ require 'webgen/page'
5
+
6
+ class TestBlock < Test::Unit::TestCase
7
+
8
+ def test_render
9
+ block = Webgen::Block.new('content', 'some content', {'pipeline' => 'test'})
10
+ context = {:processors => {}}
11
+ assert_raise(RuntimeError) { block.render(context) }
12
+ context[:processors]['test'] = lambda {|context| context[:content] = context[:content].reverse + context[:block].name }
13
+ assert_equal('some content'.reverse + 'content', block.render(context)[:content])
14
+ end
15
+
16
+ end
17
+
18
+ class TestPage < Test::Unit::TestCase
19
+
20
+ VALID = <<EOF
21
+ # with more blocks
22
+ - in: |
23
+ ---
24
+ key: value
25
+ ---
26
+ block1
27
+ ---
28
+ block2
29
+ --- name:block3
30
+ --- name:block4
31
+ yes
32
+ meta_info: {key: value}
33
+ blocks:
34
+ - name: content
35
+ content: "block1"
36
+ - name: block2
37
+ content: "block2"
38
+ - name: block3
39
+ content: ''
40
+ - name: block4
41
+ content: 'yes'
42
+
43
+ # empty file
44
+ - in: ""
45
+ meta_info: {}
46
+ blocks:
47
+ - name: content
48
+ content: ''
49
+
50
+ # without meta info
51
+ - in: "hallo"
52
+ meta_info: {}
53
+ blocks:
54
+ - name: content
55
+ content: "hallo"
56
+
57
+ # with empty block
58
+ - in: |
59
+ ---
60
+ key: value
61
+
62
+ ---
63
+
64
+ meta_info: {key: value}
65
+ blocks:
66
+ - name: content
67
+ content: ''
68
+
69
+ # with only meta information, no blocks
70
+ - in: |
71
+ ---
72
+ key: value
73
+
74
+ meta_info: {key: value}
75
+ blocks:
76
+ - name: content
77
+ content: ''
78
+
79
+ # block with escaped ---
80
+ - in: |
81
+ before
82
+ \\--- in
83
+ after
84
+ meta_info: {}
85
+ blocks:
86
+ - name: content
87
+ content: "before\\n--- in\\nafter"
88
+
89
+ # no meta info, starting with block with name
90
+ - in: |
91
+ --- name:block1
92
+ meta_info: {}
93
+ blocks:
94
+ - name: block1
95
+ content: ''
96
+
97
+ # named block and block with other options
98
+ - in: |
99
+ --- name:block
100
+ content doing -
101
+ with?: with some things
102
+ --- other:options test1:true test2:false test3:542 pipeline:
103
+ meta_info: {}
104
+ blocks:
105
+ - name: block
106
+ content: "content doing -\\nwith?: with some things"
107
+ - name: block2
108
+ content: ''
109
+ options: {other: options, test1: true, test2: false, test3: 542, pipeline: ~}
110
+
111
+ # block with seemingly block start line it
112
+ - in: |
113
+ --- name:block
114
+ content
115
+ ----------- some block start???
116
+ things
117
+ meta_info: {}
118
+ blocks:
119
+ - name: block
120
+ content: "content\\n----------- some block start???\\nthings"
121
+ EOF
122
+
123
+ INVALID_MI=<<EOF
124
+ # invalid meta info: none specified
125
+ - "---\\n---"
126
+
127
+ # invalid meta info: no hash
128
+ - |
129
+ ---
130
+ doit
131
+ ---
132
+ asdf kadsfakl
133
+
134
+ # invalid meta info: not in yaml format
135
+ - |
136
+ ---
137
+ - doit
138
+ : * [ }
139
+ ---
140
+ asdf kadsfakl
141
+ EOF
142
+
143
+ INVALID_BLOCKS=<<EOF
144
+ # two blocks with same name
145
+ - |
146
+ aasdf
147
+ asdfdf
148
+ --- name:name
149
+ asdkf dsaf
150
+ --- name:name
151
+ asdf adsf
152
+
153
+ # invalid format
154
+ - |
155
+ asdfasd
156
+ dfdf
157
+ --- name, incorrect_format
158
+ lsldf
159
+ EOF
160
+
161
+ def test_invalid_pagefiles
162
+ testdata = YAML::load(INVALID_MI)
163
+ testdata.each_with_index do |data, index|
164
+ assert_raise(Webgen::WebgenPageFormatError, "test mi item #{index}") { Webgen::Page.from_data(data) }
165
+ assert_raise(Webgen::WebgenPageFormatError, "test mi item #{index}") { Webgen::Page.meta_info_from_data(data) }
166
+ end
167
+ testdata = YAML::load(INVALID_BLOCKS)
168
+ testdata.each_with_index do |data, index|
169
+ assert_raise(Webgen::WebgenPageFormatError, "test blocks item #{index}") { Webgen::Page.from_data(data) }
170
+ end
171
+ end
172
+
173
+ def test_valid_pagefiles
174
+ YAML::load(VALID).each_with_index do |data, oindex|
175
+ mi = Webgen::Page.meta_info_from_data(data['in'])
176
+ assert_equal(data['meta_info'], mi, "test item #{oindex} - meta info directly")
177
+ d = Webgen::Page.from_data(data['in'])
178
+ assert_equal(data['meta_info'], d.meta_info, "test item #{oindex} - meta info all")
179
+ assert_equal(data['blocks'].length*2, d.blocks.length)
180
+ data['blocks'].each_with_index do |b, index|
181
+ index += 1
182
+ assert_equal(b['name'], d.blocks[index].name, "test item #{oindex} - name")
183
+ assert_equal(b['content'], d.blocks[index].content, "test item #{oindex} - content")
184
+ assert_equal(b['options'] || {}, d.blocks[index].options, "test item #{oindex} - options")
185
+ assert_same(d.blocks[index], d.blocks[b['name']])
186
+ end
187
+ end
188
+ end
189
+
190
+ def test_default_values
191
+ valid = YAML::load(VALID)
192
+ d = Webgen::Page.from_data(valid[0]['in'], 'blocks' => {1 => { 'name' => 'other1'}, 2 => { 'name' => 'block7'}})
193
+ assert_equal({'key' => 'value'}, d.meta_info)
194
+ assert_equal('other1', d.blocks[1].name)
195
+ assert_equal('block7', d.blocks[2].name)
196
+ end
197
+
198
+ def test_eol_encodings
199
+ d = Webgen::Page.from_data("---\ntitle: test\r---\r\ncontent")
200
+ assert_equal({'title' => 'test'}, d.meta_info)
201
+ assert_equal('content', d.blocks['content'].content)
202
+ end
203
+
204
+ def test_meta_info_dupped
205
+ mi = {'key' => 'value'}
206
+ d = Webgen::Page.from_data("---\ntitle: test\n---\ncontent", mi)
207
+ assert_equal({'title' => 'test', 'key' => 'value'}, d.meta_info)
208
+ assert_not_same(mi, d.meta_info)
209
+ d = Webgen::Page.from_data("content", mi)
210
+ assert_equal({'key' => 'value'}, d.meta_info)
211
+ assert_not_same(mi, d.meta_info)
212
+ end
213
+
214
+ end
data/test/test_path.rb ADDED
@@ -0,0 +1,165 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'test/unit'
4
+ require 'webgen/path'
5
+ require 'stringio'
6
+
7
+ class TestPath < Test::Unit::TestCase
8
+
9
+ def test_initialize
10
+ check_proc = proc do |o, path, dir, bn, lang, ext, cn, oi, title|
11
+ assert_equal(path, o.path)
12
+ assert_equal(path, o.source_path)
13
+ assert_equal(dir, o.directory)
14
+ assert_equal(bn, o.cnbase)
15
+ assert_equal(lang, o.meta_info['lang'])
16
+ assert_equal(ext, o.ext)
17
+ assert_equal(cn, o.cn)
18
+ assert_equal(oi, o.meta_info['sort_info'])
19
+ assert_equal(title, o.meta_info['title'])
20
+ end
21
+ check_proc.call(Webgen::Path.new('5.base_name-one.de.page'),
22
+ '5.base_name-one.de.page', './', 'base_name-one', 'de', 'page', 'base_name-one.page', 5, 'Base name one')
23
+ check_proc.call(Webgen::Path.new('dir/default.png'),
24
+ 'dir/default.png', 'dir/', 'default', nil, 'png', 'default.png', nil, 'Default')
25
+ check_proc.call(Webgen::Path.new('default.en.png'),
26
+ 'default.en.png', './', 'default', 'en', 'png', 'default.png', nil, 'Default')
27
+ check_proc.call(Webgen::Path.new('default.deu.png'),
28
+ 'default.deu.png', './', 'default', 'de', 'png', 'default.png', nil, 'Default')
29
+ check_proc.call(Webgen::Path.new('default.template'),
30
+ 'default.template', './', 'default', nil, 'template', 'default.template', nil, 'Default')
31
+ check_proc.call(Webgen::Path.new('default.en.tar.bz2'),
32
+ 'default.en.tar.bz2', './', 'default', 'en', 'tar.bz2', 'default.tar.bz2', nil, 'Default')
33
+ check_proc.call(Webgen::Path.new('default.tar.bz2'),
34
+ 'default.tar.bz2', './', 'default', nil, 'tar.bz2', 'default.tar.bz2', nil, 'Default')
35
+ check_proc.call(Webgen::Path.new('default'),
36
+ 'default', './', 'default', nil, '', 'default', nil, 'Default')
37
+ check_proc.call(Webgen::Path.new('.htaccess'),
38
+ '.htaccess', './', '', nil, 'htaccess', '.htaccess', nil, '')
39
+
40
+ check_proc.call(Webgen::Path.new('/'),
41
+ '/', '/', '/', nil, '', '/', nil, '/')
42
+ check_proc.call(Webgen::Path.new('/dir/'),
43
+ '/dir/', '/', 'dir', nil, '', 'dir', nil, 'Dir')
44
+
45
+ path = Webgen::Path.new('/test/', '/other.path')
46
+ assert_equal('/other.path', path.source_path)
47
+ assert_equal('/test/', path.path)
48
+ end
49
+
50
+ def test_mount_at
51
+ p = Webgen::Path.new('test.de.page')
52
+ p = p.mount_at('/somedir')
53
+ assert_equal('/somedir/test.de.page', p.path)
54
+ assert_equal('/somedir/test.de.page', p.source_path)
55
+ assert_equal('/somedir/', p.directory)
56
+
57
+ p = Webgen::Path.new('/')
58
+ p = p.mount_at('/somedir')
59
+ assert_equal('/somedir/', p.path)
60
+ assert_equal('/somedir/', p.source_path)
61
+ assert_equal('/', p.directory)
62
+ assert_equal('somedir', p.cn)
63
+ assert_equal('Somedir', p.meta_info['title'])
64
+
65
+ p = Webgen::Path.new('/source/test.rb')
66
+ p = p.mount_at('/', '/source/')
67
+ assert_equal('/test.rb', p.path)
68
+ assert_equal('/test.rb', p.source_path)
69
+ assert_equal('/', p.directory)
70
+ assert_equal('test.rb', p.cn)
71
+ assert_equal('Test', p.meta_info['title'])
72
+
73
+ p = Webgen::Path.new('/source/')
74
+ p = p.mount_at('/', '/source')
75
+ assert_equal('/', p.path)
76
+ assert_equal('/', p.source_path)
77
+ assert_equal('/', p.directory)
78
+ assert_equal('/', p.cn)
79
+ assert_equal('/', p.meta_info['title'])
80
+
81
+ p = Webgen::Path.new('/test.rb', '/other.rb')
82
+ p = p.mount_at('/source/')
83
+ assert_equal('/source/test.rb', p.path)
84
+ assert_equal('/other.rb', p.source_path)
85
+ assert_equal('/source/', p.directory)
86
+ assert_equal('test.rb', p.cn)
87
+ assert_equal('Test', p.meta_info['title'])
88
+ end
89
+
90
+ def test_dup
91
+ p = Webgen::Path.new('test.de.page')
92
+ dupped = p.dup
93
+ dupped.meta_info['title'] = 'changed'
94
+ assert_equal('Test', p.meta_info['title'])
95
+ end
96
+
97
+ def test_io
98
+ p = Webgen::Path.new('test.de.page')
99
+ assert_raise(RuntimeError) { p.io }
100
+ p = Webgen::Path.new('test.de.page') { StringIO.new('hallo') }
101
+ assert_equal('hallo', p.io.data)
102
+ assert_equal('hallo', p.io.stream {|f| f.read })
103
+ end
104
+
105
+ def test_lcn
106
+ p = Webgen::Path.new('test.de.page')
107
+ assert_equal('test.page', p.cn)
108
+ assert_equal('test.de.page', p.lcn)
109
+ p = Webgen::Path.new('test.page')
110
+ assert_equal('test.page', p.cn)
111
+ assert_equal('test.page', p.lcn)
112
+ end
113
+
114
+ def test_equality
115
+ p = Webgen::Path.new('test.de.page')
116
+ assert_equal('test.de.page', p)
117
+ assert_equal(Webgen::Path.new('test.de.page'), p)
118
+ assert_not_equal(5, p)
119
+ end
120
+
121
+ def test_hashing
122
+ path = Webgen::Path.new('test.de.page')
123
+ h = { 'test.de.page' => :value }
124
+ assert_equal(:value, h['test.de.page'])
125
+ assert_equal(:value, h[path])
126
+ assert(path <=> 'test.de.page')
127
+ h = { p => :newvalue}
128
+ assert_nil(h['test.de.page'])
129
+ end
130
+
131
+ def test_matching
132
+ path = '/dir/to/file.de.page'
133
+ assert(Webgen::Path.match(path, '**/*'))
134
+ assert(Webgen::Path.match(path, '**/file.de.PAGE'))
135
+ assert(Webgen::Path.match(path, '/dir/*/file.*.page'))
136
+ assert(!Webgen::Path.match(path, '**/*.test'))
137
+
138
+ path = '/dir/'
139
+ assert(Webgen::Path.match(path, '/dir/'))
140
+ assert(Webgen::Path.match(path, '/dir'))
141
+
142
+ path = '/dir'
143
+ assert(Webgen::Path.match(path, '/dir/'))
144
+ assert(Webgen::Path.match(path, '/dir'))
145
+
146
+ path = '/'
147
+ assert(Webgen::Path.match(path, '/'))
148
+ assert(!Webgen::Path.match(path, ''))
149
+
150
+ path = ''
151
+ assert(!Webgen::Path.match(path, '/'))
152
+ end
153
+
154
+ def test_introspection
155
+ p = Webgen::Path.new('test.de.page')
156
+ assert_equal('test.de.page', p.to_s)
157
+ assert(p.inspect.include?('test.de.page'))
158
+ end
159
+
160
+ def test_changed?
161
+ p = Webgen::Path.new('test.de.page')
162
+ assert(p.changed?)
163
+ end
164
+
165
+ end
@@ -0,0 +1,76 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'test/unit'
4
+ require 'helper'
5
+ require 'webgen/source'
6
+ require 'tmpdir'
7
+ require 'fileutils'
8
+ require 'rbconfig'
9
+
10
+ class TestSourceFileSystemPath < Test::Unit::TestCase
11
+
12
+ include Test::WebsiteHelper
13
+
14
+ def test_io
15
+ path = Webgen::Source::FileSystem::Path.new('/test.rb', __FILE__)
16
+ assert(path.io.data =~ /TestSourceFileSystemPath/)
17
+ end
18
+
19
+ def test_changed?
20
+ path = Webgen::Source::FileSystem::Path.new('/test.rb', __FILE__)
21
+ assert(!path.changed?)
22
+ @website.cache.instance_eval { @old_data[[:fs_path, __FILE__]] = File.mtime(__FILE__) - 1 }
23
+ assert(path.changed?)
24
+ @website.cache.instance_eval { @old_data[[:fs_path, __FILE__]] = File.mtime(__FILE__) + 1 }
25
+ assert(!path.changed?)
26
+ end
27
+
28
+ end
29
+
30
+ class TestSourceFileSystem < Test::Unit::TestCase
31
+
32
+ include Test::WebsiteHelper
33
+
34
+ def setup
35
+ super
36
+ @website = Webgen::Website.new(File.join(File.dirname(__FILE__), '..'), nil)
37
+ @website.init
38
+ Thread.current[:webgen_website] = @website
39
+ end
40
+
41
+ def test_initialize
42
+ source = Webgen::Source::FileSystem.new('test', '**/*.page')
43
+ assert_equal('**/*.page', source.glob)
44
+ assert_equal(File.join(File.dirname(__FILE__), '..', 'test'), source.root)
45
+
46
+ source = Webgen::Source::FileSystem.new('/tmp/hallo')
47
+ assert_equal('**/*', source.glob)
48
+ assert_equal('/tmp/hallo', source.root)
49
+
50
+ source = Webgen::Source::FileSystem.new('c:/tmp/hallo')
51
+ assert_equal('c:/tmp/hallo', source.root)
52
+
53
+ source = Webgen::Source::FileSystem.new('../hallo')
54
+ assert_equal(File.join(@website.directory, '../hallo'), source.root)
55
+ end
56
+
57
+ def test_paths
58
+ source = Webgen::Source::FileSystem.new(File.join(File.dirname(__FILE__), '..', 'lib', 'webgen'), '/source/../**/*')
59
+ assert(source.paths.length > 1)
60
+ assert(source.paths.include?(Webgen::Path.new('/source/')))
61
+ assert(source.paths.include?(Webgen::Path.new('/source/filesystem.rb')))
62
+ end
63
+
64
+ def test_handling_of_invalid_link
65
+ return if Config::CONFIG['arch'].include?('mswin32')
66
+ dir = File.join(Dir.tmpdir, 'webgen-link-test')
67
+ FileUtils.mkdir_p(dir)
68
+ FileUtils.touch(File.join(dir, 'test'))
69
+ File.symlink('non-existing-file', File.join(dir, 'invalid-link'))
70
+ source = Webgen::Source::FileSystem.new(dir, '/t*')
71
+ assert(source.paths.length == 1)
72
+ ensure
73
+ FileUtils.rm_rf(dir) if dir
74
+ end
75
+
76
+ end