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")]