summary refs log tree commit diff stats
path: root/doc
Commit message (Expand)AuthorAgeFilesLines
* Revert "ranger.1: added doc for --dont-copy-config"hut2011-10-092-7/+9
* ranger.__init__, ranger.1: updated rangers descriptionhut2011-10-082-6/+6
* Updated man pagehut2011-10-082-24/+12
* ranger.1: added doc for --dont-copy-confighut2011-10-082-9/+7
* Write "ranger" with a lowercase "r"hut2011-10-082-4/+4
* updated manpage and config_examples/rc.confhut2011-10-082-1/+7
* general updateshut2011-10-083-31/+25
* manpage: updatehut2011-10-052-32/+34
* removed doc/TODO; use "make todo"hut2011-10-051-118/+0
* defaults/commands: added cunmap, punmap, tunmaphut2011-10-052-4/+72
* Changed version to 1.5.0hut2011-10-021-1/+1
* doc/ranger.1: updated manpagehut2011-10-012-73/+123
* Extended rc.confhut2011-09-301-2/+3
* core.actions: added narg to move_parenthut2011-09-291-1/+1
* doc/TODO: updatedhut2011-09-291-15/+14
* doc/ranger.1: added missing documentationhut2011-09-292-12/+256
* core.main: added --list-unused-keys optionhut2011-09-292-1/+12
* another correction of the bash wrapper scriptshut2011-09-282-3/+5
* sanitized bash wrapper scripts, reformulated BUGS section in manualhut2011-09-282-13/+12
* removed doc/help link (why do we need that?)hut2011-09-281-1/+0
* improved bash wrappers in ranger.py and man pagehut2011-09-282-20/+24
* documented and improved DaPangus' changeshut2011-09-252-6/+4
* extended manpage and fixed {load,save}_copy_buffer commandshut2011-09-252-46/+66
* defaults.commands.py: added :bulkrename command from wikihut2011-09-251-0/+9
* doc/ranger.pod: extended the man pagehut2011-09-242-120/+845
* Overhauled manpage. It's in POD format now.hut2011-09-242-194/+797
* This gonna be cool once it's finished v1.4.3hut2011-04-051-1/+1
* Improved manpagehut2011-04-031-4/+5
* Next version will run on pure Lisp Machines only v1.4.2hut2011-03-051-1/+1
* If ranger won't run, you still got peanut butter to live for. v1.4.1hut2011-01-041-1/+1
* Moved HACKING and TODO to doc/hut2011-01-042-0/+214
* We are not authorized to disclose the commit message v1.4.0hut2010-12-221-1/+1
* updated doc/colorschemes.txthut2010-12-221-15/+6
* core.main: extended --copy-config optionhut2010-10-121-2/+3
* Merge branch 'cp+preview'hut2010-10-121-0/+4
|\
| * core.main: added --copy-config flaghut2010-10-111-0/+4
* | new version: 1.3.1, merge with cp+preview branchhut2010-10-121-1/+1
|/
* Incremented version number to 1.3 (testing)hut2010-09-131-1/+1
* Beware of low-flying butterflies v1.2.0hut2010-09-131-1/+1
* chmodhut2010-09-111-0/+0
* Tuned versioning scheme to be more intuitive, back to 1.1.2hut2010-08-281-1/+1
* Changed version number to 1.2 (testing) to adhere with versioning schemehut2010-08-281-1/+1
* Changed default config dir to $XDG_CONFIG_HOME/rangerhut2010-08-282-6/+7
* Why did the astrophysicist order three hamburgers? v1.1.2hut2010-07-121-1/+1
* removed pydoc since it can be generated with "make doc" easilyhut2010-06-2146-6669/+0
* version = version + 1 v1.1.1hut2010-06-184-6/+7
* new stable version v1.1.0hut2010-06-092-3/+3
* updated manpagehut2010-06-091-5/+4
* renamed "--fail-if-run" to the more accurate "--fail-unless-cd"hut2010-06-091-3/+3
* updated pydochut2010-06-0918-57/+113
'#n42'>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














                                                                       



                          
                                                                    
                                            
 
                                            




                                      





                                                                            





                                              
                                   




                                                                          

                                           




                                                                       


















































                                                                               
             



                                            



                                                                              
 
                                     


                                                                                      

                                         

                                                                                     

                                         


                                                                                            









                                                                           
 


                                          
                                            
 





                                                              
 


                                                                       
 


                                                
 


                          
# Copyright (C) 2009, 2010  Roman Zimbelmann <romanz@lavabit.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import unittest
import curses
from random import randint

from ranger.gui.displayable import Displayable, DisplayableContainer
from testlib import Fake, OK, raise_ok, TODO

class TestWithFakeCurses(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.disp.destroy()
		self.disc.destroy()

	def test_colorscheme(self):
		# Using a color method implies change of window attributes
		disp = self.disp

		disp.win.chgat = raise_ok
		disp.win.attrset = raise_ok

		self.assertRaises(OK, disp.color, 'a', 'b')
		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()

	@TODO
	def test_boundaries(self):
		disp = self.disp
		hei, wid = self.env.termsize

		self.assertRaises(ValueError, disp.resize, 0, 0, hei + 1, wid)
		self.assertRaises(ValueError, disp.resize, 0, 0, hei, wid + 1)
		self.assertRaises(ValueError, disp.resize, -1, 0, hei, wid)
		self.assertRaises(ValueError, disp.resize, 0, -1, hei, wid)

		for i in range(1000):
			box = [int(randint(0, hei) * 0.2), int(randint(0, wid) * 0.2)]
			box.append(randint(0, hei - box[0]))
			box.append(randint(0, wid - box[1]))

			def in_box(y, x):
				return (y >= box[1] and y < box[1] + box[3]) and \
						(x >= box[0] and x < box[0] + box[2])

			disp.resize(*box)
			self.assertEqual(box, [disp.y, disp.x, disp.hei, disp.wid],
					"Resizing failed for some reason on loop " + str(i))

			for y, x in zip(range(10), range(10)):
				is_in_box = in_box(y, x)

				point1 = (y, x)
				self.assertEqual(is_in_box, point1 in disp)

				point2 = Fake()
				point2.x = x
				point2.y = y
				self.assertEqual(is_in_box, point2 in disp)

	def test_click(self):
		self.disp.click = raise_ok

		hei, wid = self.env.termsize

		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()

			fakepos.x = winwid - 2
			fakepos.y = winhei - 2
			self.assertRaises(OK, self.disc.click, fakepos)

			fakepos.x = winwid
			fakepos.y = winhei
			self.disc.click(fakepos)


if __name__ == '__main__':
	unittest.main()