packages feed

vintage-basic-1.0: test/Language/VintageBasic/LineScanner_test.hs

module Language.VintageBasic.LineScanner_test where

import Test.HUnit
import Language.VintageBasic.Asserts
import Language.VintageBasic.LineScanner
import Language.VintageBasic.Result

assertRawParseResult = assertParseResult withLineAndCol ScanError rawLinesP
assertRawParseError  = assertParseError  withLineAndCol ScanError rawLinesP

test_LineScanner = TestCase $ do
  let text = unlines ["10SKDJF@#"," 5   ASJDKFdf "]
  assertRawParseResult text [(10, 3, "SKDJF@#"), (5, 6, "ASJDKFdf ")]
 
test_reports_error_if_line_doesn't_start_with_number = TestCase $ do
  let text = unlines ["10SKDJF@#","ASJD4KFdf "]
  assertRawParseError text "EXPECTING LINE NUMBER OR END OF FILE"
 
test_skips_blank_lines = TestCase $ do
  let text = unlines ["","10?","","20?",""]
  assertRawParseResult text [(10, 3, "?"), (20, 3, "?")]
 
test_reports_error_if_file_doesn't_end_in_newline = TestCase $ do
  let text = "10SKDJF@#"
  assertRawParseError text "UNEXPECTED END OF FILE\n EXPECTING END OF LINE OR CHARACTER"
 
test_accepts_blank_line = TestCase $ do
  let text = unlines ["10"]
  assertRawParseResult text [(10, 3, "")]

test_strips_carriage_return_preceding_newline = TestCase $ do
  let text = "10 BLAH\r\n20 BLORT\r\n"
  assertRawParseResult text [(10, 4, "BLAH"), (20, 4, "BLORT")]