Erik Grinaker is sharing code with you

Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.

Don't show this again

erikg / Revelation

Revelation is a password manager for the GNOME desktop, released under the GNU GPL license. It stores all your accounts and passwords in a single, secure place, and gives you access to it through a user-friendly graphical interface.

Clone this repository (size: 2.1 MB): HTTPS / SSH
hg clone https://bitbucket.org/erikg/revelation
hg clone ssh://hg@bitbucket.org/erikg/revelation

Revelation / test / data.py

commit
cff0e6f7ef34
parent
e0a14b958359
branch
default
tags
revelation-0.4.0-pre2

bumped version number to 0.4.0-pre2

1
c188d5e734c8
#!/usr/bin/env python
2
c188d5e734c8
3
c188d5e734c8
#
4
b6047522c64d
# Revelation 0.4.0 - a password manager for GNOME 2
5
c188d5e734c8
# http://oss.codepoet.no/revelation/
6
b6047522c64d
# $Id$
7
c188d5e734c8
#
8
c188d5e734c8
# Unit tests for data module
9
c188d5e734c8
#
10
c188d5e734c8
#
11
07c1fb2b0c27
# Copyright (c) 2003-2005 Erik Grinaker
12
c188d5e734c8
#
13
c188d5e734c8
# This program is free software; you can redistribute it and/or
14
c188d5e734c8
# modify it under the terms of the GNU General Public License
15
c188d5e734c8
# as published by the Free Software Foundation; either version 2
16
c188d5e734c8
# of the License, or (at your option) any later version.
17
c188d5e734c8
#
18
c188d5e734c8
# This program is distributed in the hope that it will be useful,
19
c188d5e734c8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
20
c188d5e734c8
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21
c188d5e734c8
# GNU General Public License for more details.
22
c188d5e734c8
#
23
c188d5e734c8
# You should have received a copy of the GNU General Public License
24
c188d5e734c8
# along with this program; if not, write to the Free Software
25
c188d5e734c8
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26
c188d5e734c8
#
27
c188d5e734c8
28
704e07bb5692
import gobject, gtk, unittest
29
c188d5e734c8
30
b6859b8eb257
from revelation import data, entry, ui
31
c188d5e734c8
32
c188d5e734c8
33
c188d5e734c8
34
704e07bb5692
class Clipboard_clear(unittest.TestCase):
35
704e07bb5692
	"Clipboard.clear()"
36
704e07bb5692
37
704e07bb5692
	def test_clear(self):
38
704e07bb5692
		"Clipboard.clear() clears the clipboard"
39
704e07bb5692
40
704e07bb5692
		c = data.Clipboard()
41
704e07bb5692
		c.set("just a test")
42
704e07bb5692
		self.assertEquals(c.get(), "just a test")
43
704e07bb5692
44
704e07bb5692
		c.clear()
45
704e07bb5692
		self.assertEquals(c.get(), "")
46
704e07bb5692
47
704e07bb5692
48
b6859b8eb257
	def test_clipboard_primary(self):
49
b6859b8eb257
		"Clipboard.clear() clears both CLIPBOARD and PRIMARY"
50
b6859b8eb257
51
b6859b8eb257
		c = data.Clipboard()
52
b6859b8eb257
		c.set("test123")
53
b6859b8eb257
		c.clear()
54
b6859b8eb257
55
b6859b8eb257
		self.assertEquals(gtk.clipboard_get("CLIPBOARD").wait_for_text() in ( "", None ), True)
56
b6859b8eb257
		self.assertEquals(gtk.clipboard_get("PRIMARY").wait_for_text() in ( "", None ), True)
57
704e07bb5692
58
704e07bb5692
59
704e07bb5692
60
704e07bb5692
class Clipboard_get(unittest.TestCase):
61
704e07bb5692
	"Clipboard.get()"
62
704e07bb5692
63
b6859b8eb257
	def test_chain(self):
64
b6859b8eb257
		"Clipboard.get() returns next chain item"
65
b6859b8eb257
66
b6859b8eb257
		c = data.Clipboard()
67
b6859b8eb257
		c.set( [ "a", "b", "c" ] )
68
b6859b8eb257
69
b6859b8eb257
		self.assertEquals(c.get(), "a")
70
b6859b8eb257
		self.assertEquals(c.get(), "b")
71
b6859b8eb257
		self.assertEquals(c.get(), "c")
72
b6859b8eb257
73
b6859b8eb257
74
b6859b8eb257
	def test_chain_clipboard_primary(self):
75
b6859b8eb257
		"Clipboard.get() chain is split over CLIPBOARD and PRIMARY"
76
b6859b8eb257
77
b6859b8eb257
		c = data.Clipboard()
78
b6859b8eb257
		c.set( [ "a", "b", "c", "d" ] )
79
b6859b8eb257
80
b6859b8eb257
		self.assertEquals(gtk.clipboard_get("CLIPBOARD").wait_for_text(), "a")
81
b6859b8eb257
		self.assertEquals(gtk.clipboard_get("PRIMARY").wait_for_text(), "b")
82
b6859b8eb257
		self.assertEquals(gtk.clipboard_get("CLIPBOARD").wait_for_text(), "c")
83
b6859b8eb257
		self.assertEquals(gtk.clipboard_get("PRIMARY").wait_for_text(), "d")
84
b6859b8eb257
85
b6859b8eb257
86
b6859b8eb257
	def test_chain_last(self):
87
b6859b8eb257
		"Clipboard.get() returns last chain item on chain end"
88
b6859b8eb257
89
b6859b8eb257
		c = data.Clipboard()
90
b6859b8eb257
		c.set( [ "a", "b", "c" ] )
91
b6859b8eb257
92
b6859b8eb257
		self.assertEquals(c.get(), "a")
93
b6859b8eb257
		self.assertEquals(c.get(), "b")
94
b6859b8eb257
		self.assertEquals(c.get(), "c")
95
b6859b8eb257
		self.assertEquals(c.get(), "c")
96
b6859b8eb257
97
b6859b8eb257
98
704e07bb5692
	def test_clipboard(self):
99
704e07bb5692
		"Clipboard.get() returns CLIPBOARD contents, not PRIMARY"
100
704e07bb5692
101
704e07bb5692
		clip = gtk.clipboard_get("CLIPBOARD")
102
704e07bb5692
		clip.set_text("clipboardtest")
103
704e07bb5692
104
704e07bb5692
		pri = gtk.clipboard_get("PRIMARY")
105
704e07bb5692
		pri.set_text("primarytest")
106
704e07bb5692
107
704e07bb5692
		c = data.Clipboard()
108
704e07bb5692
		self.assertEquals(c.get(), "clipboardtest")
109
704e07bb5692
110
704e07bb5692
111
704e07bb5692
	def test_get(self):
112
704e07bb5692
		"Clipboard.get() returns the clipboard contents"
113
704e07bb5692
114
704e07bb5692
		c = data.Clipboard()
115
704e07bb5692
		c.set("test123")
116
704e07bb5692
		self.assertEquals(c.get(), "test123")
117
704e07bb5692
118
704e07bb5692
119
704e07bb5692
	def test_none(self):
120
704e07bb5692
		"Clipboard.get() returns empty string if no contents"
121
704e07bb5692
122
704e07bb5692
		c = data.Clipboard()
123
704e07bb5692
		c.clear()
124
704e07bb5692
		self.assertEquals(c.get(), "")
125
704e07bb5692
126
704e07bb5692
127
704e07bb5692
128
704e07bb5692
class Clipboard_has_contents(unittest.TestCase):
129
704e07bb5692
	"Clipboard.has_contents()"
130
704e07bb5692
131
b6859b8eb257
	def test_chain(self):
132
b6859b8eb257
		"Clipboard.has_contents() doesn't affect chain pointer"
133
b6859b8eb257
134
b6859b8eb257
		c = data.Clipboard()
135
b6859b8eb257
		c.set( [ "a", "b", "c" ])
136
b6859b8eb257
137
b6859b8eb257
		c.get()
138
b6859b8eb257
		c.has_contents()
139
b6859b8eb257
		self.assertEquals(c.get(), "b")
140
b6859b8eb257
141
b6859b8eb257
142
704e07bb5692
	def test_contents(self):
143
704e07bb5692
		"Clipboard.has_contents() returns True when contents"
144
704e07bb5692
145
704e07bb5692
		c = data.Clipboard()
146
704e07bb5692
		c.set("test123")
147
704e07bb5692
		self.assertEquals(c.has_contents(), True)
148
704e07bb5692
149
704e07bb5692
150
704e07bb5692
	def test_empty(self):
151
704e07bb5692
		"Clipboard.has_contents() returns False when empty"
152
704e07bb5692
153
704e07bb5692
		c = data.Clipboard()
154
704e07bb5692
		c.clear()
155
704e07bb5692
		self.assertEquals(c.has_contents(), False)
156
704e07bb5692
157
704e07bb5692
158
704e07bb5692
159
704e07bb5692
class Clipboard_set(unittest.TestCase):
160
704e07bb5692
	"Clipboard.set()"
161
704e07bb5692
162
b6859b8eb257
	def test_chain(self):
163
b6859b8eb257
		"Clipboard.set() handles a list as a chain"
164
b6859b8eb257
165
b6859b8eb257
		c = data.Clipboard()
166
b6859b8eb257
		c.set( [ "a", "b", "c" ])
167
b6859b8eb257
168
b6859b8eb257
		self.assertEquals(c.get(), "a")
169
b6859b8eb257
		self.assertEquals(c.get(), "b")
170
b6859b8eb257
		self.assertEquals(c.get(), "c")
171
b6859b8eb257
172
b6859b8eb257
173
704e07bb5692
	def test_clipboard_primary(self):
174
704e07bb5692
		"Clipboard.set() updates both CLIPBOARD and PRIMARY"
175
704e07bb5692
176
704e07bb5692
		clip = gtk.clipboard_get("CLIPBOARD")
177
704e07bb5692
		clip.clear()
178
704e07bb5692
179
704e07bb5692
		pri = gtk.clipboard_get("PRIMARY")
180
704e07bb5692
		pri.clear()
181
704e07bb5692
182
704e07bb5692
		c = data.Clipboard()
183
704e07bb5692
		c.set("test123")
184
704e07bb5692
185
704e07bb5692
		self.assertEquals(clip.wait_for_text(), "test123")
186
704e07bb5692
		self.assertEquals(pri.wait_for_text(), "test123")
187
704e07bb5692
188
704e07bb5692
189
704e07bb5692
	def test_set(self):
190
704e07bb5692
		"Clipboard.set() sets the clipboard contents"
191
704e07bb5692
192
704e07bb5692
		c = data.Clipboard()
193
704e07bb5692
194
704e07bb5692
		c.clear()
195
704e07bb5692
		self.assertEquals(c.get(), "")
196
704e07bb5692
197
704e07bb5692
		c.set("test123")
198
704e07bb5692
		self.assertEquals(c.get(), "test123")
199
704e07bb5692
200
704e07bb5692
201
704e07bb5692
202
704e07bb5692
class EntryClipboard_clear(unittest.TestCase):
203
704e07bb5692
	"EntryClipboard.clear()"
204
704e07bb5692
205
704e07bb5692
	def setUp(self):
206
704e07bb5692
		"Sets up common facilities"
207
704e07bb5692
208
704e07bb5692
		self.entrystore = data.EntryStore()
209
704e07bb5692
210
704e07bb5692
		e = entry.GenericEntry()
211
704e07bb5692
		e.name = "Testentry"
212
704e07bb5692
		self.entrystore.add_entry(e)
213
704e07bb5692
214
704e07bb5692
215
704e07bb5692
	def test_clipboard_primary(self):
216
704e07bb5692
		"EntryClipboard.clear() doesn't touch the CLIPBOARD or PRIMARY selections"
217
704e07bb5692
218
704e07bb5692
		clip = gtk.clipboard_get("CLIPBOARD")
219
704e07bb5692
		clip.set_text("testclip")
220
704e07bb5692
221
704e07bb5692
		pri = gtk.clipboard_get("PRIMARY")
222
704e07bb5692
		pri.set_text("testpri")
223
704e07bb5692
224
704e07bb5692
		c = data.EntryClipboard()
225
704e07bb5692
		c.clear()
226
704e07bb5692
227
704e07bb5692
		self.assertEquals(clip.wait_for_text(), "testclip")
228
704e07bb5692
		self.assertEquals(pri.wait_for_text(), "testpri")
229
704e07bb5692
230
704e07bb5692
231
704e07bb5692
	def test_clear(self):
232
704e07bb5692
		"EntryClipboard.clear() clears the clipboard"
