diff options
author | Li Haoyi <haoyi@dropbox.com> | 2014-11-05 22:25:58 -0800 |
---|---|---|
committer | Li Haoyi <haoyi@dropbox.com> | 2014-11-05 22:25:58 -0800 |
commit | 784f3da4192a0e30ddd94cfb10f91d0bc8dc4f7f (patch) | |
tree | 83bc659db8b89e904b6b3377d91ef3016be98d18 /scalatexApi/src/test/scala/scalatex/ErrorTests.scala | |
parent | 62871430033658a36e04772a4417526ac399b0dc (diff) | |
download | hands-on-scala-js-784f3da4192a0e30ddd94cfb10f91d0bc8dc4f7f.tar.gz hands-on-scala-js-784f3da4192a0e30ddd94cfb10f91d0bc8dc4f7f.tar.bz2 hands-on-scala-js-784f3da4192a0e30ddd94cfb10f91d0bc8dc4f7f.zip |
Fixed the Scala grammar, property/call/type-param chaining now works and more tests pass
Diffstat (limited to 'scalatexApi/src/test/scala/scalatex/ErrorTests.scala')
-rw-r--r-- | scalatexApi/src/test/scala/scalatex/ErrorTests.scala | 650 |
1 files changed, 325 insertions, 325 deletions
diff --git a/scalatexApi/src/test/scala/scalatex/ErrorTests.scala b/scalatexApi/src/test/scala/scalatex/ErrorTests.scala index 77afd8c..8535b72 100644 --- a/scalatexApi/src/test/scala/scalatex/ErrorTests.scala +++ b/scalatexApi/src/test/scala/scalatex/ErrorTests.scala @@ -1,373 +1,373 @@ -//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"), -// ^ -// """ -// ) +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("@scala.math.cos('omg)"), + "type mismatch", + """ + twRuntimeErrors("@scala.math.cos('omg)"), + ^ + """ + ) + * - check( + twRuntimeErrors("@scala.math.cos[omg]('omg)"), + "not found: type omg", + """ + twRuntimeErrors("@scala.math.cos[omg]('omg)"), + ^ + """ + ) + * - 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("omg @_root_.scala.gg.lol lol"), -// """object gg is not a member of package scala""", -// """ -// twRuntimeErrors("omg @_root_.scala.gg.lol lol"), -// ^ +// twRuntimeErrors("@Seq(1).map{(y: String) => omg}"), +// "type mismatch", +// """ +// twRuntimeErrors("@Seq(1).map{(y: String) => omg}"), +// ^ // """ // ) // * - check( -// twRuntimeErrors("omg @_root_.ggnore.math.lol lol"), -// """object ggnore is not a member of package <root>""", +// twRuntimeErrors("@Nil.map{ omg}"), +// "too many arguments for method map", // """ -// twRuntimeErrors("omg @_root_.ggnore.math.lol lol"), -// ^ +// twRuntimeErrors("@Nil.map{ omg}"), +// ^ // """ // ) // } -// '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"), -// ^ -// """ -// ) + '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("@scala.math.abs(-10).to(10).sum.z()"), -// "value z is not a member of Int", +// twRuntimeErrors("@if(math > 10){ 1 }else{ 2 }"), +// "object > is not a member of package math", // """ -// twRuntimeErrors("@scala.math.abs(-10).to(10).sum.z()"), -// ^ +// twRuntimeErrors("@if(math > 10){ 1 }else{ 2 }"), +// ^ // """ // ) // * - check( -// twRuntimeErrors("@scala.math.abs(-10).cow.sum.z"), -// "value cow is not a member of Int", +// twRuntimeErrors("@if(true){ (@math.pow(10)) * 10 }else{ 2 }"), +// "Unspecified value parameter y", // """ -// twRuntimeErrors("@scala.math.abs(-10).cow.sum.z"), +// twRuntimeErrors("@if(true){ (@math.pow(10)) * 10 }else{ 2 }"), // ^ // """ // ) // * - check( -// twRuntimeErrors("@scala.smath.abs.cow.sum.z"), -// "object smath is not a member of package scala", +// twRuntimeErrors("@if(true){ * 10 }else{ @math.sin(3, 4, 5) }"), +// "too many arguments for method sin: (x: Double)Double", // """ -// twRuntimeErrors("@scala.smath.abs.cow.sum.z"), -// ^ +// twRuntimeErrors("@if(true){ * 10 }else{ @math.sin(3, 4, 5) }"), +// ^ // """ // ) +// } +// 'multiLine{ // * - check( -// twRuntimeErrors("@scala.math.cos('omg)"), -// "type mismatch", +// 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", // """ -// twRuntimeErrors("@scala.math.cos('omg)"), -// ^ +// @if(math != 10) +// ^ // """ // ) // * - check( -// twRuntimeErrors("@scala.math.cos[omg]('omg)"), -// "not found: type omg", +// 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", // """ -// twRuntimeErrors("@scala.math.cos[omg]('omg)"), -// ^ +// I am a cow @math.lols +// ^ // """ // ) // * - check( // twRuntimeErrors(""" -// I am cow hear me moo -// @scala.math.abs(-10).tdo(10).sum.z -// I weigh twice as much as you +// Ho Ho Ho +// +// @if(12 != 10) +// I am a cow +// @else +// @math.E.toString.gog(1) +// GG // """), -// "value tdo is not a member of Int", +// "value gog is not a member of String", // """ -// @scala.math.abs(-10).tdo(10).sum.z -// ^ +// @math.E.toString.gog(1) +// ^ // """ // ) // } -// '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", +// } +// '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("@Nil.foldLeft{XY}"), -// ^ +// twRuntimeErrors("omg @for(x <- (0 + 1 + 2) omglolol (10 + 11 + 2)){ hello }"), +// ^ // """ // ) // -//// * - check( -//// twRuntimeErrors("@Seq(1).map{(y: String) => omg}"), -//// "type mismatch", -//// """ -//// twRuntimeErrors("@Seq(1).map{(y: String) => omg}"), -//// ^ -//// """ -//// ) -//// * - check( -//// twRuntimeErrors("@Nil.map{ omg}"), -//// "too many arguments for method map", -//// """ -//// twRuntimeErrors("@Nil.map{ omg}"), -//// ^ -//// """ -//// ) -//// } -// 'callContents{ -// * - check( -// twRuntimeErrors("@scala.math.abs((1, 2).wtf)"), -// "value wtf is not a member of (Int, Int)", +// 'body - check( +// twRuntimeErrors("omg @for(x <- 0 until 10){ @((x, 2) + (1, 2)) }"), +// """too many arguments for method +""", // """ -// twRuntimeErrors("@scala.math.abs((1, 2).wtf)"), -// ^ +// twRuntimeErrors("omg @for(x <- 0 until 10){ @((x, 2) + (1, 2)) }"), +// ^ // """ // ) -// -// * - check( -// twRuntimeErrors("@scala.math.abs((1, 2).swap._1.toString().map(_.toString.wtf))"), -// "value wtf is not a member of String", +// } +// '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""", // """ -// twRuntimeErrors("@scala.math.abs((1, 2).swap._1.toString().map(_.toString.wtf))"), -// ^ +// I weigh twice as much as @x.kkk +// ^ // """ // ) // } -//// } -//// '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 -//// ^ -//// """ -//// ) // } -// } -//} +// '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 +// ^ +// """ +// ) + } + } +} |