summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rw-r--r--test/__init__.py6
-rw-r--r--test/tc_displayable.py132
-rw-r--r--test/tc_keyapi.py4
-rw-r--r--test/tc_ui.py2
5 files changed, 83 insertions, 63 deletions
diff --git a/TODO b/TODO
index e0577dbf..c3be20c7 100644
--- a/TODO
+++ b/TODO
@@ -51,7 +51,7 @@ Bugs
    ( ) #40  10/01/17  freeze with unavailable sshfs
    (X) #41  10/01/17  capital file extensions are not recognized
    ( ) #46  10/01/19  old username displayed after using su
-   ( ) #49  10/01/19  fix unit tests :'(
+   (X) #49  10/01/19  fix unit tests :'(
 
 
 Ideas
diff --git a/test/__init__.py b/test/__init__.py
index 3043ba18..86557b6a 100644
--- a/test/__init__.py
+++ b/test/__init__.py
@@ -9,9 +9,9 @@ def init():
 
 class Fake(object):
 	def __getattr__(self, attrname):
-		if not hasattr(self, attrname):
-			setattr(self, attrname, Fake())
-		return self.__dict__[attrname]
+		val = Fake()
+		self.__dict__[attrname] = val
+		return val
 
 	def __call__(self, *_):
 		return Fake()
diff --git a/test/tc_displayable.py b/test/tc_displayable.py
index 493b0ef8..b9538a59 100644
--- a/test/tc_displayable.py
+++ b/test/tc_displayable.py
@@ -7,20 +7,25 @@ from random import randint
 from ranger.gui.displayable import Displayable, DisplayableContainer
 from test import Fake, OK, raise_ok
 
-class TestDisplayable(unittest.TestCase):
+class TestWithFakeCurses(unittest.TestCase):
 	def setUp(self):
 		self.win = Fake()
 		self.fm = Fake()
 		self.env = Fake()
 		self.settings = Fake()
-		self.disp = Displayable( win=self.win,
-				env=self.env, fm=self.fm, settings=self.settings)
+		self.initdict = {'win': self.win, 'settings': self.settings,
+				'fm': self.fm, 'env': self.env}
+
+		self.disp = Displayable(**self.initdict)
+		self.disc = DisplayableContainer(**self.initdict)
+		self.disc.add_child(self.disp)
 
 		hei, wid = 100, 100
 		self.env.termsize = (hei, wid)
 
 	def tearDown(self):
 		self.disp.destroy()
+		self.disc.destroy()
 
 	def test_colorscheme(self):
 		# Using a color method implies change of window attributes
@@ -33,6 +38,57 @@ class TestDisplayable(unittest.TestCase):
 		self.assertRaises(OK, disp.color_at, 0, 0, 0, 'a', 'b')
 		self.assertRaises(OK, disp.color_reset)
 
+	def test_focused_object(self):
+		d1 = Displayable(**self.initdict)
+		d2 = DisplayableContainer(**self.initdict)
+		for obj in (Displayable(**self.initdict) for x in range(5)):
+			d2.add_child(obj)
+		d3 = DisplayableContainer(**self.initdict)
+		for obj in (Displayable(**self.initdict) for x in range(5)):
+			d3.add_child(obj)
+
+		for obj in (d1, d2, d3):
+			self.disc.add_child(obj)
+
+		d3.container[3].focused = True
+
+		self.assertEqual(self.disc._get_focused_obj(), d3.container[3])
+
+		d3.container[3].focused = False
+		d2.container[0].focused = True
+
+		self.assertEqual(self.disc._get_focused_obj(), d2.container[0])
+
+gWin = None
+
+class TestDisplayableWithCurses(unittest.TestCase):
+	def setUp(self):
+		global gWin
+		if not gWin:
+			gWin = curses.initscr()
+		self.win = gWin
+		curses.cbreak()
+		curses.noecho()
+		curses.start_color()
+		curses.use_default_colors()
+
+		self.fm = Fake()
+		self.env = Fake()
+		self.settings = Fake()
+		self.initdict = {'win': self.win, 'settings': self.settings,
+				'fm': self.fm, 'env': self.env}
+		self.disp = Displayable(**self.initdict)
+		self.disc = DisplayableContainer(**self.initdict)
+		self.disc.add_child(self.disp)
+
+		self.env.termsize = self.win.getmaxyx()
+
+	def tearDown(self):
+		self.disp.destroy()
+		curses.nocbreak()
+		curses.echo()
+		curses.endwin()
+
 	def test_boundaries(self):
 		disp = self.disp
 		hei, wid = self.env.termsize
@@ -42,8 +98,10 @@ class TestDisplayable(unittest.TestCase):
 		self.assertRaises(ValueError, disp.resize, -1, 0, hei, wid)
 		self.assertRaises(ValueError, disp.resize, 0, -1, hei, wid)
 