233
704e07bb5692
234
704e07bb5692
		c = data.EntryClipboard()
235
704e07bb5692
		c.set(self.entrystore, [ self.entrystore.iter_nth_child(None, 0) ])
236
704e07bb5692
		c.clear()
237
704e07bb5692
238
704e07bb5692
		self.assertEquals(c.get(), None)
239
704e07bb5692
240
704e07bb5692
241
704e07bb5692
	def test_toggle(self):
242
704e07bb5692
		"EntryClipboard.clear() emits the content-toggled signal"
243
704e07bb5692
244
704e07bb5692
		def cb(widget, data):
245
704e07bb5692
			global foo
246
704e07bb5692
			foo = "success"
247
704e07bb5692
248
704e07bb5692
		c = data.EntryClipboard()
249
704e07bb5692
		c.set(self.entrystore, [ self.entrystore.iter_nth_child(None, 0) ])
250
704e07bb5692
251
704e07bb5692
		c.connect("content-toggled", cb)
252
704e07bb5692
		c.clear()
253
704e07bb5692
254
704e07bb5692
		self.assertEquals(foo, "success")
255
704e07bb5692
256
704e07bb5692
257
704e07bb5692
258
704e07bb5692
class EntryClipboard_get(unittest.TestCase):
259
704e07bb5692
	"EntryClipboard.get()"
260
704e07bb5692
261
704e07bb5692
	def test_corrupt(self):
262
704e07bb5692
		"EntryClipboard.get() returns None on corrupt clipboard data"
263
704e07bb5692
264
704e07bb5692
		c = gtk.clipboard_get("_REVELATION_ENTRY")
265
704e07bb5692
		c.set_text("dummydata")
266
704e07bb5692
		self.assertEquals(c.wait_for_text(), "dummydata")
267
704e07bb5692
268
704e07bb5692
		e = data.EntryClipboard()
269
704e07bb5692
		self.assertEquals(e.get(), None)
270
704e07bb5692
271
704e07bb5692
272
704e07bb5692
	def test_empty(self):
273
704e07bb5692
		"EntryClipboard.get() returns None on empty clipboard"
274
704e07bb5692
275
704e07bb5692
		c = data.EntryClipboard()
276
704e07bb5692
		c.clear()
277
704e07bb5692
		self.assertEquals(c.get(), None)
278
704e07bb5692
279
704e07bb5692
280
704e07bb5692
	def test_get(self):
281
704e07bb5692
		"EntryClipboard.get() returns a complete entry store"
282
704e07bb5692
283
704e07bb5692
		# set up entrystore
284
704e07bb5692
		entrystore = data.EntryStore()
285
704e07bb5692
286
704e07bb5692
		f = entry.FolderEntry()
287
704e07bb5692
		f.name = "folder"
288
704e07bb5692
		folderiter = entrystore.add_entry(f)
289
704e07bb5692
290
704e07bb5692
		e = entry.GenericEntry()
291
704e07bb5692
		e.name = "testentry"
292
704e07bb5692
		e.description = "desc"
293
704e07bb5692
		e[entry.HostnameField] = "hostname"
294
704e07bb5692
		e[entry.UsernameField] = "username"
295
704e07bb5692
		e[entry.PasswordField] = "password"
296
704e07bb5692
		iter = entrystore.add_entry(e, folderiter)
297
704e07bb5692
298
704e07bb5692
		# do clipboard transfer
299
704e07bb5692
		c = data.EntryClipboard()
300
704e07bb5692
		c.set(entrystore, [ folderiter ])
301
704e07bb5692
		copystore = c.get()
302
704e07bb5692
303
704e07bb5692
		f2 = copystore.get_entry(copystore.get_iter( (0,) ))
304
704e07bb5692
		self.assertEquals(f.name, f2.name)
305
704e07bb5692
306
704e07bb5692
		e2 = copystore.get_entry(copystore.get_iter( (0,0) ))
307
704e07bb5692
		self.assertEquals(e.name, e2.name)
308
704e07bb5692
		self.assertEquals(e.description, e2.description)
309
704e07bb5692
		self.assertEquals(e[entry.HostnameField], e2[entry.HostnameField])
310
704e07bb5692
		self.assertEquals(e[entry.UsernameField], e2[entry.UsernameField])
311
704e07bb5692
		self.assertEquals(e[entry.PasswordField], e2[entry.PasswordField])
312
704e07bb5692
313
704e07bb5692
314
704e07bb5692
315
704e07bb5692
class EntryClipboard_has_contents(unittest.TestCase):
316
704e07bb5692
	"EntryClipboard.has_contents()"
317
704e07bb5692
318
704e07bb5692
	def test_contents(self):
319
704e07bb5692
		"EntryClipboard.has_contents() returns True on contents"
320
704e07bb5692
321
704e07bb5692
		entrystore = data.EntryStore()
322
704e07bb5692
		e = entry.GenericEntry()
323
704e07bb5692
		iter = entrystore.add_entry(e)
324
704e07bb5692
325
704e07bb5692
		c = data.EntryClipboard()
326
704e07bb5692
		c.set(entrystore, [ iter ])
327
704e07bb5692
328
704e07bb5692
		self.assertEquals(c.has_contents(), True)
329
704e07bb5692
330
704e07bb5692
331
704e07bb5692
	def test_empty(self):
332
704e07bb5692
		"EntryClipboard.has_contents() returns False on no contents"
333
704e07bb5692
334
704e07bb5692
		c = data.EntryClipboard()
335
704e07bb5692
		c.clear()
336
704e07bb5692
337
704e07bb5692
		self.assertEquals(c.has_contents(), False)
338
704e07bb5692
339
704e07bb5692
340
704e07bb5692
341
704e07bb5692
class EntryClipboard_set(unittest.TestCase):
342
704e07bb5692
	"EntryClipboars.set()"
343
704e07bb5692
344
704e07bb5692
	def test_set(self):
345
704e07bb5692
		"EntryClipboard.set() sets all entry data"
346
704e07bb5692
347
704e07bb5692
		# set up entrystore
348
704e07bb5692
		entrystore = data.EntryStore()
349
704e07bb5692
350
704e07bb5692
		f = entry.FolderEntry()
351
704e07bb5692
		f.name = "folder"
352
704e07bb5692
		folderiter = entrystore.add_entry(f)
353
704e07bb5692
354
704e07bb5692
		e = entry.GenericEntry()
355
704e07bb5692
		e.name = "testentry"
356
704e07bb5692
		e.description = "desc"
357
704e07bb5692
		e[entry.HostnameField] = "hostname"
358
704e07bb5692
		e[entry.UsernameField] = "username"
359
704e07bb5692
		e[entry.PasswordField] = "password"
360
704e07bb5692
		iter = entrystore.add_entry(e, folderiter)
361
704e07bb5692
362
704e07bb5692
		g = entry.GenericEntry()
363
704e07bb5692
		g.name = "generic"
364
704e07bb5692
		giter = entrystore.add_entry(g)
365
704e07bb5692
366
704e07bb5692
		# do clipboard transfer
367
704e07bb5692
		c = data.EntryClipboard()
368
704e07bb5692
		c.set(entrystore, [ folderiter, giter ])
369
704e07bb5692
		copystore = c.get()
370
704e07bb5692
371
704e07bb5692
		f2 = copystore.get_entry(copystore.get_iter( (0,) ))
372
704e07bb5692
		self.assertEquals(type(f), type(f2))
373
704e07bb5692
		self.assertEquals(f.name, f2.name)
374
704e07bb5692
375
704e07bb5692
		e2 = copystore.get_entry(copystore.get_iter( (0,0) ))
376
704e07bb5692
		self.assertEquals(type(e), type(e2))
377
704e07bb5692
		self.assertEquals(e.name, e2.name)
378
704e07bb5692
		self.assertEquals(e.description, e2.description)
379
704e07bb5692
		self.assertEquals(e[entry.HostnameField], e2[entry.HostnameField])
380
704e07bb5692
		self.assertEquals(e[entry.UsernameField], e2[entry.UsernameField])
381
704e07bb5692
		self.assertEquals(e[entry.PasswordField], e2[entry.PasswordField])
382
704e07bb5692
383
704e07bb5692
		g2 = copystore.get_entry(copystore.get_iter( (1,) ))
384
704e07bb5692
		self.assertEquals(type(g), type(g2))
385
704e07bb5692
		self.assertEquals(g.name, g2.name)
386
704e07bb5692
387
704e07bb5692
388
704e07bb5692
	def test_toggle(self):
389
704e07bb5692
		"EntryClipboard.set() emits the content-toggled signal"
390
704e07bb5692
391
704e07bb5692
		def cb(widget, data):
392
704e07bb5692
			global foo
393
704e07bb5692
			foo = "success"
394
704e07bb5692
395
704e07bb5692
		entrystore = data.EntryStore()
396
704e07bb5692
		e = entry.GenericEntry()
397
704e07bb5692
		iter = entrystore.add_entry(e)
398
704e07bb5692
399
704e07bb5692
		c = data.EntryClipboard()
400
704e07bb5692
		c.clear()
401
704e07bb5692
402
704e07bb5692
		c.connect("content-toggled", cb)
403
704e07bb5692
		c.set(entrystore, [ iter ])
404
704e07bb5692
405
704e07bb5692
		self.assertEquals(foo, "success")
406
704e07bb5692
407
704e07bb5692
408
704e07bb5692
409
c188d5e734c8
class EntrySearch__init(unittest.TestCase):
410
c188d5e734c8
	"EntrySearch.__init__()"
411
c188d5e734c8
412
c188d5e734c8
	def test_attrs(self):
413
c188d5e734c8
		"EntrySearch.__init__() sets required attributes"
414
c188d5e734c8
415
c188d5e734c8
		entrysearch = data.EntrySearch(data.EntryStore())
416
c188d5e734c8
		self.assertEquals(hasattr(entrysearch, "folders"), True)
417
c188d5e734c8
418
c188d5e734c8
419
c188d5e734c8
	def test_defaults(self):
420
c188d5e734c8
		"EntrySearch.__init__() sets proper defaults"
421
c188d5e734c8
422
c188d5e734c8
		entrysearch = data.EntrySearch(data.EntryStore())
423
c188d5e734c8
		self.assertEquals(entrysearch.folders, True)
424
c188d5e734c8
		self.assertEquals(entrysearch.namedesconly, False)
425
c188d5e734c8
		self.assertEquals(entrysearch.casesensitive, False)
426
c188d5e734c8
427
c188d5e734c8
428
c188d5e734c8
429
c188d5e734c8
class EntrySearch_find(unittest.TestCase):
430
c188d5e734c8
	"EntrySearch.find()"
431
c188d5e734c8
432
c188d5e734c8
433
c188d5e734c8
	def setUp(self):
434
c188d5e734c8
		"Sets up an entrystore for testing"
435
c188d5e734c8
436
c188d5e734c8
		self.entrystore = data.EntryStore()
437
c188d5e734c8
		self.entrysearch = data.EntrySearch(self.entrystore)
438
c188d5e734c8
439
c188d5e734c8
		e = entry.GenericEntry()
440
c188d5e734c8
		e.name = "entry0"
441
c188d5e734c8
		self.entrystore.add_entry(e)
442
c188d5e734c8
443
c188d5e734c8
		e = entry.FolderEntry()
444
c188d5e734c8
		e.name = "folder0"
445
c188d5e734c8
		parent = self.entrystore.add_entry(e)
446
c188d5e734c8
447
c188d5e734c8
		e = entry.GenericEntry()
448
c188d5e734c8
		e.name = "entry1"
449
c188d5e734c8
		self.entrystore.add_entry(e, parent)
450
c188d5e734c8
451
c188d5e734c8
		e = entry.GenericEntry()
452
c188d5e734c8
		e.name = "entry2"
453
c188d5e734c8
		self.entrystore.add_entry(e)
454
c188d5e734c8
455
c188d5e734c8
456
c188d5e734c8
	def test_direction(self):
457
c188d5e734c8
		"EntrySearch.find() uses direction correctly"
458
c188d5e734c8
459
c188d5e734c8
		iter = self.entrysearch.find("entry")
460
c188d5e734c8
		self.assertEquals(self.entrystore.get_path(iter), (0, ))
461
c188d5e734c8
462
704e07bb5692
		iter = self.entrysearch.find("entry", None, None, data.SEARCH_PREVIOUS)
463
c188d5e734c8
		self.assertEquals(self.entrystore.get_path(iter), (2, ))
464
c188d5e734c8
465
c188d5e734c8
466
c188d5e734c8
	def test_find(self):
467
c188d5e734c8
		"EntrySearch.find() returns correct entry"
