package scalatex
import utest._
import scalatex.stages._
import scalatags.Text.all._
import scalatex.Internals.{DebugFailure, twRuntimeErrors}
/**
* Created by haoyi on 7/14/14.
*/
object ErrorTests extends TestSuite{
def check(x: => Unit, expectedMsg: String, expectedError: String) = {
val DebugFailure(msg, pos) = intercept[DebugFailure](x)
def format(str: String) = {
val whitespace = " \t\n".toSet
"\n" + str.dropWhile(_ == '\n')
.reverse
.dropWhile(whitespace.contains)
.reverse
}
// Format these guys nicely to normalize them and make them
// display nicely in the assert error message if it blows up
val formattedPos = format(pos)
val formattedExpectedPos = format(expectedError)
assert(msg.contains(expectedMsg))
assert(formattedPos == formattedExpectedPos)
}
val tests = TestSuite{
//
//
// 'simple - check(
// twRuntimeErrors("omg @notInScope lol"),
// """not found: value notInScope""",
// """
// twRuntimeErrors("omg @notInScope lol"),
// ^
// """
// )
//
// 'chained{
// 'properties {
// * - check(
// twRuntimeErrors("omg @math.lol lol"),
// """object lol is not a member of package math""",
// """
// twRuntimeErrors("omg @math.lol lol"),
// ^
// """
// )
//
// * - check(
// twRuntimeErrors("omg @math.E.lol lol"),
// """value lol is not a member of Double""",
// """
// twRuntimeErrors("omg @math.E.lol lol"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("omg @_root_.scala.math.lol lol"),
// """object lol is not a member of package math""",
// """
// twRuntimeErrors("omg @_root_.scala.math.lol lol"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("omg @_root_.scala.gg.lol lol"),
// """object gg is not a member of package scala""",
// """
// twRuntimeErrors("omg @_root_.scala.gg.lol lol"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("omg @_root_.ggnore.math.lol lol"),
// """object ggnore is not a member of package <root>""",
// """
// twRuntimeErrors("omg @_root_.ggnore.math.lol lol"),
// ^
// """
// )
// }
// 'calls{
// * - check(
// twRuntimeErrors("@scala.QQ.abs(-10).tdo(10).sum.z"),
// """object QQ is not a member of package scala""",
// """
// twRuntimeErrors("@scala.QQ.abs(-10).tdo(10).sum.z"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("@scala.math.abs(-10).tdo(10).sum.z"),
// "value tdo is not a member of Int",
// """
// twRuntimeErrors("@scala.math.abs(-10).tdo(10).sum.z"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("@scala.math.abs(-10).to(10).sum.z"),
// "value z is not a member of Int",
// """
// twRuntimeErrors("@scala.math.abs(-10).to(10).sum.z"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("@scala.math.abs(-10).to(10).sum.z()"),
// "value z is not a member of Int",
// """
// twRuntimeErrors("@scala.math.abs(-10).to(10).sum.z()"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("@scala.math.abs(-10).cow.sum.z"),
// "value cow is not a member of Int",
// """
// twRuntimeErrors("@scala.math.abs(-10).cow.sum.z"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("@scala.smath.abs.cow.sum.z"),
// "object smath is not a member of package scala",
// """
// twRuntimeErrors("@scala.smath.abs.cow.sum.z"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("""
// I am cow hear me moo
// @scala.math.abs(-10).tdo(10).sum.z
// I weigh twice as much as you
// """),
// "value tdo is not a member of Int",
// """
// @scala.math.abs(-10).tdo(10).sum.z
// ^
// """
// )
// }
// 'curlies{
// * - check(
// twRuntimeErrors("@p{@Seq(1, 2, 3).foldLeft(0)}"),
// "missing arguments for method foldLeft",
// """
// twRuntimeErrors("@p{@Seq(1, 2, 3).foldLeft(0)}"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("@Nil.foldLeft{XY}"),
// "missing arguments for method foldLeft",
// """
// twRuntimeErrors("@Nil.foldLeft{XY}"),
// ^
// """
// )
* - check(
twRuntimeErrors("@Seq(1).map{x => XY}"),
"missing arguments for method foldLeft",
"""
twRuntimeErrors("@Nil.foldLeft{XY}"),
^
"""
)
// }
// 'callContents{
// * - check(
// twRuntimeErrors("@scala.math.abs((1, 2).wtf)"),
// "value wtf is not a member of (Int, Int)",
// """
// twRuntimeErrors("@scala.math.abs((1, 2).wtf)"),
// ^
// """
// )
//
// * - check(
// twRuntimeErrors("@scala.math.abs((1, 2).swap._1.toString().map(_.toString.wtf))"),
// "value wtf is not a member of String",
// """
// twRuntimeErrors("@scala.math.abs((1, 2).swap._1.toString().map(_.toString.wtf))"),
// ^
// """
// )
// }
// }
// 'ifElse{
// 'oneLine {
// * - check(
// twRuntimeErrors("@if(math > 10){ 1 }else{ 2 }"),
// "object > is not a member of package math",
// """
// twRuntimeErrors("@if(math > 10){ 1 }else{ 2 }"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("@if(true){ (@math.pow(10)) * 10 }else{ 2 }"),
// "Unspecified value parameter y",
// """
// twRuntimeErrors("@if(true){ (@math.pow(10)) * 10 }else{ 2 }"),
// ^
// """
// )
// * - check(
// twRuntimeErrors("@if(true){ * 10 }else{ @math.sin(3, 4, 5) }"),
// "too many arguments for method sin: (x: Double)Double",
// """
// twRuntimeErrors("@if(true){ * 10 }else{ @math.sin(3, 4, 5) }"),
// ^
// """
// )
// }
// 'multiLine{
// * - check(
// twRuntimeErrors("""
// Ho Ho Ho
//
// @if(math != 10)
// I am a cow
// @else
// You are a cow
// GG
// """),
// "object != is not a member of package math",
// """
// @if(math != 10)
// ^
// """
// )
// * - check(
// twRuntimeErrors("""
// Ho Ho Ho
//
// @if(4 != 10)
// I am a cow @math.lols
// @else
// You are a cow
// GG
// """),
// "object lols is not a member of package math",
// """
// I am a cow @math.lols
// ^
// """
// )
// * - check(
// twRuntimeErrors("""
// Ho Ho Ho
//
// @if(12 != 10)
// I am a cow
// @else
// @math.E.toString.gog(1)
// GG
// """),
// "value gog is not a member of String",
// """
// @math.E.toString.gog(1)
// ^
// """
// )
// }
// }
// 'forLoop{
// 'oneLine{
// 'header - check(
// twRuntimeErrors("omg @for(x <- (0 + 1 + 2) omglolol (10 + 11 + 2)){ hello }"),
// """value omglolol is not a member of Int""",
// """
// twRuntimeErrors("omg @for(x <- (0 + 1 + 2) omglolol (10 + 11 + 2)){ hello }"),
// ^
// """
// )
//
// 'body - check(
// twRuntimeErrors("omg @for(x <- 0 until 10){ @((x, 2) + (1, 2)) }"),
// """too many arguments for method +""",
// """
// twRuntimeErrors("omg @for(x <- 0 until 10){ @((x, 2) + (1, 2)) }"),
// ^
// """
// )
// }
// 'multiLine{
// 'body - check(
// twRuntimeErrors("""
// omg
// @for(x <- 0 until 10)
// I am cow hear me moo
// I weigh twice as much as @x.kkk
// """),
// """value kkk is not a member of Int""",
// """
// I weigh twice as much as @x.kkk
// ^
// """
// )
// }
// }
// 'multiLine{
// 'missingVar - check(
// twRuntimeErrors("""
// omg @notInScope lol
// """),
// """not found: value notInScope""",
// """
// omg @notInScope lol
// ^
// """
// )
// 'wrongType - check(
// twRuntimeErrors("""
// omg @{() => ()} lol
// """),
// """type mismatch""",
// """
// omg @{() => ()} lol
// ^
// """
// )
//
// 'bigExpression - check(
// twRuntimeErrors("""
// @{
// val x = 1 + 2
// val y = new Object()
// val z = y * x
// x
// }
// """),
// "value * is not a member of Object",
// """
// val z = y * x
// ^
// """
// )
// }
}
}