-		box = (randint(10, 20), randint(30, 40), \
-				randint(30, 40), randint(10, 20))
+		box = [int(randint(0, hei) * 0.2), 0,
+				int(randint(0, wid) * 0.2), 0]
+		box[1] = randint(box[0], hei)
+		box[1] = randint(box[0], hei)
 
 		def in_box(y, x):
 			return (x >= box[1] and x < box[1] + box[3]) and \
@@ -61,64 +119,26 @@ class TestDisplayable(unittest.TestCase):
 			point2.y = y
 			self.assertEqual(is_in_box, point2 in disp)
 
-class TestDisplayableContainer(unittest.TestCase):
-	def setUp(self):
-		self.win = Fake()
-		self.fm = Fake()
-		self.env = Fake()
-		self.settings = Fake()
-
-		self.initdict = {'win': self.win, 'settings': self.settings,
-				'fm': self.fm, 'env': self.env}
-
-		self.disp = Displayable(**self.initdict)
-		self.disc = DisplayableContainer(**self.initdict)
-		self.disc.add_child(self.disp)
-
-		hei, wid = (100, 100)
-		self.env.termsize = (hei, wid)
-
-	def tearDown(self):
-		self.disc.destroy()
-
-	def test_container(self):
-		self.assertTrue(self.disp in self.disc.container)
-
 	def test_click(self):
 		self.disp.click = raise_ok
 
-		self.disc.resize(0, 0, 50, 50)
-		self.disp.resize(0, 0, 20, 20)
-		fakepos = Fake()
-
-		fakepos.x = 10
-		fakepos.y = 10
-		self.assertRaises(OK, self.disc.click, fakepos)
-
-		fakepos.x = 30
-		fakepos.y = 10
-		self.disc.click(fakepos)
-
-	def test_focused_object(self):
-		d1 = Displayable(**self.initdict)
-		d2 = DisplayableContainer(**self.initdict)
-		for obj in (Displayable(**self.initdict) for x in range(5)):
-			d2.add_child(obj)
-		d3 = DisplayableContainer(**self.initdict)
-		for obj in (Displayable(**self.initdict) for x in range(5)):
-			d3.add_child(obj)
-
-		for obj in (d1, d2, d3):
-			self.disc.add_child(obj)
+		hei, wid = self.env.termsize
 
-		d3.container[3].focused = True
+		for i in range(50):
+			winwid = randint(2, wid-1)
+			winhei = randint(2, hei-1)
+			self.disc.resize(0, 0, hei, wid)
+			self.disp.resize(0, 0, winhei, winwid)
+			fakepos = Fake()
 
-		self.assertEqual(self.disc._get_focused_obj(), d3.container[3])
+			fakepos.x = winwid - 2
+			fakepos.y = winhei - 2
+			self.assertRaises(OK, self.disc.click, fakepos)
 
-		d3.container[3].focused = False
-		d2.container[0].focused = True
+			fakepos.x = winwid
+			fakepos.y = winhei
+			self.disc.click(fakepos)
 
-		self.assertEqual(self.disc._get_focused_obj(), d2.container[0])
 
 if __name__ == '__main__':
 	unittest.main()
diff --git a/test/tc_keyapi.py b/test/tc_keyapi.py
index d6c32271..3cd5da0a 100644
--- a/test/tc_keyapi.py
+++ b/test/tc_keyapi.py
@@ -7,12 +7,12 @@ class Test(TestCase):
 		from ranger.keyapi import Wrapper
 
 		class dummyfm(object):
-			def move(relative):
+			def move(self, relative):
 				return "I move down by {0}".format(relative)
 
 		class commandarg(object):
 			def __init__(self):
-				self.fm = dummyfm
+				self.fm = dummyfm()
 				self.n = None
 
 		arg = commandarg()
diff --git a/test/tc_ui.py b/test/tc_ui.py
index eb503c5d..d7b2de7c 100644
--- a/test/tc_ui.py
+++ b/test/tc_ui.py
@@ -13,7 +13,7 @@ class Test(unittest.TestCase):
 	def setUp(self):
 
 		self.fm = Fake()
-		self.ui = ui.UI(env=Fake(), fm=self.fm)
+		self.ui = ui.UI(env=Fake(), fm=self.fm, commandlist=Fake())
 
 		def fakesetup():
 			self.ui.widget = Fake()
f206b3b74ea30'>^
66a9052 ^
74af57b ^







66a9052 ^

d43684c ^
66a9052 ^



74af57b ^

648ca98 ^



a21afda ^



ec0e0f9 ^
a21afda ^
1767e4f ^
a21afda ^

d85f671 ^
a0be5e8 ^
b812257 ^
b275a39 ^
39c93d2 ^
60b351b ^
f406bf5 ^



2a09617 ^
dc4c36a ^



8635c70 ^
b60999c ^
0847464 ^
77a0f68 ^


1418e1b ^
60b351b ^
0847464 ^



7a489cb ^








de122b1 ^
a15ea01 ^


1418e1b ^
661e3ec ^

305446a ^
6394e38 ^
aeb7005
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181