468
c188d5e734c8
469
c188d5e734c8
		iter = self.entrysearch.find("entry1")
470
c188d5e734c8
		self.assertEquals(self.entrystore.get_path(iter), (1, 0))
471
c188d5e734c8
472
c188d5e734c8
473
c188d5e734c8
	def test_nomatch(self):
474
c188d5e734c8
		"EntrySearch.find() returns None on no match"
475
c188d5e734c8
476
c188d5e734c8
		iter = self.entrysearch.find("test123")
477
c188d5e734c8
		self.assertEquals(iter, None)
478
c188d5e734c8
479
c188d5e734c8
480
c188d5e734c8
	def test_offset(self):
481
c188d5e734c8
		"EntrySearch.find() finds next match after offset"
482
c188d5e734c8
483
c188d5e734c8
		offset = self.entrystore.get_iter((1, 0))
484
c188d5e734c8
		iter = self.entrysearch.find("entry", None, offset)
485
c188d5e734c8
486
c188d5e734c8
		self.assertEquals(self.entrystore.get_path(iter), (2, ))
487
c188d5e734c8
488
c188d5e734c8
489
c188d5e734c8
	def test_offset_wrap(self):
490
c188d5e734c8
		"EntrySearch.find() wraps around"
491
c188d5e734c8
492
c188d5e734c8
		offset = self.entrystore.get_iter((2, ))
493
c188d5e734c8
		iter = self.entrysearch.find("entry", None, offset)
494
c188d5e734c8
495
c188d5e734c8
		self.assertEquals(self.entrystore.get_path(iter), (0, ))
496
c188d5e734c8
497
c188d5e734c8
	def test_offset_nomatch(self):
498
c188d5e734c8
		"EntrySearch.find() returns None if no match other than offset"
499
c188d5e734c8
500
c188d5e734c8
		offset = self.entrystore.get_iter((1, ))
501
c188d5e734c8
		iter = self.entrysearch.find("folder", None, offset)
502
c188d5e734c8
503
c188d5e734c8
		self.assertEquals(iter, None)
504
c188d5e734c8
505
c188d5e734c8
506
c188d5e734c8
507
c188d5e734c8
class EntrySearch_match(unittest.TestCase):
508
c188d5e734c8
	"EntrySearch.match()"
509
c188d5e734c8
510
c188d5e734c8
	def setUp(self):
511
c188d5e734c8
		"Sets up an entrystore and entrysearch for testing"
512
c188d5e734c8
513
c188d5e734c8
		self.entrystore = data.EntryStore()
514
c188d5e734c8
		self.entrysearch = data.EntrySearch(self.entrystore)
515
c188d5e734c8
516
c188d5e734c8
		e = entry.GenericEntry()
517
c188d5e734c8
		e.name = "name"
518
c188d5e734c8
		e.description = "description"
519
c188d5e734c8
		e[entry.HostnameField] = "hostname"
520
c188d5e734c8
		e[entry.UsernameField] = "username"
521
c188d5e734c8
		e[entry.PasswordField] = "password"
522
c188d5e734c8
523
c188d5e734c8
		self.iter = self.entrystore.add_entry(e)
524
c188d5e734c8
525
c188d5e734c8
		e = entry.FolderEntry()
526
c188d5e734c8
		e.name = "folder"
527
c188d5e734c8
		self.folderiter = self.entrystore.add_entry(e)
528
c188d5e734c8
529
c188d5e734c8
530
c188d5e734c8
	def test_blank(self):
531
c188d5e734c8
		"EntrySearch.match() matches on blank string"
532
c188d5e734c8
533
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, ""), True)
534
c188d5e734c8
535
c188d5e734c8
536
c188d5e734c8
	def test_casesensitive(self):
537
c188d5e734c8
		"EntrySearch.match() uses casesensitive attribute correctly"
538
c188d5e734c8
539
c188d5e734c8
		self.entrysearch.casesensitive = True
540
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "NamE"), False)
541
c188d5e734c8
542
c188d5e734c8
		self.entrysearch.casesensitive = False
543
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "NamE"), True)
544
c188d5e734c8
545
c188d5e734c8
546
c188d5e734c8
	def test_folder(self):
547
c188d5e734c8
		"EntrySearch.match() uses folders attribute correctly"
548
c188d5e734c8
549
c188d5e734c8
		self.entrysearch.folders = False
550
704e07bb5692
		self.assertEquals(self.entrysearch.match(self.folderiter, "folder"), False)
551
c188d5e734c8
552
c188d5e734c8
		self.entrysearch.folders = True
553
704e07bb5692
		self.assertEquals(self.entrysearch.match(self.folderiter, "folder"), True)
554
c188d5e734c8
555
c188d5e734c8
556
c188d5e734c8
	def test_namedesconly(self):
557
c188d5e734c8
		"EntrySearch.match() uses namedesconly attribute correctly"
558
c188d5e734c8
559
c188d5e734c8
		self.entrysearch.namedesconly = True
560
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "username"), False)
561
c188d5e734c8
562
c188d5e734c8
		self.entrysearch.namedesconly = False
563
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "username"), True)
564
c188d5e734c8
565
c188d5e734c8
566
c188d5e734c8
	def test_none(self):
567
c188d5e734c8
		"EntrySearch.match() returns False on None"
568
c188d5e734c8
569
c188d5e734c8
		self.assertEquals(self.entrysearch.match(None, "test"), False)
570
c188d5e734c8
571
c188d5e734c8
572
c188d5e734c8
	def test_string(self):
573
c188d5e734c8
		"EntrySearch.match() matches on string"
574
c188d5e734c8
575
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "test"), False)
576
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "name"), True)
577
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "ript"), True)
578
c188d5e734c8
579
c188d5e734c8
580
c188d5e734c8
	def test_type(self):
581
c188d5e734c8
		"EntrySearch.match() matches on entry type"
582
c188d5e734c8
583
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "name", entry.GenericEntry), True)
584
c188d5e734c8
		self.assertEquals(self.entrysearch.match(self.iter, "name", entry.WebEntry), False)
585
c188d5e734c8
586
c188d5e734c8
587
c188d5e734c8
588
c188d5e734c8
class EntryStore__init(unittest.TestCase):
589
c188d5e734c8
	"EntryStore.__init__()"
590
c188d5e734c8
591
c188d5e734c8
	def test_changed(self):
592
c188d5e734c8
		"EntryStore.__init__() sets .changed to False"
593
c188d5e734c8
594
c188d5e734c8
		e = data.EntryStore()
595
c188d5e734c8
		self.assertEquals(e.changed, False)
596
c188d5e734c8
597
c188d5e734c8
598
c188d5e734c8
	def test_columns(self):
599
c188d5e734c8
		"EntryStore.__init__() sets up correct columns"
600
c188d5e734c8
601
c188d5e734c8
		e = data.EntryStore()
602
c188d5e734c8
603
c188d5e734c8
		self.assertEquals(e.get_n_columns(), 3)
604
c188d5e734c8
		self.assertEquals(e.get_column_type(0), gobject.TYPE_STRING)
605
c188d5e734c8
		self.assertEquals(e.get_column_type(1), gobject.TYPE_STRING)
606
c188d5e734c8
		self.assertEquals(e.get_column_type(2), gobject.TYPE_PYOBJECT)
607
c188d5e734c8
608
c188d5e734c8
609
c188d5e734c8
610
c188d5e734c8
class EntryStore_add_entry(unittest.TestCase):
611
c188d5e734c8
	"EntryStore.add_entry()"
612
c188d5e734c8
613
c188d5e734c8
	def test_add(self):
614
c188d5e734c8
		"EntryStore.add_entry() adds an iter"
615
c188d5e734c8
616
c188d5e734c8
		entrystore = data.EntryStore()
617
c188d5e734c8
		e = entry.GenericEntry()
618
c188d5e734c8
619
c188d5e734c8
		entrystore.add_entry(e)
620
c188d5e734c8
621
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(None), 1)
622
c188d5e734c8
623
c188d5e734c8
624
c188d5e734c8
	def test_changed(self):
625
c188d5e734c8
		"EntryStore.add_entry() sets .changed to True"
626
c188d5e734c8
627
c188d5e734c8
		entrystore = data.EntryStore()
628
c188d5e734c8
		e = entry.GenericEntry()
629
c188d5e734c8
630
c188d5e734c8
		self.assertEquals(entrystore.changed, False)
631
c188d5e734c8
		entrystore.add_entry(e)
632
c188d5e734c8
		self.assertEquals(entrystore.changed, True)
633
c188d5e734c8
634
c188d5e734c8
635
c188d5e734c8
	def test_copy(self):
636
c188d5e734c8
		"EntryStore.add_entry() stores a copy of the entry"
637
c188d5e734c8
638
c188d5e734c8
		entrystore = data.EntryStore()
639
c188d5e734c8
640
c188d5e734c8
		e = entry.GenericEntry()
641
c188d5e734c8
		e.name = "test123"
642
c188d5e734c8
643
c188d5e734c8
		iter = entrystore.add_entry(e)
644
c188d5e734c8
645
c188d5e734c8
		e.name = "changed"
646
c188d5e734c8
647
c188d5e734c8
		self.assertEquals(entrystore.get_value(iter, 2).name, "test123")
648
c188d5e734c8
649
c188d5e734c8
650
c188d5e734c8
	def test_data(self):
651
c188d5e734c8
		"EntryStore.add_entry() stores all data"
652
c188d5e734c8
653
c188d5e734c8
		entrystore = data.EntryStore()
654
c188d5e734c8
655
c188d5e734c8
		e = entry.GenericEntry()
656
c188d5e734c8
		e.name = "name"
657
c188d5e734c8
		e.description = "description"
658
c188d5e734c8
		e.updated = 1
659
c188d5e734c8
		e.get_field(entry.HostnameField).value = "hostname"
660
c188d5e734c8
		e.get_field(entry.UsernameField).value = "username"
661
c188d5e734c8
		e.get_field(entry.PasswordField).value = "password"
662
c188d5e734c8
663
c188d5e734c8
		iter = entrystore.add_entry(e)
664
c188d5e734c8
665
c188d5e734c8
		self.assertEquals(entrystore.get_value(iter, 0), "name")
666
c188d5e734c8
		self.assertEquals(entrystore.get_value(iter, 1), e.icon)
667
c188d5e734c8
668
c188d5e734c8
		ce = entrystore.get_value(iter, 2)
669
c188d5e734c8
		self.assertEquals(e.name, ce.name)
670
c188d5e734c8
		self.assertEquals(e.description, ce.description)
671
c188d5e734c8
		self.assertEquals(e.updated, ce.updated)
672
c188d5e734c8
		self.assertEquals(e[entry.HostnameField], ce[entry.HostnameField])
673
c188d5e734c8
		self.assertEquals(e[entry.UsernameField], ce[entry.UsernameField])
674
c188d5e734c8
		self.assertEquals(e[entry.PasswordField], ce[entry.PasswordField])
675
c188d5e734c8
676
c188d5e734c8
677
c188d5e734c8
	def test_parent(self):
678
c188d5e734c8
		"EntryStore.add_entry() adds below parent folder"
679
c188d5e734c8
680
c188d5e734c8
		entrystore = data.EntryStore()
681
c188d5e734c8
		parent = entrystore.add_entry(entry.FolderEntry())
682
c188d5e734c8
		iter = entrystore.add_entry(entry.GenericEntry(), parent)
683
c188d5e734c8
684
c188d5e734c8
		self.assertNotEquals(parent, None)
685
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(None), 1)
686
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(parent), 1)
687
c188d5e734c8
688
c188d5e734c8
689
c188d5e734c8
	def test_parent_notfolder(self):
690
c188d5e734c8
		"EntryStore.add_entry() appends to root if parent is not folder"
691
c188d5e734c8
692
c188d5e734c8
		entrystore = data.EntryStore()
693
c188d5e734c8
		parent = entrystore.add_entry(entry.GenericEntry())
694
c188d5e734c8
		iter = entrystore.add_entry(entry.GenericEntry(), parent)
695
c188d5e734c8
696
c188d5e734c8
		self.assertNotEquals(parent, None)
697
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(None), 2)
698
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(parent), 0)
699
c188d5e734c8
700
c188d5e734c8
701
c188d5e734c8
	def test_sibling(self):
702
c188d5e734c8
		"EntryStore.add_entry() adds before sibling"
703
c188d5e734c8
704
c188d5e734c8
		entrystore = data.EntryStore()
705
c188d5e734c8
706
c188d5e734c8
		p = entry.FolderEntry()
707
c188d5e734c8
		p.name = "folder"
708
c188d5e734c8
		parent = entrystore.add_entry(p)
