summaryrefslogblamecommitdiff
path: root/scalatexApi/src/test/scala/scalatex/BasicTests.scala
blob: 617841e18e2c825d11c10652afb11b23696ae6e2 (plain) (tree)











































































                                                        






                                  


















































                                                                



                            
                 
                   

















                                      


                                                            




















































                                        
                                           












                                       

                    

               
                
               


                              




















































































                                                                  

                  









                       

                    






                            



                       




                            



                      




































































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