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} } } """), """
Hello

WORLD!!!lol

Header2

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

" // ) // } } } }