package scalatex
import utest._
import scala.collection.mutable.ArrayBuffer
import scalatex.stages._
import scalatags.Text.all._
/**
* Created by haoyi on 7/14/14.
*/
object BasicTests extends TestSuite{
import TestUtil._
val tests = TestSuite{
'helloWorld{
object omg {
def wtf(s: Frag*): Frag = Seq[Frag]("|", s, "|")
}
def str = "hear me moo"
check(
tw("""
@omg.wtf
i @b{am} cow @str
"""),
"|iamcowhearmemoo|"
)
}
'interpolation{
'chained-check(
tw("omg @scala.math.pow(0.5, 3) wtf"),
"omg 0.125 wtf"
)
'parens-check(
tw("omg @(1 + 2 + 3 + 4) wtf"),
"omg 10 wtf"
)
'block-check(
tw("""
@{"lol" * 3}
@{
val omg = "omg"
omg * 2
}
"""),
"""
lollollol
omgomg
"""
)
}
'definitions{
'imports{
object Whee{
def func(x: Int) = x * 2
}
check(
tw("""
@import math._
@import Whee.func
@abs(-10)
@p
@max(1, 2)
@func(2)
"""),
"""
10
2
4
"""
)
}
'valDefVar{
check(
tw("""
Hello
@val x = 1
World @x
@def y = "omg"
mooo
@y
"""),
"""
Hello
World 1
mooo
omg
"""
)
}
'classObjectTrait{
check(
tw("""
@trait Trait{
def tt = 2
}
Hello
@case object moo extends Trait{
val omg = "wtf"
}
@moo.toString
@moo.omg
@case class Foo(i: Int, s: String, b: Boolean)
TT is @moo.tt
@Foo(10, "10", true).toString
"""),
"""
Hello
moo
wtf
TT is 2
Foo(10, 10, true)
"""
)
}
}
'parenArgumentLists{
'attributes{
check(
tw("""
@div(id:="my-id"){ omg }
@div(id:="my-id")
omg
"""),
"""
omg
omg
"""
)
}
// 'multiline{
//
// check(
// tw("""
// @div(
// h1("Hello World"),
// p("I am a ", b{"cow"})
// )
// """),
// """
//
//
Hello World
//
I am a cow
//
// """
// )
// }
}
'grouping{
'negative{
// The indentation for "normal" text is ignored; we only
// create blocks from the indentation following a scala
// @xxx expression
check(
tw("""
I am cow hear me moo
I weigh twice as much as you
And I look good on the barbecue
Yoghurt curds cream cheese and butter
Comes from liquids from my udder
I am cow I am cow hear me moooooo
"""),
"""
I am cow hear me moo
I weigh twice as much as you
And I look good on the barbecue
Yoghurt curds cream cheese and butter
Comes from liquids from my udder
I am cow I am cow hear me moooooo
"""
)
}
'indentation{
'simple{
val world = "World2"
check(
tw("""
@h1
Hello World
@h2
hello @world
@h3
Cow
"""),
"""
HelloWorld
helloWorld2
Cow
"""
)
}
'linearNested{
check(
tw("""
@h1 @span @a Hello World
@h2 @span @a hello
@b world
@h3 @i
@div Cow
"""),
"""
HelloWorld
helloworld
Cow
"""
)
}
'crasher{
tw("""
@html
@head
@meta
@div
@a
@span
""")
}
}
'curlies{
'simple{
val world = "World2"
check(
tw("""@div{Hello World}"""),
"""HelloWorld
"""
)
}
'multiline{
check(
tw("""
@div{
Hello
}
"""),
"""
Hello
"""
)
}
}
'mixed{
check(
tw("""
@div{
Hello
@div
@h1
WORLD @b{!!!}
lol
@p{
@h2{Header 2}
}
}
"""),
"""
"""
)
}
//
// 'args{
// val things = Seq(1, 2, 3)
// check(
// tw("""
// @ul
// @things.map { x =>
// @li
// @x
// }
// """),
// tw("""
// @ul
// @things.map x =>
// @li
// @x
//
// """),
// """
//
// """
// )
// }
}
//
'loops {
//
* - check(
tw("""
@for(x <- 0 until 3)
lol
"""),
tw("""
@for(x <- 0 until 3){
lol
}
"""),
"lollollol"
)
* - check(
tw("""
@p
@for(x <- 0 until 2)
@for(y <- 0 until 2)
lol@x@y
"""),
tw( """
@p
@for(x <- 0 until 2){
@for(y <- 0 until 2)
lol@x@y
}
"""),
tw("""
@p
@for(x <- 0 until 2)
@for(y <- 0 until 2){
lol@x@y
}
"""),
"lol00lol01lol10lol11
"
)
check(
tw("""
@p
@for(x <- 0 until 2)
@for(y <- 0 until 2)
lol@x@y
"""),
"lol00lol01lol10lol11
"
)
* - check(
tw(
"""
@for(x <- 0 until 2; y <- 0 until 2)
@div{@x@y}
"""),
"""00
01
10
11
"""
)
}
'ifElse{
'basicExamples{
* - check(
tw("""
@if(false)
Hello
@else
lols
@p
"""),
"lols"
)
* - check(
tw("""
@div
@if(true)
Hello
@else
lols
"""),
"Hello
"
)
* - check(
tw("""
@div
@if(true)
Hello
@else
lols
"""),
"Hello
"
)
* - check(
tw("""
@if(false)
Hello
@else
lols
"""),
"lols"
)
* - check(
tw("""
@if(false)
Hello
@else
lols
@img
"""),
"lols"
)
* - check(
tw("""
@p
@if(true)
Hello
@else
lols
"""),
tw("""
@p
@if(true){
Hello
}else{
lols
}
"""),
"Hello
"
)
}
// 'funkyExpressions{
// * - check(
// tw("""
// @p
// @if(true == false == (true.==(false)))
// @if(true == false == (true.==(false)))
// Hello1
// @else
// lols1
// @else
// @if(true == false == (true.==(false)))
// Hello2
// @else
// lols2
// """),
// "Hello1
"
// )
// * - check(
// tw("""
// @p
// @if(true == false != (true.==(false)))
// @if(true == false != (true.==(false)))
// Hello1
// @else
// lols1
// @else
// @if(true == false != (true.==(false)))
// Hello2
// @else
// lols2
// """),
// "lols2
"
// )
// }
}
}
}