summaryrefslogblamecommitdiff
path: root/scalatex/api/src/test/scala/scalatex/BasicTests.scala
blob: 4bc362cf6600746398f92609b1452a5a3f473fe0 (plain) (tree)





































































































































                                                          
  

                  



                                    

                 



                                      


               






















































































































                                                                
  

                                   

                  




                                  

                  



                                


                 




                          


               
     
  
            
  


































































































































                                                                  


                    




                                                        
                     



                                                        
                 
                           



                    




                                                        
                     



                                                        
                 
                          

           



     
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
        """),
        "|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
        """
      )
    }
    '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
            <p>
              2
              4
            </p>
          """
        )
      }
      '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
              """),
          """
          <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>WORLD<b>!!!</b>lol</h1>
                <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
          }
        """),
        "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>"
//        )
//      }
    }
  }

}