qwikdoc 0.0.1
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.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/CHANGES +3 -0
- data/COPYING +340 -0
- data/Gemfile +3 -0
- data/README.md +10 -0
- data/Rakefile +10 -0
- data/TextFormattingRules +137 -0
- data/TextFormattingRules.ja +143 -0
- data/bin/qwikdoc +34 -0
- data/lib/qwik_doc.rb +15 -0
- data/lib/qwik_doc/hack.rb +184 -0
- data/qwikdoc.gemspec +26 -0
- data/spec/qwik_doc_spec.rb +305 -0
- data/spec/spec_helper.rb +12 -0
- data/vendor/qwik/Makefile +63 -0
- data/vendor/qwik/Rakefile +17 -0
- data/vendor/qwik/act-aa.rb +83 -0
- data/vendor/qwik/act-archive.rb +386 -0
- data/vendor/qwik/act-attach.rb +304 -0
- data/vendor/qwik/act-backup.rb +236 -0
- data/vendor/qwik/act-basic.rb +325 -0
- data/vendor/qwik/act-book.rb +161 -0
- data/vendor/qwik/act-calc.rb +371 -0
- data/vendor/qwik/act-charset.rb +251 -0
- data/vendor/qwik/act-christel.rb +112 -0
- data/vendor/qwik/act-chronology.rb +149 -0
- data/vendor/qwik/act-code.rb +155 -0
- data/vendor/qwik/act-comment.rb +554 -0
- data/vendor/qwik/act-config.rb +49 -0
- data/vendor/qwik/act-counter.rb +125 -0
- data/vendor/qwik/act-day.rb +96 -0
- data/vendor/qwik/act-describe.rb +135 -0
- data/vendor/qwik/act-diary.rb +109 -0
- data/vendor/qwik/act-edit.rb +317 -0
- data/vendor/qwik/act-embed-html.rb +296 -0
- data/vendor/qwik/act-emode.rb +150 -0
- data/vendor/qwik/act-event.rb +187 -0
- data/vendor/qwik/act-file.rb +303 -0
- data/vendor/qwik/act-files.rb +771 -0
- data/vendor/qwik/act-getpass.rb +295 -0
- data/vendor/qwik/act-history.rb +136 -0
- data/vendor/qwik/act-html.rb +204 -0
- data/vendor/qwik/act-httpauth.rb +147 -0
- data/vendor/qwik/act-include.rb +142 -0
- data/vendor/qwik/act-interwiki.rb +189 -0
- data/vendor/qwik/act-isearch.rb +109 -0
- data/vendor/qwik/act-keywords.rb +137 -0
- data/vendor/qwik/act-lang.rb +81 -0
- data/vendor/qwik/act-license.rb +63 -0
- data/vendor/qwik/act-list.rb +287 -0
- data/vendor/qwik/act-login.rb +410 -0
- data/vendor/qwik/act-logout.rb +60 -0
- data/vendor/qwik/act-mail.rb +159 -0
- data/vendor/qwik/act-map.rb +292 -0
- data/vendor/qwik/act-md5.rb +42 -0
- data/vendor/qwik/act-mdlb.rb +741 -0
- data/vendor/qwik/act-media.rb +416 -0
- data/vendor/qwik/act-member.rb +157 -0
- data/vendor/qwik/act-menu.rb +142 -0
- data/vendor/qwik/act-metadata.rb +323 -0
- data/vendor/qwik/act-mlsubmitform.rb +49 -0
- data/vendor/qwik/act-monitor.rb +167 -0
- data/vendor/qwik/act-new.rb +418 -0
- data/vendor/qwik/act-pagelist.rb +248 -0
- data/vendor/qwik/act-password.rb +145 -0
- data/vendor/qwik/act-plan.rb +210 -0
- data/vendor/qwik/act-povray.rb +230 -0
- data/vendor/qwik/act-presen.rb +380 -0
- data/vendor/qwik/act-redirect.rb +133 -0
- data/vendor/qwik/act-ring.rb +1071 -0
- data/vendor/qwik/act-rrefs.rb +255 -0
- data/vendor/qwik/act-ruby.rb +116 -0
- data/vendor/qwik/act-sample.rb +170 -0
- data/vendor/qwik/act-save.rb +295 -0
- data/vendor/qwik/act-schedule.rb +374 -0
- data/vendor/qwik/act-search.rb +180 -0
- data/vendor/qwik/act-searchwords.rb +51 -0
- data/vendor/qwik/act-sendpass.rb +83 -0
- data/vendor/qwik/act-site.rb +89 -0
- data/vendor/qwik/act-sitebackup.rb +419 -0
- data/vendor/qwik/act-sitelog.rb +118 -0
- data/vendor/qwik/act-smil.rb +299 -0
- data/vendor/qwik/act-status.rb +220 -0
- data/vendor/qwik/act-style.rb +608 -0
- data/vendor/qwik/act-table.rb +263 -0
- data/vendor/qwik/act-tableform.rb +241 -0
- data/vendor/qwik/act-tag.rb +103 -0
- data/vendor/qwik/act-text.rb +70 -0
- data/vendor/qwik/act-textarea.rb +164 -0
- data/vendor/qwik/act-theme.rb +346 -0
- data/vendor/qwik/act-toc.rb +112 -0
- data/vendor/qwik/act-typekey.rb +198 -0
- data/vendor/qwik/act-under-const.rb +94 -0
- data/vendor/qwik/act-webservice.rb +321 -0
- data/vendor/qwik/act-wema.rb +558 -0
- data/vendor/qwik/act-wysiwyg.rb +238 -0
- data/vendor/qwik/action.rb +325 -0
- data/vendor/qwik/autoreload.rb +98 -0
- data/vendor/qwik/bench-bench.rb +28 -0
- data/vendor/qwik/bench-emode.rb +47 -0
- data/vendor/qwik/bench-format-xml.rb +70 -0
- data/vendor/qwik/bench-large-table.rb +62 -0
- data/vendor/qwik/bench-md5.rb +14 -0
- data/vendor/qwik/bench-module-session.rb +19 -0
- data/vendor/qwik/bench-page.rb +50 -0
- data/vendor/qwik/bench-s-md5.rb +28 -0
- data/vendor/qwik/bench-session.rb +25 -0
- data/vendor/qwik/bench-textformat.rb +31 -0
- data/vendor/qwik/catalog-factory.rb +91 -0
- data/vendor/qwik/catalog-ja.rb +479 -0
- data/vendor/qwik/catalog-ml-ja.rb +145 -0
- data/vendor/qwik/check-act-monitor.rb +112 -0
- data/vendor/qwik/check-act-monitor2.rb +46 -0
- data/vendor/qwik/check-act-theme.rb +27 -0
- data/vendor/qwik/check-event.rb +112 -0
- data/vendor/qwik/check-event2.rb +55 -0
- data/vendor/qwik/check-htree-rexml.rb +77 -0
- data/vendor/qwik/check-htree.rb +51 -0
- data/vendor/qwik/check-libxml.rb +135 -0
- data/vendor/qwik/check-many-pages.rb +47 -0
- data/vendor/qwik/check-monitor.rb +33 -0
- data/vendor/qwik/check-observer.rb +67 -0
- data/vendor/qwik/check-server.rb +61 -0
- data/vendor/qwik/check-uuencode.rb +33 -0
- data/vendor/qwik/check-webdav.rb +65 -0
- data/vendor/qwik/check-xml-xpath.rb +27 -0
- data/vendor/qwik/common-backtrace.rb +94 -0
- data/vendor/qwik/common-basic.rb +111 -0
- data/vendor/qwik/common-condition.rb +142 -0
- data/vendor/qwik/common-error.rb +48 -0
- data/vendor/qwik/common-gettext.rb +50 -0
- data/vendor/qwik/common-javascript.rb +45 -0
- data/vendor/qwik/common-notice.rb +132 -0
- data/vendor/qwik/common-plain.rb +105 -0
- data/vendor/qwik/common-plugin.rb +111 -0
- data/vendor/qwik/common-res.rb +76 -0
- data/vendor/qwik/common-resolve.rb +92 -0
- data/vendor/qwik/common-send.rb +171 -0
- data/vendor/qwik/common-session.rb +139 -0
- data/vendor/qwik/common-surface.rb +261 -0
- data/vendor/qwik/common-url.rb +90 -0
- data/vendor/qwik/compat/Makefile +12 -0
- data/vendor/qwik/compat/add_load_path.rb +1 -0
- data/vendor/qwik/config.rb +299 -0
- data/vendor/qwik/db-b-backup.rb +142 -0
- data/vendor/qwik/db-backup.rb +184 -0
- data/vendor/qwik/db-berkeley.rb +306 -0
- data/vendor/qwik/db-filesystem.rb +305 -0
- data/vendor/qwik/db-indexer.rb +154 -0
- data/vendor/qwik/db-searchwords.rb +238 -0
- data/vendor/qwik/description-ja.rb +267 -0
- data/vendor/qwik/description.rb +256 -0
- data/vendor/qwik/dev-add-copyright.rb +23 -0
- data/vendor/qwik/dev-backup.rb +24 -0
- data/vendor/qwik/dev-bench.rb +175 -0
- data/vendor/qwik/dev-calctime.rb +52 -0
- data/vendor/qwik/dev-css-compressor.rb +60 -0
- data/vendor/qwik/dev-extract-catalog.rb +102 -0
- data/vendor/qwik/dev-js-compressor.rb +73 -0
- data/vendor/qwik/dev-release.rb +235 -0
- data/vendor/qwik/dev-replace.rb +353 -0
- data/vendor/qwik/dev-sendmail.rb +25 -0
- data/vendor/qwik/farm.rb +283 -0
- data/vendor/qwik/gettext.rb +56 -0
- data/vendor/qwik/group-cond.rb +157 -0
- data/vendor/qwik/group-config.rb +247 -0
- data/vendor/qwik/group-confirm.rb +147 -0
- data/vendor/qwik/group-db.rb +326 -0
- data/vendor/qwik/group-mail.rb +195 -0
- data/vendor/qwik/group-member.rb +307 -0
- data/vendor/qwik/group-sendmail.rb +231 -0
- data/vendor/qwik/group-site.rb +374 -0
- data/vendor/qwik/group-sweep.rb +63 -0
- data/vendor/qwik/group.rb +157 -0
- data/vendor/qwik/helper.rb +6 -0
- data/vendor/qwik/html-generator.rb +104 -0
- data/vendor/qwik/html-to-wabisabi.rb +149 -0
- data/vendor/qwik/htree-diff.rb +87 -0
- data/vendor/qwik/htree-format-xml.rb +57 -0
- data/vendor/qwik/htree-generator.rb +144 -0
- data/vendor/qwik/htree-get.rb +251 -0
- data/vendor/qwik/htree-html-generator.rb +179 -0
- data/vendor/qwik/htree-template.rb +263 -0
- data/vendor/qwik/htree-to-wabisabi.rb +171 -0
- data/vendor/qwik/loadlib.rb +79 -0
- data/vendor/qwik/logger.rb +115 -0
- data/vendor/qwik/mail-body.rb +171 -0
- data/vendor/qwik/mail-header.rb +474 -0
- data/vendor/qwik/mail-multipart.rb +193 -0
- data/vendor/qwik/mail-parse.rb +147 -0
- data/vendor/qwik/mail.rb +341 -0
- data/vendor/qwik/mailaddress.rb +83 -0
- data/vendor/qwik/mdlb-model.rb +81 -0
- data/vendor/qwik/mdlb-sample.rb +324 -0
- data/vendor/qwik/ml-catalog-factory.rb +27 -0
- data/vendor/qwik/ml-exception.rb +15 -0
- data/vendor/qwik/ml-generator.rb +28 -0
- data/vendor/qwik/ml-gettext.rb +137 -0
- data/vendor/qwik/ml-logger.rb +82 -0
- data/vendor/qwik/ml-memory.rb +65 -0
- data/vendor/qwik/ml-msg-validator.rb +86 -0
- data/vendor/qwik/ml-processor.rb +609 -0
- data/vendor/qwik/ml-quickml-server.rb +122 -0
- data/vendor/qwik/ml-sendmail.rb +0 -0
- data/vendor/qwik/ml-server.rb +107 -0
- data/vendor/qwik/ml-session.rb +348 -0
- data/vendor/qwik/ml-sweeper.rb +101 -0
- data/vendor/qwik/mock-logger.rb +65 -0
- data/vendor/qwik/mock-sendmail.rb +78 -0
- data/vendor/qwik/mock-socket.rb +82 -0
- data/vendor/qwik/modulobe.rb +406 -0
- data/vendor/qwik/mongrel-server.rb +72 -0
- data/vendor/qwik/page-files.rb +249 -0
- data/vendor/qwik/page-generate.rb +82 -0
- data/vendor/qwik/page-get.rb +262 -0
- data/vendor/qwik/page-images.rb +168 -0
- data/vendor/qwik/page-put.rb +128 -0
- data/vendor/qwik/page-rrefs.rb +154 -0
- data/vendor/qwik/page-title.rb +0 -0
- data/vendor/qwik/page-wikidb.rb +234 -0
- data/vendor/qwik/page.rb +67 -0
- data/vendor/qwik/pages.rb +444 -0
- data/vendor/qwik/parse-plugin.rb +249 -0
- data/vendor/qwik/parser-emode.rb +116 -0
- data/vendor/qwik/parser-inline.rb +273 -0
- data/vendor/qwik/parser.rb +350 -0
- data/vendor/qwik/password.rb +183 -0
- data/vendor/qwik/periodic.rb +79 -0
- data/vendor/qwik/qp.rb +56 -0
- data/vendor/qwik/qwik-service.rb +341 -0
- data/vendor/qwik/qwik.rb +5 -0
- data/vendor/qwik/qwikweb-adduser.rb +34 -0
- data/vendor/qwik/qwikweb-catalog-validator.rb +110 -0
- data/vendor/qwik/qwikweb-incgen.rb +28 -0
- data/vendor/qwik/qwikweb-makesite.rb +41 -0
- data/vendor/qwik/qwikweb-server.rb +44 -0
- data/vendor/qwik/qwikweb-showpassword.rb +26 -0
- data/vendor/qwik/qwikweb-watchlog.rb +67 -0
- data/vendor/qwik/request-path.rb +304 -0
- data/vendor/qwik/request-ua.rb +76 -0
- data/vendor/qwik/request-webrick.rb +81 -0
- data/vendor/qwik/request.rb +91 -0
- data/vendor/qwik/resolve-tdiary.rb +292 -0
- data/vendor/qwik/resolve.rb +121 -0
- data/vendor/qwik/response.rb +228 -0
- data/vendor/qwik/server-memory.rb +57 -0
- data/vendor/qwik/server-webrick.rb +102 -0
- data/vendor/qwik/server.rb +252 -0
- data/vendor/qwik/site-config.rb +149 -0
- data/vendor/qwik/site-db.rb +136 -0
- data/vendor/qwik/site-event.rb +162 -0
- data/vendor/qwik/site-files.rb +86 -0
- data/vendor/qwik/site-group.rb +103 -0
- data/vendor/qwik/site-index.rb +47 -0
- data/vendor/qwik/site-log.rb +64 -0
- data/vendor/qwik/site-member.rb +230 -0
- data/vendor/qwik/site-monitor.rb +97 -0
- data/vendor/qwik/site-pages.rb +62 -0
- data/vendor/qwik/site-plan.rb +139 -0
- data/vendor/qwik/site-report.rb +282 -0
- data/vendor/qwik/site-resolve.rb +230 -0
- data/vendor/qwik/site-rrefs.rb +18 -0
- data/vendor/qwik/site-search.rb +180 -0
- data/vendor/qwik/site-timeline.rb +153 -0
- data/vendor/qwik/site-url.rb +189 -0
- data/vendor/qwik/site.rb +76 -0
- data/vendor/qwik/smil-time.rb +105 -0
- data/vendor/qwik/smtp-session.rb +331 -0
- data/vendor/qwik/template-generator.rb +149 -0
- data/vendor/qwik/template.rb +85 -0
- data/vendor/qwik/test-common.rb +10 -0
- data/vendor/qwik/test-ml-info.rb +225 -0
- data/vendor/qwik/test-module-ml.rb +142 -0
- data/vendor/qwik/test-module-path.rb +110 -0
- data/vendor/qwik/test-module-public.rb +70 -0
- data/vendor/qwik/test-module-server.rb +98 -0
- data/vendor/qwik/test-module-session.rb +264 -0
- data/vendor/qwik/test-module-suite.rb +91 -0
- data/vendor/qwik/test-ms-applemail.rb +59 -0
- data/vendor/qwik/test-ms-attach.rb +174 -0
- data/vendor/qwik/test-ms-basic.rb +40 -0
- data/vendor/qwik/test-ms-close.rb +35 -0
- data/vendor/qwik/test-ms-confirm.rb +75 -0
- data/vendor/qwik/test-ms-ignore-spam.rb +57 -0
- data/vendor/qwik/test-ms-japanese.rb +97 -0
- data/vendor/qwik/test-ms-jfilename.rb +82 -0
- data/vendor/qwik/test-ms-large.rb +58 -0
- data/vendor/qwik/test-ms-member.rb +103 -0
- data/vendor/qwik/test-ms-multipart.rb +84 -0
- data/vendor/qwik/test-ms-org.rb +129 -0
- data/vendor/qwik/test-ms-plan.rb +130 -0
- data/vendor/qwik/test-ms-post.rb +53 -0
- data/vendor/qwik/test-ms-quopri.rb +76 -0
- data/vendor/qwik/test-sub-quopri.rb +45 -0
- data/vendor/qwik/test-submit-base64.rb +59 -0
- data/vendor/qwik/test-submit-forward.rb +61 -0
- data/vendor/qwik/test-submit-html-mail.rb +52 -0
- data/vendor/qwik/test-submit-japanese.rb +135 -0
- data/vendor/qwik/test-submit-jfilename.rb +144 -0
- data/vendor/qwik/test-submit-uuencode.rb +71 -0
- data/vendor/qwik/test-suite-all.rb +8 -0
- data/vendor/qwik/test-suite-basic.rb +9 -0
- data/vendor/qwik/test-suite-ml.rb +9 -0
- data/vendor/qwik/test-typekey.rb +64 -0
- data/vendor/qwik/testunit.rb +45 -0
- data/vendor/qwik/tokenizer-inline.rb +294 -0
- data/vendor/qwik/tokenizer.rb +332 -0
- data/vendor/qwik/typekey.rb +160 -0
- data/vendor/qwik/util-basic.rb +135 -0
- data/vendor/qwik/util-charset.rb +332 -0
- data/vendor/qwik/util-css.rb +56 -0
- data/vendor/qwik/util-csv-tokenizer.rb +113 -0
- data/vendor/qwik/util-filename.rb +112 -0
- data/vendor/qwik/util-pathname.rb +202 -0
- data/vendor/qwik/util-pid.rb +58 -0
- data/vendor/qwik/util-safe.rb +67 -0
- data/vendor/qwik/util-sendmail.rb +273 -0
- data/vendor/qwik/util-string.rb +203 -0
- data/vendor/qwik/util-time.rb +125 -0
- data/vendor/qwik/util-webrick.rb +176 -0
- data/vendor/qwik/version.rb +11 -0
- data/vendor/qwik/wabisabi-basic.rb +163 -0
- data/vendor/qwik/wabisabi-diff.rb +130 -0
- data/vendor/qwik/wabisabi-format-xml.rb +310 -0
- data/vendor/qwik/wabisabi-generator.rb +262 -0
- data/vendor/qwik/wabisabi-index.rb +174 -0
- data/vendor/qwik/wabisabi-table.rb +212 -0
- data/vendor/qwik/wabisabi-template.rb +295 -0
- data/vendor/qwik/wabisabi-to-htree.rb +111 -0
- data/vendor/qwik/wabisabi-to-wiki.rb +690 -0
- data/vendor/qwik/wabisabi-traverse.rb +207 -0
- data/vendor/qwik/wabisabi-validator.rb +116 -0
- data/vendor/qwik/wabisabi.rb +5 -0
- metadata +416 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
|
|
2
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
|
3
|
+
# You can redistribute it and/or modify it under the terms of the GNU GPL 2.
|
|
4
|
+
|
|
5
|
+
$LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
|
|
6
|
+
require 'qwik/testunit'
|
|
7
|
+
|
|
8
|
+
class CheckUuencode < Test::Unit::TestCase
|
|
9
|
+
def test_uuencode
|
|
10
|
+
ok_eq('', [''].pack('u'))
|
|
11
|
+
ok_eq("!80``\n", ['a'].pack('u'))
|
|
12
|
+
ok_eq("#86)C\n", ['abc'].pack('u'))
|
|
13
|
+
ok_eq("$86)C9```\n", ['abcd'].pack('u'))
|
|
14
|
+
ok_eq("M86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A\n",
|
|
15
|
+
['a'*45].pack('u'))
|
|
16
|
+
ok_eq("M86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A\n!80``\n", ['a'*46].pack('u'))
|
|
17
|
+
ok_eq("&86)C9&5F\n#9VAI\n", ['abcdefghi'].pack('u6'))
|
|
18
|
+
|
|
19
|
+
ok_eq([''], ''.unpack('u'))
|
|
20
|
+
ok_eq([''], ''.unpack('u'))
|
|
21
|
+
ok_eq(['a'], "!80``\n".unpack('u'))
|
|
22
|
+
ok_eq(['abc'], "#86)C\n".unpack('u'))
|
|
23
|
+
ok_eq(['abcd'], "$86)C9```\n".unpack('u'))
|
|
24
|
+
ok_eq(['a'*45], "M86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A\n".unpack('u'))
|
|
25
|
+
ok_eq(['a'*46], "M86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A\n!80``\n".unpack('u'))
|
|
26
|
+
ok_eq(['abcdefghi'], "&86)C9&5F\n#9VAI\n".unpack('u6'))
|
|
27
|
+
|
|
28
|
+
png = "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\000\001\000\000\000\001\010\002\000\000\000\220wS\336\000\000\000\fIDATx\332c\370\377\377?\000\005\376\002\3763\022\225\024\000\000\000\000IEND\256B`\202"
|
|
29
|
+
uu = "MB5!.1PT*&@H````-24A\$4@````\$````!\"`(```\"0=U/>````#\$E\$051XVF/X\n8__\\_``7^`OXS\$I44`````\$E%3D2N0F\"\"\n"
|
|
30
|
+
ok_eq(uu, [png].pack('u'))
|
|
31
|
+
ok_eq([png], uu.unpack('u'))
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
|
|
2
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
|
3
|
+
# You can redistribute it and/or modify it under the terms of the GNU GPL 2.
|
|
4
|
+
|
|
5
|
+
$LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
|
|
6
|
+
|
|
7
|
+
require 'pp'
|
|
8
|
+
require 'qwik/autoreload'
|
|
9
|
+
require 'qwik/util-webrick'
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
require 'qwik/webdavhandler'
|
|
13
|
+
$have_webdavhandler = true
|
|
14
|
+
rescue LoadError
|
|
15
|
+
$have_webdavhandler = false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
if $have_webdavhandler
|
|
19
|
+
|
|
20
|
+
class MyWebDAVHandler < WEBrick::HTTPServlet::WebDAVHandler
|
|
21
|
+
def do_OPTIONS(req, res)
|
|
22
|
+
super
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def do_PROPFIND(req, res)
|
|
26
|
+
super(req, res)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def start_server
|
|
31
|
+
$running = true
|
|
32
|
+
AutoReload.start(1, true) # auto reload every sec.
|
|
33
|
+
|
|
34
|
+
log = WEBrick::Log.new
|
|
35
|
+
log.level = WEBrick::Log::DEBUG if $DEBUG
|
|
36
|
+
|
|
37
|
+
server = WEBrick::HTTPServer.new({:Port => 10080, :Logger => log})
|
|
38
|
+
server.mount("/", MyWebDAVHandler, Dir.pwd)
|
|
39
|
+
trap(:INT) { server.shutdown }
|
|
40
|
+
server.start
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if $0 == __FILE__
|
|
44
|
+
if ARGV[0] == '--server'
|
|
45
|
+
$server = true
|
|
46
|
+
else
|
|
47
|
+
require 'qwik/testunit'
|
|
48
|
+
$test = true
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
if defined?($test) && $test
|
|
53
|
+
class TestWebDAV < Test::Unit::TestCase
|
|
54
|
+
def test_all
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
if defined?($server) && $server
|
|
60
|
+
if ! $running
|
|
61
|
+
start_server
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
|
|
2
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
|
3
|
+
# You can redistribute it and/or modify it under the terms of the GNU GPL 2.
|
|
4
|
+
|
|
5
|
+
$LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
|
|
6
|
+
require 'qwik/test-common'
|
|
7
|
+
|
|
8
|
+
#class TestXPath < Test::Unit::TestCase
|
|
9
|
+
class TestXPath
|
|
10
|
+
include TestSession
|
|
11
|
+
|
|
12
|
+
def test_xpath
|
|
13
|
+
t_add_user
|
|
14
|
+
page = @site.create_new
|
|
15
|
+
page.store('t')
|
|
16
|
+
|
|
17
|
+
session('/test/1.html')
|
|
18
|
+
px("//div[@class='section']", 0)
|
|
19
|
+
|
|
20
|
+
require 'xml/xpath'
|
|
21
|
+
xpath = XML::XPATH.new
|
|
22
|
+
xpath.xml = @res.body.format_xml.page_to_xml
|
|
23
|
+
i = xpath.execute("//div[@class='section']/p")
|
|
24
|
+
print "#{i} nodes :\n"
|
|
25
|
+
p xpath.to_a
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
|
|
2
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
|
3
|
+
# You can redistribute it and/or modify it under the terms of the GNU GPL 2.
|
|
4
|
+
|
|
5
|
+
$LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
|
|
6
|
+
|
|
7
|
+
module Qwik
|
|
8
|
+
class Action
|
|
9
|
+
# Only for demonstration for the PrettyBacktrace function.
|
|
10
|
+
def plg__qwik_test_for_raise_exception
|
|
11
|
+
no_such_local_variable
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class PrettyBacktrace
|
|
16
|
+
MARGIN = 10
|
|
17
|
+
POS_NUM = 3
|
|
18
|
+
MIN_MARGIN = -1
|
|
19
|
+
|
|
20
|
+
def self.to_html(e)
|
|
21
|
+
margin = MARGIN
|
|
22
|
+
trs = e.backtrace.map {|str|
|
|
23
|
+
sf, sl, method = str.split(':', 3)
|
|
24
|
+
margin -= 1
|
|
25
|
+
[[:tr,
|
|
26
|
+
[:td, {:class=>'file'}, get_pos(sf, sl)+':', [:strong, sl]],
|
|
27
|
+
[:td, {:class=>'method'}, method.to_s]],
|
|
28
|
+
[:tr,
|
|
29
|
+
[:td, {:class=>'excerpt', :colspan=>'3'},
|
|
30
|
+
get_excerpt(sf, sl.to_i, margin)]]]
|
|
31
|
+
}
|
|
32
|
+
return [[:h3, e.to_s], [:table, {:class=>'exception'}, trs]]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.get_pos(sourcefile, sourceline)
|
|
36
|
+
ar = sourcefile.split('/')
|
|
37
|
+
ar = ar[-POS_NUM, POS_NUM] if POS_NUM < ar.length
|
|
38
|
+
return ar.join('/')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.get_excerpt(file, linenum, margin)
|
|
42
|
+
margin = MIN_MARGIN if margin < MIN_MARGIN
|
|
43
|
+
return '' if margin < 0
|
|
44
|
+
f = file.path
|
|
45
|
+
return '' unless f.exist?
|
|
46
|
+
str = f.read
|
|
47
|
+
b = linenum - margin - 1 # beginning
|
|
48
|
+
ar = str.to_a[b, margin*2+1]
|
|
49
|
+
|
|
50
|
+
table = []
|
|
51
|
+
ar.each_with_index {|line, num|
|
|
52
|
+
line = " \n" if line == "\n" # only for visual effect
|
|
53
|
+
n = b + num + 1
|
|
54
|
+
attr = {:class=>'even'}
|
|
55
|
+
attr = {:class=>'odd'} if n % 2 == 1
|
|
56
|
+
attr = {:class=>'target'} if n == linenum
|
|
57
|
+
table << [:tr, attr, [:th, n.to_s], [:td, [:pre, line]]]
|
|
58
|
+
}
|
|
59
|
+
return [:table, table]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
if $0 == __FILE__
|
|
65
|
+
require 'qwik/test-common'
|
|
66
|
+
$test = true
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if defined?($test) && $test
|
|
70
|
+
class TestActException < Test::Unit::TestCase
|
|
71
|
+
include TestSession
|
|
72
|
+
|
|
73
|
+
def test_all
|
|
74
|
+
t_add_user
|
|
75
|
+
|
|
76
|
+
# test_backtrace
|
|
77
|
+
page = @site.create_new
|
|
78
|
+
page.store('{{nosuch}}')
|
|
79
|
+
res = session('/test/1.html')
|
|
80
|
+
ok_in [:span, {:class=>"plg_error"}, "nosuch plugin | ",
|
|
81
|
+
[:strong, "nosuch"]], '//div[@class="section"]'
|
|
82
|
+
eq [:div, {:class=>"section"},
|
|
83
|
+
[[:span, {:class=>"plg_error"}, "nosuch plugin | ",
|
|
84
|
+
[:strong, "nosuch"]]]],
|
|
85
|
+
@res.body.get_path('//div[@class="section"]')
|
|
86
|
+
|
|
87
|
+
t_without_testmode {
|
|
88
|
+
page.store '{{_qwik_test_for_raise_exception}}'
|
|
89
|
+
res = session '/test/1.html'
|
|
90
|
+
assert_text(/\Aundefined local variable or method `no_such_local_variable' for #<Qwik::Action:/, 'h3')
|
|
91
|
+
}
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
|
|
2
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
|
3
|
+
# You can redistribute it and/or modify it under the terms of the GNU GPL 2.
|
|
4
|
+
|
|
5
|
+
$LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
|
|
6
|
+
require 'qwik/util-time'
|
|
7
|
+
require 'qwik/parse-plugin'
|
|
8
|
+
|
|
9
|
+
module Qwik
|
|
10
|
+
# ============================== exception
|
|
11
|
+
class QwikError < StandardError; end
|
|
12
|
+
class RequireLogin < QwikError; end
|
|
13
|
+
class RequirePost < QwikError; end
|
|
14
|
+
class PageNotFound < QwikError; end
|
|
15
|
+
class RequireNoPathArgs < QwikError; end
|
|
16
|
+
class RequireMember < QwikError; end
|
|
17
|
+
class InvalidUserError < QwikError; end
|
|
18
|
+
class BaseIsNotSitename < QwikError; end
|
|
19
|
+
class NoCorrespondingPlugin < QwikError; end # plugin
|
|
20
|
+
|
|
21
|
+
class Action
|
|
22
|
+
# ============================== response
|
|
23
|
+
def c_set_status(status=200)
|
|
24
|
+
@res.status = status
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def c_set_contenttype(contenttype="text/html; charset=Shift_JIS")
|
|
28
|
+
@res['Content-Type'] = contenttype
|
|
29
|
+
end
|
|
30
|
+
alias c_set_html c_set_contenttype
|
|
31
|
+
|
|
32
|
+
def c_set_no_cache(pragma='no-cache', control='no-cache')
|
|
33
|
+
@res['Pragma'] = pragma
|
|
34
|
+
@res['Cache-Control'] = control
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def c_set_location(location)
|
|
38
|
+
@res['Location'] = location
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def c_set_body(body)
|
|
42
|
+
@res.body = body
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# ============================== rewrite plugin
|
|
46
|
+
def plugin_edit(plugin_name, plugin_num)
|
|
47
|
+
# Get the original page.
|
|
48
|
+
page = @site[@req.base]
|
|
49
|
+
str = page.load
|
|
50
|
+
md5 = str.md5hex
|
|
51
|
+
|
|
52
|
+
# Split the page into paragraphs.
|
|
53
|
+
paragraphs = Plugin.split(str)
|
|
54
|
+
|
|
55
|
+
# Replace the content of the plugin.
|
|
56
|
+
written = false
|
|
57
|
+
new_paras = Plugin.rewrite(paragraphs, plugin_name, plugin_num) {|plugin|
|
|
58
|
+
plugin_org_content = plugin[2] || ''
|
|
59
|
+
plugin_altered_content = yield(plugin_org_content)
|
|
60
|
+
plugin[2] = plugin_altered_content # Destructive.
|
|
61
|
+
written = true
|
|
62
|
+
plugin
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
raise NoCorrespondingPlugin if ! written
|
|
66
|
+
|
|
67
|
+
# Reconstruct the page from the lines.
|
|
68
|
+
new_page_str = Plugin.join(new_paras)
|
|
69
|
+
|
|
70
|
+
page.put_with_md5(new_page_str, md5)
|
|
71
|
+
|
|
72
|
+
return nil
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
if $0 == __FILE__
|
|
78
|
+
require 'qwik/test-common'
|
|
79
|
+
$test = true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
if defined?($test) && $test
|
|
83
|
+
class TestCommon < Test::Unit::TestCase
|
|
84
|
+
include TestSession
|
|
85
|
+
|
|
86
|
+
def test_response
|
|
87
|
+
res = session
|
|
88
|
+
|
|
89
|
+
# test_c_set_status
|
|
90
|
+
@action.c_set_status(7743)
|
|
91
|
+
ok_eq(7743, res.status)
|
|
92
|
+
|
|
93
|
+
# test_c_set_contenttype
|
|
94
|
+
@action.c_set_contenttype
|
|
95
|
+
ok_eq("text/html; charset=Shift_JIS", res['Content-Type'])
|
|
96
|
+
|
|
97
|
+
# test_c_set_no_cache
|
|
98
|
+
@action.c_set_no_cache
|
|
99
|
+
ok_eq('no-cache', res['Pragma'])
|
|
100
|
+
ok_eq('no-cache', res['Cache-Control'])
|
|
101
|
+
|
|
102
|
+
# test_c_set_body
|
|
103
|
+
@action.c_set_body('body')
|
|
104
|
+
ok_eq('body', res.body)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def nu_test_rewrite_plugin
|
|
108
|
+
# This is tested in act-table.rb
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
|
|
2
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
|
3
|
+
# You can redistribute it and/or modify it under the terms of the GNU GPL 2.
|
|
4
|
+
|
|
5
|
+
$LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
|
|
6
|
+
|
|
7
|
+
module Qwik
|
|
8
|
+
class Action
|
|
9
|
+
# ========== error check
|
|
10
|
+
def c_login?
|
|
11
|
+
return @req.user
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def c_require_login # You must logged in.
|
|
15
|
+
raise RequireLogin unless c_login?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def c_member?
|
|
19
|
+
c_login? && @site.member.exist?(@req.user)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def c_require_member # You must be a member of this group.
|
|
23
|
+
raise RequireMember unless c_member?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def c_require_post
|
|
27
|
+
raise RequirePost unless @req.is_post?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def c_require_page_exist
|
|
31
|
+
raise PageNotFound if @site[@req.base].nil?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def c_require_no_path_args
|
|
35
|
+
raise RequireNoPathArgs if 0 < @req.path_args.length
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def c_require_no_ext_args
|
|
39
|
+
raise 'no ext args' if 0 < @req.ext_args.length
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def c_require_pagename
|
|
43
|
+
raise 'pagename is nil' if @req.base.nil?
|
|
44
|
+
# FIXME: But, pagename is always not nil for now.
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def c_require_base_is_sitename
|
|
48
|
+
raise BaseIsNotSitename if @req.base != @req.sitename
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def c_require_lib(lib)
|
|
52
|
+
begin
|
|
53
|
+
require lib
|
|
54
|
+
rescue
|
|
55
|
+
raise "there is no #{lib} library"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
if $0 == __FILE__
|
|
62
|
+
require 'qwik/test-common'
|
|
63
|
+
$test = true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
if defined?($test) && $test
|
|
67
|
+
class TestActCondition < Test::Unit::TestCase
|
|
68
|
+
include TestSession
|
|
69
|
+
|
|
70
|
+
def test_condition
|
|
71
|
+
res = session
|
|
72
|
+
|
|
73
|
+
# test_c_login
|
|
74
|
+
ok_eq(true, !!@action.c_login?)
|
|
75
|
+
|
|
76
|
+
# test_c_require_login
|
|
77
|
+
@action.c_require_login # ok, nothing happen.
|
|
78
|
+
|
|
79
|
+
# test_c_member
|
|
80
|
+
ok_eq(false, @action.c_member?)
|
|
81
|
+
|
|
82
|
+
# test_c_require_member
|
|
83
|
+
assert_raise(Qwik::RequireMember) {
|
|
84
|
+
@action.c_require_member
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
t_add_user
|
|
88
|
+
|
|
89
|
+
# test_c_member, again
|
|
90
|
+
ok_eq(true, @action.c_member?)
|
|
91
|
+
|
|
92
|
+
# test_c_require_member, again
|
|
93
|
+
@action.c_require_member # nothing happen
|
|
94
|
+
|
|
95
|
+
# test_c_require_post
|
|
96
|
+
res = session {|req|
|
|
97
|
+
ok_eq(false, req.is_post?)
|
|
98
|
+
}
|
|
99
|
+
assert_raise(Qwik::RequirePost) {
|
|
100
|
+
@action.c_require_post
|
|
101
|
+
}
|
|
102
|
+
res = session('POST /test/1.html')
|
|
103
|
+
@action.c_require_post # nothing happen
|
|
104
|
+
|
|
105
|
+
# test_c_require_page_exist
|
|
106
|
+
res = session('/test/1.html') {|req|
|
|
107
|
+
ok_eq(nil, @site[req.base])
|
|
108
|
+
}
|
|
109
|
+
assert_raise(Qwik::PageNotFound) {
|
|
110
|
+
@action.c_require_page_exist
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# test_c_require_no_path_args
|
|
114
|
+
res = session('/test/1.html/1') {|req|
|
|
115
|
+
ok_eq(['1'], req.path_args)
|
|
116
|
+
}
|
|
117
|
+
assert_raise(Qwik::RequireNoPathArgs) {
|
|
118
|
+
@action.c_require_no_path_args
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
# test_c_require_no_ext_args
|
|
122
|
+
res = session('/test/1.t.html') {|req|
|
|
123
|
+
ok_eq(['t'], req.ext_args)
|
|
124
|
+
}
|
|
125
|
+
assert_raise(RuntimeError) {
|
|
126
|
+
@action.c_require_no_ext_args
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
# test_c_require_pagename
|
|
130
|
+
# FIXME: Pagename is always not nil for now.
|
|
131
|
+
|
|
132
|
+
# test_c_require_base_is_sitename
|
|
133
|
+
res = session('/test/1.t.html') {|req|
|
|
134
|
+
ok_eq(['t'], req.ext_args)
|
|
135
|
+
}
|
|
136
|
+
assert_raise(RuntimeError) {
|
|
137
|
+
@action.c_require_no_ext_args
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|