nitro 0.1.2 → 0.2.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.
- data/AUTHORS +3 -0
- data/ChangeLog +83 -0
- data/LICENCE +8 -8
- data/README +5 -1
- data/RELEASES +9 -0
- data/Rakefile +43 -23
- data/bin/cluster.rb +15 -12
- data/examples/ndb/README +5 -0
- data/examples/ndb/run.rb +271 -0
- data/examples/simple/README +27 -0
- data/examples/simple/app.rb +2 -2
- data/examples/simple/conf/config.rb +3 -8
- data/examples/simple/conf/debug-config.rb +6 -7
- data/examples/simple/conf/live-config.rb +2 -4
- data/examples/simple/conf/requires.rb +2 -10
- data/examples/simple/ctl +1 -1
- data/examples/simple/env.rb +2 -2
- data/examples/simple/root/article-form.ss +1 -1
- data/examples/simple/root/comments-form.ss +1 -1
- data/examples/tiny/README +15 -0
- data/examples/tiny/app.rb +2 -2
- data/examples/tiny/conf/config.rb +8 -13
- data/examples/tiny/conf/requires.rb +2 -8
- data/examples/tiny/ctl +2 -17
- data/examples/tiny/root/index.sx +1 -1
- data/lib/n/app/cluster.rb +15 -12
- data/lib/n/app/cookie.rb +10 -9
- data/lib/n/app/filters/autologin.rb +5 -4
- data/lib/n/app/fragment.rb +13 -10
- data/lib/n/app/handlers.rb +29 -22
- data/lib/n/app/handlers/code-handler.rb +2 -4
- data/lib/n/app/handlers/page-handler.rb +3 -5
- data/lib/n/app/request-part.rb +2 -7
- data/lib/n/app/request.rb +27 -22
- data/lib/n/app/script.rb +4 -15
- data/lib/n/app/server.rb +11 -7
- data/lib/n/app/session.rb +7 -11
- data/lib/n/app/user.rb +10 -11
- data/lib/n/app/webrick-servlet.rb +23 -10
- data/lib/n/app/webrick.rb +13 -10
- data/lib/n/application.rb +13 -6
- data/lib/n/config.rb +18 -7
- data/lib/n/db.rb +56 -40
- data/lib/n/db/connection.rb +18 -22
- data/lib/n/db/managed.rb +6 -8
- data/lib/n/db/mixins.rb +4 -7
- data/lib/n/db/mysql.rb +6 -3
- data/lib/n/db/psql.rb +15 -10
- data/lib/n/db/tools.rb +5 -9
- data/lib/n/db/utils.rb +11 -8
- data/lib/n/events.rb +14 -10
- data/lib/n/logger.rb +8 -2
- data/lib/n/macros.rb +5 -2
- data/lib/n/parts.rb +13 -10
- data/lib/n/properties.rb +17 -12
- data/lib/n/server.rb +3 -2
- data/lib/n/server/filter.rb +2 -4
- data/lib/n/shaders.rb +11 -13
- data/lib/n/sitemap.rb +23 -20
- data/lib/n/std.rb +15 -4
- data/lib/n/sync/clc.rb +4 -2
- data/lib/n/sync/handler.rb +20 -12
- data/lib/n/sync/server.rb +24 -18
- data/lib/n/ui/date-select.rb +2 -4
- data/lib/n/ui/pager.rb +10 -8
- data/lib/n/ui/popup.rb +5 -4
- data/lib/n/ui/select.rb +3 -4
- data/lib/n/ui/tabs.rb +3 -4
- data/lib/n/utils/array.rb +6 -14
- data/lib/n/utils/cache.rb +3 -7
- data/lib/n/utils/gfx.rb +5 -6
- data/lib/n/utils/hash.rb +7 -12
- data/lib/n/utils/html.rb +8 -4
- data/lib/n/utils/http.rb +10 -6
- data/lib/n/utils/mail.rb +6 -6
- data/lib/n/utils/number.rb +3 -4
- data/lib/n/utils/pool.rb +5 -8
- data/lib/n/utils/string.rb +12 -10
- data/lib/n/utils/template.rb +3 -5
- data/lib/n/utils/time.rb +7 -5
- data/lib/n/utils/uri.rb +5 -4
- data/lib/p/README +1 -0
- data/lib/xsl/xforms.xsl +2 -0
- data/test/n/app/tc_cookie.rb +34 -0
- data/test/n/app/tc_request.rb +70 -0
- data/test/n/app/tc_requestpart.rb +28 -0
- data/test/n/app/tc_session.rb +34 -0
- data/test/n/tc_db.rb +223 -0
- data/test/n/tc_db_mysql.rb +241 -0
- data/test/n/tc_events.rb +44 -0
- data/test/n/tc_properties.rb +68 -0
- data/test/n/tc_sitemap.rb +37 -0
- data/test/n/ui/tc_pager.rb +52 -0
- data/test/n/utils/tc_cache.rb +47 -0
- data/test/n/utils/tc_hash.rb +39 -0
- data/test/n/utils/tc_html.rb +79 -0
- data/test/n/utils/tc_http.rb +18 -0
- data/test/n/utils/tc_number.rb +21 -0
- data/test/n/utils/tc_strings.rb +149 -0
- data/test/n/utils/tc_uri.rb +100 -0
- metadata +49 -22
- data/doc/css.txt +0 -20
- data/doc/ideas.txt +0 -120
- data/doc/pg.txt +0 -47
- data/doc/svn.txt +0 -82
- data/doc/todo.txt +0 -30
- data/examples/simple/conf/overrides.rb +0 -9
- data/examples/simple/logs/access_log +0 -2
- data/examples/simple/logs/apache.log +0 -3
- data/examples/simple/logs/app.log +0 -1
- data/examples/simple/logs/events.log +0 -1
- data/examples/tiny/conf/apache.conf +0 -100
- data/examples/tiny/logs/access_log +0 -9
- data/examples/tiny/logs/apache.log +0 -9
- data/lib/n/db/make-release.sh +0 -26
- data/lib/n/tools/README +0 -11
- data/lib/xsl/ce.xsl +0 -30
- data/lib/xsl/localization.xsl +0 -23
- data/test/run.rb +0 -95
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
require "test/unit"
|
|
2
|
+
|
|
3
|
+
require "n/logger"; $log = Logger.new(STDERR) unless $log
|
|
4
|
+
|
|
5
|
+
require "n/db"
|
|
6
|
+
|
|
7
|
+
module Test # :nodoc: all
|
|
8
|
+
|
|
9
|
+
class Article
|
|
10
|
+
manage {
|
|
11
|
+
include N::Entity
|
|
12
|
+
|
|
13
|
+
prop_accessor String, :title, :body
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
def self.__descendants_classes
|
|
17
|
+
[Message]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class Message
|
|
22
|
+
manage {
|
|
23
|
+
include N::Entity
|
|
24
|
+
include N::Named
|
|
25
|
+
include N::Child
|
|
26
|
+
include N::ParentClass
|
|
27
|
+
|
|
28
|
+
include N::Sequenced
|
|
29
|
+
|
|
30
|
+
prop_accessor Fixnum, :owner_oid
|
|
31
|
+
prop_accessor Fixnum, "smallint", :val1, :val2, :val3
|
|
32
|
+
prop_accessor String, :title, :body
|
|
33
|
+
prop_accessor String, "text NOT NULL", :test
|
|
34
|
+
prop_accessor Fixnum, :count
|
|
35
|
+
prop_accessor Time, :create_time
|
|
36
|
+
sql_index :owner_oid, :pid
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
def initialize
|
|
40
|
+
@create_time = Time.now
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class SubMessage < Message
|
|
46
|
+
manage {
|
|
47
|
+
# duplicate definition
|
|
48
|
+
prop_accessor Float, :count
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class TC_N_Db < Test::Unit::TestCase
|
|
53
|
+
|
|
54
|
+
def setup
|
|
55
|
+
$db = N::Db.new(
|
|
56
|
+
:backend => "mysql",
|
|
57
|
+
:address => "localhost",
|
|
58
|
+
:database => "test",
|
|
59
|
+
:user => "root",
|
|
60
|
+
:password => "navelrulez",
|
|
61
|
+
:connection_count => 2
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
@art = Article.new()
|
|
65
|
+
@art.title = "The parent"
|
|
66
|
+
@art.body = "The body"
|
|
67
|
+
|
|
68
|
+
@msg1 = Message.new()
|
|
69
|
+
@msg1.name = "name1"
|
|
70
|
+
@msg1.body = "body1"
|
|
71
|
+
@msg1.title = "title1"
|
|
72
|
+
@msg1.count = "22"
|
|
73
|
+
@msg1.owner_oid = 1
|
|
74
|
+
|
|
75
|
+
@msg2 = Message.new()
|
|
76
|
+
@msg2.name = "name2"
|
|
77
|
+
@msg2.body = "body2"
|
|
78
|
+
@msg2.title = "title2"
|
|
79
|
+
@msg2.count = "22"
|
|
80
|
+
@msg1.owner_oid = 2
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def teardown
|
|
84
|
+
@art = @msg1 = @msg2 = nil
|
|
85
|
+
$db.shutdown()
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# gmosx: move to tc-properties
|
|
89
|
+
#
|
|
90
|
+
def test_props
|
|
91
|
+
|
|
92
|
+
# check multiple prop
|
|
93
|
+
|
|
94
|
+
assert_equal("SMALLINT", Message.__props.find { |p| :val2 == p.symbol }.sql_type)
|
|
95
|
+
|
|
96
|
+
# bug: props for subclasses.
|
|
97
|
+
|
|
98
|
+
assert(SubMessage.__props)
|
|
99
|
+
assert_equal(Message.__props.size(), SubMessage.__props.size())
|
|
100
|
+
|
|
101
|
+
# bug: duplicate definition
|
|
102
|
+
|
|
103
|
+
assert_equal(Float, SubMessage.__props.find { |p| :count == p.symbol }.klass)
|
|
104
|
+
|
|
105
|
+
# dont force conversion
|
|
106
|
+
|
|
107
|
+
@msg1.count = 2.4
|
|
108
|
+
assert_equal(Float, @msg1.count.class)
|
|
109
|
+
|
|
110
|
+
# force conversion
|
|
111
|
+
|
|
112
|
+
@msg1.__force_count__(2.4)
|
|
113
|
+
assert_equal(Fixnum, @msg1.count.class)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# gmosx: hmm, implemented in one method to enforce order.
|
|
117
|
+
#
|
|
118
|
+
def test_all
|
|
119
|
+
$db.open { |db|
|
|
120
|
+
|
|
121
|
+
# check exception, cleanup test db.
|
|
122
|
+
|
|
123
|
+
# db.drop_schema()
|
|
124
|
+
db.drop_table(Article)
|
|
125
|
+
db.drop_table(Message)
|
|
126
|
+
|
|
127
|
+
# db.create_schema()
|
|
128
|
+
|
|
129
|
+
# bug: get methods without entity table
|
|
130
|
+
|
|
131
|
+
db.get(1, Message)
|
|
132
|
+
|
|
133
|
+
# check put
|
|
134
|
+
|
|
135
|
+
db << @art
|
|
136
|
+
# one oid is missed when creating the table for the first time!
|
|
137
|
+
assert_equal(1, @art.oid)
|
|
138
|
+
|
|
139
|
+
art2 = Article.new()
|
|
140
|
+
art2.title = "Another test"
|
|
141
|
+
db << art2
|
|
142
|
+
|
|
143
|
+
@msg1.set_parent(@art)
|
|
144
|
+
@msg2.set_parent(@art)
|
|
145
|
+
|
|
146
|
+
db << @msg1
|
|
147
|
+
db << @msg2
|
|
148
|
+
|
|
149
|
+
$log.error "#{@msg2.oid}"
|
|
150
|
+
assert_equal(2, @msg2.oid)
|
|
151
|
+
|
|
152
|
+
# check children.
|
|
153
|
+
|
|
154
|
+
msgs = db.children(@art, Message, "ORDER BY count")
|
|
155
|
+
assert_equal(2, msgs.size())
|
|
156
|
+
assert_equal(Message, msgs[0].class)
|
|
157
|
+
|
|
158
|
+
assert_equal(2, db.count_children(@art, Message))
|
|
159
|
+
|
|
160
|
+
# bug: pid was string
|
|
161
|
+
|
|
162
|
+
assert_equal(@art.oid, msgs[0].pid)
|
|
163
|
+
|
|
164
|
+
# check updates
|
|
165
|
+
|
|
166
|
+
@art.title = "CHANGED TITLE"
|
|
167
|
+
db.update_properties("title='#{@art.title}'", @art)
|
|
168
|
+
|
|
169
|
+
art2 = db.get(@art.oid, Article)
|
|
170
|
+
|
|
171
|
+
assert_equal(art2.title, @art.title)
|
|
172
|
+
|
|
173
|
+
@art.body = "CHANGED BODY"
|
|
174
|
+
@art.title = "CHANGED AGAIN"
|
|
175
|
+
db << @art
|
|
176
|
+
|
|
177
|
+
art2 = db.get(@art.oid, Article)
|
|
178
|
+
assert_equal(art2.body, @art.body)
|
|
179
|
+
assert_equal(art2.title, "CHANGED AGAIN")
|
|
180
|
+
|
|
181
|
+
# check timestamp
|
|
182
|
+
|
|
183
|
+
now = Time.now()
|
|
184
|
+
@msg1.create_time = now
|
|
185
|
+
db << @msg1
|
|
186
|
+
|
|
187
|
+
msg = db.get(@msg1.oid, Message)
|
|
188
|
+
|
|
189
|
+
# bug:
|
|
190
|
+
# assert_equal(msg.create_time, @msg1.create_time)
|
|
191
|
+
assert_equal(msg.create_time.to_i(), @msg1.create_time.to_i())
|
|
192
|
+
|
|
193
|
+
# gmosx: not implemented in postgres driver.
|
|
194
|
+
# classes = db.managed_classes()
|
|
195
|
+
# assert_equal(2, classes.size())
|
|
196
|
+
|
|
197
|
+
# get_by_name
|
|
198
|
+
|
|
199
|
+
msg = db.get_by_name("name2", Message)
|
|
200
|
+
assert_equal("body2", msg.body)
|
|
201
|
+
|
|
202
|
+
# pclass
|
|
203
|
+
|
|
204
|
+
assert_equal(@art.class.to_s(), msg.pclass)
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
# deserialize = false
|
|
209
|
+
|
|
210
|
+
$db.open(deserialize = false) { |db|
|
|
211
|
+
|
|
212
|
+
assert_equal(false, db.deserialize)
|
|
213
|
+
|
|
214
|
+
msg = db.get_by_name("name2", Message)
|
|
215
|
+
assert_equal(Array, msg.class)
|
|
216
|
+
|
|
217
|
+
art = db.get(2, Article)
|
|
218
|
+
assert_equal(Array, art.class)
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
# cascade delete
|
|
223
|
+
|
|
224
|
+
msgs = $db.children(0, Message)
|
|
225
|
+
assert_equal(2, msgs.size())
|
|
226
|
+
|
|
227
|
+
$db.delete(@art)
|
|
228
|
+
|
|
229
|
+
msgs = $db.children(0, Message)
|
|
230
|
+
assert_equal(nil, msgs)
|
|
231
|
+
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def test_sql_table_to_class
|
|
235
|
+
# assert_equal(Article,
|
|
236
|
+
# N::DbUtils.sql_table_to_class(N::DbUtils.sql_table(Article)))
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
end
|
data/test/n/tc_events.rb
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# :nodoc: all
|
|
2
|
+
|
|
3
|
+
require "test/unit"
|
|
4
|
+
require "n/events"
|
|
5
|
+
|
|
6
|
+
class TC_Events < Test::Unit::TestCase
|
|
7
|
+
# :nodoc: all
|
|
8
|
+
include N
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
$flag = 0
|
|
12
|
+
$flag2 = 1
|
|
13
|
+
@events = N::EventManager.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def teardown
|
|
17
|
+
@events = nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_events
|
|
21
|
+
@events.add_handler("my.event", "test1", proc { |val|
|
|
22
|
+
$flag = val
|
|
23
|
+
})
|
|
24
|
+
@events.add_handler("my.event", "test2", proc { |val|
|
|
25
|
+
$flag2 += val
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
@events.fire("my.event", 5)
|
|
29
|
+
|
|
30
|
+
assert_equal(5, $flag)
|
|
31
|
+
assert_equal(6, $flag2)
|
|
32
|
+
|
|
33
|
+
@events.fire("my.event", 5)
|
|
34
|
+
|
|
35
|
+
assert_equal(11, $flag2)
|
|
36
|
+
|
|
37
|
+
# test remove handler
|
|
38
|
+
|
|
39
|
+
@events.remove_handler("my.event", "test2")
|
|
40
|
+
@events.fire("my.event", 5)
|
|
41
|
+
|
|
42
|
+
assert_equal(11, $flag2)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require "test/unit"
|
|
2
|
+
|
|
3
|
+
require "n/logger"; $log = Logger.new(STDERR) unless $log
|
|
4
|
+
|
|
5
|
+
require "n/properties"
|
|
6
|
+
|
|
7
|
+
module Test # :nodoc: all
|
|
8
|
+
|
|
9
|
+
class Message
|
|
10
|
+
prop_accessor Fixnum, :owner_oid
|
|
11
|
+
prop_accessor Fixnum, "smallint", :val1, :val2, :val3
|
|
12
|
+
prop_accessor String, :title, :body
|
|
13
|
+
prop_accessor String, "char(10) NOT NULL", :test
|
|
14
|
+
prop_accessor Fixnum, :count
|
|
15
|
+
prop_accessor Time, :create_time
|
|
16
|
+
|
|
17
|
+
# a marshaled property
|
|
18
|
+
prop_accessor Array, :options
|
|
19
|
+
|
|
20
|
+
def initialize
|
|
21
|
+
@create_time = Time.now
|
|
22
|
+
@options = []
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class SubMessage < Message
|
|
28
|
+
inherit_meta(superclass)
|
|
29
|
+
# duplicate definition
|
|
30
|
+
prop_accessor Float, :count
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class TC_N_Properties < Test::Unit::TestCase
|
|
34
|
+
|
|
35
|
+
def setup
|
|
36
|
+
@msg1 = Message.new
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def teardown
|
|
40
|
+
@msg1 = nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_props
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# bug: props for subclasses.
|
|
47
|
+
|
|
48
|
+
assert(SubMessage.__props)
|
|
49
|
+
assert_equal(Message.__props.size(), SubMessage.__props.size())
|
|
50
|
+
|
|
51
|
+
# bug: duplicate definition
|
|
52
|
+
|
|
53
|
+
assert_equal(Float, SubMessage.__props.find { |p| :count == p.symbol }.klass)
|
|
54
|
+
|
|
55
|
+
# dont force conversion
|
|
56
|
+
|
|
57
|
+
@msg1.count = 2.4
|
|
58
|
+
assert_equal(Float, @msg1.count.class)
|
|
59
|
+
|
|
60
|
+
# force conversion
|
|
61
|
+
|
|
62
|
+
@msg1.__force_count(2.4)
|
|
63
|
+
assert_equal(Fixnum, @msg1.count.class)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end # module
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# :nodoc: all
|
|
2
|
+
|
|
3
|
+
require "test/unit"
|
|
4
|
+
|
|
5
|
+
require "n/logger"; $log = Logger.new(STDERR) unless $log
|
|
6
|
+
|
|
7
|
+
require "n/sitemap"
|
|
8
|
+
|
|
9
|
+
class TC_N_SiteMap < Test::Unit::TestCase
|
|
10
|
+
include N
|
|
11
|
+
|
|
12
|
+
def setup
|
|
13
|
+
$n0 = SitePage.new "/index.sx", "Joy", nil, realm = "main-realm"
|
|
14
|
+
$n1 = SitePage.new "/id/index.sx", "Id", $n0
|
|
15
|
+
$n2 = SitePage.new "/id/page.sx", "My page", $n1
|
|
16
|
+
$n1 = SitePage.new "/id/login.sx", "Login", $n0
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def teardown
|
|
20
|
+
$sitemap = nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_all
|
|
24
|
+
assert_equal(3, $sitemap.path("/id/page.sx").size())
|
|
25
|
+
|
|
26
|
+
# bug: wrong order
|
|
27
|
+
assert_equal("Joy > Id > My page", $sitemap.str_path("/id/page.sx"))
|
|
28
|
+
|
|
29
|
+
# bug: wrong hrefs
|
|
30
|
+
assert_equal('<a href="/index.sx">Joy</a> > <a href="/id/index.sx">Id</a> > My page', $sitemap.linked_path("/id/page.sx"))
|
|
31
|
+
|
|
32
|
+
# bug: realm should be inherited from parent
|
|
33
|
+
setup
|
|
34
|
+
assert_equal($n2.realm, $n1.realm)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# :nodoc: all
|
|
2
|
+
|
|
3
|
+
require "test/unit"
|
|
4
|
+
|
|
5
|
+
require "n/logger"; $log = Logger.new(STDERR) unless $log
|
|
6
|
+
|
|
7
|
+
require "n/db"
|
|
8
|
+
require "n/ui/pager"
|
|
9
|
+
|
|
10
|
+
class RequestMock < Hash
|
|
11
|
+
def get(k, default)
|
|
12
|
+
return self[k] || default
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class TC_N_UI_Pager < Test::Unit::TestCase
|
|
17
|
+
|
|
18
|
+
def setup
|
|
19
|
+
=begin
|
|
20
|
+
$db = N::Db.new(
|
|
21
|
+
:addres => "localhost",
|
|
22
|
+
:database => "testdb",
|
|
23
|
+
:user => "root",
|
|
24
|
+
# :password => "navelrulez",
|
|
25
|
+
:connection_count => 2
|
|
26
|
+
)
|
|
27
|
+
=end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def teardown
|
|
31
|
+
# $db.shutdown()
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_all
|
|
35
|
+
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
36
|
+
count = items.size()
|
|
37
|
+
|
|
38
|
+
request = RequestMock.new()
|
|
39
|
+
pager = N::UI::Pager.new("tst", request, 2, items)
|
|
40
|
+
|
|
41
|
+
assert_equal(pager.total_count, count)
|
|
42
|
+
|
|
43
|
+
# bug: bad rounding.
|
|
44
|
+
|
|
45
|
+
assert_equal(5, pager.page_count)
|
|
46
|
+
|
|
47
|
+
# bug: FIXME
|
|
48
|
+
# assert_equal(2, items.size())
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# :nodoc: all
|
|
2
|
+
|
|
3
|
+
require "test/unit"
|
|
4
|
+
require "n/utils/cache"
|
|
5
|
+
|
|
6
|
+
class TC_N_Utils_Cache < Test::Unit::TestCase
|
|
7
|
+
# :nodoc: all
|
|
8
|
+
|
|
9
|
+
class Dummy
|
|
10
|
+
include N::LRUCache::Item
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def setup
|
|
14
|
+
@cache = N::LRUCache.new(maxitems = 3)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def teardown
|
|
18
|
+
@cache = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_safe_cache
|
|
22
|
+
d1 = Dummy.new
|
|
23
|
+
d2 = Dummy.new
|
|
24
|
+
d3 = Dummy.new
|
|
25
|
+
d4 = Dummy.new
|
|
26
|
+
|
|
27
|
+
@cache[1] = d1
|
|
28
|
+
@cache[2] = d2
|
|
29
|
+
@cache[3] = d3
|
|
30
|
+
|
|
31
|
+
assert_equal(d1, @cache.last)
|
|
32
|
+
assert_equal(d3, @cache.first)
|
|
33
|
+
|
|
34
|
+
val = @cache[2]
|
|
35
|
+
assert_equal(d2, @cache.first)
|
|
36
|
+
|
|
37
|
+
@cache[4] = d4
|
|
38
|
+
assert_equal(3, @cache.size)
|
|
39
|
+
assert_equal(d4, @cache.first)
|
|
40
|
+
|
|
41
|
+
# insert the same key
|
|
42
|
+
@cache[4] = d4
|
|
43
|
+
assert_equal(3, @cache.size)
|
|
44
|
+
assert_equal(d4, @cache.first)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|