summaryrefslogblamecommitdiff
path: root/src/test/scala/cc/spray/json/StandardFormatsSpec.scala
blob: f1aa5a5034fcb3d456f0e2a3b6013f3f99ee0d25 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
                     
 
                           
                  
 
                                                                          





                                                            
                                                  




                                                                                   
                                                                         

      











                                                             
                                                                    

                                                              
                                                                               

     





                                                         
                                                              








                                                           
                                                       



     
package cc.spray.json

import org.specs2.mutable._
import scala.Right

class StandardFormatsSpec extends Specification with DefaultJsonProtocol {

  "The optionFormat" should {
    "convert None to JsNull" in {
      None.asInstanceOf[Option[Int]].toJson mustEqual JsNull
    }
    "convert JsNull to None" in {
      JsNull.convertTo[Option[Int]] mustEqual None
    } 
    "convert Some(Hello) to JsString(Hello)" in {
      Some("Hello").asInstanceOf[Option[String]].toJson mustEqual JsString("Hello")
    }
    "convert JsString(Hello) to Some(Hello)" in {
      JsString("Hello").convertTo[Option[String]] mustEqual Some("Hello")
    } 
  }

  "The eitherFormat" should {
    val a: Either[Int, String] = Left(42)
    val b: Either[Int, String] = Right("Hello")

    "convert the left side of an Either value to Json" in {
      a.toJson mustEqual JsNumber(42)
    }
    "convert the right side of an Either value to Json" in {
      b.toJson mustEqual JsString("Hello")
    }
    "convert the left side of an Either value from Json" in {
      JsNumber(42).convertTo[Either[Int, String]] mustEqual Left(42)
    }
    "convert the right side of an Either value from Json" in {
      JsString("Hello").convertTo[Either[Int, String]] mustEqual Right("Hello")
    }
  }
  
  "The tuple1Format" should {
    "convert (42) to a JsNumber" in {
      Tuple1(42).toJson mustEqual JsNumber(42)
    }
    "be able to convert a JsNumber to a Tuple1[Int]" in {
      JsNumber(42).convertTo[Tuple1[Int]] mustEqual Tuple1(42)
    }
  }
  
  "The tuple2Format" should {
    val json = JsArray(JsNumber(42), JsNumber(4.2))
    "convert (42, 4.2) to a JsArray" in {
      (42, 4.2).toJson mustEqual json
    }
    "be able to convert a JsArray to a (Int, Double)]" in {
      json.convertTo[(Int, Double)] mustEqual (42, 4.2)
    }
  }
  
}