codestock 0.1.0

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 (57) hide show
  1. data/.document +5 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +18 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +19 -0
  6. data/Rakefile +63 -0
  7. data/VERSION +1 -0
  8. data/bin/cdstk +12 -0
  9. data/bin/cdv +11 -0
  10. data/bin/cdview +11 -0
  11. data/bin/cdweb +11 -0
  12. data/codestock.gemspec +131 -0
  13. data/lib/codestock.rb +0 -0
  14. data/lib/common/dbdir.rb +37 -0
  15. data/lib/common/display_util.rb +62 -0
  16. data/lib/common/grenfiletest.rb +19 -0
  17. data/lib/common/grensnip.rb +37 -0
  18. data/lib/common/platform.rb +17 -0
  19. data/lib/common/string_snip.rb +61 -0
  20. data/lib/common/util.rb +98 -0
  21. data/lib/findgrep/findgrep.rb +408 -0
  22. data/lib/findgrep/result.rb +43 -0
  23. data/lib/gren/cli.rb +65 -0
  24. data/lib/gren.rb +6 -0
  25. data/lib/grendb/cli.rb +43 -0
  26. data/lib/grenweb/cli.rb +54 -0
  27. data/lib/grenweb/database.rb +182 -0
  28. data/lib/grenweb/grenweb.ru +35 -0
  29. data/lib/grenweb/grep.rb +52 -0
  30. data/lib/grenweb/help.rb +40 -0
  31. data/lib/grenweb/home.rb +40 -0
  32. data/lib/grenweb/html_renderer.rb +244 -0
  33. data/lib/grenweb/public/css/gren.css +63 -0
  34. data/lib/grenweb/public/images/gren-icon-mini.png +0 -0
  35. data/lib/grenweb/public/images/gren-icon.png +0 -0
  36. data/lib/grenweb/query.rb +82 -0
  37. data/lib/grenweb/searcher.rb +130 -0
  38. data/lib/grenweb/viewer.rb +52 -0
  39. data/lib/mkgrendb/cli.rb +89 -0
  40. data/lib/mkgrendb/cli_old.rb +49 -0
  41. data/lib/mkgrendb/grendbyaml.rb +76 -0
  42. data/lib/mkgrendb/mkgrendb.rb +296 -0
  43. data/test/file_test_utils.rb +59 -0
  44. data/test/runner.rb +11 -0
  45. data/test/test_dbdir.rb +59 -0
  46. data/test/test_gren.rb +10 -0
  47. data/test/test_gren_util.rb +34 -0
  48. data/test/test_grendbyaml.rb +109 -0
  49. data/test/test_grenweb_cli.rb +10 -0
  50. data/test/test_grenweb_database.rb +37 -0
  51. data/test/test_grenweb_html_renderer.rb +41 -0
  52. data/test/test_grenweb_query.rb +54 -0
  53. data/test/test_grenweb_searcher.rb +35 -0
  54. data/test/test_helper.rb +2 -0
  55. data/test/test_mkgrendb.rb +163 -0
  56. data/test/test_string_snip.rb +31 -0
  57. metadata +229 -0
