# LANGUAGE ScopedTypeVariables #
# OPTIONS_GHC -fno - warn - missing - signatures #
-------------------------------------
--
-- Tests for XPrompt and ShellPrompt
--
-------------------------------------
module XPrompt where

import Test.QuickCheck

import XMonad.Prelude (chunksOf)
import XMonad.Prompt
import qualified XMonad.Prompt.Shell as S

-- brute force check for exceptions
prop_split (str :: String) =
    forAll (elements str) $ \e -> S.split e str == S.split e str

  check if the first element of the new list is indeed the first part
-- of the string.
prop_spliInSubListsAt (x :: Int) (str :: String) =
    x < length str ==> result == take x str
    where result = case chunksOf x str of
                     [] -> []
                     y -> head y

  skipLastWord is complementary to getLastWord , unless the only space
-- in the string is the final character, in which case skipLastWord
  and getLastWord will produce the same result .
prop_skipGetLastWord (str :: String) =
    skipLastWord str ++ getLastWord str == str || skipLastWord str == getLastWord str


  newIndex and newCommand get only non empy lists
elemGen :: Gen ([String],String)
elemGen = do
  a <- arbitrary :: Gen [String]
  let l = case filter (/= []) a of
            [] -> ["a"]
            x -> x
  e <- elements l
  return (l,e)

  newIndex and newCommand have since been renamed or are no longer used 

 -- newIndex calculates the index of the next completion in the 
 -- completion list , so the index must be within the range of the 
 -- copletions list 
 prop_newIndex_range = 
     forAll elemGen $ \(l , c ) - > newIndex c l > = 0 & &   newIndex c l < length l 


-- newIndex calculates the index of the next completion in the
-- completion list, so the index must be within the range of the
-- copletions list
prop_newIndex_range =
    forAll elemGen $ \(l,c) -> newIndex c l >= 0 &&  newIndex c l < length l
-}

-- this is actually the definition of newCommand...
-- just to check something.

 prop_newCommandIndex = 
     forAll elemGen $ \(l , c ) - > ( skipLastWord c + + ( l ! ! ( newIndex c l ) ) )   = = newCommand c l 

prop_newCommandIndex =
    forAll elemGen $ \(l,c) -> (skipLastWord c ++ (l !! (newIndex c l)))  == newCommand c l
-}

-----------------------------------

 Tests for XPrompt and ShellPrompt

-----------------------------------
 brute force check for exceptions
 of the string.
 in the string is the final character, in which case skipLastWord
 newIndex calculates the index of the next completion in the 
 completion list , so the index must be within the range of the 
 copletions list 
 newIndex calculates the index of the next completion in the
 completion list, so the index must be within the range of the
 copletions list
 this is actually the definition of newCommand...
 just to check something.
# LANGUAGE ScopedTypeVariables #
# OPTIONS_GHC -fno - warn - missing - signatures #
module XPrompt where

import Test.QuickCheck

import XMonad.Prelude (chunksOf)
import XMonad.Prompt
import qualified XMonad.Prompt.Shell as S

prop_split (str :: String) =
    forAll (elements str) $ \e -> S.split e str == S.split e str

  check if the first element of the new list is indeed the first part
prop_spliInSubListsAt (x :: Int) (str :: String) =
    x < length str ==> result == take x str
    where result = case chunksOf x str of
                     [] -> []
                     y -> head y

  skipLastWord is complementary to getLastWord , unless the only space
  and getLastWord will produce the same result .
prop_skipGetLastWord (str :: String) =
    skipLastWord str ++ getLastWord str == str || skipLastWord str == getLastWord str


  newIndex and newCommand get only non empy lists
elemGen :: Gen ([String],String)
elemGen = do
  a <- arbitrary :: Gen [String]
  let l = case filter (/= []) a of
            [] -> ["a"]
            x -> x
  e <- elements l
  return (l,e)

  newIndex and newCommand have since been renamed or are no longer used 

 prop_newIndex_range = 
     forAll elemGen $ \(l , c ) - > newIndex c l > = 0 & &   newIndex c l < length l 


prop_newIndex_range =
    forAll elemGen $ \(l,c) -> newIndex c l >= 0 &&  newIndex c l < length l
-}


 prop_newCommandIndex = 
     forAll elemGen $ \(l , c ) - > ( skipLastWord c + + ( l ! ! ( newIndex c l ) ) )   = = newCommand c l 

prop_newCommandIndex =
    forAll elemGen $ \(l,c) -> (skipLastWord c ++ (l !! (newIndex c l)))  == newCommand c l
-}
