text editor inspired vim and yi
import ViE.State.Config
import ViE.State.Layout
import ViE.Data.PieceTable
import Test.Utils

open ViE

namespace Test.MissingEol

open Test.Utils

def testMissingEol : IO Unit := do
  IO.println "testMissingEol..."
  let s := ViE.initialState
  let s := s.updateActiveBuffer fun buffer =>
    { buffer with table := PieceTable.fromString "abc\n", dirty := true }
  let buf := s.getActiveBuffer
  assert "missingEol false with trailing newline" (!buf.missingEol)

  let len := buf.table.length
  let s := s.updateActiveBuffer fun buffer =>
    { buffer with table := buffer.table.delete (len - 1) 1 (len - 1), dirty := true }
  let buf2 := s.getActiveBuffer
  assert "missingEol true after deleting newline" buf2.missingEol

  let s := ViE.initialState
  let s := s.updateActiveBuffer fun buffer =>
    { buffer with table := PieceTable.fromString "abc", dirty := true }
  let buf3 := s.getActiveBuffer
  assert "missingEol true without newline" buf3.missingEol

  let len2 := buf3.table.length
  let s := s.updateActiveBuffer fun buffer =>
    { buffer with table := buffer.table.insert len2 "\n" len2, dirty := true }
  let buf4 := s.getActiveBuffer
  assert "missingEol false after adding newline" (!buf4.missingEol)


def test : IO Unit := do
  IO.println "Starting MissingEol Test..."
  testMissingEol
  IO.println "MissingEol Test passed!"

end Test.MissingEol