@@ -8,18 +8,22 @@ module Main where
88
99import Verify.Graphics.Vty.Terminal
1010
11+import Data.List (intersperse, permutations)
12+
1113import Graphics.Vty hiding (resize)
1214import Graphics.Vty.Input
1315import Graphics.Vty.Input.Data
1416import Graphics.Vty.Input.Internal
17+import Graphics.Vty.Input.Terminfo
1518
1619import Control.Applicative
1720import Control.Concurrent
1821import Control.Exception
1922import Control.Monad
2023
21−import System.Posix.Env
24+import System.Console.Terminfo
2225import System.IO
26+import System.Posix.Env
2327
2428import Test.Framework.Providers.SmallCheck
2529import Test.Framework
@@ -68,12 +72,6 @@ write_input_spec_to_chan chan (Delay t : input_spec')
6872
6973{-
7074
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
75−
76−
7775tests :: IO [Test]
7876tests = do
7977 mappend
@@ -85,20 +83,40 @@ tests = do
8583 ]
8684-}
8785
88−data SimpleEvent = SimpleEvent (String, (Key, [Modifier]))
89− deriving (Show)
86+-- how to make this data dependent?
9087
91−instance Monad m => Serial m SimpleEvent where
92− series = generate (\n -> map SimpleEvent $ take n simple_chars)
88+newtype EventBlock event = EventBlock ([(String,event)] -> [(String, event)])
89+
90+instance Show (EventBlock event) where
91+ show (EventBlock g) = "EventBlock(* -> *)"
92+
93+instance Monad m => Serial m (EventBlock event) where
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))
9397
9498verify_simple_input_block_to_event :: Property IO
95−verify_simple_input_block_to_event = forAll $ \input_spec -> do
96− let input = Bytes $ concat [s | SimpleEvent (s,_) <- input_spec]
97− events = [e | SimpleEvent (_,(k,ms)) <- input_spec, let e = EvKey k ms]
99+verify_simple_input_block_to_event = forAll $ \(EventBlock block_gen) -> do
100+ let simple_input_seq = block_gen simple_chars
101+ input = Bytes $ concat [s | (s,_) <- simple_input_seq]
102+ events = [e | (_,(k,ms)) <- simple_input_seq, let e = EvKey k ms]
98103 monadic $ assert_events_from_input_block simple_chars [input] events
99104
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
115+
100116main = defaultMain
101117 [ testProperty "basic block generated from a single ansi chars to event translation"
102118 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
103121 ]
104122