summaryrefslogblamecommitdiff
path: root/scalatexApi/src/test/scala/scalatex/ErrorTests.scala
blob: 0a6855048faeb27aed7540d7596ba915dbdc10ee (plain) (tree)
1
2
3
4
5
6




                           
                                                         























                                                                       





























































































































                                                                   
 







                                                    
                  



                                                     
                                                














































































































































































                                                                                              

   
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
//                      ^
//        """
//      )
//    }
  }
}