Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tag: Lift-2.0-M2-re…
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 107 lines (92 sloc) 3.657 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
/*
* Copyright 2009-2010 WorldWide Conferencing, LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package net.liftweb {
package json {

import _root_.org.specs.Specification
import _root_.org.specs.runner.{Runner, JUnit}

class QueryExamplesTest extends Runner(QueryExamples) with JUnit
object QueryExamples extends Specification {
  import JsonAST._
  import JsonParser._

  "List of IPs" in {
    val ips = for { JString(ip) <- json \\ "ip" } yield ip
    ips mustEqual List("192.168.1.125", "192.168.1.126", "192.168.1.127", "192.168.2.125", "192.168.2.126")
  }

  "List of IPs converted to XML" in {
    val ips = <ips>{ for { JString(ip) <- json \\ "ip" } yield <ip>{ ip }</ip> }</ips>
    ips mustEqual <ips><ip>192.168.1.125</ip><ip>192.168.1.126</ip><ip>192.168.1.127</ip><ip>192.168.2.125</ip><ip>192.168.2.126</ip></ips>
  }

  "List of IPs in cluster2" in {
    val ips = for {
      cluster @ JObject(x) <- json \ "data_center"
      if (x contains JField("name", JString("cluster2")))
      JString(ip) <- cluster \\ "ip" } yield ip
    ips mustEqual List("192.168.2.125", "192.168.2.126")
  }

  "Total cpus in data center" in {
    (for { JInt(x) <- json \\ "cpus" } yield x) reduceLeft (_ + _) mustEqual 40
  }

  "Servers sorted by uptime" in {
    case class Server(ip: String, uptime: Long)

    val servers = for {
      JArray(servers) <- json \\ "servers"
      JObject(server) <- servers
      JField("ip", JString(ip)) <- server
      JField("uptime", JInt(uptime)) <- server
    } yield Server(ip, uptime.longValue)

    servers sort (_.uptime > _.uptime) mustEqual List(Server("192.168.1.127", 901214), Server("192.168.2.125", 453423), Server("192.168.2.126", 214312), Server("192.168.1.126", 189822), Server("192.168.1.125", 150123))
  }

  "Clusters administered by liza" in {
    val clusters = for {
      JObject(cluster) <- json
      JField("admins", JArray(admins)) <- cluster
      if admins contains JString("liza")
      JField("name", JString(name)) <- cluster
    } yield name

    clusters mustEqual List("cluster2")
  }

  val json = parse("""
{ "data_center": [
{
"name": "cluster1",
"servers": [
{"ip": "192.168.1.125", "uptime": 150123, "specs": {"cpus": 8, "ram": 2048}},
{"ip": "192.168.1.126", "uptime": 189822, "specs": {"cpus": 16, "ram": 4096}},
{"ip": "192.168.1.127", "uptime": 901214, "specs": {"cpus": 8, "ram": 4096}}
],
"links": [
{"href": "http://www.example.com/admin", "name": "admin"},
{"href": "http://www,example.com/home", "name": "home"}
],
"admins": ["jim12", "joe", "maddog"]
},
{
"name": "cluster2",
"servers": [
{"ip": "192.168.2.125", "uptime": 453423, "specs": {"cpus": 4, "ram": 2048}},
{"ip": "192.168.2.126", "uptime": 214312, "specs": {"cpus": 4, "ram": 2048}},
],
"links": [
{"href": "http://www.example2.com/admin", "name": "admin"},
{"href": "http://www,example2.com/home", "name": "home"}
],
"admins": ["joe", "liza"]
}
]}
""")
}

}
}
Something went wrong with that request. Please try again.