@@ -0,0 +1,296 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'yaml'
4
+ require 'pathname'
5
+ require 'rubygems'
6
+ require 'groonga'
7
+ require 'fileutils'
8
+ require 'pathname'
9
+ require File.join(File.dirname(__FILE__), 'grendbyaml')
10
+ require File.join(File.dirname(__FILE__), '../common/grenfiletest')
11
+ require File.join(File.dirname(__FILE__), '../common/util')
12
+ include Gren
13
+
14
+ module Mkgrendb
15
+ class Mkgrendb
16
+ DB_FILE_PATH = 'db/grendb.db'
17
+
18
+ def initialize(io = $stdout, db_dir = ".")
19
+ @db_dir = db_dir
20
+ @out = io
21
+ @file_count = 0
22
+ @add_count = 0
23
+ @update_count = 0
24
+ @start_time = Time.now
25
+ end
26
+
27
+ def init
28
+ if Dir.entries(@db_dir) == [".", ".."]
29
+ GrendbYAML.create(@db_dir)
30
+ @out.puts "create : #{yaml_file}"
31
+ db_create(db_file)
32
+ else
33
+ @out.puts "Can't create Grendb Database (Not empty) in #{@db_dir}"
34
+ end
35
+ end
36
+
37
+ def update
38
+ print_result do
39
+ yaml = yaml_load
40
+ db_open(db_file)
41
+
42
+ yaml.contents.each do |content|
43
+ update_dir_in(content["directory"])
44
+ end
45
+ end
46
+ end
47
+
48
+ def update_dir(dir)
49
+ print_result do
50
+ update_dir_in(dir)
51
+ end
52
+ end
53
+
54
+ def add(*content)
55
+ # 絶対パスに変換
56
+ content.map!{|v|File.expand_path(v)}
57
+
58
+ # YAML更新
59
+ yaml = yaml_load
60
+ yaml.add(*content)
61
+ yaml.save
62
+
63
+ # 部分アップデート
64
+ db_open(db_file)
65
+ content.each do |dir|
66
+ update_dir(dir)
67
+ end
68
+ end
69
+
70
+ def remove(*content)
71
+ # 絶対パスに変換
72
+ content.map!{|v|File.expand_path(v)}
73
+
74
+ # YAML更新
75
+ yaml = yaml_load
76
+ yaml.remove(*content)
77
+ yaml.save
78
+
79
+ # @todo 削除したコンテンツをインデックスから削除
80
+ end
81
+
82
+ def list
83
+ @out.puts yaml_load.list
84
+ end
85
+
86
+ def rebuild
87
+ db_delete(db_file)
88
+ db_create(db_file)
89
+ update
90
+ end
91
+
92
+ def dump
93
+ db_open(db_file)
94
+
95
+ documents = Groonga::Context.default["documents"]
96
+ records = documents.select
97
+ records.each do |record|
98
+ @out.puts record.inspect
99
+ @out.puts "path : #{record.path}"
100
+ @out.puts "shortpath : #{record.shortpath}"
101
+ @out.puts "suffix : #{record.suffix}"
102
+ @out.puts "timestamp : #{record.timestamp.strftime('%Y/%m/%d %H:%M:%S')}"
103
+ @out.puts "content :", record.content ? record.content[0..64] : nil
104
+ @out.puts
105
+ end
106
+ end
107
+
108
+ private
109
+
110
+ def db_file
111
+ (Pathname.new(@db_dir) + DB_FILE_PATH).to_s
112
+ end
113
+
114
+ def yaml_file
115
+ GrendbYAML.yaml_file @db_dir
116
+ end
117
+
118
+ def yaml_load
119
+ GrendbYAML.load(@db_dir)
120
+ end
121
+
122
+ def update_dir_in(dir)
123
+ dir = File.expand_path(dir)
124
+
125
+ if (!FileTest.exist?(dir))
126
+ @out.puts "[WARNING] : #{dir} (Not found, skip)"
127
+ elsif (FileTest.directory? dir)
128
+ db_add_dir(dir)
129
+ else
130
+ db_add_file(STDOUT, dir, File.basename(dir))
131
+ end
132
+ end
133
+
134
+ def time
135
+ @end_time - @start_time
136
+ end
137
+
138
+ def print_result
139
+ yield
140
+
141
+ @end_time = Time.now
142
+
143
+ @out.puts
144
+ @out.puts "time : #{Util::time_s(time)}"
145
+ @out.puts "files : #{@file_count}"
146
+ @out.puts "add : #{@add_count}"
147
+ @out.puts "update : #{@update_count}"
148
+ end
149
+
150
+ def db_create(filename)
151
+ dbfile = Pathname(File.expand_path(filename))
152
+ dbdir = dbfile.dirname
153
+ dbdir.mkpath unless dbdir.exist?
154
+
155
+ unless dbfile.exist?
156
+ Groonga::Database.create(:path => dbfile.to_s)
157
+ Groonga::Schema.define do |schema|
158
+ schema.create_table("documents") do |table|
159
+ table.string("path")
160
+ table.string("shortpath")
161
+ table.text("content")
162
+ table.time("timestamp")
163
+ table.text("suffix")
164
+ end
165
+
166
+ schema.create_table("terms",
167
+ :type => :patricia_trie,
168
+ :key_normalize => true,
169
+ :default_tokenizer => "TokenBigram") do |table|
170
+ table.index("documents.path", :with_position => true)
171
+ table.index("documents.shortpath", :with_position => true)
172
+ table.index("documents.content", :with_position => true)
173
+ table.index("documents.suffix", :with_position => true)
174
+ end
175
+ end
176
+ @out.puts "create : #{filename} created."
177
+ else
178
+ @out.puts "message : #{filename} already exist."
179
+ end
180
+ end
181
+
182
+ def db_open(filename)
183
+ dbfile = Pathname(File.expand_path(filename))
184
+
185
+ if dbfile.exist?
186
+ Groonga::Database.open(dbfile.to_s)
187
+ @out.puts "open : #{dbfile} open."
188
+ else
189
+ raise "error : #{dbfile.to_s} not found!!"
190
+ end
191
+ end
192
+
193
+ def db_delete(filename)
194
+ raise "Illegal file name : #{filename}." unless filename =~ /\.db$/
195
+ Dir.glob("#{filename}*").each do |f|
196
+ @out.puts "delete : #{f}"
197
+ FileUtils.rm_r(f)
198
+ end
199
+ end
200
+ private :db_delete
201
+
202
+ def db_add_dir(dirname)
203
+ searchDirectory(STDOUT, dirname, File.basename(dirname), 0)
204
+ end
205
+ private :db_add_dir
206
+
207
+ def db_add_file(stdout, filename, shortpath)
208
+ # 格納するデータ
209
+ values = {
210
+ :path => filename,
211
+ :shortpath => shortpath,
212
+ :content => nil,
213
+ :timestamp => File.mtime(filename),
214
+ :suffix => File::extname(filename),
215
+ }
216
+
217
+ # 検索するデータベース
218
+ documents = Groonga::Context.default["documents"]
219
+
220
+ # 既に登録されているファイルならばそれを上書き、そうでなければ新規レコードを作成
221
+ _documents = documents.select do |record|
222
+ record["path"] == values[:path]
223
+ end
224
+
225
+ isNewFile = false
226
+
227
+ if _documents.size.zero?
228
+ document = documents.add
229
+ isNewFile = true
230
+ else
231
+ document = _documents.to_a[0].key
232
+ end
233
+
234
+ # タイムスタンプが新しければデータベースに格納
235
+ if (document[:timestamp] < values[:timestamp])
236
+ # 実際に使うタイミングでファイルの内容を読み込み
237
+ values[:content] = open(filename).read
238
+
239
+ # データベースに格納
240
+ values.each do |key, value|
241
+ if (key == :path)
242
+ if (isNewFile)
243
+ @add_count += 1
244
+ @out.puts "add_file : #{value}"
245
+ else
246
+ @update_count += 1
247
+ @out.puts "update : #{value}"
248
+ end
249
+ end
250
+ document[key] = value
251
+ end
252
+ end
253
+
254
+ end
255
+
256
+ def searchDirectory(stdout, dir, shortdir, depth)
257
+ Dir.foreach(dir) do |name|
258
+ next if (name == '.' || name == '..')
259
+
260
+ fpath = File.join(dir,name)
261
+ shortpath = File.join(shortdir,name)
262
+
263
+ # 除外ディレクトリならばパス
264
+ next if ignoreDir?(fpath)
265
+
266
+ # 読み込み不可ならばパス
267
+ next unless FileTest.readable?(fpath)
268
+
269
+ # ファイルならば中身を探索、ディレクトリならば再帰
270
+ case File.ftype(fpath)
271
+ when "directory"
272
+ searchDirectory(stdout, fpath, shortpath, depth + 1)
273
+ when "file"
274
+ unless ignoreFile?(fpath)
275
+ db_add_file(stdout, fpath, shortpath)
276
+ @file_count += 1
277
+ @out.puts "file_count : #{@file_count}" if (@file_count % 100 == 0)
278
+ end
279
+ end
280
+ end
281
+ end
282
+
283
+ def ignoreDir?(fpath)
284
+ FileTest.directory?(fpath) &&
285
+ GrenFileTest::ignoreDir?(fpath)
286
+ end
287
+ private :ignoreDir?
288
+
289
+ def ignoreFile?(fpath)
290
+ GrenFileTest::ignoreFile?(fpath) ||
291
+ GrenFileTest::binary?(fpath)
292
+ end
293
+ private :ignoreFile?
294
+
295
+ end
296
+ end
@@ -0,0 +1,59 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief ファイルテスト用ユーティリティ
5
+ # @author ongaeshi
6
+ # @date 2011/02/21
7
+ #
8
+ #
9
+ # 以下のことを自動でやってくれます
10
+ #
11
+ # 1. tmpディレクトリの作成
12
+ # 2. tmpディレクトリに移動
13
+ # 3. テスト実行
14
+ # 4. 元のディレクトリに戻る
15
+ # 5. tmpディレクトリの削除
16
+ #
17
+ # また、以下の関数が使えます
18
+ #
19
+ # assert_diff_files(file1, file2)
20
+ #
21
+ # 二つのファイルが等しい場合はテスト成功
22
+ # 失敗した場合は二つのファイルのdiffを表示します
23
+
24
+ require 'pathname'
25
+ require 'fileutils'
26
+
27
+ module FileTestUtils
28
+ def setup
29
+ create_tmp_dir
30
+ FileUtils.cd(@tmp_dir.to_s)
31
+ end
32
+
33
+ def assert_diff_files(file1, file2)
34
+ unless (IO.read(file1) == IO.read(file2))
35
+ puts `diff -c #{file1} #{file2}`
36
+ assert_equal true, false
37
+ else
38
+ assert_equal true, true
39
+ end
40
+ end
41
+
42
+ def teardown
43
+ teardown_custom(true)
44
+ end
45
+
46
+ def teardown_custom(is_remove_dir)
47
+ FileUtils.cd(@prev_dir)
48
+ FileUtils.rm_rf(@tmp_dir.to_s) if (is_remove_dir)
49
+ end
50
+
51
+ private
52
+
53
+ def create_tmp_dir
54
+ @prev_dir = Dir.pwd
55
+ @tmp_dir = Pathname(File.dirname(__FILE__)) + "tmp"
56
+ FileUtils.rm_rf(@tmp_dir.to_s)
57
+ FileUtils.mkdir_p(@tmp_dir.to_s)
58
+ end
59
+ end
data/test/runner.rb ADDED
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/03/11
7
+
8
+ require 'test/unit'
9
+ Test::Unit::AutoRunner.run(true, '.')
10
+
11
+
@@ -0,0 +1,59 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/03/08
7
+
8
+ require 'rubygems'
9
+ require File.join(File.dirname(__FILE__), "test_helper")
10
+ require File.join(File.dirname(__FILE__), "../lib/common/dbdir")
11
+ require File.join(File.dirname(__FILE__), "file_test_utils")
12
+
13
+ class TestDbDir< Test::Unit::TestCase
14
+ include CodeStock
15
+ include FileTestUtils
16
+
17
+ def test_db_default_dir
18
+ assert_equal File.expand_path('~/.codestock'), db_default_dir
19
+
20
+ ENV['CODESTOCK_DEFAULT_DIR'] = "~/DummyDir"
21
+ assert_equal File.expand_path("~/DummyDir"), db_default_dir
22
+
23
+ ENV['CODESTOCK_DEFAULT_DIR'] = nil
24
+ ENV['CODESTOCK_DEFAULT_DIRR'] = "~/DummyDir"
25
+ assert_equal File.expand_path('~/.codestock'), db_default_dir
26
+ end
27
+
28
+ def test_is_dbdir
29
+ assert_equal false, dbdir?
30
+
31
+ FileUtils.touch "grendb.yaml"
32
+ assert_equal true, dbdir?
33
+
34
+ FileUtils.mkdir_p 'damadame'
35
+ FileUtils.touch "damadame/grendb.yaml"
36
+ assert_equal true, dbdir?('damadame')
37
+ assert_equal false, dbdir?('damadameyo')
38
+ end
39
+
40
+ def test_db_groonga_path
41
+ assert_equal 'db/grendb.db', db_groonga_path
42
+ assert_equal '../db/grendb.db', db_groonga_path('..')
43
+ assert_equal '/Users/MrRuby/db/grendb.db', db_groonga_path('/Users/MrRuby')
44
+ end
45
+
46
+ def test_db_expand_groonga_path
47
+ assert_equal File.expand_path('./db/grendb.db'), db_expand_groonga_path
48
+ end
49
+
50
+ def test_db_yaml_path
51
+ assert_equal 'grendb.yaml', db_yaml_path
52
+ assert_equal '../grendb.yaml', db_yaml_path('..')
53
+ assert_equal '/Users/MrRuby/grendb.yaml', db_yaml_path('/Users/MrRuby')
54
+ end
55
+ end
56
+
57
+
58
+
59
+
data/test/test_gren.rb ADDED
@@ -0,0 +1,10 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestGren < Test::Unit::TestCase
4
+ def setup
5
+ end
6
+
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,34 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+ require File.join(File.dirname(__FILE__), '../lib/common/util')
3
+ require File.join(File.dirname(__FILE__), '../lib/common/grensnip')
4
+
5
+ class TestGrenSnip < Test::Unit::TestCase
6
+ def setup
7
+ end
8
+
9
+ def test_snip
10
+ str = "abcdefghijkmlnopqrstuvwxyz"
11
+ assert_equal(str, GrenSnip::snip(str, nil))
12
+
13
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|12345678901234567890123456789012345678901234567890123456"
14
+ assert_equal(str, GrenSnip::snip(str, nil))
15
+
16
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
17
+ match_datas = []
18
+ match_datas << str.match(/123456789\|/)
19
+ assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>67890123456789012345678901234561", GrenSnip::snip(str, match_datas))
20
+
21
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
22
+ match_datas = []
23
+ match_datas << str.match(/123456789\|/)
24
+ match_datas << str.match(/34567/)
25
+ assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>67890123456789012345678901234561", GrenSnip::snip(str, match_datas))
26
+
27
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
28
+ match_datas = []
29
+ match_datas << str.match(/123456789\|/)
30
+ match_datas << str.match(/01234561/)
31
+ assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>8901234567890123456789012345678901234561", GrenSnip::snip(str, match_datas))
32
+
33
+ end
34
+ end
@@ -0,0 +1,109 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/02/20
7
+
8
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
9
+ require File.join(File.dirname(__FILE__), "../lib/mkgrendb/grendbyaml.rb")
10
+ require 'fileutils'
11
+
12
+ class TestGrendbYAML < Test::Unit::TestCase
13
+ include Mkgrendb
14
+
15
+ def setup
16
+ @prev_dir = Dir.pwd
17
+ @tmp_dir = Pathname(File.dirname(__FILE__)) + "tmp"
18
+ FileUtils.rm_rf(@tmp_dir.to_s)
19
+ FileUtils.mkdir_p(@tmp_dir.to_s)
20
+ FileUtils.cd(@tmp_dir.to_s)
21
+ end
22
+
23
+ def test_000
24
+ # create
25
+ yaml = GrendbYAML.create
26
+ assert_equal yaml.contents, []
27
+ assert_equal yaml.version, 0.1
28
+ assert_raise(GrendbYAML::YAMLAlreadyExist) { GrendbYAML.create }
29
+
30
+ # load
31
+ yaml = GrendbYAML.load
32
+ assert_equal yaml.contents, []
33
+ assert_equal yaml.version, 0.1
34
+
35
+ # load fail
36
+ FileUtils.mkdir 'loadtest'
37
+ FileUtils.cd 'loadtest' do
38
+ assert_raise(GrendbYAML::YAMLNotExist) { GrendbYAML.load }
39
+ end
40
+
41
+ # add
42
+ yaml.add('dir1')
43
+ yaml.add('dir2', 'dir3')
44
+ assert_equal ['dir1', 'dir2', 'dir3'], yaml.directorys
45
+
46
+ # remove
47
+ yaml.add('dir2', 'dir4', 'dir5')
48
+ yaml.remove('dir5')
49
+ yaml.remove('dir2', 'dir3')
50
+ assert_equal ['dir1', 'dir4'], yaml.directorys
51
+
52
+ # save
53
+ yaml.save
54
+ assert_equal <<EOF, open('grendb.yaml').read
55
+ ---
56
+ version: 0.1
57
+ contents:
58
+ - directory: dir1
59
+ - directory: dir4
60
+ EOF
61
+ end
62
+
63
+ def test_001
64
+ FileUtils.mkdir 'otherpath'
65
+
66
+ # create
67
+ yaml = GrendbYAML.create('otherpath')
68
+ assert_equal yaml.contents, []
69
+ assert_equal yaml.version, 0.1
70
+ assert_raise(GrendbYAML::YAMLAlreadyExist) { GrendbYAML.create('otherpath') }
71
+
72
+ # load
73
+ yaml = GrendbYAML.load 'otherpath'
74
+ assert_equal yaml.contents, []
75
+ assert_equal yaml.version, 0.1
76
+
77
+ # load fail
78
+ FileUtils.mkdir 'loadtest'
79
+ FileUtils.cd 'loadtest' do
80
+ assert_raise(GrendbYAML::YAMLNotExist) { GrendbYAML.load }
81
+ end
82
+
83
+ # add
84
+ yaml.add('dir1')
85
+ yaml.add('dir2', 'dir3')
86
+ assert_equal ['dir1', 'dir2', 'dir3'], yaml.directorys
87
+
88
+ # remove
89
+ yaml.add('dir2', 'dir4', 'dir5')
90
+ yaml.remove('dir5')
91
+ yaml.remove('dir2', 'dir3')
92
+ assert_equal ['dir1', 'dir4'], yaml.directorys
93
+
94
+ # save
95
+ yaml.save
96
+ assert_equal <<EOF, open('otherpath/grendb.yaml').read
97
+ ---
98
+ version: 0.1
99
+ contents:
100
+ - directory: dir1
101
+ - directory: dir4
102
+ EOF
103
+ end
104
+
105
+ def teardown
106
+ FileUtils.cd(@prev_dir)
107
+ FileUtils.rm_rf(@tmp_dir.to_s)
108
+ end
109
+ end
@@ -0,0 +1,10 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper.rb')
2
+ require File.join(File.dirname(__FILE__), '../lib/grenweb/cli.rb')
3
+ require File.join(File.dirname(__FILE__), '../lib/grenweb/searcher.rb')
4
+ require File.join(File.dirname(__FILE__), '../lib/grenweb/viewer.rb')
5
+
6
+ class TestGrenwebCli < Test::Unit::TestCase
7
+ def test_print_default_output
8
+ # assert_match(/To update this executable/, @stdout)
9
+ end
10
+ end
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/02/20
7
+
8
+ require 'rubygems'
9
+ require 'groonga'
10
+ require File.join(File.dirname(__FILE__), "test_helper")
11
+ require File.join(File.dirname(__FILE__), "file_test_utils")
12
+ require File.join(File.dirname(__FILE__), "../lib/grenweb/database")
13
+ require File.join(File.dirname(__FILE__), "../lib/common/dbdir")
14
+ require File.join(File.dirname(__FILE__), "../lib/mkgrendb/mkgrendb")
15
+ require 'stringio'
16
+
17
+ class TestMkgrendb < Test::Unit::TestCase
18
+ include Grenweb
19
+ include FileTestUtils
20
+ include CodeStock
21
+
22
+ def test_setup_and_open
23
+ io = StringIO.new
24
+ obj = ::Mkgrendb::Mkgrendb.new(io)
25
+ obj.init
26
+
27
+ Database.setup('.')
28
+ Database.instance
29
+ end
30
+
31
+ def teardown
32
+ teardown_custom(true)
33
+ # teardown_custom(false)
34
+ end
35
+ end
36
+
37
+
@@ -0,0 +1,41 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
3
+ require File.join(File.dirname(__FILE__), "../lib/grenweb/html_renderer.rb")
4
+
5
+ class TestGrenwebHTMLRendeler < Test::Unit::TestCase
6
+ include Grenweb
7
+
8
+ def setup
9
+ @rendeler = HTMLRendeler.new('/')
10
+ end
11
+
12
+ def test_pagination_line
13
+ assert_equal("<span class='pagination-link'><a href='?page=1'>test</a></span>\n", @rendeler.pagination_link(1, "test"))
14
+ end
15
+
16
+ def test_search_summary
17
+ assert_equal(@rendeler.search_summary(10, 500, 10..20, 0.00893),
18
+ <<-EOS)
19
+ <div class='search-summary'>
20
+ <span class="keyword">10</span>の検索結果:
21
+ <span class="total-entries">500</span>件中
22
+ <span class="display-range">10 - 20</span>件(0.00893秒)
23
+ </div>
24
+ EOS
25
+ end
26
+
27
+ def test_match_strong
28
+ assert_equal(@rendeler.match_strong("This is line.", [nil, nil]), "This is line.")
29
+ end
30
+
31
+ def test_search_box
32
+ assert_equal(@rendeler.search_box('test must'), <<-EOF)
33
+ <form method="post" action="/::search">
34
+ <p>
35
+ <input name="query" type="text" size="60" value="test must" />
36
+ <input type="submit" value="検索" />
37
+ </p>
38
+ </form>
39
+ EOF
40
+ end
41
+ end