709
c188d5e734c8
710
c188d5e734c8
		s = entry.GenericEntry()
711
c188d5e734c8
		s.name = "sibling"
712
c188d5e734c8
		sibling = entrystore.add_entry(s, parent)
713
c188d5e734c8
714
c188d5e734c8
		e = entry.GenericEntry()
715
c188d5e734c8
		e.name = "test123"
716
c188d5e734c8
		entrystore.add_entry(e, parent, sibling)
717
c188d5e734c8
718
c188d5e734c8
		self.assertEquals(entrystore.get_entry(entrystore.iter_nth_child(parent, 0)).name, "test123")
719
c188d5e734c8
		self.assertEquals(entrystore.get_entry(entrystore.iter_nth_child(parent, 1)).name, "sibling")
720
c188d5e734c8
721
c188d5e734c8
722
c188d5e734c8
723
c188d5e734c8
class EntryStore_clear(unittest.TestCase):
724
c188d5e734c8
	"EntryStore.clear()"
725
c188d5e734c8
726
c188d5e734c8
	def test_changed(self):
727
c188d5e734c8
		"EntryStore.clear() sets .changed to False"
728
c188d5e734c8
729
c188d5e734c8
		entrystore = data.EntryStore()
730
c188d5e734c8
		entrystore.add_entry(entry.GenericEntry())
731
c188d5e734c8
		entrystore.add_entry(entry.GenericEntry())
732
c188d5e734c8
733
c188d5e734c8
		self.assertEquals(entrystore.changed, True)
734
c188d5e734c8
		entrystore.clear()
735
c188d5e734c8
		self.assertEquals(entrystore.changed, False)
736
c188d5e734c8
737
c188d5e734c8
738
c188d5e734c8
	def test_clear(self):
739
c188d5e734c8
		"EntryStore.clear() removes all entries"
740
c188d5e734c8
741
c188d5e734c8
		entrystore = data.EntryStore()
742
c188d5e734c8
		entrystore.add_entry(entry.GenericEntry())
743
c188d5e734c8
		entrystore.add_entry(entry.GenericEntry())
744
c188d5e734c8
745
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(None), 2)
746
c188d5e734c8
		entrystore.clear()
747
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(None), 0)
748
c188d5e734c8
749
c188d5e734c8
750
c188d5e734c8
751
b6859b8eb257
class EntryStore_copy_entry(unittest.TestCase):
752
b6859b8eb257
	"EntryStore.copy_entry()"
753
c188d5e734c8
754
c188d5e734c8
	def test_copy(self):
755
b6859b8eb257
		"EntryStore.copy_entry() copies entry"
756
c188d5e734c8
757
c188d5e734c8
		entrystore = data.EntryStore()
758
c188d5e734c8
759
c188d5e734c8
		e = entry.GenericEntry()
760
c188d5e734c8
		e.name = "name"
761
c188d5e734c8
		e.description = "description"
762
c188d5e734c8
		e.updated = 1
763
c188d5e734c8
		e.get_field(entry.HostnameField).value = "hostname"
764
c188d5e734c8
		e.get_field(entry.UsernameField).value = "username"
765
c188d5e734c8
		e.get_field(entry.PasswordField).value = "password"
766
b6859b8eb257
		iter = entrystore.add_entry(e)
767
b6859b8eb257
768
b6859b8eb257
		f = entry.FolderEntry()
769
b6859b8eb257
		f.name = "folder"
770
b6859b8eb257
		folderiter = entrystore.add_entry(f)
771
b6859b8eb257
772
b6859b8eb257
		newiter = entrystore.copy_entry(iter, folderiter)
773
b6859b8eb257
		self.assertNotEquals(entrystore.get_path(iter), entrystore.get_path(newiter))
774
b6859b8eb257
775
b6859b8eb257
		ce = entrystore.get_entry(newiter)
776
b6859b8eb257
		self.assertEquals(e.name, ce.name)
777
b6859b8eb257
		self.assertEquals(e.description, ce.description)
778
b6859b8eb257
		self.assertEquals(e.updated, ce.updated)
779
b6859b8eb257
		self.assertEquals(e[entry.HostnameField], ce[entry.HostnameField])
780
b6859b8eb257
		self.assertEquals(e[entry.UsernameField], ce[entry.UsernameField])
781
b6859b8eb257
		self.assertEquals(e[entry.PasswordField], ce[entry.PasswordField])
782
b6859b8eb257
783
b6859b8eb257
784
b6859b8eb257
	def test_recursive(self):
785
b6859b8eb257
		"EntryStore.copy_entry() copies entries recursively"
786
b6859b8eb257
787
b6859b8eb257
		entrystore = data.EntryStore()
788
b6859b8eb257
789
b6859b8eb257
		f = entry.FolderEntry()
790
b6859b8eb257
		f.name = "folder"
791
b6859b8eb257
		folderiter = entrystore.add_entry(f)
792
b6859b8eb257
793
b6859b8eb257
		e = entry.GenericEntry()
794
b6859b8eb257
		e.name = "name"
795
b6859b8eb257
		e.description = "description"
796
b6859b8eb257
		e.updated = 1
797
b6859b8eb257
		e.get_field(entry.HostnameField).value = "hostname"
798
b6859b8eb257
		e.get_field(entry.UsernameField).value = "username"
799
b6859b8eb257
		e.get_field(entry.PasswordField).value = "password"
800
b6859b8eb257
		iter = entrystore.add_entry(e, folderiter)
801
b6859b8eb257
802
b6859b8eb257
		newiter = entrystore.copy_entry(folderiter, None)
803
b6859b8eb257
		self.assertNotEquals(entrystore.get_path(folderiter), entrystore.get_path(newiter))
804
b6859b8eb257
805
b6859b8eb257
		cf = entrystore.get_entry(newiter)
806
b6859b8eb257
		self.assertEquals(f.name, cf.name)
807
b6859b8eb257
808
b6859b8eb257
		ce = entrystore.get_entry(entrystore.iter_nth_child(newiter, 0))
809
b6859b8eb257
		self.assertEquals(e.name, ce.name)
810
b6859b8eb257
		self.assertEquals(e.description, ce.description)
811
b6859b8eb257
		self.assertEquals(e.updated, ce.updated)
812
b6859b8eb257
		self.assertEquals(e[entry.HostnameField], ce[entry.HostnameField])
813
b6859b8eb257
		self.assertEquals(e[entry.UsernameField], ce[entry.UsernameField])
814
b6859b8eb257
		self.assertEquals(e[entry.PasswordField], ce[entry.PasswordField])
815
b6859b8eb257
816
b6859b8eb257
817
b6859b8eb257
818
b6859b8eb257
class EntryStore_filter_parents(unittest.TestCase):
819
b6859b8eb257
	"EntryStore.filter_parents()"
820
b6859b8eb257
821
b6859b8eb257
	def test_filter(self):
822
b6859b8eb257
		"EntryStore.filter_parents() removes all siblings"
823
b6859b8eb257
824
b6859b8eb257
		entrystore = data.EntryStore()
825
b6859b8eb257
826
b6859b8eb257
		p1 = entrystore.add_entry(entry.FolderEntry())
827
b6859b8eb257
		p2 = entrystore.add_entry(entry.FolderEntry())
828
b6859b8eb257
		p3 = entrystore.add_entry(entry.FolderEntry())
829
b6859b8eb257
830
b6859b8eb257
		cp1 = entrystore.add_entry(entry.FolderEntry(), p2)
831
b6859b8eb257
		cp2 = entrystore.add_entry(entry.FolderEntry(), p3)
832
b6859b8eb257
833
b6859b8eb257
		c1 = entrystore.add_entry(entry.GenericEntry(), p1)
834
b6859b8eb257
		c2 = entrystore.add_entry(entry.GenericEntry(), cp1)
835
b6859b8eb257
		c3 = entrystore.add_entry(entry.GenericEntry(), cp2)
836
b6859b8eb257
837
b6859b8eb257
		self.assertEquals(
838
b6859b8eb257
			entrystore.filter_parents([ p1, p2, cp1, cp2, c1, c2, c3 ]),
839
b6859b8eb257
			[ p1, p2, cp2 ]
840
b6859b8eb257
		)
841
b6859b8eb257
842
b6859b8eb257
843
b6859b8eb257
844
b6859b8eb257
class EntryStore_folder_expanded(unittest.TestCase):
845
b6859b8eb257
	"EntryStore.folder_expanded()"
846
b6859b8eb257
847
b6859b8eb257
	def test_collapse(self):
848
b6859b8eb257
		"EntryStore.folder_expanded() sets open folder icon on expand"
849
b6859b8eb257
850
b6859b8eb257
		entrystore = data.EntryStore()
851
b6859b8eb257
852
b6859b8eb257
		f = entry.FolderEntry()
853
b6859b8eb257
		folderiter = entrystore.add_entry(f)
854
b6859b8eb257
855
b6859b8eb257
		entrystore.folder_expanded(folderiter, True)
856
b6859b8eb257
		entrystore.folder_expanded(folderiter, False)
857
b6859b8eb257
		self.assertEquals(entrystore.get_value(folderiter, data.COLUMN_ICON), ui.STOCK_ENTRY_FOLDER)
858
b6859b8eb257
859
b6859b8eb257
860
b6859b8eb257
	def test_expand(self):
861
b6859b8eb257
		"EntryStore.folder_expanded() sets open folder icon on expand"
862
b6859b8eb257
863
b6859b8eb257
		entrystore = data.EntryStore()
864
b6859b8eb257
865
b6859b8eb257
		f = entry.FolderEntry()
866
b6859b8eb257
		folderiter = entrystore.add_entry(f)
867
b6859b8eb257
868
b6859b8eb257
		entrystore.folder_expanded(folderiter, True)
869
b6859b8eb257
		self.assertEquals(entrystore.get_value(folderiter, data.COLUMN_ICON), ui.STOCK_ENTRY_FOLDER_OPEN)
870
b6859b8eb257
871
b6859b8eb257
872
b6859b8eb257
873
b6859b8eb257
class EntryStore_get_entry(unittest.TestCase):
874
b6859b8eb257
	"EntryStore.get_entry()"
875
b6859b8eb257
876
b6859b8eb257
	def test_copy(self):
877
b6859b8eb257
		"EntryStore.get_entry() returns a copy of the entry"
878
b6859b8eb257
879
b6859b8eb257
		entrystore = data.EntryStore()
880
b6859b8eb257
881
b6859b8eb257
		e = entry.GenericEntry()
882
b6859b8eb257
		e.name = "test123"
883
b6859b8eb257
		iter = entrystore.add_entry(e)
884
b6859b8eb257
885
b6859b8eb257
		e = entrystore.get_entry(iter)
886
b6859b8eb257
		e.name = "changed"
887
b6859b8eb257
888
b6859b8eb257
		self.assertEquals(entrystore.get_entry(iter).name, "test123")
889
b6859b8eb257
890
b6859b8eb257
891
b6859b8eb257
	def test_data(self):
892
b6859b8eb257
		"EntryStore.get_entry() returns all entry data"
893
b6859b8eb257
894
b6859b8eb257
		entrystore = data.EntryStore()
895
b6859b8eb257
896
b6859b8eb257
		e = entry.GenericEntry()
897
b6859b8eb257
		e.name = "name"
898
b6859b8eb257
		e.description = "description"
899
b6859b8eb257
		e.updated = 1
900
b6859b8eb257
		e.get_field(entry.HostnameField).value = "hostname"
901
b6859b8eb257
		e.get_field(entry.UsernameField).value = "username"
902
b6859b8eb257
		e.get_field(entry.PasswordField).value = "password"
903
c188d5e734c8
904
c188d5e734c8
		iter = entrystore.add_entry(e)
905
c188d5e734c8
906
c188d5e734c8
		ce = entrystore.get_entry(iter)
907
c188d5e734c8
		self.assertEquals(e.name, ce.name)
908
c188d5e734c8
		self.assertEquals(e.description, ce.description)
909
c188d5e734c8
		self.assertEquals(e.updated, ce.updated)
910
c188d5e734c8
		self.assertEquals(e[entry.HostnameField], ce[entry.HostnameField])
911
c188d5e734c8
		self.assertEquals(e[entry.UsernameField], ce[entry.UsernameField])
912
c188d5e734c8
		self.assertEquals(e[entry.PasswordField], ce[entry.PasswordField])
913
c188d5e734c8
914
c188d5e734c8
915
c188d5e734c8
	def test_none(self):
916
c188d5e734c8
		"EntryStore.get_entry() returns None on no iter"
917
c188d5e734c8
918
c188d5e734c8
		entrystore = data.EntryStore()
919
c188d5e734c8
		self.assertEquals(entrystore.get_entry(None), None)
