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
|
function test_resize_window()
App.screen.init{width=300, height=300}
Editor_state = edit.initialize_test_state()
Editor_state.filename = 'foo'
Log_browser_state = edit.initialize_test_state()
check_eq(App.screen.width, 300, 'baseline/width')
check_eq(App.screen.height, 300, 'baseline/height')
check_eq(Editor_state.left, Test_margin_left, 'baseline/left_margin')
check_eq(Editor_state.right, 300 - Test_margin_right, 'baseline/right_margin')
App.resize(200, 400)
-- ugly; resize switches to real, non-test margins
check_eq(App.screen.width, 200, 'width')
check_eq(App.screen.height, 400, 'height')
check_eq(Editor_state.left, Margin_left, 'left_margin')
check_eq(Editor_state.right, 200-Margin_right, 'right_margin')
check_eq(Editor_state.width, 200-Margin_left-Margin_right, 'drawing_width')
-- TODO: how to make assertions about when App.update got past the early exit?
end
function test_show_log_browser_side()
App.screen.init{width=300, height=300}
Display_width = App.screen.width
Current_app = 'source'
Editor_state = edit.initialize_test_state()
Editor_state.filename = 'foo'
Text.redraw_all(Editor_state)
Log_browser_state = edit.initialize_test_state()
Text.redraw_all(Log_browser_state)
log_browser.parse(Log_browser_state)
check(not Show_log_browser_side, 'baseline')
-- pressing ctrl+l shows log-browser side
Current_time = Current_time + 0.1
App.run_after_keychord('C-l')
check(Show_log_browser_side, 'check')
end
function test_show_log_browser_side_doubles_window_width_if_possible()
-- initialize screen dimensions to half width
App.screen.init{width=300, height=300}
Display_width = App.screen.width*2
-- initialize source app with left side occupying entire window (half the display)
Current_app = 'source'
Editor_state = edit.initialize_test_state()
Editor_state.filename = 'foo'
Editor_state.left = Margin_left
Editor_state.right = App.screen.width - Margin_right
local old_editor_right = Editor_state.right
Text.redraw_all(Editor_state)
Log_browser_state = edit.initialize_test_state()
-- log browser has some arbitrary margins
Log_browser_state.left = 200 + Margin_left
Log_browser_state.right = 400
Text.redraw_all(Log_browser_state)
log_browser.parse(Log_browser_state)
-- display log browser
Current_time = Current_time + 0.1
App.run_after_keychord('C-l')
-- window width is doubled
check_eq(App.screen.width, 600, 'display:width')
-- left side margins are unchanged
check_eq(Editor_state.left, Margin_left, 'edit:left')
check_eq(Editor_state.right, old_editor_right, 'edit:right')
-- log browser margins are adjusted
check_eq(Log_browser_state.left, App.screen.width/2 + Margin_left, 'log:left')
check_eq(Log_browser_state.right, App.screen.width - Margin_right, 'log:right')
end
function test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width()
-- initialize screen dimensions and indicate that it is maximized
App.screen.init{width=300, height=300}
Display_width = 300
-- initialize source app with left side occupying more than half the display
Current_app = 'source'
Editor_state = edit.initialize_test_state()
Editor_state.filename = 'foo'
Editor_state.left = Margin_left
Editor_state.right = 200
Text.redraw_all(Editor_state)
Log_browser_state = edit.initialize_test_state()
-- log browser has some arbitrary margins
Log_browser_state.left = 200 + Margin_left
Log_browser_state.right = 400
Text.redraw_all(Log_browser_state)
log_browser.parse(Log_browser_state)
-- display log browser
Current_time = Current_time + 0.1
App.run_after_keychord('C-l')
-- margins are now adjusted
check_eq(Editor_state.left, Margin_left, 'edit:left')
check_eq(Editor_state.right, App.screen.width/2 - Margin_right, 'edit:right')
check_eq(Log_browser_state.left, App.screen.width/2 + Margin_left, 'log:left')
check_eq(Log_browser_state.right, App.screen.width - Margin_right, 'log:right')
end
function test_drop_file()
App.screen.init{width=Editor_state.left+300, height=300}
Editor_state = edit.initialize_test_state()
App.filesystem['foo'] = 'abc\ndef\nghi\n'
local fake_dropped_file = {
opened = false,
getFilename = function(self)
return 'foo'
end,
open = function(self)
self.opened = true
end,
lines = function(self)
assert(self.opened)
return App.filesystem['foo']:gmatch('[^\n]+')
end,
close = function(self)
self.opened = false
end,
}
App.filedropped(fake_dropped_file)
check_eq(#Editor_state.lines, 3, '#lines')
check_eq(Editor_state.lines[1].data, 'abc', 'lines:1')
check_eq(Editor_state.lines[2].data, 'def', 'lines:2')
check_eq(Editor_state.lines[3].data, 'ghi', 'lines:3')
edit.draw(Editor_state)
end
function test_drop_file_saves_previous()
App.screen.init{width=Editor_state.left+300, height=300}
-- initially editing a file called foo that hasn't been saved to filesystem yet
Editor_state.lines = load_array{'abc', 'def'}
Editor_state.filename = 'foo'
schedule_save(Editor_state)
-- now drag a new file bar from the filesystem
App.filesystem['bar'] = 'abc\ndef\nghi\n'
local fake_dropped_file = {
opened = false,
getFilename = function(self)
return 'bar'
end,
open = function(self)
self.opened = true
end,
lines = function(self)
assert(self.opened)
return App.filesystem['bar']:gmatch('[^\n]+')
end,
close = function(self)
self.opened = false
end,
}
App.filedropped(fake_dropped_file)
-- filesystem now contains a file called foo
check_eq(App.filesystem['foo'], 'abc\ndef\n', 'check')
end
|