-
Notifications
You must be signed in to change notification settings - Fork 16
/
dystopia_core_spec.rb
124 lines (102 loc) · 3.06 KB
/
dystopia_core_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#
# Specifying rufus-tokyo
#
require File.dirname(__FILE__) + '/spec_base'
require 'rufus/tokyo/dystopia'
FileUtils.mkdir('tmp') rescue nil
describe Rufus::Tokyo::Dystopia::Core do
after do
FileUtils.rm_rf( 'tmp/dystopia' )
end
it 'should use open with a block will auto close the db correctly' do
res = Rufus::Tokyo::Dystopia::Core.open('tmp/dystopia') do |index|
index.store( 1, "John Adams" )
index.store( 3, "George Washington" )
index.count.should.equal( 2 )
:result
end
res.should.equal(:result)
index = Rufus::Tokyo::Dystopia::Core.new('tmp/dystopia')
r = index.search( "John" )
r.size.should.equal( 1 )
r.should.equal( [ 1 ] )
index.close
end
it 'should use open without a block just like calling new correctly' do
index = Rufus::Tokyo::Dystopia::Core.open('tmp/dystopia')
index.store( 1, "John Adams" )
index.store( 3, "George Washington" )
index.count.should.equal( 2 )
index.close
index = Rufus::Tokyo::Dystopia::Core.new('tmp/dystopia')
r = index.search( "John" )
r.size.should.equal( 1 )
r.should.equal( [ 1 ] )
index.close
end
end
describe 'Rufus::Tokyo::Dystopia::Core' do
before do
@db = Rufus::Tokyo::Dystopia::Core.new( 'tmp/dystopia' )
@db.clear
end
after do
@db.close
FileUtils.rm_rf( 'tmp/dystopia' )
end
it 'creates a new directory when started' do
File.directory?( 'tmp/dystopia' ).should.equal( true )
end
it 'knows its own full path' do
p = @db.path
File.directory?( p ).should.equal( true )
p.should.equal( File.expand_path( "tmp/dystopia" ) )
end
it "knows its record count" do
@db.count.should.equal( 0 )
@db.store( 1, "John Adams" )
@db.count.should.equal( 1 )
end
it "knows how much drive space it takes up in bytes" do
b = @db.fsize
@db.store( 1, "John Adams" )
@db.store( 3, "George Washington" )
@db.fsize.should > b
end
it "can add records" do
@db.count.should.equal(0)
@db.store( 1, "John Adams" )
@db.store( 3, "George Washington" )
@db.count.should.equal( 2 )
end
it "can remove records" do
@db.count.should.equal(0)
@db.store( 1, "John Adams" )
@db.store( 3, "George Washington" )
@db.count.should.equal( 2 )
@db.delete( 3 )
@db.count.should.equal( 1 )
end
it "retrieves the whole record of items it has stored" do
@db.store( 1, "John Adams" )
@db.store( 3, "George Washington" )
@db.fetch( 3 ).should.equal( "George Washington" )
@db.fetch( 1 ).should.equal( "John Adams" )
end
it "returns nil when the fetched document does not exist" do
@db.store( 1, "John Adams" )
@db.count.should.equal( 1 )
@db.fetch( 3 ).should.be.nil
end
it "searches for text in the database" do
[ 'John Adams', 'George Washington', 'Thomas Jefferson' ].each_with_index do |e, idx|
@db.store( idx + 1, e )
end
r = @db.search( "on" )
r.size.should.equal( 2 )
r.sort.should.equal( [ 2, 3 ] )
r = @db.search( "John" )
r.size.should.equal( 1 )
r.should.equal( [ 1 ] )
end
end