920
c188d5e734c8
921
c188d5e734c8
922
c188d5e734c8
923
c188d5e734c8
class EntryStore_get_iter(unittest.TestCase):
924
c188d5e734c8
	"EntryStore.get_iter()"
925
c188d5e734c8
926
c188d5e734c8
	def test_inv(self):
927
c188d5e734c8
		"EntryStore.get_iter() returns None on invalid path"
928
c188d5e734c8
929
c188d5e734c8
		self.assertEquals(data.EntryStore().get_iter((0,)), None)
930
c188d5e734c8
931
c188d5e734c8
932
c188d5e734c8
	def test_iter(self):
933
c188d5e734c8
		"EntryStore.get_iter() returns iter"
934
c188d5e734c8
935
c188d5e734c8
		entrystore = data.EntryStore()
936
c188d5e734c8
937
c188d5e734c8
		e = entry.GenericEntry()
938
c188d5e734c8
		e.name = "test123"
939
c188d5e734c8
940
c188d5e734c8
		entrystore.add_entry(e)
941
c188d5e734c8
		iter = entrystore.get_iter((0,))
942
c188d5e734c8
943
c188d5e734c8
		self.assertEquals(e.name, entrystore.get_entry(iter).name)
944
c188d5e734c8
945
c188d5e734c8
946
c188d5e734c8
	def test_none(self):
947
c188d5e734c8
		"EntryStore.get_iter() handles None and variations"
948
c188d5e734c8
949
c188d5e734c8
		entrystore = data.EntryStore()
950
c188d5e734c8
		self.assertEquals(entrystore.get_iter(None), None)
951
c188d5e734c8
		self.assertEquals(entrystore.get_iter(""), None)
952
c188d5e734c8
		self.assertEquals(entrystore.get_iter(()), None)
953
c188d5e734c8
		self.assertEquals(entrystore.get_iter([]), None)
954
c188d5e734c8
955
c188d5e734c8
956
c188d5e734c8
957
c188d5e734c8
class EntryStore_get_path(unittest.TestCase):
958
c188d5e734c8
	"EntryStore.get_path()"
959
c188d5e734c8
960
c188d5e734c8
	def test_none(self):
961
c188d5e734c8
		"EntryStore.get_path() handles None"
962
c188d5e734c8
963
c188d5e734c8
		self.assertEquals(data.EntryStore().get_path(None), None)
964
c188d5e734c8
965
c188d5e734c8
966
c188d5e734c8
	def test_path(self):
967
c188d5e734c8
		"EntryStore.get_path() returns a path"
968
c188d5e734c8
969
c188d5e734c8
		entrystore = data.EntryStore()
970
c188d5e734c8
		parent = entrystore.add_entry(entry.FolderEntry())
971
c188d5e734c8
		entrystore.add_entry(entry.GenericEntry(), parent)
972
c188d5e734c8
		iter = entrystore.add_entry(entry.GenericEntry(), parent)
973
c188d5e734c8
974
c188d5e734c8
		self.assertEquals(entrystore.get_path(iter), (0, 1))
975
c188d5e734c8
976
c188d5e734c8
977
c188d5e734c8
978
b6859b8eb257
class EntryStore_get_popular_values(unittest.TestCase):
979
b6859b8eb257
	"EntryStore.get_popular_values()"
980
b6859b8eb257
981
b6859b8eb257
	def setUp(self):
982
b6859b8eb257
		"Sets up an entrystore"
983
b6859b8eb257
984
b6859b8eb257
		self.entrystore = data.EntryStore()
985
b6859b8eb257
986
b6859b8eb257
		for username in [
987
b6859b8eb257
			"test1",
988
b6859b8eb257
			"test2", "test2",
989
b6859b8eb257
			"test3", "test3", "test3",
990
b6859b8eb257
			"test4", "test4", "test4", "test4",
991
b6859b8eb257
			"test5", "test5", "test5", "test5", "test5"
992
b6859b8eb257
		]:
993
b6859b8eb257
			e = entry.GenericEntry()
994
b6859b8eb257
			e[entry.UsernameField] = username
995
b6859b8eb257
			self.entrystore.add_entry(e)
996
b6859b8eb257
997
b6859b8eb257
		for password in [
998
b6859b8eb257
			"pwtest1",
999
b6859b8eb257
			"pwtest2", "pwtest2",
1000
b6859b8eb257
			"pwtest3", "pwtest3", "pwtest3"
1001
b6859b8eb257
		]:
1002
b6859b8eb257
			e = entry.GenericEntry()
1003
b6859b8eb257
			e[entry.PasswordField] = password
1004
b6859b8eb257
			self.entrystore.add_entry(e)
1005
b6859b8eb257
1006
b6859b8eb257
1007
b6859b8eb257
	def test_alphabetic(self):
1008
b6859b8eb257
		"EntryStore.get_popular_values() returns values alphabetically"
1009
b6859b8eb257
1010
b6859b8eb257
		self.assertEquals(self.entrystore.get_popular_values(entry.UsernameField, 3), [ "test3", "test4", "test5" ])
1011
b6859b8eb257
1012
b6859b8eb257
1013
b6859b8eb257
	def test_field(self):
1014
b6859b8eb257
		"EntryStore.get_popular_values() checks given field only"
1015
b6859b8eb257
1016
b6859b8eb257
		for username in "test3", "test4", "test5":
1017
b6859b8eb257
			self.assertEquals(username in self.entrystore.get_popular_values(entry.UsernameField, 3), True)
1018
b6859b8eb257
1019
b6859b8eb257
		self.assertEquals("pwtest3" in self.entrystore.get_popular_values(entry.PasswordField, 3), True)
1020
b6859b8eb257
1021
b6859b8eb257
1022
b6859b8eb257
	def test_threshold(self):
1023
b6859b8eb257
		"EntryStore.get_popular_values() uses threshold correctly"
1024
b6859b8eb257
1025
b6859b8eb257
		for username in "test3", "test4", "test5":
1026
b6859b8eb257
			self.assertEquals(username in self.entrystore.get_popular_values(entry.UsernameField, 3), True)
1027
b6859b8eb257
1028
b6859b8eb257
		for username in [ "test5" ]:
1029
b6859b8eb257
			self.assertEquals(username in self.entrystore.get_popular_values(entry.UsernameField, 5), True)
1030
b6859b8eb257
1031
b6859b8eb257
1032
b6859b8eb257
	def test_threshold_default(self):
1033
b6859b8eb257
		"EntryStore.get_popular_values() has default threshold of 3"
1034
b6859b8eb257
1035
b6859b8eb257
		for username in "test3", "test4", "test5":
1036
b6859b8eb257
			self.assertEquals(username in self.entrystore.get_popular_values(entry.UsernameField, 3), True)
1037
b6859b8eb257
1038
b6859b8eb257
1039
b6859b8eb257
1040
b6859b8eb257
class EntryStore_import_entry(unittest.TestCase):
1041
b6859b8eb257
	"EntryStore.import_entry()"
1042
b6859b8eb257
1043
b6859b8eb257
	def setUp(self):
1044
b6859b8eb257
		"Set up entrystores"
1045
b6859b8eb257
1046
b6859b8eb257
		self.importstore = data.EntryStore()
1047
b6859b8eb257
1048
b6859b8eb257
		e = entry.GenericEntry()
1049
b6859b8eb257
		e.name = "name"
1050
b6859b8eb257
		e.description = "description"
1051
b6859b8eb257
		e.updated = 1000
1052
b6859b8eb257
		e[entry.HostnameField] = "hostname"
1053
b6859b8eb257
		e[entry.UsernameField] = "username"
1054
b6859b8eb257
		e[entry.PasswordField] = "password"
1055
b6859b8eb257
1056
b6859b8eb257
		self.importstore.add_entry(e)
1057
b6859b8eb257
1058
b6859b8eb257
		fiter = self.importstore.add_entry(entry.FolderEntry())
1059
b6859b8eb257
		self.importstore.add_entry(entry.GenericEntry(), fiter)
1060
b6859b8eb257
		self.importstore.add_entry(entry.GenericEntry(), fiter)
1061
b6859b8eb257
		self.importstore.add_entry(entry.GenericEntry())
1062
b6859b8eb257
1063
b6859b8eb257
1064
b6859b8eb257
	def test_entrydata(self):
1065
b6859b8eb257
		"EntryStore.import_entry() imports all entry data"
1066
b6859b8eb257
1067
b6859b8eb257
		entrystore = data.EntryStore()
1068
b6859b8eb257
		entrystore.import_entry(self.importstore, self.importstore.iter_nth_child(None, 0))
1069
b6859b8eb257
1070
b6859b8eb257
		e = entrystore.get_entry(entrystore.iter_nth_child(None, 0))
1071
b6859b8eb257
		o = self.importstore.get_entry(self.importstore.iter_nth_child(None, 0))
1072
b6859b8eb257
1073
b6859b8eb257
		self.assertEquals(e.name, o.name)
1074
b6859b8eb257
		self.assertEquals(e.description, o.description)
1075
b6859b8eb257
		self.assertEquals(e.updated, o.updated)
1076
b6859b8eb257
		self.assertEquals(e[entry.HostnameField], o[entry.HostnameField])
1077
b6859b8eb257
		self.assertEquals(e[entry.UsernameField], o[entry.UsernameField])
1078
b6859b8eb257
		self.assertEquals(e[entry.PasswordField], o[entry.PasswordField])
1079
b6859b8eb257
1080
b6859b8eb257
1081
b6859b8eb257
	def test_parent(self):
1082
b6859b8eb257
		"EntryStore.import_entry() imports to parent correctly"
1083
b6859b8eb257
1084
b6859b8eb257
		entrystore = data.EntryStore()
1085
b6859b8eb257
		fiter = entrystore.add_entry(entry.FolderEntry())
1086
b6859b8eb257
		entrystore.import_entry(self.importstore, self.importstore.iter_nth_child(None, 0), fiter)
1087
b6859b8eb257
1088
b6859b8eb257
		self.assertEquals(entrystore.iter_n_children(fiter), 1)
1089
b6859b8eb257
1090
b6859b8eb257
1091
b6859b8eb257
	def test_recursive(self):
1092
b6859b8eb257
		"EntryStore.import_entry() imports entries recursively"
1093
b6859b8eb257
1094
b6859b8eb257
		entrystore = data.EntryStore()
1095
b6859b8eb257
		entrystore.import_entry(self.importstore, self.importstore.iter_nth_child(None, 1))
1096
b6859b8eb257
1097
b6859b8eb257
		self.assertEquals(entrystore.iter_n_children(entrystore.iter_nth_child(None, 0)), 2)
1098
b6859b8eb257
1099
b6859b8eb257
1100
b6859b8eb257
	def test_return_single(self):
1101
b6859b8eb257
		"EntryStore.import_entry() returns new iter when specified"
1102
b6859b8eb257
1103
b6859b8eb257
		entrystore = data.EntryStore()
1104
b6859b8eb257
		iter = entrystore.import_entry(self.importstore, self.importstore.iter_nth_child(None, 1))
1105
b6859b8eb257
1106
b6859b8eb257
		self.assertEquals(entrystore.get_path(iter), (0, ))
1107
b6859b8eb257
1108
b6859b8eb257
1109
b6859b8eb257
	def test_return_multiple(self):
1110
b6859b8eb257
		"EntryStore.import_entry() returns all new iters when not specified"
1111
b6859b8eb257
1112
b6859b8eb257
		entrystore = data.EntryStore()
1113
b6859b8eb257
		iters = entrystore.import_entry(self.importstore, None)
1114
b6859b8eb257
1115
b6859b8eb257
		self.assertEquals(len(iters), 3)
1116
b6859b8eb257
1117
b6859b8eb257
		for iter, index in zip(iters, range(len(iters))):
1118
b6859b8eb257
			self.assertEquals(entrystore.get_path(iter), (index, ))
1119
b6859b8eb257
1120
b6859b8eb257
1121
b6859b8eb257
	def test_sibling(self):
1122
b6859b8eb257
		"EntryStore.import_entry() places entry before sibling"
1123
b6859b8eb257
1124
b6859b8eb257
		entrystore = data.EntryStore()
1125
b6859b8eb257
		fiter = entrystore.add_entry(entry.FolderEntry())
1126
b6859b8eb257
1127
b6859b8eb257
		e = entry.GenericEntry()
1128
b6859b8eb257
		e.name = "test1"
1129
b6859b8eb257
		entrystore.add_entry(e, fiter)
1130
b6859b8eb257
1131
b6859b8eb257
		e = entry.GenericEntry()
1132
b6859b8eb257
		e.name = "test2"
