Fantom

 

//
// Copyright (c) 2008, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   09 Aug 08  Brian Frank  Creation
//

class FluxUtilTest : Test
{

  Void testMarkIdentity()
  {
    a := Mark { uri = `/a.txt`; line = 55 }
    b := Mark { uri = `/a.txt`; line = 8 }
    c := Mark { uri = `/b.txt`; line = 3 }
    d := Mark { uri = `/a.txt`; line = 55; col = 3 }

    verifyEq(a, Mark { uri = `/a.txt`; line = 55 })
    verifyNotEq(a, b)
    verifyNotEq(a, c)
    verifyNotEq(a, d)

    verifyEq(a <=> a, 0)
    verifyEq(a <=> b, +1)
    verifyEq(a <=> c, -1)
    verifyEq(a <=> d, -1)
  }

  Void testMarkParse()
  {
    f := Env.cur.homeDir + `etc/sys/config.props`
    verifyMark("${f.osPath}", f)
    verifyMark("${f.osPath} ${Env.cur.homeDir}", f)
    verifyMark("(${f.osPath})", f)
    verifyMark("---${f.osPath}---", f)
    verifyMark("${f.osPath}:8", f, 8)
    verifyMark("(${f.osPath}:20)", f, 20)
    verifyMark("${f.osPath} 208 33", f, 208, 33)
    verifyMark("(${f.osPath}:208:7)", f, 208, 7)
    verifyMark("$f.osPath(511:3)", f, 511, 3)
    verifyMark("file=${f.osPath} line=1234 col=8", f, 1234, 8)
  }

  Void verifyMark(Str text, File f, Int? line := null, Int? col := null)
  {
    mark := Mark(text)
    // echo("$text  =>  $mark")
    verifyEq(mark.uri.name, f.name)
    verifyEq(mark.line, line)
    verifyEq(mark.col, col)
  }

}