on master help sign in
correct the cap used for function keys to kfN not key_fN
commit11db66e055c3c6ba919006dcc498809a5a4e5e04 authorCorey O'Connor <coreyoconnor@gmail.com> dateSun 17 Nov 2013, 00:28 (13 years ago) parentc231f47
4 files changed+47−10
src/Graphics/Vty/Input.hs+1−2 src/Graphics/Vty/Input/Data.hs+1−1 src/Graphics/Vty/Input/Terminfo.hs+5 test/VerifyUsingMockInput.hs+40−7
src/Graphics/Vty/Input.hs+1−2
@@ -79,8 +79,7 @@ initTermInput escDelay terminal = do
7979 ]
8080 setTerminalAttributes stdInput attr' Immediately
8181 set_term_timing
82− let caps_legacy_table = map_to_legacy_table $ caps_classify_table terminal keys_from_caps_table
83− classify_table = concat $ caps_legacy_table : ansi_classify_table
82+ let classify_table = classify_table_for_term terminal
8483 (eventChannel, shutdown_input) <- initInputForFd escDelay classify_table stdInput
8584 let pokeIO = Catch $ do
8685 let e = error "(getsize in input layer)"
src/Graphics/Vty/Input/Data.hs+1−1
@@ -46,7 +46,7 @@ keys_from_caps_table =
4646 ] ++ function_key_caps_table
4747
4848function_key_caps_table :: [(String, Event)]
49−function_key_caps_table = flip map [0..63] $ \n -> ("key_f" ++ show n, EvKey (KFun n) [])
49+function_key_caps_table = flip map [0..63] $ \n -> ("kf" ++ show n, EvKey (KFun n) [])
5050
5151nav_keys_0 :: ClassifyTable
5252nav_keys_0 =
src/Graphics/Vty/Input/Terminfo.hs+5
@@ -8,3 +8,8 @@ import System.Console.Terminfo
88caps_classify_table :: Terminal -> [(String,Event)] -> [(String,Event)]
99caps_classify_table terminal table = [(x,y) | (Just x,y) <- map extract_cap table]
1010 where extract_cap = first (getCapability terminal . tiGetStr)
11+
12+classify_table_for_term :: Terminal -> ClassifyTable
13+classify_table_for_term term =
14+ let caps_legacy_table = map_to_legacy_table $ caps_classify_table term keys_from_caps_table
15+ in concat $ caps_legacy_table : ansi_classify_table
test/VerifyUsingMockInput.hs+40−7
@@ -32,6 +32,8 @@ import Test.Framework
3232import Test.SmallCheck
3333import Test.SmallCheck.Series
3434
35+import Text.Printf
36+
3537-- processing a block of 16 chars is the largest I can do without taking too long to run the test.
3638max_block_size :: Int
3739max_block_size = 16
@@ -58,7 +60,7 @@ synthesize_input input out_handle = forM_ input f >> (void $ fdWrite out_handle
5860 f (Delay t) = threadDelay t
5961
6062min_detectable_delay :: Int
61−min_detectable_delay = 1000
63+min_detectable_delay = 4000
6264
6365min_timout :: Int
6466min_timout = 4000000
@@ -80,6 +82,25 @@ gen_events_using_io_actions max_duration input_action output_action = do
8082 Just () <- timeout max_duration' $ takeMVar read_complete
8183 return ()
8284
85+compare_events input_spec expected_events out_events = compare_events' expected_events out_events
86+ where
87+ compare_events' [] [] = return True
88+ compare_events' [] out_events' = do
89+ printf "extra events %s\n" (show out_events) :: IO ()
90+ return False
91+ compare_events' expected_events' [] = do
92+ printf "events %s were not produced for input %s\n" (show expected_events') (show input_spec) :: IO ()
93+ printf "expected events %s\n" (show expected_events) :: IO ()
94+ printf "received events %s\n" (show out_events) :: IO ()
95+ return False
96+ compare_events' (e : expected_events') (o : out_events')
97+ | e == o = compare_events' expected_events' out_events'
98+ | otherwise = do
99+ printf "%s expected not %s for input %s\n" (show e) (show o) (show input_spec) :: IO ()
100+ printf "expected events %s\n" (show expected_events) :: IO ()
101+ printf "received events %s\n" (show out_events) :: IO ()
102+ return False
103+
83104assert_events_from_syn_input :: ClassifyTable -> InputSpec -> ExpectedSpec -> IO Bool
84105assert_events_from_syn_input table input_spec expected_events = do
85106 let max_duration = sum [t | Delay t <- input_spec] + min_detectable_delay
@@ -103,8 +124,7 @@ assert_events_from_syn_input table input_spec expected_events = do
103124 read_loop (n - 1)
104125 gen_events_using_io_actions max_duration write_wait_close read_events
105126 out_events <- reverse <$> readIORef events_ref
106− print (input_spec, expected_events, out_events)
107− return $ out_events == expected_events
127+ compare_events input_spec expected_events out_events
108128
109129assert_events_from_input_block :: ClassifyTable -> InputSpec -> ExpectedSpec -> IO Bool
110130assert_events_from_input_block table input_spec expected_events = do
@@ -162,7 +182,7 @@ verify_keys_from_caps_table_block_to_event = forAll $ \(InputBlocksUsingTable ge
162182 input_seq = gen table
163183 events = [e | (_,e) <- input_seq]
164184 keydowns = [Bytes s | (s,_) <- input_seq]
165− input = intersperse (Delay test_key_delay) keydowns
185+ input = intersperse (Delay test_key_delay) keydowns ++ [Delay test_key_delay]
166186 assert_events_from_input_block (map_to_legacy_table table) input events
167187
168188verify_simple_syn_input_to_event :: Property IO
@@ -171,7 +191,7 @@ verify_simple_syn_input_to_event = forAll $ \(InputBlocksUsingTable gen) -> mona
171191 input_seq = gen table
172192 events = [EvKey k ms | (_,(k,ms)) <- input_seq]
173193 keydowns = [Bytes s | (s,_) <- input_seq]
174− input = intersperse (Delay test_key_delay) keydowns
194+ input = intersperse (Delay test_key_delay) keydowns ++ [Delay test_key_delay]
175195 assert_events_from_syn_input (concat ansi_classify_table) input events
176196
177197verify_caps_syn_input_to_event :: Property IO
@@ -182,7 +202,7 @@ verify_caps_syn_input_to_event = forAll $ \(InputBlocksUsingTable gen) ->
182202 input_seq = gen table
183203 events = [e | (_,e) <- input_seq]
184204 keydowns = [Bytes s | (s,_) <- input_seq]
185− input = intersperse (Delay test_key_delay) keydowns
205+ input = intersperse (Delay test_key_delay) keydowns ++ [Delay test_key_delay]
186206 assert_events_from_syn_input (map_to_legacy_table table) input events
187207
188208verify_special_syn_input_to_event :: Property IO
@@ -191,9 +211,20 @@ verify_special_syn_input_to_event = forAll $ \(InputBlocksUsingTable gen) -> mon
191211 input_seq = gen table
192212 events = [EvKey k ms | (_,(k,ms)) <- input_seq]
193213 keydowns = [Bytes s | (s,_) <- input_seq]
194− input = intersperse (Delay test_key_delay) keydowns
214+ input = intersperse (Delay test_key_delay) keydowns ++ [Delay test_key_delay]
195215 assert_events_from_syn_input (concat ansi_classify_table) input events
196216
217+verify_full_syn_input_to_event :: Property IO
218+verify_full_syn_input_to_event = forAll $ \(InputBlocksUsingTable gen) ->
219+ forEachOf terminals_of_interest $ \term_name -> monadic $ do
220+ term <- setupTerm term_name
221+ let table = classify_table_for_term term
222+ input_seq = gen table
223+ events = [EvKey k ms | (_,(k,ms)) <- input_seq]
224+ keydowns = [Bytes s | (s,_) <- input_seq]
225+ input = intersperse (Delay test_key_delay) keydowns ++ [Delay test_key_delay]
226+ assert_events_from_syn_input table input events
227+
197228main :: IO ()
198229main = defaultMain
199230 [ testProperty "basic block generated from a single visible chars to event translation"
@@ -206,5 +237,7 @@ main = defaultMain
206237 verify_caps_syn_input_to_event
207238 , testProperty "synthesized typing from hard coded special keys translates to expected events"
208239 verify_special_syn_input_to_event
240+ , testProperty "synthesized typing from any key in the table translates to expected events"
241+ verify_full_syn_input_to_event
209242 ]
210243