rroonga 1.0.8 → 1.0.9
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/NEWS.ja.rdoc +47 -0
- data/NEWS.rdoc +48 -0
- data/README.ja.rdoc +1 -0
- data/README.rdoc +1 -0
- data/Rakefile +32 -13
- data/benchmark/create-wikipedia-database.rb +212 -0
- data/benchmark/repeat-load.rb +213 -0
- data/benchmark/select.rb +1052 -0
- data/ext/groonga/mkmf.log +99 -0
- data/ext/groonga/rb-grn-column.c +57 -6
- data/ext/groonga/rb-grn-context.c +15 -9
- data/ext/groonga/rb-grn-expression.c +7 -7
- data/ext/groonga/{rb-grn-operation.c → rb-grn-operator.c} +89 -87
- data/ext/groonga/rb-grn-patricia-trie.c +5 -5
- data/ext/groonga/rb-grn-query.c +4 -4
- data/ext/groonga/rb-grn-table.c +16 -19
- data/ext/groonga/rb-grn.h +3 -3
- data/ext/groonga/rb-groonga.c +1 -1
- data/html/index.html +4 -4
- data/lib/groonga/context.rb +34 -0
- data/lib/groonga/expression-builder.rb +34 -2
- data/lib/groonga/record.rb +8 -6
- data/lib/groonga/schema.rb +40 -4
- data/rroonga-build.rb +2 -2
- data/test-unit/Rakefile +5 -18
- data/test-unit/html/classic.html +15 -0
- data/test-unit/html/index.html +13 -235
- data/test-unit/html/index.html.ja +15 -258
- data/test-unit/lib/test/unit.rb +1 -6
- data/test-unit/lib/test/unit/assertions.rb +11 -115
- data/test-unit/lib/test/unit/autorunner.rb +2 -5
- data/test-unit/lib/test/unit/collector/load.rb +1 -1
- data/test-unit/lib/test/unit/color-scheme.rb +2 -6
- data/test-unit/lib/test/unit/diff.rb +1 -17
- data/test-unit/lib/test/unit/testcase.rb +0 -7
- data/test-unit/lib/test/unit/testresult.rb +2 -34
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +45 -9
- data/test-unit/lib/test/unit/ui/tap/testrunner.rb +12 -2
- data/test-unit/lib/test/unit/ui/testrunner.rb +0 -25
- data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -1
- data/test-unit/lib/test/unit/version.rb +1 -1
- data/test-unit/test/test-color-scheme.rb +2 -4
- data/test-unit/test/test_assertions.rb +5 -51
- data/test/test-column.rb +31 -1
- data/test/test-context-select.rb +45 -14
- data/test/test-context.rb +36 -0
- data/test/test-database.rb +13 -0
- data/test/test-expression-builder.rb +32 -5
- data/test/test-record.rb +34 -1
- data/test/test-schema.rb +52 -2
- data/test/test-table-select-weight.rb +20 -1
- data/test/test-table.rb +58 -0
- metadata +13 -41
- data/test-unit-notify/Rakefile +0 -47
- data/test-unit-notify/lib/test/unit/notify.rb +0 -104
- data/test-unit/COPYING +0 -56
- data/test-unit/GPL +0 -340
- data/test-unit/PSFL +0 -271
- data/test-unit/html/bar.svg +0 -153
- data/test-unit/html/developer.svg +0 -469
- data/test-unit/html/favicon.ico +0 -0
- data/test-unit/html/favicon.svg +0 -82
- data/test-unit/html/heading-mark.svg +0 -393
- data/test-unit/html/install.svg +0 -636
- data/test-unit/html/logo.svg +0 -483
- data/test-unit/html/test-unit.css +0 -339
- data/test-unit/html/tutorial.svg +0 -559
- data/test-unit/lib/test/unit/util/output.rb +0 -31
- data/test-unit/test/ui/test_tap.rb +0 -33
- data/test-unit/test/util/test-output.rb +0 -11
@@ -1,7 +1,7 @@
|
|
1
1
|
#--
|
2
2
|
#
|
3
3
|
# Author:: Kouhei Sutou.
|
4
|
-
# Copyright:: Copyright (c) 2009
|
4
|
+
# Copyright:: Copyright (c) 2009 Kouhei Sutou <kou@clear-code.com>.
|
5
5
|
# License:: Ruby license.
|
6
6
|
|
7
7
|
require 'test/unit/ui/testrunner'
|
@@ -24,7 +24,8 @@ module Test
|
|
24
24
|
|
25
25
|
# Begins the test run.
|
26
26
|
def start
|
27
|
-
|
27
|
+
setup_mediator
|
28
|
+
result = start_mediator
|
28
29
|
def result.passed?
|
29
30
|
true # for prove commend :<
|
30
31
|
end
|
@@ -32,6 +33,11 @@ module Test
|
|
32
33
|
end
|
33
34
|
|
34
35
|
private
|
36
|
+
def setup_mediator
|
37
|
+
@mediator = TestRunnerMediator.new(@suite)
|
38
|
+
attach_to_mediator
|
39
|
+
end
|
40
|
+
|
35
41
|
def attach_to_mediator
|
36
42
|
@mediator.add_listener(TestResult::FAULT, &method(:add_fault))
|
37
43
|
@mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
|
@@ -40,6 +46,10 @@ module Test
|
|
40
46
|
@mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
|
41
47
|
end
|
42
48
|
|
49
|
+
def start_mediator
|
50
|
+
@mediator.run_suite
|
51
|
+
end
|
52
|
+
|
43
53
|
def add_fault(fault)
|
44
54
|
puts("not ok #{@n_tests} - #{fault.short_display}")
|
45
55
|
fault.long_display.each_line do |line|
|
@@ -6,7 +6,6 @@ module Test
|
|
6
6
|
class TestRunner
|
7
7
|
extend TestRunnerUtilities
|
8
8
|
|
9
|
-
attr_reader :listeners
|
10
9
|
def initialize(suite, options={})
|
11
10
|
if suite.respond_to?(:suite)
|
12
11
|
@suite = suite.suite
|
@@ -14,30 +13,6 @@ module Test
|
|
14
13
|
@suite = suite
|
15
14
|
end
|
16
15
|
@options = options
|
17
|
-
@listeners = @options[:listeners] || []
|
18
|
-
end
|
19
|
-
|
20
|
-
# Begins the test run.
|
21
|
-
def start
|
22
|
-
setup_mediator
|
23
|
-
attach_to_mediator
|
24
|
-
attach_listeners
|
25
|
-
start_mediator
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
def setup_mediator
|
30
|
-
@mediator = TestRunnerMediator.new(@suite)
|
31
|
-
end
|
32
|
-
|
33
|
-
def attach_listeners
|
34
|
-
@listeners.each do |listener|
|
35
|
-
listener.attach_to_mediator(@mediator)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def start_mediator
|
40
|
-
@mediator.run_suite
|
41
16
|
end
|
42
17
|
|
43
18
|
def diff_target_string?(string)
|
@@ -1,10 +1,8 @@
|
|
1
1
|
class TestUnitColorScheme < Test::Unit::TestCase
|
2
2
|
def test_default
|
3
3
|
assert_equal({
|
4
|
-
"
|
5
|
-
|
6
|
-
"failure" => color("red", :foreground => false) +
|
7
|
-
color("white", :bold => true),
|
4
|
+
"success" => color("green", :bold => true),
|
5
|
+
"failure" => color("red", :bold => true),
|
8
6
|
"pending" => color("magenta", :bold => true),
|
9
7
|
"omission" => color("blue", :bold => true),
|
10
8
|
"notification" => color("cyan", :bold => true),
|
@@ -1,8 +1,6 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#
|
3
1
|
# Author:: Nathaniel Talbott.
|
4
2
|
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
5
|
-
# Copyright (c) 2009
|
3
|
+
# Copyright (c) 2009 Kouhei Sutou.
|
6
4
|
# License:: Ruby license.
|
7
5
|
|
8
6
|
require 'test/unit'
|
@@ -313,21 +311,6 @@ EOM
|
|
313
311
|
end
|
314
312
|
end
|
315
313
|
|
316
|
-
def test_assert_equal_with_different_encoding
|
317
|
-
utf8_string = "こんにちは"
|
318
|
-
unless utf8_string.respond_to?(:force_encoding)
|
319
|
-
omit("encoding test is for Ruby >= 1.9")
|
320
|
-
end
|
321
|
-
ascii_8bit_string = utf8_string.dup.force_encoding("ascii-8bit")
|
322
|
-
message = <<-EOM.chomp
|
323
|
-
<"こんにちは">("UTF-8") expected but was
|
324
|
-
<#{ascii_8bit_string.inspect}>("ASCII-8BIT").
|
325
|
-
EOM
|
326
|
-
check_fails(message) do
|
327
|
-
assert_equal(utf8_string, ascii_8bit_string)
|
328
|
-
end
|
329
|
-
end
|
330
|
-
|
331
314
|
def test_assert_raise_success
|
332
315
|
return_value = nil
|
333
316
|
check_nothing_fails(true) do
|
@@ -828,19 +811,13 @@ EOM
|
|
828
811
|
end
|
829
812
|
assert_in_delta(0.1, float_thing, 0.1)
|
830
813
|
}
|
831
|
-
check_fails("message.\n"
|
832
|
-
"<0.5> expected but was\n" +
|
833
|
-
"<0.4> (tolerance <0.05>).\n" +
|
834
|
-
"\n" +
|
835
|
-
"Relation:\n" +
|
836
|
-
"<<0.4> < <0.5>-<0.05>(0.45) <= <0.5>+<0.05>(0.55)>") {
|
814
|
+
check_fails("message.\n<0.5> and\n<0.4> expected to be within\n<0.05> of each other.") {
|
837
815
|
assert_in_delta(0.5, 0.4, 0.05, "message")
|
838
816
|
}
|
839
817
|
object = Object.new
|
840
|
-
inspected_object = AssertionMessage.convert(object)
|
841
818
|
check_fails("The arguments must respond to to_f; " +
|
842
819
|
"the first float did not.\n" +
|
843
|
-
"<#{
|
820
|
+
"<#{object.inspect}>.respond_to?(:to_f) expected\n" +
|
844
821
|
"(Class: <Object>)") {
|
845
822
|
assert_in_delta(object, 0.4, 0.1)
|
846
823
|
}
|
@@ -1144,40 +1121,17 @@ EOM
|
|
1144
1121
|
assert_alias_method(object, :other, :original_method)
|
1145
1122
|
end
|
1146
1123
|
|
1147
|
-
|
1148
|
-
check_fails("<#{inspected_object}>.nonexistent doesn't exist\n" +
|
1124
|
+
check_fails("<#{object.inspect}>.nonexistent doesn't exist\n" +
|
1149
1125
|
"(Class: <Object>)") do
|
1150
1126
|
assert_alias_method(object, :nonexistent, :original_method)
|
1151
1127
|
end
|
1152
1128
|
|
1153
|
-
check_fails("<#{
|
1129
|
+
check_fails("<#{object.inspect}>.nonexistent doesn't exist\n" +
|
1154
1130
|
"(Class: <Object>)") do
|
1155
1131
|
assert_alias_method(object, :alias_method, :nonexistent)
|
1156
1132
|
end
|
1157
1133
|
end
|
1158
1134
|
|
1159
|
-
def test_assert_path_exist
|
1160
|
-
check_nothing_fails do
|
1161
|
-
assert_path_exist(__FILE__)
|
1162
|
-
end
|
1163
|
-
|
1164
|
-
nonexistent_file = __FILE__ + ".nonexistent"
|
1165
|
-
check_fails("<#{nonexistent_file.inspect}> expected to exist") do
|
1166
|
-
assert_path_exist(nonexistent_file)
|
1167
|
-
end
|
1168
|
-
end
|
1169
|
-
|
1170
|
-
def test_assert_path_not_exist
|
1171
|
-
nonexistent_file = __FILE__ + ".nonexistent"
|
1172
|
-
check_nothing_fails do
|
1173
|
-
assert_path_not_exist(nonexistent_file)
|
1174
|
-
end
|
1175
|
-
|
1176
|
-
check_fails("<#{__FILE__.inspect}> expected to not exist") do
|
1177
|
-
assert_path_not_exist(__FILE__)
|
1178
|
-
end
|
1179
|
-
end
|
1180
|
-
|
1181
1135
|
private
|
1182
1136
|
def add_failure(message, location=caller, options=nil)
|
1183
1137
|
unless @catch_assertions
|
data/test/test-column.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2011 Kouhei Sutou <kou@clear-code.com>
|
2
2
|
#
|
3
3
|
# This library is free software; you can redistribute it and/or
|
4
4
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -286,6 +286,36 @@ class ColumnTest < Test::Unit::TestCase
|
|
286
286
|
assert_false(post["hidden"])
|
287
287
|
end
|
288
288
|
|
289
|
+
def test_indexes
|
290
|
+
Groonga::Schema.define do |schema|
|
291
|
+
schema.create_table("Comments") do |table|
|
292
|
+
table.short_text("title")
|
293
|
+
end
|
294
|
+
end
|
295
|
+
title = Groonga["Comments.title"]
|
296
|
+
assert_equal([], title.indexes)
|
297
|
+
|
298
|
+
Groonga::Schema.define do |schema|
|
299
|
+
schema.create_table("Terms",
|
300
|
+
:type => :patricia_trie,
|
301
|
+
:default_tokenizer => "TokenBigram") do |table|
|
302
|
+
table.index("Comments.title")
|
303
|
+
end
|
304
|
+
end
|
305
|
+
assert_equal([Groonga["Terms.Comments_title"]],
|
306
|
+
title.indexes)
|
307
|
+
|
308
|
+
Groonga::Schema.define do |schema|
|
309
|
+
schema.create_table("Titles",
|
310
|
+
:type => :hash) do |table|
|
311
|
+
table.index("Comments.title")
|
312
|
+
end
|
313
|
+
end
|
314
|
+
assert_equal([Groonga["Titles.Comments_title"],
|
315
|
+
Groonga["Terms.Comments_title"]],
|
316
|
+
title.indexes)
|
317
|
+
end
|
318
|
+
|
289
319
|
private
|
290
320
|
def assert_content_search(expected_records, term)
|
291
321
|
records = @bookmarks_index_content.search(term).records
|
data/test/test-context-select.rb
CHANGED
@@ -19,35 +19,58 @@ class ContextSelectTest < Test::Unit::TestCase
|
|
19
19
|
setup :setup_database
|
20
20
|
setup
|
21
21
|
def setup_data
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
Groonga::Schema.define do |schema|
|
23
|
+
schema.create_table("Books",
|
24
|
+
:type => :hash, :key_type => "ShortText") do |table|
|
25
|
+
table.time("published")
|
26
|
+
end
|
27
|
+
|
28
|
+
schema.create_table("Users",
|
29
|
+
:type => :hash, :key_type => "ShortText") do |table|
|
30
|
+
table.reference("book", "Books")
|
31
|
+
end
|
32
|
+
|
33
|
+
schema.create_table("Bigram",
|
34
|
+
:type => :patricia_trie,
|
35
|
+
:key_type => "ShortText",
|
36
|
+
:default_tokenizer => "TokenBigramSplitSymbolAlpha") do |table|
|
37
|
+
table.index("Books._key")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
@books = Groonga["Books"]
|
42
|
+
@users = Groonga["Users"]
|
26
43
|
|
27
44
|
@books.add("the groonga book", :published => Time.parse("2010/04/01"))
|
45
|
+
@books.add("the groonga book (2)", :published => Time.parse("2011/04/01"))
|
46
|
+
|
28
47
|
@users.add("morita", :book => "the groonga book")
|
29
48
|
@users.add("gunyara-kun", :book => "the groonga book")
|
30
49
|
@users.add("yu")
|
50
|
+
@users.add("ryoqun", :book => "the groonga book (2)")
|
31
51
|
end
|
32
52
|
|
33
53
|
def test_no_option
|
34
54
|
result = context.select(@users)
|
35
|
-
assert_equal([
|
55
|
+
assert_equal([4,
|
36
56
|
[{"_id" => 1, "_key" => "morita",
|
37
57
|
"book" => "the groonga book"},
|
38
58
|
{"_id" => 2, "_key" => "gunyara-kun",
|
39
59
|
"book" => "the groonga book"},
|
40
60
|
{"_id" => 3, "_key" => "yu",
|
41
|
-
"book" => ""}
|
61
|
+
"book" => ""},
|
62
|
+
{"_id" => 4, "_key" => "ryoqun",
|
63
|
+
"book" => "the groonga book (2)"}]],
|
42
64
|
[result.n_hits, result.records])
|
43
65
|
end
|
44
66
|
|
45
67
|
def test_output_columns
|
46
68
|
result = context.select(@users, :output_columns => ["_key"])
|
47
|
-
assert_equal([
|
69
|
+
assert_equal([4,
|
48
70
|
[{"_key" => "morita"},
|
49
71
|
{"_key" => "gunyara-kun"},
|
50
|
-
{"_key" => "yu"}
|
72
|
+
{"_key" => "yu"},
|
73
|
+
{"_key" => "ryoqun"}]],
|
51
74
|
[result.n_hits, result.records])
|
52
75
|
end
|
53
76
|
|
@@ -58,15 +81,18 @@ class ContextSelectTest < Test::Unit::TestCase
|
|
58
81
|
:drill_down_output_columns => "_key",
|
59
82
|
:drill_down_limit => 10)
|
60
83
|
drill_down = normalize_drill_down(result.drill_down)
|
61
|
-
assert_equal([
|
84
|
+
assert_equal([4,
|
62
85
|
[{"_key" => "morita"},
|
63
86
|
{"_key" => "gunyara-kun"},
|
64
|
-
{"_key" => "yu"}
|
87
|
+
{"_key" => "yu"},
|
88
|
+
{"_key" => "ryoqun"}],
|
65
89
|
{
|
66
|
-
"_key" => [
|
90
|
+
"_key" => [4, [{"_key" => "morita"},
|
67
91
|
{"_key" => "gunyara-kun"},
|
68
|
-
{"_key" => "yu"}
|
69
|
-
|
92
|
+
{"_key" => "yu"},
|
93
|
+
{"_key" => "ryoqun"}]],
|
94
|
+
"book" => [2, [{"_key" => "the groonga book"},
|
95
|
+
{"_key" => "the groonga book (2)"}]],
|
70
96
|
},
|
71
97
|
],
|
72
98
|
[result.n_hits, result.records, drill_down])
|
@@ -95,11 +121,16 @@ class ContextSelectTest < Test::Unit::TestCase
|
|
95
121
|
"_id" => 1,
|
96
122
|
"_key" => "the groonga book",
|
97
123
|
"published" => Time.parse("2010/04/01"),
|
124
|
+
},
|
125
|
+
{
|
126
|
+
"_id" => 2,
|
127
|
+
"_key" => "the groonga book (2)",
|
128
|
+
"published" => Time.parse("2011/04/01"),
|
98
129
|
}],
|
99
130
|
result.records)
|
100
131
|
end
|
101
132
|
|
102
|
-
def
|
133
|
+
def test_invalid
|
103
134
|
assert_raise(Groonga::SyntaxError) do
|
104
135
|
context.select(@books, :query => "<")
|
105
136
|
end
|
data/test/test-context.rb
CHANGED
@@ -29,6 +29,42 @@ class ContextTest < Test::Unit::TestCase
|
|
29
29
|
assert_equal(Groonga::Encoding::UTF8, context.encoding)
|
30
30
|
end
|
31
31
|
|
32
|
+
def test_create_database
|
33
|
+
db_path = @tmp_dir + "db"
|
34
|
+
assert_not_predicate(db_path, :exist?)
|
35
|
+
context = Groonga::Context.new
|
36
|
+
assert_equal(nil, context.database)
|
37
|
+
database = context.create_database(db_path.to_s)
|
38
|
+
assert_predicate(db_path, :exist?)
|
39
|
+
assert_not_predicate(database, :closed?)
|
40
|
+
assert_equal(database, context.database)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_create_temporary_database
|
44
|
+
before_files = @tmp_dir.children
|
45
|
+
context = Groonga::Context.new
|
46
|
+
database = context.create_database
|
47
|
+
assert_nil(database.name)
|
48
|
+
assert_equal(before_files, @tmp_dir.children)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_open_database
|
52
|
+
db_path = @tmp_dir + "db"
|
53
|
+
database = Groonga::Database.create(:path => db_path.to_s)
|
54
|
+
database.close
|
55
|
+
|
56
|
+
assert_predicate(database, :closed?)
|
57
|
+
called = false
|
58
|
+
context = Groonga::Context.new
|
59
|
+
context.open_database(db_path.to_s) do |_database|
|
60
|
+
database = _database
|
61
|
+
assert_not_predicate(database, :closed?)
|
62
|
+
called = true
|
63
|
+
end
|
64
|
+
assert_true(called)
|
65
|
+
assert_predicate(database, :closed?)
|
66
|
+
end
|
67
|
+
|
32
68
|
def test_encoding
|
33
69
|
context = Groonga::Context.new
|
34
70
|
assert_equal(Groonga::Encoding.default, context.encoding)
|
data/test/test-database.rb
CHANGED
@@ -38,7 +38,9 @@ class DatabaseTest < Test::Unit::TestCase
|
|
38
38
|
def test_open
|
39
39
|
db_path = @tmp_dir + "db"
|
40
40
|
database = Groonga::Database.create(:path => db_path.to_s)
|
41
|
+
database.close
|
41
42
|
|
43
|
+
assert_predicate(database, :closed?)
|
42
44
|
called = false
|
43
45
|
Groonga::Database.open(db_path.to_s) do |_database|
|
44
46
|
database = _database
|
@@ -49,6 +51,17 @@ class DatabaseTest < Test::Unit::TestCase
|
|
49
51
|
assert_predicate(database, :closed?)
|
50
52
|
end
|
51
53
|
|
54
|
+
def test_close
|
55
|
+
db_path = @tmp_dir + "db"
|
56
|
+
database = Groonga::Database.create(:path => db_path.to_s)
|
57
|
+
database.close
|
58
|
+
|
59
|
+
database = Groonga::Database.open(db_path.to_s)
|
60
|
+
assert_not_predicate(database, :closed?)
|
61
|
+
database.close
|
62
|
+
assert_predicate(database, :closed?)
|
63
|
+
end
|
64
|
+
|
52
65
|
def test_new
|
53
66
|
db_path = @tmp_dir + "db"
|
54
67
|
assert_raise(Groonga::NoSuchFileOrDirectory) do
|
@@ -24,30 +24,41 @@ class ExpressionBuilderTest < Test::Unit::TestCase
|
|
24
24
|
@pets = Groonga::Hash.create(:name => "Pets", :key_type => "ShortText")
|
25
25
|
@pets.define_column("name", "ShortText")
|
26
26
|
|
27
|
+
@sections = Groonga::PatriciaTrie.create(:name => "Sections",
|
28
|
+
:key_type => "ShortText")
|
29
|
+
|
27
30
|
@users = Groonga::Hash.create(:name => "Users", :key_type => "ShortText")
|
28
31
|
@name = @users.define_column("name", "ShortText")
|
29
32
|
@hp = @users.define_column("hp", "UInt32")
|
30
|
-
@users.define_column("pet", @pets)
|
33
|
+
@user_pet = @users.define_column("pet", @pets)
|
34
|
+
@user_section = @users.define_column("section", @sections)
|
31
35
|
|
32
36
|
@terms = Groonga::PatriciaTrie.create(:name => "Terms",
|
33
|
-
:default_tokenizer => "TokenBigram"
|
37
|
+
:default_tokenizer => "TokenBigram",
|
38
|
+
:key_type => "ShortText")
|
34
39
|
@terms.define_index_column("user_name", @users, :source => @name)
|
35
40
|
|
36
41
|
@bookmarks = Groonga::Array.create(:name => "Bookmarks")
|
37
42
|
@bookmarks.define_column("user", @users)
|
38
43
|
@bookmarks.define_column("uri", "ShortText")
|
44
|
+
|
45
|
+
@sections.define_index_column("user_section", @users,
|
46
|
+
:source => @user_section)
|
39
47
|
end
|
40
48
|
|
41
49
|
def setup_data
|
42
50
|
@morita = @users.add("morita",
|
43
51
|
:name => "mori daijiro",
|
44
|
-
:hp => 100
|
52
|
+
:hp => 100,
|
53
|
+
:section => "search/core")
|
45
54
|
@gunyara_kun = @users.add("gunyara-kun",
|
46
55
|
:name => "Tasuku SUENAGA",
|
47
|
-
:hp => 150
|
56
|
+
:hp => 150,
|
57
|
+
:section => "suggest/all")
|
48
58
|
@yu = @users.add("yu",
|
49
59
|
:name => "Yutaro Shimamura",
|
50
|
-
:hp => 200
|
60
|
+
:hp => 200,
|
61
|
+
:section => "search/all")
|
51
62
|
|
52
63
|
@groonga = @bookmarks.add(:user => @morita, :uri => "http://groonga.org/")
|
53
64
|
@ruby = @bookmarks.add(:user => @morita, :uri => "http://ruby-lang.org/")
|
@@ -118,6 +129,22 @@ class ExpressionBuilderTest < Test::Unit::TestCase
|
|
118
129
|
result.collect {|record| record.key.key})
|
119
130
|
end
|
120
131
|
|
132
|
+
def test_prefix_saerch
|
133
|
+
result = @users.select do |record|
|
134
|
+
record.section.prefix_search("search")
|
135
|
+
end
|
136
|
+
assert_equal(["morita", "yu"].sort,
|
137
|
+
result.collect {|record| record.key.key}.sort)
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_suffix_search
|
141
|
+
result = @users.select do |record|
|
142
|
+
record.name.suffix_search("jiro")
|
143
|
+
end
|
144
|
+
assert_equal(["morita"].sort,
|
145
|
+
result.collect {|record| record.key.key}.sort)
|
146
|
+
end
|
147
|
+
|
121
148
|
def test_query_string
|
122
149
|
result = @users.select("name:@ro")
|
123
150
|
assert_equal(["morita", "yu"],
|