1133
b6859b8eb257
		sibling = entrystore.add_entry(e, fiter)
1134
b6859b8eb257
1135
b6859b8eb257
		entrystore.import_entry(self.importstore, self.importstore.iter_nth_child(None, 0), fiter, sibling)
1136
b6859b8eb257
1137
b6859b8eb257
		self.assertEquals(entrystore.get_entry(entrystore.iter_nth_child(fiter, 0)).name, "test1")
1138
b6859b8eb257
		self.assertEquals(entrystore.get_entry(entrystore.iter_nth_child(fiter, 1)).name, "name")
1139
b6859b8eb257
		self.assertEquals(entrystore.get_entry(entrystore.iter_nth_child(fiter, 2)).name, "test2")
1140
b6859b8eb257
1141
b6859b8eb257
1142
b6859b8eb257
1143
c188d5e734c8
class EntryStore_iter_traverse_prev(unittest.TestCase):
1144
c188d5e734c8
	"EntryStore.iter_traverse_prev()"
1145
c188d5e734c8
1146
c188d5e734c8
	def setUp(self):
1147
c188d5e734c8
		"Set up the entrystore"
1148
c188d5e734c8
1149
c188d5e734c8
		self.entrystore = data.EntryStore()
1150
c188d5e734c8
1151
c188d5e734c8
		e = entry.GenericEntry()
1152
c188d5e734c8
		e.name = "entry0"
1153
c188d5e734c8
		self.entrystore.add_entry(e)
1154
c188d5e734c8
1155
c188d5e734c8
		e = entry.FolderEntry()
1156
c188d5e734c8
		e.name = "folder0"
1157
c188d5e734c8
		parent = self.entrystore.add_entry(e)
1158
c188d5e734c8
1159
c188d5e734c8
		e = entry.GenericEntry()
1160
c188d5e734c8
		e.name = "entry1"
1161
c188d5e734c8
		self.entrystore.add_entry(e, parent)
1162
c188d5e734c8
1163
c188d5e734c8
		e = entry.GenericEntry()
1164
c188d5e734c8
		e.name = "entry2"
1165
c188d5e734c8
		self.entrystore.add_entry(e, parent)
1166
c188d5e734c8
1167
c188d5e734c8
		e = entry.FolderEntry()
1168
c188d5e734c8
		e.name = "folder1"
1169
c188d5e734c8
		parent2 = self.entrystore.add_entry(e, parent)
1170
c188d5e734c8
1171
c188d5e734c8
		e = entry.GenericEntry()
1172
c188d5e734c8
		e.name = "entry3"
1173
c188d5e734c8
		self.entrystore.add_entry(e, parent2)
1174
c188d5e734c8
1175
c188d5e734c8
		e = entry.GenericEntry()
1176
c188d5e734c8
		e.name = "entry4"
1177
c188d5e734c8
		self.entrystore.add_entry(e, parent)
1178
c188d5e734c8
1179
c188d5e734c8
		e = entry.GenericEntry()
1180
c188d5e734c8
		e.name = "entry5"
1181
c188d5e734c8
		self.entrystore.add_entry(e)
1182
c188d5e734c8
	
1183
c188d5e734c8
		e = entry.FolderEntry()
1184
c188d5e734c8
		e.name = "folder2"
1185
c188d5e734c8
		parent = self.entrystore.add_entry(e)
1186
c188d5e734c8
1187
c188d5e734c8
		e = entry.GenericEntry()
1188
c188d5e734c8
		e.name = "entry6"
1189
c188d5e734c8
		self.entrystore.add_entry(e, parent)
1190
c188d5e734c8
1191
c188d5e734c8
1192
c188d5e734c8
	def test_none(self):
1193
c188d5e734c8
		"EntryStore.iter_traverse_prev() returns last node on None"
1194
c188d5e734c8
1195
c188d5e734c8
		iter = self.entrystore.iter_traverse_prev(None)
1196
c188d5e734c8
		self.assertEquals(self.entrystore.get_entry(iter).name, "entry6")
1197
c188d5e734c8
1198
c188d5e734c8
1199
c188d5e734c8
	def test_traverse(self):
1200
c188d5e734c8
		"EntryStore.iter_traverse_prev() uses correct traversal"
1201
c188d5e734c8
1202
c188d5e734c8
		order = (
1203
c188d5e734c8
			"entry6",
1204
c188d5e734c8
			"folder2",
1205
c188d5e734c8
			"entry5",
1206
c188d5e734c8
			"entry4",
1207
c188d5e734c8
			"entry3",
1208
c188d5e734c8
			"folder1",
1209
c188d5e734c8
			"entry2",
1210
c188d5e734c8
			"entry1",
1211
c188d5e734c8
			"folder0",
1212
c188d5e734c8
			"entry0"
1213
c188d5e734c8
		)
1214
c188d5e734c8
1215
c188d5e734c8
		iter = None
1216
c188d5e734c8
1217
c188d5e734c8
		for name in order:
1218
c188d5e734c8
			iter = self.entrystore.iter_traverse_prev(iter)
1219
c188d5e734c8
			self.assertEquals(self.entrystore.get_entry(iter).name, name)
1220
c188d5e734c8
1221
c188d5e734c8
1222
c188d5e734c8
1223
c188d5e734c8
class EntryStore_iter_traverse_next(unittest.TestCase):
1224
c188d5e734c8
	"EntryStore.iter_traverse_next()"
1225
c188d5e734c8
1226
c188d5e734c8
	def setUp(self):
1227
c188d5e734c8
		"Set up the entrystore"
1228
c188d5e734c8
1229
c188d5e734c8
		self.entrystore = data.EntryStore()
1230
c188d5e734c8
1231
c188d5e734c8
		e = entry.GenericEntry()
1232
c188d5e734c8
		e.name = "entry0"
1233
c188d5e734c8
		self.entrystore.add_entry(e)
1234
c188d5e734c8
1235
c188d5e734c8
		e = entry.FolderEntry()
1236
c188d5e734c8
		e.name = "folder0"
1237
c188d5e734c8
		parent = self.entrystore.add_entry(e)
1238
c188d5e734c8
1239
c188d5e734c8
		e = entry.GenericEntry()
1240
c188d5e734c8
		e.name = "entry1"
1241
c188d5e734c8
		self.entrystore.add_entry(e, parent)
1242
c188d5e734c8
1243
c188d5e734c8
		e = entry.GenericEntry()
1244
c188d5e734c8
		e.name = "entry2"
1245
c188d5e734c8
		self.entrystore.add_entry(e, parent)
1246
c188d5e734c8
1247
c188d5e734c8
		e = entry.FolderEntry()
1248
c188d5e734c8
		e.name = "folder1"
1249
c188d5e734c8
		parent2 = self.entrystore.add_entry(e, parent)
1250
c188d5e734c8
1251
c188d5e734c8
		e = entry.GenericEntry()
1252
c188d5e734c8
		e.name = "entry3"
1253
c188d5e734c8
		self.entrystore.add_entry(e, parent2)
1254
c188d5e734c8
1255
c188d5e734c8
		e = entry.GenericEntry()
1256
c188d5e734c8
		e.name = "entry4"
1257
c188d5e734c8
		self.entrystore.add_entry(e, parent)
1258
c188d5e734c8
1259
c188d5e734c8
		e = entry.GenericEntry()
1260
c188d5e734c8
		e.name = "entry5"
1261
c188d5e734c8
		self.entrystore.add_entry(e)
1262
c188d5e734c8
	
1263
c188d5e734c8
		e = entry.FolderEntry()
1264
c188d5e734c8
		e.name = "folder2"
1265
c188d5e734c8
		parent = self.entrystore.add_entry(e)
1266
c188d5e734c8
1267
c188d5e734c8
		e = entry.GenericEntry()
1268
c188d5e734c8
		e.name = "entry6"
1269
c188d5e734c8
		self.entrystore.add_entry(e, parent)
1270
c188d5e734c8
1271
c188d5e734c8
1272
c188d5e734c8
	def test_none(self):
1273
c188d5e734c8
		"EntryStore.iter_traverse_next() returns first node on None"
1274
c188d5e734c8
1275
c188d5e734c8
		iter = self.entrystore.iter_traverse_next(None)
1276
c188d5e734c8
		self.assertEquals(self.entrystore.get_entry(iter).name, "entry0")
1277
c188d5e734c8
1278
c188d5e734c8
1279
c188d5e734c8
	def test_traverse(self):
1280
c188d5e734c8
		"EntryStore.iter_traverse_next() uses correct traversal"
1281
c188d5e734c8
1282
c188d5e734c8
		order = (
1283
c188d5e734c8
			"entry0",
1284
c188d5e734c8
			"folder0",
1285
c188d5e734c8
			"entry1",
1286
c188d5e734c8
			"entry2",
1287
c188d5e734c8
			"folder1",
1288
c188d5e734c8
			"entry3",
1289
c188d5e734c8
			"entry4",
1290
c188d5e734c8
			"entry5",
1291
c188d5e734c8
			"folder2",
1292
c188d5e734c8
			"entry6"
1293
c188d5e734c8
		)
1294
c188d5e734c8
1295
c188d5e734c8
		iter = None
1296
c188d5e734c8
1297
c188d5e734c8
		for name in order:
1298
c188d5e734c8
			iter = self.entrystore.iter_traverse_next(iter)
1299
c188d5e734c8
			self.assertEquals(self.entrystore.get_entry(iter).name, name)
1300
c188d5e734c8
1301
c188d5e734c8
1302
c188d5e734c8
1303
b6859b8eb257
class EntryStore_move_entry(unittest.TestCase):
1304
b6859b8eb257
	"EntryStore.move_entry()"
1305
b6859b8eb257
1306
b6859b8eb257
	def test_entrydata(self):
1307
b6859b8eb257
		"EntryStore.move_entry() preserves all entry data"
1308
b6859b8eb257
1309
b6859b8eb257
		entrystore = data.EntryStore()
1310
b6859b8eb257
1311
b6859b8eb257
		e = entry.GenericEntry()
1312
b6859b8eb257
		e.name = "name"
1313
b6859b8eb257
		e.description = "description"
1314
b6859b8eb257
		e.updated = 1000
1315
b6859b8eb257
		e[entry.HostnameField] = "hostname"
1316
b6859b8eb257
		e[entry.UsernameField] = "username"
1317
b6859b8eb257
		e[entry.PasswordField] = "password"
1318
b6859b8eb257
		iter = entrystore.add_entry(e)
1319
b6859b8eb257
1320
b6859b8eb257
		fiter = entrystore.add_entry(entry.FolderEntry())
1321
b6859b8eb257
1322
b6859b8eb257
		entrystore.move_entry(iter, fiter)
1323
b6859b8eb257
1324
b6859b8eb257
		m = entrystore.get_entry(entrystore.iter_nth_child(fiter, 0))
1325
b6859b8eb257
1326
b6859b8eb257
		self.assertEquals(e.name, m.name)
1327
b6859b8eb257
		self.assertEquals(e.description, m.description)
1328
b6859b8eb257
		self.assertEquals(e.updated, m.updated)
1329
b6859b8eb257
		self.assertEquals(e[entry.HostnameField], m[entry.HostnameField])
1330
b6859b8eb257
		self.assertEquals(e[entry.UsernameField], m[entry.UsernameField])
1331
b6859b8eb257
		self.assertEquals(e[entry.PasswordField], m[entry.PasswordField])
1332
b6859b8eb257
1333
b6859b8eb257
1334
b6859b8eb257
	def test_move(self):
1335
b6859b8eb257
		"EntryStore.move_entry() moves the entry"
1336
b6859b8eb257
1337
b6859b8eb257
		entrystore = data.EntryStore()
1338
b6859b8eb257
1339
b6859b8eb257
		entrystore.add_entry(entry.GenericEntry())
1340
b6859b8eb257
		fiter = entrystore.add_entry(entry.FolderEntry())
1341
b6859b8eb257
		entrystore.add_entry(entry.GenericEntry())
1342
b6859b8eb257
1343
b6859b8eb257
		entrystore.move_entry(entrystore.iter_nth_child(None, 2), fiter)
1344
b6859b8eb257
1345
b6859b8eb257
		self.assertEquals(entrystore.iter_n_children(None), 2)
1346
b6859b8eb257
		self.assertEquals(entrystore.iter_n_children(fiter), 1)
1347
b6859b8eb257
1348
b6859b8eb257
1349
b6859b8eb257
	def test_parent(self):
1350
b6859b8eb257
		"EntryStore.move_entry() moves to parent correctly"
1351
b6859b8eb257
1352
b6859b8eb257
		entrystore = data.EntryStore()
