package scalatex
import utest._
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
"""),
"|i<b>am</b>cowhearmemoo|"
)
}
'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
"""
)
}
'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
<p>
2
4
</p>
"""
)
}
'parenArgumentLists{
'attributes{
check(
tw("""
@div(id:="my-id"){ omg }
@div(id:="my-id")
omg
"""),
"""
<divid="my-id">omg</div>
<divid="my-id">omg</div>
"""
)
}
'multiline{
check(
tw("""
@div(
h1("Hello World"),
p("I am a ", b{"cow"})
)
"""),
"""
<div>
<h1>Hello World</h1>
<p>I am a <b>cow</b></p>
</div>
"""
)
}
}
'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
"""),
"""
<h1>HelloWorld</h1>
<h2>helloWorld2</h2>
<h3>Cow</h3>
"""
)
}
'linearNested{
check(
tw("""
@h1 @span @a Hello World
@h2 @span @a hello
@b world
@h3 @i
@div Cow
"""),
"""
<h1></h1><span></span><a></a>HelloWorld
<h2></h2><span></span><a></a>hello<b></b>world
<h3></h3><i></i><div></div>Cow
"""
)
}
'crasher{
tw("""
@html
@head
@meta
@div
@a
@span
""")
}
}
'curlies{
'simple{
val world = "World2"
check(
tw("""@div{Hello World}"""),
"""<div>HelloWorld</div>"""
)
}
'multiline{
check(
tw("""
@div{
Hello
}
"""),
"""
<div>Hello</div>
"""
)
}
}
'mixed{
check(
tw("""
@div{
Hello
@div
@h1 WORLD @b{!!!}
lol
@p{
@h2{Header 2}
}
}
"""),
"""
<div>
Hello
<div>
<h1></h1>WORLD<b>!!!</b>lol
<p><h2>Header2</h2></p>
</div>
</div>
"""
)
}
'args{
val things = Seq(1, 2, 3)
check(
tw("""
@ul
@things.map { x =>
@li
@x
}
"""),
tw("""
@ul
@things.map x =>
@li
@x
"""),
"""
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
"""
)
}
}
'loops {
* - check(
tw("""
@for(x <- 0 until 3)
lol
"""),
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
}
"""),
"<p>lol00lol01lol10lol11</p>"
)
check(
tw("""
@p
@for(x <- 0 until 2)
@for(y <- 0 until 2)
lol@x@y
"""),
"<p>lol00lol01lol10lol11</p>"
)
* - check(
tw(
"""
@for(x <- 0 until 2; y <- 0 until 2)
@div{@x@y}
"""),
"""<div>00</div><div>01</div><div>10</div><div>11</div>"""
)
}
'ifElse{
'basicExamples{
* - check(
tw("""
@if(false)
Hello
@else
lols
@p
"""),
"lols<p></p>"
)
* - check(
tw("""
@div
@if(true)
Hello
@else
lols
"""),
"<div>Hello</div>"
)
* - check(
tw("""
@div
@if(true)
Hello
@else
lols
"""),
"<div>Hello</div>"
)
* - check(
tw("""
@if(false)
Hello
@else
lols
"""),
"lols"
)
* - check(
tw("""
@if(false)
Hello
@else
lols
@img
"""),
"lols<img/>"
)
* - check(
tw("""
@p
@if(true)
Hello
@else
lols
"""),
tw("""
@p
@if(true) {
Hello
} else {
lols
}
"""),
"<p>Hello</p>"
)
}
'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
"""),
"<p>Hello1</p>"
)
* - 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
"""),
"<p>lols2</p>"
)
}
}
}
}