content: module Unused.TermSearch.InternalSpec
      ( main
      , spec
      ) where
  
  import Test.Hspec
  import Unused.TermSearch.Internal
  import Unused.TermSearch.Types
  import Unused.Types
  
  main :: IO ()
  main = hspec spec
  
  spec :: Spec
  spec =
      parallel $ do
          describe "commandLineOptions" $ do
              it "does not use regular expressions when the term contains non-word characters" $ do
                  commandLineOptions Ag "can_do_things?" `shouldBe`
                      ["can_do_things?", ".", "-Q", "-c", "--ackmate", "--ignore-dir", "tmp/unused"]
                  commandLineOptions Ag "no_way!" `shouldBe`
                      ["no_way!", ".", "-Q", "-c", "--ackmate", "--ignore-dir", "tmp/unused"]
                  commandLineOptions Ag "[]=" `shouldBe`
                      ["[]=", ".", "-Q", "-c", "--ackmate", "--ignore-dir", "tmp/unused"]
                  commandLineOptions Ag "window.globalOverride" `shouldBe`
                      [ "window.globalOverride"
                      , "."
                      , "-Q"
                      , "-c"
                      , "--ackmate"
                      , "--ignore-dir"
                      , "tmp/unused"
                      ]
                  commandLineOptions Rg "can_do_things?" `shouldBe`
                      ["can_do_things?", ".", "-F", "-c", "-j", "1"]
                  commandLineOptions Rg "no_way!" `shouldBe` ["no_way!", ".", "-F", "-c", "-j", "1"]
                  commandLineOptions Rg "[]=" `shouldBe` ["[]=", ".", "-F", "-c", "-j", "1"]
                  commandLineOptions Rg "window.globalOverride" `shouldBe`
                      ["window.globalOverride", ".", "-F", "-c", "-j", "1"]
              it "uses regular expression match with surrounding non-word matches for accuracy" $ do
                  commandLineOptions Ag "awesome_method" `shouldBe`
                      [ "(\\W|^)awesome_method(\\W|$)"
                      , "."
                      , "-c"
                      , "--ackmate"
                      , "--ignore-dir"
                      , "tmp/unused"
                      ]
                  commandLineOptions Rg "awesome_method" `shouldBe`
                      ["(\\W|^)awesome_method(\\W|$)", ".", "-c", "-j", "1"]
          describe "parseSearchResult" $ do
              it "parses normal results from `ag` to a TermMatch" $ do
                  parseSearchResult Ag (OriginalTerm "method_name") ":app/models/foo.rb:123" `shouldBe`
                      (Just $ TermMatch "method_name" "app/models/foo.rb" Nothing 123)
                  parseSearchResult Rg (OriginalTerm "method_name") "app/models/foo.rb:123" `shouldBe`
                      (Just $ TermMatch "method_name" "app/models/foo.rb" Nothing 123)
              it "returns Nothing when it cannot parse" $ do
                  parseSearchResult Ag (OriginalTerm "method_name") "" `shouldBe` Nothing
                  parseSearchResult Rg (OriginalTerm "method_name") "" `shouldBe` Nothing
  