@@ -6,8 +6,7 @@ import Graphics.Vty
6import Graphics.Vty.Attributes
6import Graphics.Vty.Attributes
7import Graphics.Vty.Inline
7import Graphics.Vty.Inline
8import Graphics.Vty.Picture
8import Graphics.Vty.Picture
9−import Graphics.Vty.Terminal
9+import Graphics.Vty.Output
10−import Graphics.Vty.DisplayRegion
12import Control.Concurrent (threadDelay)
11import Control.Concurrent (threadDelay)
13import Control.Exception
12import Control.Exception
@@ -19,18 +18,18 @@ import Data.Monoid
19import Data.String.QQ
18import Data.String.QQ
20import Data.Word
19import Data.Word
22−import Foreign.Marshal.Array
21+import Foreign.Marshal.Array
24import qualified System.Environment as Env
23import qualified System.Environment as Env
26import System.IO ( hFlush, hPutStr, hPutBuf, stdout )
25import System.IO ( hFlush, hPutStr, hPutBuf, stdout )
29− print_intro
28+ printIntro
31−output_file_path = "test_results.list"
30+outputFilePath = "test_results.list"
33−print_intro = do
32+printIntro = do
34 putStr $ [s|
33 putStr $ [s|
35This is an interactive verification program for the terminal input and output
34This is an interactive verification program for the terminal input and output
36support of the VTY library. This will ask a series of questions about what you
35support of the VTY library. This will ask a series of questions about what you
@@ -38,7 +37,7 @@ see on screen. The goal is to verify that VTY's output and input support
38performs as expected with your terminal.
37performs as expected with your terminal.
40This program produces a file named
39This program produces a file named
41− |] ++ output_file_path ++ [s|
40+ |] ++ outputFilePath ++ [s|
42in the current directory that contains the results for each test assertion. This
41in the current directory that contains the results for each test assertion. This
43can be emailed to coreyoconnor@gmail.com and used by the VTY authors to improve
42can be emailed to coreyoconnor@gmail.com and used by the VTY authors to improve
44support for your terminal. No personal information is contained in the report.
43support for your terminal. No personal information is contained in the report.
@@ -67,41 +66,40 @@ All the tests assume the following about the terminal display:
67Thanks for the help! :-D
66Thanks for the help! :-D
68To exit the test early enter "q" anytime at the following menu screen.
67To exit the test early enter "q" anytime at the following menu screen.
70−If any test failed then please post an issue to
69+If any test fails then please post an issue to
71 https://github.com/coreyoconnor/vty/issues
70 https://github.com/coreyoconnor/vty/issues
72−with the test_results.list file pasted into the issue. The issue summary can
71+with the test_results.list file pasted into the issue. A suitable summary is:
73−mention the specific tests that failed or just say "interactive terminal test
72+"interactive terminal test failure".
76− wait_for_return
74+ waitForReturn
77− results <- do_test_menu 1
75+ results <- doTestMenu 1
78− env_attributes <- mapM ( \env_name -> Control.Exception.catch ( Env.getEnv env_name >>= return . (,) env_name )
76+ envAttributes <- mapM ( \envName -> Control.Exception.catch ( Env.getEnv envName >>= return . (,) envName )
79− ( \ (_ :: SomeException) -> return (env_name, "") )
77+ ( \ (_ :: SomeException) -> return (envName, "") )
81− [ "TERM", "COLORTERM", "LANG", "TERM_PROGRAM", "XTERM_VERSION" ]
79+ [ "TERM", "COLORTERM", "LANG", "TERM_PROGRAM", "XTERM_VERSION" ]
82− t <- current_terminal
80+ t <- standardIOConfig >>= outputForConfig
83− let results_txt = show env_attributes ++ "\n"
81+ let resultsTxt = show envAttributes ++ "\n"
84− ++ terminal_ID t ++ "\n"
82+ ++ terminalID t ++ "\n"
85− ++ show results ++ "\n"
83+ ++ show results ++ "\n"
86− release_terminal t
84+ releaseTerminal t
87− writeFile output_file_path results_txt
85+ writeFile outputFilePath resultsTxt
89−wait_for_return = do
87+waitForReturn = do
90 putStr "\n(press return to continue)"
88 putStr "\n(press return to continue)"
91 hFlush stdout
89 hFlush stdout
94−test_menu :: [(String, Test)]
92+testMenu :: [(String, Test)]
95−test_menu = zip (map show [1..]) all_tests
93+testMenu = zip (map show [1..]) allTests
97−do_test_menu :: Int -> IO [(String, Bool)]
95+doTestMenu :: Int -> IO [(String, Bool)]
98−do_test_menu next_ID
96+doTestMenu nextID
99− | next_ID > length all_tests = do
97+ | nextID > length allTests = do
100− putStrLn $ "Done! Please email the " ++ output_file_path ++ " file to coreyoconnor@gmail.com"
98+ putStrLn $ "Done! Please email the " ++ outputFilePath ++ " file to coreyoconnor@gmail.com"
101 return []
99 return []
102 | otherwise = do
100 | otherwise = do
103− display_test_menu
101+ displayTestMenu
104− putStrLn $ "Press return to start with #" ++ show next_ID ++ "."
102+ putStrLn $ "Press return to start with #" ++ show nextID ++ "."
105 putStrLn "Enter a test number to perform only that test."
103 putStrLn "Enter a test number to perform only that test."
106 putStrLn "q (or control-C) to quit."
104 putStrLn "q (or control-C) to quit."
107 putStr "> "
105 putStr "> "
@@ -109,102 +107,102 @@ do_test_menu next_ID
109 s <- getLine >>= return . filter (/= '\n')
107 s <- getLine >>= return . filter (/= '\n')
110 case s of
108 case s of
111 "q" -> return mempty
109 "q" -> return mempty
112− "" -> do
110+ "" -> do
113− r <- run_test $ show next_ID
111+ r <- runTest $ show nextID
114− rs <- do_test_menu ( next_ID + 1 )
112+ rs <- doTestMenu ( nextID + 1 )
115 return $ r : rs
113 return $ r : rs
116− i | isJust ( lookup i test_menu ) -> do
114+ i | isJust ( lookup i testMenu ) -> do
117− r <- run_test i
115+ r <- runTest i
118− rs <- do_test_menu ( read i + 1 )
116+ rs <- doTestMenu ( read i + 1 )
119 return $ r : rs
117 return $ r : rs
121− display_test_menu
119+ displayTestMenu
122− = mapM_ display_test_menu' test_menu
120+ = mapM_ displayTestMenu' testMenu
123− display_test_menu' ( i, t )
121+ displayTestMenu' ( i, t )
124− = putStrLn $ ( if i == show next_ID
122+ = putStrLn $ ( if i == show nextID
125− then "> "
123+ then "> "
127− ) ++ i ++ ". " ++ test_name t
125+ ) ++ i ++ ". " ++ testName t
129−run_test :: String -> IO (String, Bool)
127+runTest :: String -> IO (String, Bool)
130−run_test i = do
128+runTest i = do
131− let t = fromJust $ lookup i test_menu
129+ let t = fromJust $ lookup i testMenu
132− print_summary t
130+ printSummary t
133− wait_for_return
131+ waitForReturn
134− test_action t
132+ testAction t
135− r <- confirm_results t
133+ r <- confirmResults t
136− return (test_ID t, r)
134+ return (testID t, r)
138−default_success_confirm_results = do
136+defaultSuccessConfirmResults = do
139 putStr "\n"
137 putStr "\n"
140 putStr "[Y/n] "
138 putStr "[Y/n] "
141 hFlush stdout
139 hFlush stdout
142 r <- getLine
140 r <- getLine
143 case r of
141 case r of
144− "" -> return True
142+ "" -> return True
145 "y" -> return True
143 "y" -> return True
146 "Y" -> return True
144 "Y" -> return True
147 "n" -> return False
145 "n" -> return False
149data Test = Test
147data Test = Test
150− { test_name :: String
148+ { testName :: String
151− , test_ID :: String
149+ , testID :: String
152− , test_action :: IO ()
150+ , testAction :: IO ()
153− , print_summary :: IO ()
151+ , printSummary :: IO ()
154− , confirm_results :: IO Bool
152+ , confirmResults :: IO Bool
157−all_tests
155+allTests
158− = [ reserve_output_test
156+ = [ reserveOutputTest
159− , display_bounds_test_0
157+ , displayBoundsTest0
160− , display_bounds_test_1
158+ , displayBoundsTest1
161− , display_bounds_test_2
159+ , displayBoundsTest2
162− , display_bounds_test_3
160+ , displayBoundsTest3
163− , unicode_single_width_0
161+ , unicodeSingleWidth0
164− , unicode_single_width_1
162+ , unicodeSingleWidth1
165− , unicode_double_width_0
163+ , unicodeDoubleWidth0
166− , unicode_double_width_1
164+ , unicodeDoubleWidth1
167− , attributes_test_0
165+ , attributesTest0
168− , attributes_test_1
166+ , attributesTest1
169− , attributes_test_2
167+ , attributesTest2
170− , attributes_test_3
168+ , attributesTest3
171− , attributes_test_4
169+ , attributesTest4
172− , attributes_test_5
170+ , attributesTest5
173− , inline_test_0
171+ , inlineTest0
174− , inline_test_1
172+ , inlineTest1
175− , inline_test_2
173+ , inlineTest2
176− , cursor_hide_test_0
174+ , cursorHideTest0
177− , vert_crop_test_0
175+ , vertCropTest0
178− , vert_crop_test_1
176+ , vertCropTest1
179− , vert_crop_test_2
177+ , vertCropTest2
180− , vert_crop_test_3
178+ , vertCropTest3
181− , horiz_crop_test_0
179+ , horizCropTest0
182− , horiz_crop_test_1
180+ , horizCropTest1
183− , horiz_crop_test_2
181+ , horizCropTest2
184− , horiz_crop_test_3
182+ , horizCropTest3
185− , layer_0
183+ , layer0
186− , layer_1
184+ , layer1
189−reserve_output_test = Test
187+reserveOutputTest = Test
190− { test_name = "Initialize and reserve terminal output then restore previous state."
188+ { testName = "Initialize and reserve terminal output then restore previous state."
191− , test_ID = "reserve_output_test"
189+ , testID = "reserveOutputTest"
192− , test_action = do
190+ , testAction = do
193− t <- current_terminal
191+ t <- standardIOConfig >>= outputForConfig
194− reserve_display t
192+ reserveDisplay t
195 putStrLn "Line 1"
193 putStrLn "Line 1"
196 putStrLn "Line 2"
194 putStrLn "Line 2"
197 putStrLn "Line 3"
195 putStrLn "Line 3"
198 putStrLn "Line 4 (press return)"
196 putStrLn "Line 4 (press return)"
199 hFlush stdout
197 hFlush stdout
201− release_display t
199+ releaseDisplay t
202− release_terminal t
200+ releaseTerminal t
203 return ()
201 return ()
204− , print_summary = do
202+ , printSummary = do
205 putStr $ [s|
203 putStr $ [s|
206Once return is pressed:
204Once return is pressed:
207− 0. The screen will be cleared.
205+ 0. The screen will be cleared.
208 1. Four lines of text should be visible.
206 1. Four lines of text should be visible.
209 1. The cursor should be visible and at the start of the fifth line.
207 1. The cursor should be visible and at the start of the fifth line.
@@ -212,123 +210,123 @@ After return is pressed for the second time this test then:
212 * The screen containing the test summary should be restored;
210 * The screen containing the test summary should be restored;
213 * The cursor is visible.
211 * The cursor is visible.
215− , confirm_results = do
213+ , confirmResults = do
216 putStr $ [s|
214 putStr $ [s|
217Did the test output match the description?
215Did the test output match the description?
219− default_success_confirm_results
217+ defaultSuccessConfirmResults
222−display_bounds_test_0 = Test
220+displayBoundsTest0 = Test
223− { test_name = "Verify display bounds are correct test 0: Using spaces."
221+ { testName = "Verify display bounds are correct test 0: Using spaces."
224− , test_ID = "display_bounds_test_0"
222+ , testID = "displayBoundsTest0"
225− , test_action = do
223+ , testAction = do
226− t <- current_terminal
224+ t <- standardIOConfig >>= outputForConfig
227− reserve_display t
225+ reserveDisplay t
228− DisplayRegion w h <- display_bounds t
226+ (w,h) <- displayBounds t
229− let row_0 = replicate (fromEnum w) 'X' ++ "\n"
227+ let row0 = replicate (fromEnum w) 'X' ++ "\n"
230− row_h = replicate (fromEnum w - 1) 'X'
228+ rowH = replicate (fromEnum w - 1) 'X'
231− row_n = "X" ++ replicate (fromEnum w - 2) ' ' ++ "X\n"
229+ rowN = "X" ++ replicate (fromEnum w - 2) ' ' ++ "X\n"
232− image = row_0 ++ (concat $ replicate (fromEnum h - 2) row_n) ++ row_h
230+ image = row0 ++ (concat $ replicate (fromEnum h - 2) rowN) ++ rowH
233 putStr image
231 putStr image
234 hFlush stdout
232 hFlush stdout
236− release_display t
234+ releaseDisplay t
237− release_terminal t
235+ releaseTerminal t
238 return ()
236 return ()
239− , print_summary = display_bounds_test_summary True
237+ , printSummary = displayBoundsTestSummary True
240− , confirm_results = generic_output_match_confirm
238+ , confirmResults = genericOutputMatchConfirm
243−display_bounds_test_1 = Test
241+displayBoundsTest1 = Test
244− { test_name = "Verify display bounds are correct test 0: Using cursor movement."
242+ { testName = "Verify display bounds are correct test 0: Using cursor movement."
245− , test_ID = "display_bounds_test_1"
243+ , testID = "displayBoundsTest1"
246− , test_action = do
244+ , testAction = do
247− t <- current_terminal
245+ t <- standardIOConfig >>= outputForConfig
248− reserve_display t
246+ reserveDisplay t
249− DisplayRegion w h <- display_bounds t
247+ (w,h) <- displayBounds t
250− set_cursor_pos t 0 0
248+ setCursorPos t 0 0
251− let row_0 = replicate (fromEnum w) 'X' ++ "\n"
249+ let row0 = replicate (fromEnum w) 'X' ++ "\n"
252− putStr row_0
250+ putStr row0
253 forM_ [1 .. h - 2] $ \y -> do
251 forM_ [1 .. h - 2] $ \y -> do
254− set_cursor_pos t 0 y
252+ setCursorPos t 0 y
255 putStr "X"
253 putStr "X"
256 hFlush stdout
254 hFlush stdout
257− set_cursor_pos t (w - 1) y
255+ setCursorPos t (w - 1) y
258 putStr "X"
256 putStr "X"
259 hFlush stdout
257 hFlush stdout
260− set_cursor_pos t 0 (h - 1)
258+ setCursorPos t 0 (h - 1)
261− let row_h = replicate (fromEnum w - 1) 'X'
259+ let rowH = replicate (fromEnum w - 1) 'X'
262− putStr row_h
260+ putStr rowH
263 hFlush stdout
261 hFlush stdout
265− release_display t
263+ releaseDisplay t
266− release_terminal t
264+ releaseTerminal t
267 return ()
265 return ()
268− , print_summary = display_bounds_test_summary True
266+ , printSummary = displayBoundsTestSummary True
269− , confirm_results = generic_output_match_confirm
267+ , confirmResults = genericOutputMatchConfirm
272−display_bounds_test_2 = Test
270+displayBoundsTest2 = Test
273− { test_name = "Verify display bounds are correct test 0: Using Image ops."
271+ { testName = "Verify display bounds are correct test 0: Using Image ops."
274− , test_ID = "display_bounds_test_2"
272+ , testID = "displayBoundsTest2"
275− , test_action = do
273+ , testAction = do
276− t <- current_terminal
274+ t <- standardIOConfig >>= outputForConfig
277− reserve_display t
275+ reserveDisplay t
278− bounds@(DisplayRegion w h) <- display_bounds t
276+ bounds@(w,h) <- displayBounds t
279− let first_row = horiz_cat $ replicate (fromEnum w) (char def_attr 'X')
277+ let firstRow = horizCat $ replicate (fromEnum w) (char defAttr 'X')
280− middle_rows = vert_cat $ replicate (fromEnum h - 2) middle_row
278+ middleRows = vertCat $ replicate (fromEnum h - 2) middleRow
281− middle_row = (char def_attr 'X') <|> background_fill (w - 2) 1 <|> (char def_attr 'X')
279+ middleRow = (char defAttr 'X') <|> backgroundFill (w - 2) 1 <|> (char defAttr 'X')
282− end_row = first_row
280+ endRow = firstRow
283− image = first_row <-> middle_rows <-> end_row
281+ image = firstRow <-> middleRows <-> endRow
284− pic = (pic_for_image image) { pic_cursor = Cursor (w - 1) (h - 1) }
282+ pic = (picForImage image) { picCursor = Cursor (w - 1) (h - 1) }
285− d <- display_context t bounds
283+ d <- displayContext t bounds
286− output_picture d pic
284+ outputPicture d pic
288− release_display t
286+ releaseDisplay t
289− release_terminal t
287+ releaseTerminal t
290 return ()
288 return ()
291− , print_summary = display_bounds_test_summary True
289+ , printSummary = displayBoundsTestSummary True
292− , confirm_results = generic_output_match_confirm
290+ , confirmResults = genericOutputMatchConfirm
295−display_bounds_test_3 = Test
293+displayBoundsTest3 = Test
296− { test_name = "Verify display bounds are correct test 0: Hide cursor; Set cursor pos."
294+ { testName = "Verify display bounds are correct test 0: Hide cursor; Set cursor pos."
297− , test_ID = "display_bounds_test_3"
295+ , testID = "displayBoundsTest3"
298− , test_action = do
296+ , testAction = do
299− t <- current_terminal
297+ t <- standardIOConfig >>= outputForConfig
300− reserve_display t
298+ reserveDisplay t
301− DisplayRegion w h <- display_bounds t
299+ (w,h) <- displayBounds t
302− hide_cursor t
300+ hideCursor t
303− set_cursor_pos t 0 0
301+ setCursorPos t 0 0
304− let row_0 = replicate (fromEnum w) 'X'
302+ let row0 = replicate (fromEnum w) 'X'
305− putStrLn row_0
303+ putStrLn row0
306 forM_ [1 .. h - 2] $ \y -> do
304 forM_ [1 .. h - 2] $ \y -> do
307− set_cursor_pos t 0 y
305+ setCursorPos t 0 y
308 putStr "X"
306 putStr "X"
309 hFlush stdout
307 hFlush stdout
310− set_cursor_pos t (w - 1) y
308+ setCursorPos t (w - 1) y
311 putStr "X"
309 putStr "X"
312 hFlush stdout
310 hFlush stdout
313− set_cursor_pos t 0 (h - 1)
311+ setCursorPos t 0 (h - 1)
314− let row_h = row_0
312+ let rowH = row0
315− putStr row_h
313+ putStr rowH
316 hFlush stdout
314 hFlush stdout
318− show_cursor t
316+ showCursor t
319− release_display t
317+ releaseDisplay t
320− release_terminal t
318+ releaseTerminal t
321 return ()
319 return ()
322− , print_summary = display_bounds_test_summary False
320+ , printSummary = displayBoundsTestSummary False
323− , confirm_results = generic_output_match_confirm
321+ , confirmResults = genericOutputMatchConfirm
326−display_bounds_test_summary has_cursor = do
324+displayBoundsTestSummary hasCursor = do
327 putStr $ [s|
325 putStr $ [s|
328Once return is pressed:
326Once return is pressed:
329 0. The screen will be cleared.
327 0. The screen will be cleared.
331− if has_cursor
329+ if hasCursor
332 then putStr " 1. The cursor will be visible."
330 then putStr " 1. The cursor will be visible."
333 else putStr " 1. The cursor will NOT be visible."
331 else putStr " 1. The cursor will NOT be visible."
334 putStr [s|
332 putStr [s|
@@ -339,7 +337,7 @@ Once return is pressed:
339 |XXXXXXXXXXXXX|
337 |XXXXXXXXXXXXX|
342− if has_cursor
340+ if hasCursor
343 then putStr $ [s|
341 then putStr $ [s|
345 |XXXXXXXXXXXXC| |]
343 |XXXXXXXXXXXXC| |]
@@ -360,13 +358,13 @@ After return is pressed for the second time:
360 1. The cursor should be visible.
358 1. The cursor should be visible.
363−generic_output_match_confirm = do
361+genericOutputMatchConfirm = do
364 putStr $ [s|
362 putStr $ [s|
365Did the test output match the description?
363Did the test output match the description?
367− default_success_confirm_results
365+ defaultSuccessConfirmResults
369−-- Explicitely definethe bytes that encode each example text.
367+-- Explicitly define the bytes that encode each example text.
370-- This avoids any issues with how the compiler represents string literals.
368-- This avoids any issues with how the compiler represents string literals.
372-- This document is UTF-8 encoded so the UTF-8 string is still included for
370-- This document is UTF-8 encoded so the UTF-8 string is still included for
@@ -375,24 +373,24 @@ Did the test output match the description?
375-- It's assumed the compiler will at least not barf on UTF-8 encoded text in
373-- It's assumed the compiler will at least not barf on UTF-8 encoded text in
376-- comments ;-)
374-- comments ;-)
378−-- txt_0 = ↑↑↓↓←→←→BA
376+-- txt0 = ↑↑↓↓←→←→BA
380−utf8_txt_0 :: [[Word8]]
378+utf8Txt0 :: [[Word8]]
381−utf8_txt_0 = [ [ 0xe2 , 0x86 , 0x91 ]
379+utf8Txt0 = [ [ 0xe2 , 0x86 , 0x91 ]
382− , [ 0xe2 , 0x86 , 0x91 ]
380+ , [ 0xe2 , 0x86 , 0x91 ]
383− , [ 0xe2 , 0x86 , 0x93 ]
381+ , [ 0xe2 , 0x86 , 0x93 ]
384− , [ 0xe2 , 0x86 , 0x93 ]
382+ , [ 0xe2 , 0x86 , 0x93 ]
385− , [ 0xe2 , 0x86 , 0x90 ]
383+ , [ 0xe2 , 0x86 , 0x90 ]
386− , [ 0xe2 , 0x86 , 0x92 ]
384+ , [ 0xe2 , 0x86 , 0x92 ]
387− , [ 0xe2 , 0x86 , 0x90 ]
385+ , [ 0xe2 , 0x86 , 0x90 ]
388− , [ 0xe2 , 0x86 , 0x92 ]
386+ , [ 0xe2 , 0x86 , 0x92 ]
389− , [ 0x42 ]
387+ , [ 0x42 ]
390− , [ 0x41 ]
388+ , [ 0x41 ]
393−iso_10646_txt_0 :: String
391+iso10646Txt0 :: String
394−iso_10646_txt_0 = map toEnum
392+iso10646Txt0 = map toEnum
@@ -404,46 +402,46 @@ iso_10646_txt_0 = map toEnum
407−unicode_single_width_0 = Test
405+unicodeSingleWidth0 = Test
408− { test_name = "Verify terminal can display unicode single-width characters. (Direct UTF-8)"
406+ { testName = "Verify terminal can display unicode single-width characters. (Direct UTF-8)"
409− , test_ID = "unicode_single_width_0"
407+ , testID = "unicodeSingleWidth0"
410− , test_action = do
408+ , testAction = do
411− t <- current_terminal
409+ t <- standardIOConfig >>= outputForConfig
412− reserve_display t
410+ reserveDisplay t
413− hide_cursor t
411+ hideCursor t
414− withArrayLen (concat utf8_txt_0) (flip $ hPutBuf stdout)
412+ withArrayLen (concat utf8Txt0) (flip $ hPutBuf stdout)
415 hPutStr stdout "\n"
413 hPutStr stdout "\n"
416 hPutStr stdout "0123456789\n"
414 hPutStr stdout "0123456789\n"
417 hFlush stdout
415 hFlush stdout
419− release_display t
417+ releaseDisplay t
420− release_terminal t
418+ releaseTerminal t
421 return ()
419 return ()
422− , print_summary = unicode_single_width_summary
420+ , printSummary = unicodeSingleWidthSummary
423− , confirm_results = generic_output_match_confirm
421+ , confirmResults = genericOutputMatchConfirm
426−unicode_single_width_1 = Test
424+unicodeSingleWidth1 = Test
427− { test_name = "Verify terminal can display unicode single-width characters. (Image ops)"
425+ { testName = "Verify terminal can display unicode single-width characters. (Image ops)"
428− , test_ID = "unicode_single_width_1"
426+ , testID = "unicodeSingleWidth1"
429− , test_action = do
427+ , testAction = do
430− t <- current_terminal
428+ t <- standardIOConfig >>= outputForConfig
431− reserve_display t
429+ reserveDisplay t
432− let pic = pic_for_image image
430+ let pic = picForImage image
433− image = line_0 <-> line_1
431+ image = line0 <-> line1
434− line_0 = iso_10646_string def_attr iso_10646_txt_0
432+ line0 = iso10646String defAttr iso10646Txt0
435− line_1 = string def_attr "0123456789"
433+ line1 = string defAttr "0123456789"
436− d <- display_bounds t >>= display_context t
434+ d <- displayBounds t >>= displayContext t
437− output_picture d pic
435+ outputPicture d pic
439− release_display t
437+ releaseDisplay t
440− release_terminal t
438+ releaseTerminal t
441 return ()
439 return ()
442− , print_summary = unicode_single_width_summary
440+ , printSummary = unicodeSingleWidthSummary
443− , confirm_results = generic_output_match_confirm
441+ , confirmResults = genericOutputMatchConfirm
446−unicode_single_width_summary = putStr [s|
444+unicodeSingleWidthSummary = putStr [s|
447Once return is pressed:
445Once return is pressed:
448 0. The screen will be cleared.
446 0. The screen will be cleared.
449 1. The cursor will be hidden.
447 1. The cursor will be hidden.
@@ -477,55 +475,55 @@ After return is pressed for the second time:
478-- The second example is a unicode string containing double-width glyphs
476-- The second example is a unicode string containing double-width glyphs
480−utf8_txt_1 :: [[Word8]]
478+utf8Txt1 :: [[Word8]]
481−utf8_txt_1 = [ [0xe4,0xbd,0xa0]
479+utf8Txt1 = [ [0xe4,0xbd,0xa0]
482− , [0xe5,0xa5,0xbd]
480+ , [0xe5,0xa5,0xbd]
483− , [0xe5,0x90,0x97]
481+ , [0xe5,0x90,0x97]
486−iso_10646_txt_1 :: String
484+iso10646Txt1 :: String
487−iso_10646_txt_1 = map toEnum [20320,22909,21527]
485+iso10646Txt1 = map toEnum [20320,22909,21527]
489−unicode_double_width_0 = Test
487+unicodeDoubleWidth0 = Test
490− { test_name = "Verify terminal can display unicode double-width characters. (Direct UTF-8)"
488+ { testName = "Verify terminal can display unicode double-width characters. (Direct UTF-8)"
491− , test_ID = "unicode_double_width_0"
489+ , testID = "unicodeDoubleWidth0"
492− , test_action = do
490+ , testAction = do
493− t <- current_terminal
491+ t <- standardIOConfig >>= outputForConfig
494− reserve_display t
492+ reserveDisplay t
495− hide_cursor t
493+ hideCursor t
496− withArrayLen (concat utf8_txt_1) (flip $ hPutBuf stdout)
494+ withArrayLen (concat utf8Txt1) (flip $ hPutBuf stdout)
497 hPutStr stdout "\n"
495 hPutStr stdout "\n"
498 hPutStr stdout "012345\n"
496 hPutStr stdout "012345\n"
499 hFlush stdout
497 hFlush stdout
501− release_display t
499+ releaseDisplay t
502− release_terminal t
500+ releaseTerminal t
503 return ()
501 return ()
504− , print_summary = unicode_double_width_summary
502+ , printSummary = unicodeDoubleWidthSummary
505− , confirm_results = generic_output_match_confirm
503+ , confirmResults = genericOutputMatchConfirm
508−unicode_double_width_1 = Test
506+unicodeDoubleWidth1 = Test
509− { test_name = "Verify terminal can display unicode double-width characters. (Image ops)"
507+ { testName = "Verify terminal can display unicode double-width characters. (Image ops)"
510− , test_ID = "unicode_double_width_1"
508+ , testID = "unicodeDoubleWidth1"
511− , test_action = do
509+ , testAction = do
512− t <- current_terminal
510+ t <- standardIOConfig >>= outputForConfig
513− reserve_display t
511+ reserveDisplay t
514− let pic = pic_for_image image
512+ let pic = picForImage image
515− image = line_0 <-> line_1
513+ image = line0 <-> line1
516− line_0 = iso_10646_string def_attr iso_10646_txt_1
514+ line0 = iso10646String defAttr iso10646Txt1
517− line_1 = string def_attr "012345"
515+ line1 = string defAttr "012345"
518− d <- display_bounds t >>= display_context t
516+ d <- displayBounds t >>= displayContext t
519− output_picture d pic
517+ outputPicture d pic
521− release_display t
519+ releaseDisplay t
522− release_terminal t
520+ releaseTerminal t
523 return ()
521 return ()
524− , print_summary = unicode_double_width_summary
522+ , printSummary = unicodeDoubleWidthSummary
525− , confirm_results = generic_output_match_confirm
523+ , confirmResults = genericOutputMatchConfirm
528−unicode_double_width_summary = putStr [s|
526+unicodeDoubleWidthSummary = putStr [s|
529Once return is pressed:
527Once return is pressed:
530 0. The screen will be cleared.
528 0. The screen will be cleared.
531 1. The cursor will be hidden.
529 1. The cursor will be hidden.
@@ -552,32 +550,32 @@ After return is pressed for the second time:
552 1. The cursor should be visible.
550 1. The cursor should be visible.
555−all_colors = zip [ black, red, green, yellow, blue, magenta, cyan, white ]
553+allColors = zip [ black, red, green, yellow, blue, magenta, cyan, white ]
556− [ "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white" ]
554+ [ "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white" ]
558−all_bright_colors
556+allBrightColors
559− = zip [ bright_black, bright_red, bright_green, bright_yellow, bright_blue, bright_magenta, bright_cyan, bright_white ]
557+ = zip [ brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite ]
560 [ "bright black", "bright red", "bright green", "bright yellow", "bright blue", "bright magenta", "bright cyan", "bright white" ]
558 [ "bright black", "bright red", "bright green", "bright yellow", "bright blue", "bright magenta", "bright cyan", "bright white" ]
562−attributes_test_0 = Test
560+attributesTest0 = Test
563− { test_name = "Character attributes: foreground colors."
561+ { testName = "Character attributes: foreground colors."
564− , test_ID = "attributes_test_0"
562+ , testID = "attributesTest0"
565− , test_action = do
563+ , testAction = do
566− t <- current_terminal
564+ t <- standardIOConfig >>= outputForConfig
567− reserve_display t
565+ reserveDisplay t
568− let pic = pic_for_image image
566+ let pic = picForImage image
569− image = border <|> column_0 <|> border <|> column_1 <|> border
567+ image = border <|> column0 <|> border <|> column1 <|> border
570− column_0 = vert_cat $ map line_with_color all_colors
568+ column0 = vertCat $ map lineWithColor allColors
571− border = vert_cat $ replicate (length all_colors) $ string def_attr " | "
569+ border = vertCat $ replicate (length allColors) $ string defAttr " | "
572− column_1 = vert_cat $ map (string def_attr . snd) all_colors
570+ column1 = vertCat $ map (string defAttr . snd) allColors
573− line_with_color (c, c_name) = string (def_attr `with_fore_color` c) c_name
571+ lineWithColor (c, cName) = string (defAttr `withForeColor` c) cName
574− d <- display_bounds t >>= display_context t
572+ d <- displayBounds t >>= displayContext t
575− output_picture d pic
573+ outputPicture d pic
577− release_display t
575+ releaseDisplay t
578− release_terminal t
576+ releaseTerminal t
579 return ()
577 return ()
580− , print_summary = do
578+ , printSummary = do
581 putStr $ [s|
579 putStr $ [s|
582Once return is pressed:
580Once return is pressed:
583 0. The screen will be cleared.
581 0. The screen will be cleared.
@@ -598,32 +596,32 @@ After return is pressed for the second time:
598 0. The screen containing the test summary should be restored.
596 0. The screen containing the test summary should be restored.
599 1. The cursor should be visible.
597 1. The cursor should be visible.
601− , confirm_results = do
599+ , confirmResults = do
602 putStr $ [s|
600 putStr $ [s|
603Did the test output match the description?
601Did the test output match the description?
605− default_success_confirm_results
603+ defaultSuccessConfirmResults
608−attributes_test_1 = Test
606+attributesTest1 = Test
609− { test_name = "Character attributes: background colors."
607+ { testName = "Character attributes: background colors."
610− , test_ID = "attributes_test_1"
608+ , testID = "attributesTest1"
611− , test_action = do
609+ , testAction = do
612− t <- current_terminal
610+ t <- standardIOConfig >>= outputForConfig
613− reserve_display t
611+ reserveDisplay t
614− let pic = pic_for_image image
612+ let pic = picForImage image
615− image = border <|> column_0 <|> border <|> column_1 <|> border
613+ image = border <|> column0 <|> border <|> column1 <|> border
616− column_0 = vert_cat $ map line_with_color all_colors
614+ column0 = vertCat $ map lineWithColor allColors
617− border = vert_cat $ replicate (length all_colors) $ string def_attr " | "
615+ border = vertCat $ replicate (length allColors) $ string defAttr " | "
618− column_1 = vert_cat $ map (string def_attr . snd) all_colors
616+ column1 = vertCat $ map (string defAttr . snd) allColors
619− line_with_color (c, c_name) = string (def_attr `with_back_color` c) c_name
617+ lineWithColor (c, cName) = string (defAttr `withBackColor` c) cName
620− d <- display_bounds t >>= display_context t
618+ d <- displayBounds t >>= displayContext t
621− output_picture d pic
619+ outputPicture d pic
623− release_display t
621+ releaseDisplay t
624− release_terminal t
622+ releaseTerminal t
625 return ()
623 return ()
626− , print_summary = do
624+ , printSummary = do
627 putStr $ [s|
625 putStr $ [s|
628Once return is pressed:
626Once return is pressed:
629 0. The screen will be cleared.
627 0. The screen will be cleared.
@@ -653,57 +651,57 @@ After return is pressed for the second time:
653 0. The screen containing the test summary should be restored.
651 0. The screen containing the test summary should be restored.
654 1. The cursor should be visible.
652 1. The cursor should be visible.
656− , confirm_results = do
654+ , confirmResults = do
657 putStr $ [s|
655 putStr $ [s|
658Did the test output match the description?
656Did the test output match the description?
660− default_success_confirm_results
658+ defaultSuccessConfirmResults
663−attributes_test_2 = Test
661+attributesTest2 = Test
664− { test_name = "Character attributes: Vivid foreground colors."
662+ { testName = "Character attributes: Vivid foreground colors."
665− , test_ID = "attributes_test_2"
663+ , testID = "attributesTest2"
666− , test_action = do
664+ , testAction = do
667− t <- current_terminal
665+ t <- standardIOConfig >>= outputForConfig
668− reserve_display t
666+ reserveDisplay t
669− let pic = pic_for_image image
667+ let pic = picForImage image
670− image = horiz_cat [border, column_0, border, column_1, border, column_2, border]
668+ image = horizCat [border, column0, border, column1, border, column2, border]
671− border = vert_cat $ replicate (length all_colors) $ string def_attr " | "
669+ border = vertCat $ replicate (length allColors) $ string defAttr " | "
672− column_0 = vert_cat $ map line_with_color_0 all_colors
670+ column0 = vertCat $ map lineWithColor0 allColors
673− column_1 = vert_cat $ map line_with_color_1 all_bright_colors
671+ column1 = vertCat $ map lineWithColor1 allBrightColors
674− column_2 = vert_cat $ map (string def_attr . snd) all_colors
672+ column2 = vertCat $ map (string defAttr . snd) allColors
675− line_with_color_0 (c, c_name) = string (def_attr `with_fore_color` c) c_name
673+ lineWithColor0 (c, cName) = string (defAttr `withForeColor` c) cName
676− line_with_color_1 (c, c_name) = string (def_attr `with_fore_color` c) c_name
674+ lineWithColor1 (c, cName) = string (defAttr `withForeColor` c) cName
677− d <- display_bounds t >>= display_context t
675+ d <- displayBounds t >>= displayContext t
678− output_picture d pic
676+ outputPicture d pic
680− release_display t
678+ releaseDisplay t
681− release_terminal t
679+ releaseTerminal t
682 return ()
680 return ()
683− , print_summary = do
681+ , printSummary = do
684 putStr $ [s|
682 putStr $ [s|
685Once return is pressed:
683Once return is pressed:
686 0. The screen will be cleared.
684 0. The screen will be cleared.
687 1. The cursor will be hidden.
685 1. The cursor will be hidden.
688 2. 9 lines of text in three columns will be drawn:
686 2. 9 lines of text in three columns will be drawn:
689 a. The first column will be a name of a standard color (for an 8 color
687 a. The first column will be a name of a standard color (for an 8 color
690− terminal) rendered with that color as the foreground color.
688+ terminal) rendered with that color as the foreground color.
691 b. The next column will be also be the name of a standard color rendered
689 b. The next column will be also be the name of a standard color rendered
692 with that color as the foreground color but the shade used should be
690 with that color as the foreground color but the shade used should be
693− more vivid than the shade used in the first column.
691+ more vivid than the shade used in the first column.
694 c. The final column will be the name of a color rendered with the
692 c. The final column will be the name of a color rendered with the
695 default attributes.
693 default attributes.
697For instance, one line will be the word "magenta" and that word should be
695For instance, one line will be the word "magenta" and that word should be
698−rendered in the magenta color.
696+rendered in the magenta color.
700I'm not actually sure exactly what "vivid" means in this context. For xterm the
698I'm not actually sure exactly what "vivid" means in this context. For xterm the
701−vivid colors are brighter.
699+vivid colors are brighter.
704 * The first column: The foreground color matches the named color.
702 * The first column: The foreground color matches the named color.
705 * The second column: The foreground color matches the named color but is
703 * The second column: The foreground color matches the named color but is
706− more vivid than the color used in the first column.
704+ more vivid than the color used in the first column.
707 * The third column: All text is rendered with the default attributes.
705 * The third column: All text is rendered with the default attributes.
708 * The vertical bars used in each line to mark the border of a column are
706 * The vertical bars used in each line to mark the border of a column are
709 lined up.
707 lined up.
@@ -712,34 +710,34 @@ After return is pressed for the second time:
712 0. The screen containing the test summary should be restored.
710 0. The screen containing the test summary should be restored.
713 1. The cursor should be visible.
711 1. The cursor should be visible.
715− , confirm_results = do
713+ , confirmResults = do
716 putStr $ [s|
714 putStr $ [s|
717Did the test output match the description?
715Did the test output match the description?
719− default_success_confirm_results
717+ defaultSuccessConfirmResults
722−attributes_test_3 = Test
720+attributesTest3 = Test
723− { test_name = "Character attributes: Vivid background colors."
721+ { testName = "Character attributes: Vivid background colors."
724− , test_ID = "attributes_test_3"
722+ , testID = "attributesTest3"
725− , test_action = do
723+ , testAction = do
726− t <- current_terminal
724+ t <- standardIOConfig >>= outputForConfig
727− reserve_display t
725+ reserveDisplay t
728− let pic = pic_for_image image
726+ let pic = picForImage image
729− image = horiz_cat [border, column_0, border, column_1, border, column_2, border]
727+ image = horizCat [border, column0, border, column1, border, column2, border]
730− border = vert_cat $ replicate (length all_colors) $ string def_attr " | "
728+ border = vertCat $ replicate (length allColors) $ string defAttr " | "
731− column_0 = vert_cat $ map line_with_color_0 all_colors
729+ column0 = vertCat $ map lineWithColor0 allColors
732− column_1 = vert_cat $ map line_with_color_1 all_bright_colors
730+ column1 = vertCat $ map lineWithColor1 allBrightColors
733− column_2 = vert_cat $ map (string def_attr . snd) all_colors
731+ column2 = vertCat $ map (string defAttr . snd) allColors
734− line_with_color_0 (c, c_name) = string (def_attr `with_back_color` c) c_name
732+ lineWithColor0 (c, cName) = string (defAttr `withBackColor` c) cName
735− line_with_color_1 (c, c_name) = string (def_attr `with_back_color` c) c_name
733+ lineWithColor1 (c, cName) = string (defAttr `withBackColor` c) cName
736− d <- display_bounds t >>= display_context t
734+ d <- displayBounds t >>= displayContext t
737− output_picture d pic
735+ outputPicture d pic
739− release_display t
737+ releaseDisplay t
740− release_terminal t
738+ releaseTerminal t
741 return ()
739 return ()
742− , print_summary = do
740+ , printSummary = do
743 putStr $ [s|
741 putStr $ [s|
744Once return is pressed:
742Once return is pressed:
745 0. The screen will be cleared.
743 0. The screen will be cleared.
@@ -747,23 +745,23 @@ Once return is pressed:
747 2. 9 lines of text in three columns will be drawn:
745 2. 9 lines of text in three columns will be drawn:
748 a. The first column will contain be a name of a standard color for an 8
746 a. The first column will contain be a name of a standard color for an 8
749 color terminal rendered with the default foreground color with a
747 color terminal rendered with the default foreground color with a
750− background the named color.
748+ background the named color.
751 b. The first column will contain be a name of a standard color for an 8
749 b. The first column will contain be a name of a standard color for an 8
752 color terminal rendered with the default foreground color with the
750 color terminal rendered with the default foreground color with the
753− background a vivid version of the named color.
751+ background a vivid version of the named color.
754 c. The third column will be the name of a standard color rendered with
752 c. The third column will be the name of a standard color rendered with
755 the default attributes.
753 the default attributes.
757For instance, one line will contain be the word "magenta" and the word should
755For instance, one line will contain be the word "magenta" and the word should
758−be rendered in the default foreground color over a magenta background.
756+be rendered in the default foreground color over a magenta background.
760I'm not actually sure exactly what "vivid" means in this context. For xterm the
758I'm not actually sure exactly what "vivid" means in this context. For xterm the
761vivid colors are brighter.
759vivid colors are brighter.
764 * The first column: The background color matches the named color.
762 * The first column: The background color matches the named color.
765 * The second column: The background color matches the named color and is
763 * The second column: The background color matches the named color and is
766− more vivid than the color used in the first column.
764+ more vivid than the color used in the first column.
767 * The third column column: All text is rendered with the default attributes.
765 * The third column column: All text is rendered with the default attributes.
768 * The vertical bars used in each line to mark the border of a column are
766 * The vertical bars used in each line to mark the border of a column are
769 lined up.
767 lined up.
@@ -779,51 +777,51 @@ After return is pressed for the second time:
779 0. The screen containing the test summary should be restored.
777 0. The screen containing the test summary should be restored.
780 1. The cursor should be visible.
778 1. The cursor should be visible.
782− , confirm_results = do
780+ , confirmResults = do
783 putStr $ [s|
781 putStr $ [s|
784Did the test output match the description?
782Did the test output match the description?
786− default_success_confirm_results
784+ defaultSuccessConfirmResults
789−attr_combos =
787+attrCombos =
790 [ ( "default", id )
788 [ ( "default", id )
791− , ( "bold", flip with_style bold )
789+ , ( "bold", flip withStyle bold )
792− , ( "blink", flip with_style blink )
790+ , ( "blink", flip withStyle blink )
793− , ( "underline", flip with_style underline )
791+ , ( "underline", flip withStyle underline )
794− , ( "bold + blink", flip with_style (bold + blink) )
792+ , ( "bold + blink", flip withStyle (bold + blink) )
795− , ( "bold + underline", flip with_style (bold + underline) )
793+ , ( "bold + underline", flip withStyle (bold + underline) )
796− , ( "underline + blink", flip with_style (underline + blink) )
794+ , ( "underline + blink", flip withStyle (underline + blink) )
797− , ( "bold + blink + underline", flip with_style (bold + blink + underline) )
795+ , ( "bold + blink + underline", flip withStyle (bold + blink + underline) )
800−attributes_test_4 = Test
798+attributesTest4 = Test
801− { test_name = "Character attributes: Bold; Blink; Underline."
799+ { testName = "Character attributes: Bold; Blink; Underline."
802− , test_ID = "attributes_test_4"
800+ , testID = "attributesTest4"
803− , test_action = do
801+ , testAction = do
804− t <- current_terminal
802+ t <- standardIOConfig >>= outputForConfig
805− reserve_display t
803+ reserveDisplay t
806− let pic = pic_for_image image
804+ let pic = picForImage image
807− image = horiz_cat [border, column_0, border, column_1, border]
805+ image = horizCat [border, column0, border, column1, border]
808− border = vert_cat $ replicate (length attr_combos) $ string def_attr " | "
806+ border = vertCat $ replicate (length attrCombos) $ string defAttr " | "
809− column_0 = vert_cat $ map line_with_attrs attr_combos
807+ column0 = vertCat $ map lineWithAttrs attrCombos
810− column_1 = vert_cat $ map (string def_attr . fst) attr_combos
808+ column1 = vertCat $ map (string defAttr . fst) attrCombos
811− line_with_attrs (desc, attr_f) = string (attr_f def_attr) desc
809+ lineWithAttrs (desc, attrF) = string (attrF defAttr) desc
812− d <- display_bounds t >>= display_context t
810+ d <- displayBounds t >>= displayContext t
813− output_picture d pic
811+ outputPicture d pic
815− release_display t
813+ releaseDisplay t
816− release_terminal t
814+ releaseTerminal t
817 return ()
815 return ()
818− , print_summary = do
816+ , printSummary = do
819 putStr $ [s|
817 putStr $ [s|
820Once return is pressed:
818Once return is pressed:
821 0. The screen will be cleared.
819 0. The screen will be cleared.
822 1. The cursor will be hidden.
820 1. The cursor will be hidden.
823− 2. 8 rows of text in two columns.
821+ 2. 8 rows of text in two columns.
824 The rows will contain the following text:
822 The rows will contain the following text:
828 underline
826 underline
829 bold + blink
827 bold + blink
@@ -832,8 +830,8 @@ Once return is pressed:
832 bold + blink + underline
830 bold + blink + underline
833 The first column will be rendered with the described attributes. The second
831 The first column will be rendered with the described attributes. The second
834 column will be rendered with the default attributes.
832 column will be rendered with the default attributes.
837 * The vertical bars used in each line to mark the border of a column are
835 * The vertical bars used in each line to mark the border of a column are
838 lined up.
836 lined up.
839 * The text in the first column is rendered as described.
837 * The text in the first column is rendered as described.
@@ -842,31 +840,31 @@ After return is pressed for the second time:
842 0. The screen containing the test summary should be restored.
840 0. The screen containing the test summary should be restored.
843 1. The cursor should be visible.
841 1. The cursor should be visible.
845− , confirm_results = do
843+ , confirmResults = do
846 putStr $ [s|
844 putStr $ [s|
847Did the test output match the description?
845Did the test output match the description?
849− default_success_confirm_results
847+ defaultSuccessConfirmResults
852−attributes_test_5 = Test
850+attributesTest5 = Test
853− { test_name = "Character attributes: 240 color palette"
851+ { testName = "Character attributes: 240 color palette"
854− , test_ID = "attributes_test_5"
852+ , testID = "attributesTest5"
855− , test_action = do
853+ , testAction = do
856− t <- current_terminal
854+ t <- standardIOConfig >>= outputForConfig
857− reserve_display t
855+ reserveDisplay t
858− let pic = pic_for_image image
856+ let pic = picForImage image
859− image = vert_cat $ map horiz_cat $ split_color_images color_images
857+ image = vertCat $ map horizCat $ splitColorImages colorImages
860− color_images = map (\i -> string (current_attr `with_back_color` Color240 i) " ") [0..239]
858+ colorImages = map (\i -> string (currentAttr `withBackColor` Color240 i) " ") [0..239]
861− split_color_images [] = []
859+ splitColorImages [] = []
862− split_color_images is = (take 20 is ++ [string def_attr " "]) : (split_color_images (drop 20 is))
860+ splitColorImages is = (take 20 is ++ [string defAttr " "]) : (splitColorImages (drop 20 is))
863− d <- display_bounds t >>= display_context t
861+ d <- displayBounds t >>= displayContext t
864− output_picture d pic
862+ outputPicture d pic
866− release_display t
864+ releaseDisplay t
867− release_terminal t
865+ releaseTerminal t
868 return ()
866 return ()
869− , print_summary = do
867+ , printSummary = do
870 putStr $ [s|
868 putStr $ [s|
871Once return is pressed:
869Once return is pressed:
872 0. The screen will be cleared.
870 0. The screen will be cleared.
@@ -874,296 +872,304 @@ Once return is pressed:
874 2. A 20 character wide and 12 row high block of color squares. This should look like a palette
872 2. A 20 character wide and 12 row high block of color squares. This should look like a palette
875 of some sort. I'm not exactly sure if all color terminals use the same palette. I doubt it...
873 of some sort. I'm not exactly sure if all color terminals use the same palette. I doubt it...
879After return is pressed for the second time:
877After return is pressed for the second time:
880 0. The screen containing the test summary should be restored.
878 0. The screen containing the test summary should be restored.
881 1. The cursor should be visible.
879 1. The cursor should be visible.
883− , confirm_results = do
881+ , confirmResults = do
884 putStr $ [s|
882 putStr $ [s|
885Did the test output match the description?
883Did the test output match the description?
887− default_success_confirm_results
885+ defaultSuccessConfirmResults
890−inline_test_0 = Test
888+inlineTest0 = Test
891− { test_name = "Verify styled output can be performed without clearing the screen."
889+ { testName = "Verify styled output can be performed without clearing the screen."
892− , test_ID = "inline_test_0"
890+ , testID = "inlineTest0"
893− , test_action = do
891+ , testAction = do
894 putStrLn "line 1."
892 putStrLn "line 1."
895− put_attr_change_ $ back_color red >> apply_style underline
893+ putAttrChange_ $ backColor red >> applyStyle underline
896 putStrLn "line 2."
894 putStrLn "line 2."
897− put_attr_change_ $ default_all
895+ putAttrChange_ $ defaultAll
898 putStrLn "line 3."
896 putStrLn "line 3."
899− , print_summary = putStr $ [s|
897+ , printSummary = putStr $ [s|
900lines are in order.
898lines are in order.
901The second line "line 2" should have a red background and the text underline.
899The second line "line 2" should have a red background and the text underline.
902The third line "line 3" should be drawn in the same style as the first line.
900The third line "line 3" should be drawn in the same style as the first line.
905− , confirm_results = generic_output_match_confirm
903+ , confirmResults = genericOutputMatchConfirm
908−inline_test_1 = Test
906+inlineTest1 = Test
909− { test_name = "Verify styled output can be performed without clearing the screen."
907+ { testName = "Verify styled output can be performed without clearing the screen."
910− , test_ID = "inline_test_1"
908+ , testID = "inlineTest1"
911− , test_action = do
909+ , testAction = do
912 putStr "Not styled. "
910 putStr "Not styled. "
913− put_attr_change_ $ back_color red >> apply_style underline
911+ putAttrChange_ $ backColor red >> applyStyle underline
914 putStr " Styled! "
912 putStr " Styled! "
915− put_attr_change_ $ default_all
913+ putAttrChange_ $ defaultAll
916 putStrLn "Not styled."
914 putStrLn "Not styled."
917− , print_summary = putStr $ [s|
915+ , printSummary = putStr $ [s|
920− , confirm_results = generic_output_match_confirm
918+ , confirmResults = genericOutputMatchConfirm
923−inline_test_2 = Test
921+inlineTest2 = Test
924− { test_name = "Verify styled output can be performed without clearing the screen."
922+ { testName = "Verify styled output can be performed without clearing the screen."
925− , test_ID = "inline_test_1"
923+ , testID = "inlineTest1"
926− , test_action = do
924+ , testAction = do
927 putStr "Not styled. "
925 putStr "Not styled. "
928− put_attr_change_ $ back_color red >> apply_style underline
926+ putAttrChange_ $ backColor red >> applyStyle underline
929 putStr " Styled! "
927 putStr " Styled! "
930− put_attr_change_ $ default_all
928+ putAttrChange_ $ defaultAll
931 putStr "Not styled.\n"
929 putStr "Not styled.\n"
932− , print_summary = putStr $ [s|
930+ , printSummary = putStr $ [s|
934− , confirm_results = generic_output_match_confirm
932+ , confirmResults = genericOutputMatchConfirm
937−cursor_hide_test_0 :: Test
935+cursorHideTest0 :: Test
938−cursor_hide_test_0 = Test
936+cursorHideTest0 = Test
939− { test_name = "Verify the cursor is hid and re-shown. issue #7"
937+ { testName = "Verify the cursor is hid and re-shown. issue #7"
940− , test_ID = "cursor_hide_test_0"
938+ , testID = "cursorHideTest0"
941− , test_action = do
939+ , testAction = do
942− vty <- mkVty
940+ vty <- mkVty defaultConfig
943− show_cursor $ terminal vty
941+ showCursor $ outputIface vty
944− set_cursor_pos (terminal vty) 5 5
942+ setCursorPos (outputIface vty) 5 5
945− next_event vty
943+ nextEvent vty
946− hide_cursor $ terminal vty
944+ hideCursor $ outputIface vty
947− next_event vty
945+ nextEvent vty
948 shutdown vty
946 shutdown vty
949 return ()
947 return ()
950− , print_summary = putStr $ [s|
948+ , printSummary = putStr $ [s|
951 1. verify the cursor is displayed.
949 1. verify the cursor is displayed.
952 2. press enter
950 2. press enter
953 3. verify the cursor is hid.
951 3. verify the cursor is hid.
954 4. press enter.
952 4. press enter.
955 5. the display should return to the state before the test.
953 5. the display should return to the state before the test.
957− , confirm_results = generic_output_match_confirm
955+ , confirmResults = genericOutputMatchConfirm
960−output_image_and_wait :: Image -> IO ()
958+outputImageAndWait :: Image -> IO ()
961−output_image_and_wait image = do
959+outputImageAndWait image = do
962− let pic = pic_for_image image
960+ let pic = picForImage image
963− output_pic_and_wait pic
961+ outputPicAndWait pic
965−output_pic_and_wait :: Picture -> IO ()
963+outputPicAndWait :: Picture -> IO ()
966−output_pic_and_wait pic = do
964+outputPicAndWait pic = do
967− t <- current_terminal
965+ t <- standardIOConfig >>= outputForConfig
968− reserve_display t
966+ reserveDisplay t
969− d <- display_bounds t >>= display_context t
967+ d <- displayBounds t >>= displayContext t
970− output_picture d pic
968+ outputPicture d pic
972− release_display t
970+ releaseDisplay t
973− release_terminal t
971+ releaseTerminal t
974 return ()
972 return ()
976−vert_crop_test_0 :: Test
974+vertCropTest0 :: Test
977−vert_crop_test_0 = Test
975+vertCropTest0 = Test
978− { test_name = "Verify bottom cropping works as expected with single column chars"
976+ { testName = "Verify bottom cropping works as expected with single column chars"
979− , test_ID = "crop_test_0"
977+ , testID = "cropTest0"
980− , test_action = do
978+ , testAction = do
981− let block_0 = crop_bottom 2 $ vert_cat $ map (string def_attr) lorum_ipsum
979+ let block0 = cropBottom 2 $ vertCat $ map (string defAttr) lorumIpsum
982− block_1 = vert_cat $ map (string def_attr) $ take 2 lorum_ipsum
980+ block1 = vertCat $ map (string defAttr) $ take 2 lorumIpsum
983− image = block_0 <-> background_fill 10 2 <-> block_1
981+ image = block0 <-> backgroundFill 10 2 <-> block1
984− output_image_and_wait image
982+ outputImageAndWait image
985− , print_summary = putStr $ [s|
983+ , printSummary = putStr $ [s|
986 1. Verify the two text blocks are identical.
984 1. Verify the two text blocks are identical.
987 2. press enter.
985 2. press enter.
988 3. the display should return to the state before the test.
986 3. the display should return to the state before the test.
990− , confirm_results = generic_output_match_confirm
988+ , confirmResults = genericOutputMatchConfirm
993−vert_crop_test_1 :: Test
991+vertCropTest1 :: Test
994−vert_crop_test_1 = Test
992+vertCropTest1 = Test
995− { test_name = "Verify bottom cropping works as expected with double column chars"
993+ { testName = "Verify bottom cropping works as expected with double column chars"
996− , test_ID = "crop_test_0"
994+ , testID = "cropTest0"
997− , test_action = do
995+ , testAction = do
998− let block_0 = crop_bottom 2 $ vert_cat $ map (string def_attr) lorum_ipsum_chinese
996+ let block0 = cropBottom 2 $ vertCat $ map (string defAttr) lorumIpsumChinese
999− block_1 = vert_cat $ map (string def_attr) $ take 2 lorum_ipsum_chinese
997+ block1 = vertCat $ map (string defAttr) $ take 2 lorumIpsumChinese
1000− image = block_0 <-> background_fill 10 2 <-> block_1
998+ image = block0 <-> backgroundFill 10 2 <-> block1
1001− output_image_and_wait image
999+ outputImageAndWait image
1002− , print_summary = putStr $ [s|
1000+ , printSummary = putStr $ [s|
1003 1. Verify the two text blocks are identical.
1001 1. Verify the two text blocks are identical.
1004 2. press enter.
1002 2. press enter.
1005 3. the display should return to the state before the test.
1003 3. the display should return to the state before the test.
1007− , confirm_results = generic_output_match_confirm
1005+ , confirmResults = genericOutputMatchConfirm
1010−vert_crop_test_2 :: Test
1008+vertCropTest2 :: Test
1011−vert_crop_test_2 = Test
1009+vertCropTest2 = Test
1012− { test_name = "Verify top cropping works as expected with single column chars"
1010+ { testName = "Verify top cropping works as expected with single column chars"
1013− , test_ID = "crop_test_0"
1011+ , testID = "cropTest2"
1014− , test_action = do
1012+ , testAction = do
1015− let block_0 = crop_top 2 $ vert_cat $ map (string def_attr) lorum_ipsum
1013+ let block0 = cropTop 2 $ vertCat $ map (string defAttr) lorumIpsum
1016− block_1 = vert_cat $ map (string def_attr) $ drop (length lorum_ipsum - 2) lorum_ipsum
1014+ block1 = vertCat $ map (string defAttr) $ drop (length lorumIpsum - 2) lorumIpsum
1017− image = block_0 <-> background_fill 10 2 <-> block_1
1015+ image = block0 <-> backgroundFill 10 2 <-> block1
1018− output_image_and_wait image
1016+ outputImageAndWait image
1019− , print_summary = putStr $ [s|
1017+ , printSummary = putStr $ [s|
1020 1. Verify the two text blocks are identical.
1018 1. Verify the two text blocks are identical.
1021 2. press enter.
1019 2. press enter.
1022 3. the display should return to the state before the test.
1020 3. the display should return to the state before the test.
1024− , confirm_results = generic_output_match_confirm
1022+ , confirmResults = genericOutputMatchConfirm
1027−vert_crop_test_3 :: Test
1025+vertCropTest3 :: Test
1028−vert_crop_test_3 = Test
1026+vertCropTest3 = Test
1029− { test_name = "Verify top cropping works as expected with double column chars"
1027+ { testName = "Verify top cropping works as expected with double column chars"
1030− , test_ID = "crop_test_0"
1028+ , testID = "cropTest0"
1031− , test_action = do
1029+ , testAction = do
1032− let block_0 = crop_top 2 $ vert_cat $ map (string def_attr) lorum_ipsum_chinese
1030+ let block0 = cropTop 2 $ vertCat $ map (string defAttr) lorumIpsumChinese
1033− block_1 = vert_cat $ map (string def_attr) $ drop (length lorum_ipsum_chinese - 2 ) lorum_ipsum_chinese
1031+ block1 = vertCat $ map (string defAttr) $ drop (length lorumIpsumChinese - 2 ) lorumIpsumChinese
1034− image = block_0 <-> background_fill 10 2 <-> block_1
1032+ image = block0 <-> backgroundFill 10 2 <-> block1
1035− output_image_and_wait image
1033+ outputImageAndWait image
1036− , print_summary = putStr $ [s|
1034+ , printSummary = putStr $ [s|
1037 1. Verify the two text blocks are identical.
1035 1. Verify the two text blocks are identical.
1038 2. press enter.
1036 2. press enter.
1039 3. the display should return to the state before the test.
1037 3. the display should return to the state before the test.
1041− , confirm_results = generic_output_match_confirm
1039+ , confirmResults = genericOutputMatchConfirm
1044−horiz_crop_test_0 :: Test
1042+horizCropTest0 :: Test
1045−horiz_crop_test_0 = Test
1043+horizCropTest0 = Test
1046− { test_name = "Verify right cropping works as expected with single column chars"
1044+ { testName = "Verify right cropping works as expected with single column chars"
1047− , test_ID = "crop_test_0"
1045+ , testID = "cropTest0"
1048− , test_action = do
1046+ , testAction = do
1049− let base_image = vert_cat $ map (string def_attr) lorum_ipsum
1047+ let baseImage = vertCat $ map (string defAttr) lorumIpsum
1050− cropped_image = crop_right (image_width base_image `div` 2) base_image
1048+ croppedImage = cropRight (imageWidth baseImage `div` 2) baseImage
1051− image = base_image <-> background_fill 10 2 <-> cropped_image
1049+ image = baseImage <-> backgroundFill 10 2 <-> croppedImage
1052− output_image_and_wait image
1050+ outputImageAndWait image
1053− , print_summary = putStr $ [s|
1051+ , printSummary = putStr $ [s|
1054 1. Verify the bottom text block is about half the width of the top text block.
1052 1. Verify the bottom text block is about half the width of the top text block.
1055 2. press enter.
1053 2. press enter.
1056 3. the display should return to the state before the test.
1054 3. the display should return to the state before the test.
1058− , confirm_results = generic_output_match_confirm
1056+ , confirmResults = genericOutputMatchConfirm
1061−horiz_crop_test_1 :: Test
1059+horizCropTest1 :: Test
1062−horiz_crop_test_1 = Test
1060+horizCropTest1 = Test
1063− { test_name = "Verify right cropping works as expected with double column chars"
1061+ { testName = "Verify right cropping works as expected with double column chars"
1064− , test_ID = "crop_test_0"
1062+ , testID = "cropTest0"
1065− , test_action = do
1063+ , testAction = do
1066− let base_image = vert_cat $ map (string def_attr) lorum_ipsum_chinese
1064+ let baseImage = vertCat $ map (string defAttr) lorumIpsumChinese
1067− cropped_image = crop_right (image_width base_image `div` 2) base_image
1065+ croppedImage = cropRight (imageWidth baseImage `div` 2) baseImage
1068− image = base_image <-> background_fill 10 2 <-> cropped_image
1066+ image = baseImage <-> backgroundFill 10 2 <-> croppedImage
1069− output_image_and_wait image
1067+ outputImageAndWait image
1070− , print_summary = putStr $ [s|
1068+ , printSummary = putStr $ [s|
1071 1. Verify the bottom text block is the left half of the top block. Ellipses on the right edge are OK.
1069 1. Verify the bottom text block is the left half of the top block. Ellipses on the right edge are OK.
1072 2. press enter.
1070 2. press enter.
1073 3. the display should return to the state before the test.
1071 3. the display should return to the state before the test.
1075− , confirm_results = generic_output_match_confirm
1073+ , confirmResults = genericOutputMatchConfirm
1078−horiz_crop_test_2 :: Test
1076+horizCropTest2 :: Test
1079−horiz_crop_test_2 = Test
1077+horizCropTest2 = Test
1080− { test_name = "Verify left cropping works as expected with single column chars"
1078+ { testName = "Verify left cropping works as expected with single column chars"
1081− , test_ID = "crop_test_0"
1079+ , testID = "cropTest0"
1082− , test_action = do
1080+ , testAction = do
1083− let base_image = vert_cat $ map (string def_attr) lorum_ipsum
1081+ let baseImage = vertCat $ map (string defAttr) lorumIpsum
1084− cropped_image = crop_left (image_width base_image `div` 2) base_image
1082+ croppedImage = cropLeft (imageWidth baseImage `div` 2) baseImage
1085− image = base_image <-> background_fill 10 2 <-> cropped_image
1083+ image = baseImage <-> backgroundFill 10 2 <-> croppedImage
1086− output_image_and_wait image
1084+ outputImageAndWait image
1087− , print_summary = putStr $ [s|
1085+ , printSummary = putStr $ [s|
1088 1. Verify the bottom text block is the right half of the top text block.
1086 1. Verify the bottom text block is the right half of the top text block.
1089 2. press enter.
1087 2. press enter.
1090 3. the display should return to the state before the test.
1088 3. the display should return to the state before the test.
1092− , confirm_results = generic_output_match_confirm
1090+ , confirmResults = genericOutputMatchConfirm
1095−horiz_crop_test_3 :: Test
1093+horizCropTest3 :: Test
1096−horiz_crop_test_3 = Test
1094+horizCropTest3 = Test
1097− { test_name = "Verify right cropping works as expected with double column chars"
1095+ { testName = "Verify right cropping works as expected with double column chars"
1098− , test_ID = "crop_test_0"
1096+ , testID = "cropTest0"
1099− , test_action = do
1097+ , testAction = do
1100− let base_image = vert_cat $ map (string def_attr) lorum_ipsum_chinese
1098+ let baseImage = vertCat $ map (string defAttr) lorumIpsumChinese
1101− cropped_image = crop_left (image_width base_image `div` 2) base_image
1099+ croppedImage = cropLeft (imageWidth baseImage `div` 2) baseImage
1102− image = base_image <-> background_fill 10 2 <-> cropped_image
1100+ image = baseImage <-> backgroundFill 10 2 <-> croppedImage
1103− output_image_and_wait image
1101+ outputImageAndWait image
1104− , print_summary = putStr $ [s|
1102+ , printSummary = putStr $ [s|
1105 1. Verify the bottom text block is the right half of the top block. Ellipses on the left edge are OK.
1103 1. Verify the bottom text block is the right half of the top block. Ellipses on the left edge are OK.
1106 2. press enter.
1104 2. press enter.
1107 3. the display should return to the state before the test.
1105 3. the display should return to the state before the test.
1109− , confirm_results = generic_output_match_confirm
1107+ , confirmResults = genericOutputMatchConfirm
1112−layer_0 :: Test
1110+layer0 :: Test
1113−layer_0 = Test
1111+layer0 = Test
1114− { test_name = "verify layer 0"
1112+ { testName = "verify layer 0"
1115− , test_ID = "layer_0"
1113+ , testID = "layer0"
1116− , test_action = do
1114+ , testAction = do
1117− let upper_image = vert_cat $ map (string def_attr) lorum_ipsum_chinese
1115+ let upperImage = vertCat $ map (string defAttr) lorumIpsumChinese
1118− lower_image = vert_cat $ map (string def_attr) lorum_ipsum
1116+ lowerImage = vertCat $ map (string defAttr) lorumIpsum
1119− p = pic_for_layers [upper_image, lower_image]
1117+ p = picForLayers [upperImage, lowerImage]
1120− output_pic_and_wait p
1118+ outputPicAndWait p
1121− , print_summary = putStr $ [s|
1119+ , printSummary = putStr $ [s|
1122 1. Verify the text block appears to be Chinese text placed on top Latin text.
1120 1. Verify the text block appears to be Chinese text placed on top Latin text.
1123 2. press enter.
1121 2. press enter.
1124 3. the display should return to the state before the test.
1122 3. the display should return to the state before the test.
1126− , confirm_results = generic_output_match_confirm
1124+ , confirmResults = genericOutputMatchConfirm
1129−layer_1 :: Test
1127+layer1 :: Test
1130−layer_1 = Test
1128+layer1 = Test
1131− { test_name = "verify layer 1"
1129+ { testName = "verify layer 1"
1132− , test_ID = "layer_1"
1130+ , testID = "layer1"
1133− , test_action = do
1131+ , testAction = do
1134− let upper_image = vert_cat $ map (string def_attr) lorum_ipsum_chinese
1132+ let upperImage = vertCat $ map (string defAttr) lorumIpsumChinese
1135− block = resize 10 10 upper_image
1133+ block = resize 10 10 upperImage
1136− layer_0 = vert_cat $ map (string def_attr) lorum_ipsum
1134+ layer0 = vertCat $ map (string defAttr) lorumIpsum
1137− layer_1 = char_fill (def_attr `with_back_color` blue) '#' 1000 1000
1135+ layer1 = charFill (defAttr `withBackColor` blue) '#' 1000 1000
1138− cheesy_anim_0 block [layer_0, layer_1]
1136+ cheesyAnim0 block [layer0, layer1]
1139− , print_summary = putStr $ [s|
1137+ , printSummary = putStr $ [s|
1140 1. Verify the text block appears to be Chinese text moving on top a Latin text.
1138 1. Verify the text block appears to be Chinese text moving on top a Latin text.
1141 Which is all on a background of '#' characters over blue.
1139 Which is all on a background of '#' characters over blue.
1142 2. press enter.
1140 2. press enter.
1143 3. the display should return to the state before the test.
1141 3. the display should return to the state before the test.
1145− , confirm_results = generic_output_match_confirm
1143+ , confirmResults = genericOutputMatchConfirm
1148−cheesy_anim_0 :: Image -> [Image] -> IO ()
1146+cheesyAnim0 :: Image -> [Image] -> IO ()
1149−cheesy_anim_0 i background = do
1147+cheesyAnim0 i background = do
1150− t <- current_terminal
1148+ t <- standardIOConfig >>= outputForConfig
1151− reserve_display t
1149+ reserveDisplay t
1152− bounds <- display_bounds t
1150+ bounds <- displayBounds t
1153− d <- display_context t bounds
1151+ d <- displayContext t bounds
1154− forM_ [0..100] $ \t -> do
1152+ forM_ [0..2] $ \t -> do
1155− let i_offset = translate (t `mod` region_width bounds)
1153+ forM_ [0..100] $ \t -> do
1156− (t `div` 2 `mod` region_height bounds)
1154+ let i_offset = translate (t `mod` fst bounds)
1155+ (t `div` 2 `mod` snd bounds)
1157+ let pic = picForLayers $ i_offset : background
1158+ outputPicture d pic
1160+ forM_ [0..100] $ \t -> do
1161+ let i_offset = translate (t * (-1) `mod` fst bounds)
1162+ (t * (-1) `div` 2 `mod` snd bounds)
1158− let pic = pic_for_layers $ i_offset : background
1164+ let pic = picForLayers $ i_offset : background
1159− output_picture d pic
1165+ outputPicture d pic
1160 threadDelay 50000
1166 threadDelay 50000
1161− release_display t
1167+ releaseDisplay t
1162− release_terminal t
1168+ releaseTerminal t
1163 return ()
1169 return ()
1165−lorum_ipsum :: [String]
1171+lorumIpsum :: [String]
1166−lorum_ipsum = lines [s|
1172+lorumIpsum = lines [s|
1167Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,
1173Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,
1168totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae
1174totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae
1169dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,
1175dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,
@@ -1175,8 +1181,8 @@ commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate v
1175molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
1181molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
1178−lorum_ipsum_chinese :: [String]
1184+lorumIpsumChinese :: [String]
1179−lorum_ipsum_chinese = lines [s|
1185+lorumIpsumChinese = lines [s|
1180輐銛 螷蟞覮 裌覅詵 暕 鴅噮 槶 惝掭掝 婸媥媕 耏胠臿, 汫汭沎 忕汌卣 蚡袀 僣 蒮 瀁瀎瀊 渮湸湤 緌翢,
1186輐銛 螷蟞覮 裌覅詵 暕 鴅噮 槶 惝掭掝 婸媥媕 耏胠臿, 汫汭沎 忕汌卣 蚡袀 僣 蒮 瀁瀎瀊 渮湸湤 緌翢,
1181腠腶舝 糲蘥蠩 樏殣氀 蒮 蹢鎒 滍 鸄齴 櫧櫋瀩 鬄鵊鵙 莃荶衒, 毸溠 橀 簎艜薤 莃荶衒 翣聜蒢
1187腠腶舝 糲蘥蠩 樏殣氀 蒮 蹢鎒 滍 鸄齴 櫧櫋瀩 鬄鵊鵙 莃荶衒, 毸溠 橀 簎艜薤 莃荶衒 翣聜蒢
1182斔櫅檷 晛桼桾 拻敁柧 犿玒 膣, 墐 笓粊紒 bacon 鼀齕, 蔝蓶蓨 顊顃餭 姴怤 骱 暕 蹢鎒鎛 藒襓謥 鄻鎟霣
1188斔櫅檷 晛桼桾 拻敁柧 犿玒 膣, 墐 笓粊紒 bacon 鼀齕, 蔝蓶蓨 顊顃餭 姴怤 骱 暕 蹢鎒鎛 藒襓謥 鄻鎟霣