1353
b6859b8eb257
1354
b6859b8eb257
		e = entry.GenericEntry()
1355
b6859b8eb257
		e.name = "test1"
1356
b6859b8eb257
		iter = entrystore.add_entry(e)
1357
b6859b8eb257
1358
b6859b8eb257
		fiter = entrystore.add_entry(entry.FolderEntry())
1359
b6859b8eb257
1360
b6859b8eb257
		e = entry.GenericEntry()
1361
b6859b8eb257
		e.name = "test2"
1362
b6859b8eb257
		entrystore.add_entry(e, fiter)
1363
b6859b8eb257
1364
b6859b8eb257
		entrystore.move_entry(iter, fiter)
1365
b6859b8eb257
1366
b6859b8eb257
		e = entrystore.get_entry(entrystore.iter_nth_child(fiter, 1))
1367
b6859b8eb257
		self.assertEquals(e.name, "test1")
1368
b6859b8eb257
1369
b6859b8eb257
1370
b6859b8eb257
	def test_recursive(self):
1371
b6859b8eb257
		"EntryStore.move_entry() moves entries recursively"
1372
b6859b8eb257
1373
b6859b8eb257
		entrystore = data.EntryStore()
1374
b6859b8eb257
		iter = entrystore.add_entry(entry.FolderEntry())
1375
b6859b8eb257
		entrystore.add_entry(entry.GenericEntry(), iter)
1376
b6859b8eb257
		entrystore.add_entry(entry.GenericEntry(), iter)
1377
b6859b8eb257
1378
b6859b8eb257
		fiter = entrystore.add_entry(entry.FolderEntry())
1379
b6859b8eb257
1380
b6859b8eb257
		entrystore.move_entry(iter, fiter)
1381
b6859b8eb257
		self.assertEquals(entrystore.iter_n_children(entrystore.iter_nth_child(fiter, 0)), 2)
1382
b6859b8eb257
1383
b6859b8eb257
1384
b6859b8eb257
	def test_return(self):
1385
b6859b8eb257
		"EntryStore.move_entry() returns new iter"
1386
b6859b8eb257
1387
b6859b8eb257
		entrystore = data.EntryStore()
1388
b6859b8eb257
		iter = entrystore.add_entry(entry.GenericEntry())
1389
b6859b8eb257
		fiter = entrystore.add_entry(entry.FolderEntry())
1390
b6859b8eb257
1391
b6859b8eb257
		newiter = entrystore.move_entry(iter, fiter)
1392
b6859b8eb257
		self.assertEquals(entrystore.get_path(newiter), (0,0))
1393
b6859b8eb257
1394
b6859b8eb257
1395
b6859b8eb257
	def test_sibling(self):
1396
b6859b8eb257
		"EntryStore.move_entry() moves to before sibling"
1397
b6859b8eb257
1398
b6859b8eb257
		entrystore = data.EntryStore()
1399
b6859b8eb257
1400
b6859b8eb257
		e = entry.GenericEntry()
1401
b6859b8eb257
		e.name = "test1"
1402
b6859b8eb257
		iter = entrystore.add_entry(e)
1403
b6859b8eb257
1404
b6859b8eb257
		fiter = entrystore.add_entry(entry.FolderEntry())
1405
b6859b8eb257
1406
b6859b8eb257
		e = entry.GenericEntry()
1407
b6859b8eb257
		e.name = "test2"
1408
b6859b8eb257
		entrystore.add_entry(e, fiter)
1409
b6859b8eb257
1410
b6859b8eb257
		e = entry.GenericEntry()
1411
b6859b8eb257
		e.name = "test3"
1412
b6859b8eb257
		sibling = entrystore.add_entry(e, fiter)
1413
b6859b8eb257
1414
b6859b8eb257
		entrystore.move_entry(iter, fiter, sibling)
1415
b6859b8eb257
1416
b6859b8eb257
		self.assertEquals(entrystore.get_entry(entrystore.iter_nth_child(fiter, 0)).name, "test2")
1417
b6859b8eb257
		self.assertEquals(entrystore.get_entry(entrystore.iter_nth_child(fiter, 1)).name, "test1")
1418
b6859b8eb257
		self.assertEquals(entrystore.get_entry(entrystore.iter_nth_child(fiter, 2)).name, "test3")
1419
b6859b8eb257
1420
b6859b8eb257
1421
b6859b8eb257
1422
c188d5e734c8
class EntryStore_remove_entry(unittest.TestCase):
1423
c188d5e734c8
	"EntryStore.remove_entry()"
1424
c188d5e734c8
1425
c188d5e734c8
	def test_none(self):
1426
c188d5e734c8
		"EntryStore.remove_entry() handles None"
1427
c188d5e734c8
1428
c188d5e734c8
		data.EntryStore().remove_entry(None)
1429
c188d5e734c8
1430
c188d5e734c8
1431
c188d5e734c8
	def test_remove(self):
1432
c188d5e734c8
		"EntryStore.remove_entry() removes entry"
1433
c188d5e734c8
1434
c188d5e734c8
		entrystore = data.EntryStore()
1435
c188d5e734c8
		iter = entrystore.add_entry(entry.GenericEntry())
1436
c188d5e734c8
1437
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(None), 1)
1438
c188d5e734c8
		entrystore.remove_entry(iter)
1439
c188d5e734c8
		self.assertEquals(entrystore.iter_n_children(None), 0)
1440
c188d5e734c8
1441
c188d5e734c8
	
1442
c188d5e734c8
1443
c188d5e734c8
class EntryStore_update_entry(unittest.TestCase):
1444
c188d5e734c8
	"EntryStore.update_entry()"
1445
c188d5e734c8
1446
c188d5e734c8
	def test_changed(self):
1447
c188d5e734c8
		"EntryStore.update_entry() sets .changed to True"
1448
c188d5e734c8
1449
c188d5e734c8
		entrystore = data.EntryStore()
1450
c188d5e734c8
1451
c188d5e734c8
		e = entry.GenericEntry()
1452
c188d5e734c8
		iter = entrystore.add_entry(e)
1453
c188d5e734c8
		entrystore.changed = False
1454
c188d5e734c8
1455
c188d5e734c8
		e.name = "test"
1456
c188d5e734c8
		entrystore.update_entry(iter, e)
1457
c188d5e734c8
		self.assertEquals(entrystore.changed, True)
1458
c188d5e734c8
1459
c188d5e734c8
1460
c188d5e734c8
	def test_data(self):
1461
c188d5e734c8
		"EntryStore.update_entry() updates all data"
1462
c188d5e734c8
1463
c188d5e734c8
		entrystore = data.EntryStore()
1464
c188d5e734c8
1465
c188d5e734c8
		e = entry.GenericEntry()
1466
c188d5e734c8
		iter = entrystore.add_entry(e)
1467
c188d5e734c8
1468
c188d5e734c8
		e.name = "name"
1469
c188d5e734c8
		e.description = "description"
1470
c188d5e734c8
		e.updated = 1
1471
c188d5e734c8
		e.get_field(entry.HostnameField).value = "hostname"
1472
c188d5e734c8
		e.get_field(entry.UsernameField).value = "username"
1473
c188d5e734c8
		e.get_field(entry.PasswordField).value = "password"
1474
c188d5e734c8
1475
c188d5e734c8
		entrystore.update_entry(iter, e)
1476
c188d5e734c8
1477
c188d5e734c8
		ce = entrystore.get_entry(iter)
1478
c188d5e734c8
		self.assertEquals(entrystore.get_value(iter, 0), e.name)
1479
c188d5e734c8
		self.assertEquals(entrystore.get_value(iter, 1), e.icon)
1480
c188d5e734c8
		self.assertEquals(e.name, ce.name)
1481
c188d5e734c8
		self.assertEquals(e.description, ce.description)
1482
c188d5e734c8
		self.assertEquals(e.updated, ce.updated)
1483
c188d5e734c8
		self.assertEquals(e[entry.HostnameField], ce[entry.HostnameField])
1484
c188d5e734c8
		self.assertEquals(e[entry.UsernameField], ce[entry.UsernameField])
1485
c188d5e734c8
		self.assertEquals(e[entry.PasswordField], ce[entry.PasswordField])
1486
c188d5e734c8
1487
c188d5e734c8
1488
c188d5e734c8
	def test_none(self):
1489
c188d5e734c8
		"EntryStore.update_entry() accepts None iter"
1490
c188d5e734c8
1491
c188d5e734c8
		entrystore = data.EntryStore()
1492
c188d5e734c8
		entrystore.update_entry(None, None)
1493
c188d5e734c8
1494
c188d5e734c8
1495
c188d5e734c8
1496
c188d5e734c8
class UndoQueue_add_action(unittest.TestCase):
1497
c188d5e734c8
	"UndoQueue.add_action()"
1498
c188d5e734c8
1499
c188d5e734c8
	def test_add(self):
1500
c188d5e734c8
		"UndoQueue.add_action() adds an action"
1501
c188d5e734c8
1502
c188d5e734c8
		undoqueue = data.UndoQueue()
1503
c188d5e734c8
		undoqueue.add_action("test", None, None, {})
1504
c188d5e734c8
1505
c188d5e734c8
		self.assertEquals(undoqueue.can_undo(), True)
1506
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), False)
1507
c188d5e734c8
1508
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action(), ( None, "test", {} ))
1509
c188d5e734c8
1510
c188d5e734c8
1511
c188d5e734c8
	def test_inject(self):
1512
c188d5e734c8
		"UndoQueue.add_action() removes actions later in the queue"
1513
c188d5e734c8
1514
c188d5e734c8
		undoqueue = data.UndoQueue()
1515
c188d5e734c8
		undoqueue.add_action("test0", lambda n,d: 1, lambda n,d: 1, {})
1516
c188d5e734c8
		undoqueue.add_action("test1", lambda n,d: 1, lambda n,d: 1, {})
1517
c188d5e734c8
		undoqueue.add_action("test2", lambda n,d: 1, lambda n,d: 1, {})
1518
c188d5e734c8
		undoqueue.add_action("test3", lambda n,d: 1, lambda n,d: 1, {})
1519
c188d5e734c8
1520
c188d5e734c8
		undoqueue.undo()
1521
c188d5e734c8
		undoqueue.undo()
1522
c188d5e734c8
1523
c188d5e734c8
		undoqueue.add_action("test4", lambda n,d: 1, lambda n,d: 1, {})
1524
c188d5e734c8
1525
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), False)
1526
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "test4")
1527
c188d5e734c8
		undoqueue.undo()
1528
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "test1")
1529
c188d5e734c8
1530
c188d5e734c8
1531
c188d5e734c8
1532
c188d5e734c8
class UndoQueue_can_redo(unittest.TestCase):
1533
c188d5e734c8
	"UndoQueue.can_redo()"
1534
c188d5e734c8
1535
c188d5e734c8
	def test_can_redo(self):
1536
c188d5e734c8
		"UndoQueue.can_redo() returns correct values"
1537
c188d5e734c8
1538
c188d5e734c8
		undoqueue = data.UndoQueue()
1539
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), False)
1540
c188d5e734c8
1541
c188d5e734c8
		undoqueue.add_action("test", lambda n,d: 1, lambda n,d: 1, None)
1542
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), False)
1543
c188d5e734c8
1544
c188d5e734c8
		undoqueue.add_action("test", lambda n,d: 1, lambda n,d: 1, None)
1545
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), False)
1546
c188d5e734c8
1547
c188d5e734c8
		undoqueue.undo()
1548
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), True)
1549
c188d5e734c8
1550
c188d5e734c8
		undoqueue.undo()
1551
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), True)
1552
c188d5e734c8
1553
c188d5e734c8
		undoqueue.redo()
1554
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), True)
1555
c188d5e734c8
1556
c188d5e734c8
		undoqueue.redo()
1557
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), False)
1558
c188d5e734c8
1559
c188d5e734c8
1560
c188d5e734c8
1561
c188d5e734c8
class UndoQueue_can_undo(unittest.TestCase):
1562
c188d5e734c8
	"UndoQueue.can_undo()"
1563
c188d5e734c8
1564
c188d5e734c8
	def test_can_undo(self):
1565
c188d5e734c8
		"UndoQueue.can_undo() returns correct values"
1566
c188d5e734c8
1567
c188d5e734c8
		undoqueue = data.UndoQueue()
1568
c188d5e734c8
		self.assertEquals(undoqueue.can_undo(), False)
1569
c188d5e734c8
1570
c188d5e734c8
		undoqueue.add_action("test", lambda n,d: 1, lambda n,d: 1, None)
1571
c188d5e734c8
		self.assertEquals(undoqueue.can_undo(), True)
