@@ -8,18 +8,22 @@ module Main where
9import Verify.Graphics.Vty.Terminal
9import Verify.Graphics.Vty.Terminal
11+import Data.List (intersperse, permutations)
11import Graphics.Vty hiding (resize)
13import Graphics.Vty hiding (resize)
12import Graphics.Vty.Input
14import Graphics.Vty.Input
13import Graphics.Vty.Input.Data
15import Graphics.Vty.Input.Data
14import Graphics.Vty.Input.Internal
16import Graphics.Vty.Input.Internal
17+import Graphics.Vty.Input.Terminfo
16import Control.Applicative
19import Control.Applicative
17import Control.Concurrent
20import Control.Concurrent
18import Control.Exception
21import Control.Exception
19import Control.Monad
22import Control.Monad
21−import System.Posix.Env
24+import System.Console.Terminfo
22import System.IO
25import System.IO
26+import System.Posix.Env
24import Test.Framework.Providers.SmallCheck
28import Test.Framework.Providers.SmallCheck
25import Test.Framework
29import Test.Framework
@@ -68,12 +72,6 @@ write_input_spec_to_chan chan (Delay t : input_spec')
71−verify_keys_from_caps_table :: String -> Property
72−verify_keys_from_caps_table = do
73− term_name <- elements terminals_of_interest
74− cap <- elements keys_from_caps_table
77tests :: IO [Test]
75tests :: IO [Test]
@@ -85,20 +83,40 @@ tests = do
88−data SimpleEvent = SimpleEvent (String, (Key, [Modifier]))
86+-- how to make this data dependent?
88+newtype EventBlock event = EventBlock ([(String,event)] -> [(String, event)])
90+instance Show (EventBlock event) where
91+ show (EventBlock g) = "EventBlock(* -> *)"
91−instance Monad m => Serial m SimpleEvent where
93+instance Monad m => Serial m (EventBlock event) where
92− series = generate (\n -> map SimpleEvent $ take n simple_chars)
94+ series = do
95+ n :: Int <- localDepth (max 16) series -- what elements to select from the table
96+ return $ EventBlock $ \table -> concat (take n (permutations table))
94verify_simple_input_block_to_event :: Property IO
98verify_simple_input_block_to_event :: Property IO
95−verify_simple_input_block_to_event = forAll $ \input_spec -> do
99+verify_simple_input_block_to_event = forAll $ \(EventBlock block_gen) -> do
100+ let simple_input_seq = block_gen simple_chars
96− let input = Bytes $ concat [s | SimpleEvent (s,_) <- input_spec]
101+ input = Bytes $ concat [s | (s,_) <- simple_input_seq]
97− events = [e | SimpleEvent (_,(k,ms)) <- input_spec, let e = EvKey k ms]
102+ events = [e | (_,(k,ms)) <- simple_input_seq, let e = EvKey k ms]
98 monadic $ assert_events_from_input_block simple_chars [input] events
103 monadic $ assert_events_from_input_block simple_chars [input] events
105+verify_keys_from_caps_table_block_to_event :: Property IO
106+verify_keys_from_caps_table_block_to_event = forAll $ \(EventBlock block_gen) ->
107+ over (generate (\n -> take n terminals_of_interest)) $ \term_name -> monadic $ do
108+ terminal <- setupTerm term_name
109+ let caps_seq :: [(String, Event)] = block_gen keys_from_caps_table
110+ let bytes_seq = caps_classify_table terminal caps_seq
111+ input = [Bytes s | (s,_) <- bytes_seq]
112+ escaped_sequence = intersperse (Delay defaultEscDelay) input
113+ return True :: IO Bool
114+ -- cap <- elements keys_from_caps_table
100main = defaultMain
116main = defaultMain
101 [ testProperty "basic block generated from a single ansi chars to event translation"
117 [ testProperty "basic block generated from a single ansi chars to event translation"
102 verify_simple_input_block_to_event
118 verify_simple_input_block_to_event
119+ , testProperty "key sequences read from caps table map to expected events"
120+ verify_keys_from_caps_table_block_to_event