1572
c188d5e734c8
1573
c188d5e734c8
		undoqueue.add_action("test", lambda n,d: 1, lambda n,d: 1, None)
1574
c188d5e734c8
		self.assertEquals(undoqueue.can_undo(), True)
1575
c188d5e734c8
1576
c188d5e734c8
		undoqueue.undo()
1577
c188d5e734c8
		self.assertEquals(undoqueue.can_undo(), True)
1578
c188d5e734c8
1579
c188d5e734c8
		undoqueue.undo()
1580
c188d5e734c8
		self.assertEquals(undoqueue.can_undo(), False)
1581
c188d5e734c8
1582
c188d5e734c8
1583
c188d5e734c8
1584
c188d5e734c8
class UndoQueue_clear(unittest.TestCase):
1585
c188d5e734c8
	"UndoQueue.clear()"
1586
c188d5e734c8
1587
c188d5e734c8
	def test_clear(self):
1588
c188d5e734c8
		"UndoQueue.clear() clears the queue"
1589
c188d5e734c8
1590
c188d5e734c8
		undoqueue = data.UndoQueue()
1591
c188d5e734c8
		undoqueue.add_action("test", lambda n,d: 1, lambda n,d: 1, None)
1592
c188d5e734c8
		undoqueue.add_action("test", lambda n,d: 1, lambda n,d: 1, None)
1593
c188d5e734c8
		undoqueue.undo()
1594
c188d5e734c8
1595
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), True)
1596
c188d5e734c8
		self.assertEquals(undoqueue.can_undo(), True)
1597
c188d5e734c8
1598
c188d5e734c8
		undoqueue.clear()
1599
c188d5e734c8
		self.assertEquals(undoqueue.can_redo(), False)
1600
c188d5e734c8
		self.assertEquals(undoqueue.can_undo(), False)
1601
c188d5e734c8
1602
c188d5e734c8
1603
c188d5e734c8
1604
c188d5e734c8
class UndoQueue_get_redo_action(unittest.TestCase):
1605
c188d5e734c8
	"UndoQueue.get_redo_action()"
1606
c188d5e734c8
1607
c188d5e734c8
	def test_data(self):
1608
c188d5e734c8
		"UndoQueue.get_redo_action() returns correct data"
1609
c188d5e734c8
1610
c188d5e734c8
		undoqueue = data.UndoQueue()
1611
c188d5e734c8
		undoqueue.add_action("name", lambda n,d: 1, None, [])
1612
c188d5e734c8
		undoqueue.undo()
1613
c188d5e734c8
1614
c188d5e734c8
		self.assertEquals(undoqueue.get_redo_action(), ( None, "name", [] ))
1615
c188d5e734c8
1616
c188d5e734c8
1617
c188d5e734c8
	def test_order(self):
1618
c188d5e734c8
		"UndoQueue.get_redo_action() returns the correct action"
1619
c188d5e734c8
1620
c188d5e734c8
		undoqueue = data.UndoQueue()
1621
c188d5e734c8
		undoqueue.add_action("name0", lambda n,d: 1, None, [])
1622
c188d5e734c8
		undoqueue.add_action("name1", lambda n,d: 1, None, [])
1623
c188d5e734c8
		undoqueue.add_action("name2", lambda n,d: 1, None, [])
1624
c188d5e734c8
		undoqueue.undo()
1625
c188d5e734c8
		undoqueue.undo()
1626
c188d5e734c8
1627
c188d5e734c8
		self.assertEquals(undoqueue.get_redo_action(), ( None, "name1", [] ))
1628
c188d5e734c8
1629
c188d5e734c8
1630
c188d5e734c8
1631
c188d5e734c8
class UndoQueue_get_undo_action(unittest.TestCase):
1632
c188d5e734c8
	"UndoQueue.get_undo_action()"
1633
c188d5e734c8
1634
c188d5e734c8
	def test_data(self):
1635
c188d5e734c8
		"UndoQueue.get_undo_action() returns correct data"
1636
c188d5e734c8
1637
c188d5e734c8
		undoqueue = data.UndoQueue()
1638
c188d5e734c8
		undoqueue.add_action("name", None, lambda n,d: 1, [])
1639
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action(), ( None, "name", [] ))
1640
c188d5e734c8
1641
c188d5e734c8
1642
c188d5e734c8
	def test_order(self):
1643
c188d5e734c8
		"UndoQueue.get_undo_action() returns the correct action"
1644
c188d5e734c8
1645
c188d5e734c8
		undoqueue = data.UndoQueue()
1646
c188d5e734c8
		undoqueue.add_action("name0", lambda n,d: 1, None, [])
1647
c188d5e734c8
		undoqueue.add_action("name1", lambda n,d: 1, None, [])
1648
c188d5e734c8
		undoqueue.add_action("name2", lambda n,d: 1, None, [])
1649
c188d5e734c8
		undoqueue.undo()
1650
c188d5e734c8
		undoqueue.undo()
1651
c188d5e734c8
1652
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "name0" )
1653
c188d5e734c8
1654
c188d5e734c8
1655
c188d5e734c8
1656
c188d5e734c8
1657
c188d5e734c8
class UndoQueue_redo(unittest.TestCase):
1658
c188d5e734c8
	"UndoQueue.redo()"
1659
c188d5e734c8
1660
c188d5e734c8
	def test_callback(self):
1661
c188d5e734c8
		"UndoQueue.redo() correctly calls the callback"
1662
c188d5e734c8
1663
c188d5e734c8
		global called
1664
c188d5e734c8
		called = False
1665
c188d5e734c8
1666
c188d5e734c8
		def cb(name, actiondata):
1667
c188d5e734c8
			global called
1668
c188d5e734c8
			called = True
1669
c188d5e734c8
1670
c188d5e734c8
			self.assertEquals(name, "name")
1671
c188d5e734c8
			self.assertEquals(actiondata, "data")
1672
c188d5e734c8
1673
c188d5e734c8
		undoqueue = data.UndoQueue()
1674
c188d5e734c8
		undoqueue.add_action("name", lambda n,d: 1, cb, "data")
1675
c188d5e734c8
		undoqueue.undo()
1676
c188d5e734c8
		undoqueue.redo()
1677
c188d5e734c8
1678
c188d5e734c8
		self.assertEquals(called, True)
1679
c188d5e734c8
1680
c188d5e734c8
1681
c188d5e734c8
	def test_increment(self):
1682
c188d5e734c8
		"UndoQueue.redo() increments the action pointer"
1683
c188d5e734c8
1684
c188d5e734c8
		undoqueue = data.UndoQueue()
1685
c188d5e734c8
		undoqueue.add_action("action0", lambda n,d: 1, lambda n,d: 1, None)
1686
c188d5e734c8
		undoqueue.add_action("action1", lambda n,d: 1, lambda n,d: 1, None)
1687
c188d5e734c8
		undoqueue.add_action("action2", lambda n,d: 1, lambda n,d: 1, None)
1688
c188d5e734c8
1689
c188d5e734c8
		undoqueue.undo()
1690
c188d5e734c8
		undoqueue.undo()
1691
c188d5e734c8
		undoqueue.undo()
1692
c188d5e734c8
1693
c188d5e734c8
		self.assertEquals(undoqueue.get_redo_action()[1], "action0")
1694
c188d5e734c8
		undoqueue.redo()
1695
c188d5e734c8
		self.assertEquals(undoqueue.get_redo_action()[1], "action1")
1696
c188d5e734c8
		undoqueue.redo()
1697
c188d5e734c8
		self.assertEquals(undoqueue.get_redo_action()[1], "action2")
1698
c188d5e734c8
		undoqueue.redo()
1699
c188d5e734c8
		self.assertEquals(undoqueue.get_redo_action(), None)
1700
c188d5e734c8
1701
c188d5e734c8
1702
c188d5e734c8
	def test_overflow(self):
1703
c188d5e734c8
		"UndoQueue.redo() doesn't overflow the pointer"
1704
c188d5e734c8
1705
c188d5e734c8
		undoqueue = data.UndoQueue()
1706
c188d5e734c8
		undoqueue.add_action("action0", lambda n,d: 1, lambda n,d: 1, None)
1707
c188d5e734c8
		undoqueue.add_action("action1", lambda n,d: 1, lambda n,d: 1, None)
1708
c188d5e734c8
		undoqueue.add_action("action2", lambda n,d: 1, lambda n,d: 1, None)
1709
c188d5e734c8
1710
c188d5e734c8
		undoqueue.undo()
1711
c188d5e734c8
		undoqueue.undo()
1712
c188d5e734c8
		undoqueue.undo()
1713
c188d5e734c8
		undoqueue.redo()
1714
c188d5e734c8
		undoqueue.redo()
1715
c188d5e734c8
		undoqueue.redo()
1716
c188d5e734c8
1717
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "action2")
1718
c188d5e734c8
		undoqueue.redo()
1719
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "action2")
1720
c188d5e734c8
1721
c188d5e734c8
1722
c188d5e734c8
1723
c188d5e734c8
class UndoQueue_undo(unittest.TestCase):
1724
c188d5e734c8
	"UndoQueue.undo()"
1725
c188d5e734c8
1726
c188d5e734c8
	def test_callback(self):
1727
c188d5e734c8
		"UndoQueue.undo() correctly calls the callback"
1728
c188d5e734c8
1729
c188d5e734c8
		global called
1730
c188d5e734c8
		called = False
1731
c188d5e734c8
1732
c188d5e734c8
		def cb(name, actiondata):
1733
c188d5e734c8
			global called
1734
c188d5e734c8
			called = True
1735
c188d5e734c8
1736
c188d5e734c8
			self.assertEquals(name, "name")
1737
c188d5e734c8
			self.assertEquals(actiondata, "data")
1738
c188d5e734c8
1739
c188d5e734c8
		undoqueue = data.UndoQueue()
1740
c188d5e734c8
		undoqueue.add_action("name", cb, lambda n,d: 1, "data")
1741
c188d5e734c8
		undoqueue.undo()
1742
c188d5e734c8
1743
c188d5e734c8
		self.assertEquals(called, True)
1744
c188d5e734c8
1745
c188d5e734c8
1746
c188d5e734c8
	def test_increment(self):
1747
c188d5e734c8
		"UndoQueue.undo() decrements the action pointer"
1748
c188d5e734c8
1749
c188d5e734c8
		undoqueue = data.UndoQueue()
1750
c188d5e734c8
		undoqueue.add_action("action0", lambda n,d: 1, lambda n,d: 1, None)
1751
c188d5e734c8
		undoqueue.add_action("action1", lambda n,d: 1, lambda n,d: 1, None)
1752
c188d5e734c8
		undoqueue.add_action("action2", lambda n,d: 1, lambda n,d: 1, None)
1753
c188d5e734c8
1754
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "action2")
1755
c188d5e734c8
		undoqueue.undo()
1756
c188d5e734c8
1757
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "action1")
1758
c188d5e734c8
		undoqueue.undo()
1759
c188d5e734c8
1760
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "action0")
1761
c188d5e734c8
		undoqueue.undo()
1762
c188d5e734c8
1763
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action(), None)
1764
c188d5e734c8
1765
c188d5e734c8
1766
c188d5e734c8
	def test_overflow(self):
1767
c188d5e734c8
		"UndoQueue.undo() doesn't make the pointer negative"
1768
c188d5e734c8
1769
c188d5e734c8
		undoqueue = data.UndoQueue()
1770
c188d5e734c8
		undoqueue.add_action("action0", lambda n,d: 1, lambda n,d: 1, None)
1771
c188d5e734c8
		undoqueue.add_action("action1", lambda n,d: 1, lambda n,d: 1, None)
1772
c188d5e734c8
		undoqueue.add_action("action2", lambda n,d: 1, lambda n,d: 1, None)
1773
c188d5e734c8
1774
c188d5e734c8
		undoqueue.undo()
1775
c188d5e734c8
		undoqueue.undo()
1776
c188d5e734c8
1777
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action()[1], "action0")
1778
c188d5e734c8
1779
c188d5e734c8
		undoqueue.undo()
1780
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action(), None)
1781
c188d5e734c8
		self.assertEquals(undoqueue.get_redo_action()[1], "action0")
1782
c188d5e734c8
1783
c188d5e734c8
		undoqueue.undo()
1784
c188d5e734c8
		self.assertEquals(undoqueue.get_undo_action(), None)
1785
c188d5e734c8
		self.assertEquals(undoqueue.get_redo_action()[1], "action0")
1786
c188d5e734c8
1787
c188d5e734c8
1788
c188d5e734c8
1789
c188d5e734c8
if __name__ == "__main__":
1790
c188d5e734c8
	unittest.main()
1791
c188d5e734c8