Specs2 can't see a defined class in lift

60 views Asked by At

Here is the code (from the Lift Framework Cookbook):

package code.snippet

import scala.xml.Text
import net.liftweb.util.Helpers._

/**
 * Created by kaiyin on 20/06/15.
 */
class Animals {
  def list = {
    val animals = List(
      ("Dog", "(Canis lupus)"),
      ("Cat", "(Felis catus)"),
      ("Giraffe", "(Giraffa camelopardalis)"),
      ("Lion", "(Panthera leo)"),
      ("Horse", "(Equus ferus caballus)")
    )
    "li *" #> animals.map{
      a =>
        ".name *" #> Text(a._1) &
        ".sname *" #> Text(a._2)
    }
  }
}

package code.snippet

/**
 * Created by kaiyin on 20/06/15.
 */

import org.specs2.mutable._

class AnimalsSpec extends Specification {
  "Animals list" should {
    "contains 5 animals" in {

      val result = <ul>
        <li><span class="name">Dog</span> - <span class="sname">(Canis lupus familiaris)</span> </li>
        <li><span class="name">Cat</span> - <span class="sname">(Felis catus)</span></li>
        <li><span class="name">Giraffe</span> - <span class="sname">(Giraffa camelopardalis)</span></li>
        <li><span class="name">Lion</span> - <span class="sname">(Panthera leo)</span></li>
        <li><span class="name">Horse</span> - <span class="sname">(Equus ferus caballus)</span></li>
      </ul>

      val nodeSeq = Animals.list(<ul><li><span class="name"></span> - <span class="sname"></span></li></ul>)
      nodeSeq.toString must ==/ (result)
//      result.toString must ==/ (result.toString)
    }
//    "trivial" in {
//      "what" must ==/ ("what")
//    }
  }
}

When I test in sbt, I got an error:

[error] /private/tmp/lift-lift_26_sbt-d71cccf/scala_211/contacts-app/src/test/scala/code/snippet/AnimalsSpec.scala:21: not found: value Animals
[error]       val nodeSeq = Animals.list(<ul><li><span class="name"></span> - <span class="sname"></span></li></ul>)
[error]                     ^
[error] one error found
[error] (test:compile) Compilation failed
[error] Total time: 0 s, completed Jun 21, 2015 12:14:12 AM

It seems specs2 can't recognize the existence of the Animals class.

Directory structure:

.
├── build.sbt
├── console.devmode.log
├── project
│   ├── build.properties
│   ├── plugins.sbt
│   ├── project
│   │   └── target
│   │       └── config-classes
│   │           ├── $3e6a7b084670fb8947b9$.class
│   │           ├── $3e6a7b084670fb8947b9.cache
│   │           ├── $3e6a7b084670fb8947b9.class
│   │           ├── $8ee94f9a958d7b2659d3$.class
│   │           ├── $8ee94f9a958d7b2659d3.cache
│   │           ├── $8ee94f9a958d7b2659d3.class
│   │           ├── $f7c7d83ab25f0dfdaa50$.class
│   │           ├── $f7c7d83ab25f0dfdaa50.cache
│   │           └── $f7c7d83ab25f0dfdaa50.class
│   └── target
│       ├── config-classes
│       │   ├── $0849881d22cdcd44948f$$anonfun$$sbtdef$1.class
│       │   ├── $0849881d22cdcd44948f$.class
│       │   ├── $0849881d22cdcd44948f.cache
│       │   ├── $0849881d22cdcd44948f.class
│       │   ├── $249c304e0f040361c72d$$anonfun$$sbtdef$1.class
│       │   ├── $249c304e0f040361c72d$.class
│       │   ├── $249c304e0f040361c72d.cache
│       │   ├── $249c304e0f040361c72d.class
│       │   ├── $2a1513b04e5e84f6d714$$anonfun$$sbtdef$1.class
│       │   ├── $2a1513b04e5e84f6d714$.class
│       │   ├── $2a1513b04e5e84f6d714.cache
│       │   ├── $2a1513b04e5e84f6d714.class
│       │   ├── $3067d2a3c14aabb8a3f0$$anonfun$$sbtdef$1.class
│       │   ├── $3067d2a3c14aabb8a3f0$.class
│       │   ├── $3067d2a3c14aabb8a3f0.cache
│       │   ├── $3067d2a3c14aabb8a3f0.class
│       │   ├── $3a0715de5358d1f4e97f$$anonfun$$sbtdef$1.class
│       │   ├── $3a0715de5358d1f4e97f$.class
│       │   ├── $3a0715de5358d1f4e97f.cache
│       │   ├── $3a0715de5358d1f4e97f.class
│       │   ├── $86ef5cf155e942bdbe26$$anonfun$$sbtdef$1.class
│       │   ├── $86ef5cf155e942bdbe26$.class
│       │   ├── $86ef5cf155e942bdbe26.cache
│       │   ├── $86ef5cf155e942bdbe26.class
│       │   ├── $9696ca6e6d83674bcec7$$anonfun$$sbtdef$1.class
│       │   ├── $9696ca6e6d83674bcec7$.class
│       │   ├── $9696ca6e6d83674bcec7.cache
│       │   ├── $9696ca6e6d83674bcec7.class
│       │   ├── $99247c8be4b0760fec21$$anonfun$$sbtdef$1.class
│       │   ├── $99247c8be4b0760fec21$.class
│       │   ├── $99247c8be4b0760fec21.cache
│       │   ├── $99247c8be4b0760fec21.class
│       │   ├── $ad1c698366eb4866d3f8$$anonfun$$sbtdef$1.class
│       │   ├── $ad1c698366eb4866d3f8$.class
│       │   ├── $ad1c698366eb4866d3f8.cache
│       │   ├── $ad1c698366eb4866d3f8.class
│       │   ├── $b5fc3f4c63982e743df0$$anonfun$$sbtdef$1.class
│       │   ├── $b5fc3f4c63982e743df0$.class
│       │   ├── $b5fc3f4c63982e743df0.cache
│       │   ├── $b5fc3f4c63982e743df0.class
│       │   ├── $cec870caf77a892e02d5$$anonfun$$sbtdef$1$$anonfun$apply$1.class
│       │   ├── $cec870caf77a892e02d5$$anonfun$$sbtdef$1.class
│       │   ├── $cec870caf77a892e02d5$.class
│       │   ├── $cec870caf77a892e02d5.cache
│       │   ├── $cec870caf77a892e02d5.class
│       │   ├── $e22cedfd25e30fceaff3$.class
│       │   ├── $e22cedfd25e30fceaff3.cache
│       │   ├── $e22cedfd25e30fceaff3.class
│       │   ├── $e73abf325c03d09873ef$$anonfun$$sbtdef$1.class
│       │   ├── $e73abf325c03d09873ef$.class
│       │   ├── $e73abf325c03d09873ef.cache
│       │   └── $e73abf325c03d09873ef.class
│       ├── resolution-cache
│       │   ├── default
│       │   │   └── contacts-app-build
│       │   │       └── scala_2.10
│       │   │           └── sbt_0.13
│       │   │               └── 0.1-SNAPSHOT
│       │   │                   ├── resolved.xml.properties
│       │   │                   └── resolved.xml.xml
│       │   └── reports
│       │       ├── default-contacts-app-build-compile-internal.xml
│       │       ├── default-contacts-app-build-compile.xml
│       │       ├── default-contacts-app-build-docs.xml
│       │       ├── default-contacts-app-build-optional.xml
│       │       ├── default-contacts-app-build-plugin.xml
│       │       ├── default-contacts-app-build-pom.xml
│       │       ├── default-contacts-app-build-provided.xml
│       │       ├── default-contacts-app-build-runtime-internal.xml
│       │       ├── default-contacts-app-build-runtime.xml
│       │       ├── default-contacts-app-build-scala-tool.xml
│       │       ├── default-contacts-app-build-sources.xml
│       │       ├── default-contacts-app-build-test-internal.xml
│       │       ├── default-contacts-app-build-test.xml
│       │       ├── ivy-report.css
│       │       └── ivy-report.xsl
│       ├── scala-2.10
│       │   └── sbt-0.13
│       └── streams
│           ├── $global
│           │   ├── $global
│           │   │   └── $global
│           │   │       └── out
│           │   ├── ivyConfiguration
│           │   │   └── $global
│           │   │       └── out
│           │   ├── ivySbt
│           │   │   └── $global
│           │   │       └── out
│           │   ├── projectDescriptors
│           │   │   └── $global
│           │   │       └── out
│           │   └── update
│           │       └── $global
│           │           ├── inputs
│           │           ├── out
│           │           └── output
│           ├── compile
│           │   ├── $global
│           │   │   └── $global
│           │   │       └── data
│           │   ├── compile
│           │   │   └── $global
│           │   │       ├── export
│           │   │       └── out
│           │   ├── copyResources
│           │   │   └── $global
│           │   │       ├── copy-resources
│           │   │       └── out
│           │   ├── definedSbtPlugins
│           │   │   └── $global
│           │   │       └── out
│           │   ├── dependencyClasspath
│           │   │   └── $global
│           │   │       └── export
│           │   ├── exportedProducts
│           │   │   └── $global
│           │   │       └── export
│           │   ├── externalDependencyClasspath
│           │   │   └── $global
│           │   │       └── export
│           │   ├── incCompileSetup
│           │   │   └── $global
│           │   ├── internalDependencyClasspath
│           │   │   └── $global
│           │   │       └── export
│           │   ├── managedClasspath
│           │   │   └── $global
│           │   │       └── export
│           │   ├── unmanagedClasspath
│           │   │   └── $global
│           │   │       └── export
│           │   └── unmanagedJars
│           │       └── $global
│           │           └── export
│           └── runtime
│               ├── dependencyClasspath
│               │   └── $global
│               │       └── export
│               ├── exportedProducts
│               │   └── $global
│               │       └── export
│               ├── externalDependencyClasspath
│               │   └── $global
│               │       └── export
│               ├── fullClasspath
│               │   └── $global
│               │       └── export
│               ├── internalDependencyClasspath
│               │   └── $global
│               │       └── export
│               ├── managedClasspath
│               │   └── $global
│               │       └── export
│               ├── unmanagedClasspath
│               │   └── $global
│               │       └── export
│               └── unmanagedJars
│                   └── $global
│                       └── export
├── sbt
├── sbt-launch-0.13.1.jar
├── sbt.bat
├── src
│   ├── main
│   │   ├── resources
│   │   │   ├── logback.xml
│   │   │   ├── props
│   │   │   │   └── default.props
│   │   │   ├── resources.properties
│   │   │   ├── resources_de.properties
│   │   │   └── resources_fr_FR.properties
│   │   ├── scala
│   │   │   ├── bootstrap
│   │   │   │   └── liftweb
│   │   │   │       └── Boot.scala
│   │   │   └── code
│   │   │       ├── comet
│   │   │       ├── lib
│   │   │       │   └── SendEmail.scala
│   │   │       ├── model
│   │   │       ├── snippet
│   │   │       │   ├── Animals.scala
│   │   │       │   ├── Calculator.scala
│   │   │       │   ├── EmailSnippet.scala
│   │   │       │   ├── HelloWorld.scala
│   │   │       │   ├── Inner.scala
│   │   │       │   ├── ListUser.scala
│   │   │       │   ├── Localization.scala
│   │   │       │   ├── Outer.scala
│   │   │       │   └── Table.scala
│   │   │       └── view
│   │   └── webapp
│   │       ├── WEB-INF
│   │       │   └── web.xml
│   │       ├── contacts
│   │       │   ├── create.html
│   │       │   ├── delete.html
│   │       │   ├── edit.html
│   │       │   ├── list.html
│   │       │   └── view.html
│   │       ├── images
│   │       │   └── ajax-loader.gif
│   │       ├── index.html
│   │       ├── send.html
│   │       ├── static
│   │       │   └── index.html
│   │       └── templates-hidden
│   │           ├── default.html
│   │           └── wizard-all.html
│   └── test
│       ├── resources
│       │   └── logback-test.xml
│       └── scala
│           ├── RunWebApp.scala
│           └── code
│               └── snippet
│                   └── AnimalsSpec.scala
└── target
    ├── resolution-cache
    │   ├── net.liftweb
    │   │   └── lift-2-6-starter-template_2.11
    │   │       └── 0.0.4
    │   │           ├── resolved.xml.properties
    │   │           └── resolved.xml.xml
    │   └── reports
    │       ├── ivy-report.css
    │       ├── ivy-report.xsl
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-compile-internal.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-compile.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-container.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-docs.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-optional.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-plugin.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-pom.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-provided.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-runtime-internal.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-runtime.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-scala-tool.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-sources.xml
    │       ├── net.liftweb-lift-2-6-starter-template_2.11-test-internal.xml
    │       └── net.liftweb-lift-2-6-starter-template_2.11-test.xml
    ├── scala-2.11
    │   ├── classes
    │   │   ├── bootstrap
    │   │   │   └── liftweb
    │   │   │       ├── Boot$$anonfun$1.class
    │   │   │       ├── Boot$$anonfun$10.class
    │   │   │       ├── Boot$$anonfun$11.class
    │   │   │       ├── Boot$$anonfun$12.class
    │   │   │       ├── Boot$$anonfun$13.class
    │   │   │       ├── Boot$$anonfun$14.class
    │   │   │       ├── Boot$$anonfun$15.class
    │   │   │       ├── Boot$$anonfun$2$$anonfun$apply$mcZ$sp$1.class
    │   │   │       ├── Boot$$anonfun$2$$anonfun$apply$mcZ$sp$2.class
    │   │   │       ├── Boot$$anonfun$2.class
    │   │   │       ├── Boot$$anonfun$3.class
    │   │   │       ├── Boot$$anonfun$4.class
    │   │   │       ├── Boot$$anonfun$5.class
    │   │   │       ├── Boot$$anonfun$6.class
    │   │   │       ├── Boot$$anonfun$7.class
    │   │   │       ├── Boot$$anonfun$8.class
    │   │   │       ├── Boot$$anonfun$9.class
    │   │   │       ├── Boot$$anonfun$boot$1.class
    │   │   │       ├── Boot$$anonfun$boot$2.class
    │   │   │       ├── Boot$$anonfun$boot$3.class
    │   │   │       ├── Boot$$anonfun$configureMailer$1$$anonfun$apply$1$$anon$1.class
    │   │   │       ├── Boot$$anonfun$configureMailer$1$$anonfun$apply$1.class
    │   │   │       ├── Boot$$anonfun$configureMailer$1.class
    │   │   │       └── Boot.class
    │   │   ├── code
    │   │   │   ├── lib
    │   │   │   │   ├── SendEmail$.class
    │   │   │   │   └── SendEmail.class
    │   │   │   └── snippet
    │   │   │       ├── Animals$$anonfun$list$1$$anonfun$apply$1$$anonfun$apply$2.class
    │   │   │       ├── Animals$$anonfun$list$1$$anonfun$apply$1$$anonfun$apply$3.class
    │   │   │       ├── Animals$$anonfun$list$1$$anonfun$apply$1.class
    │   │   │       ├── Animals$$anonfun$list$1.class
    │   │   │       ├── Animals.class
    │   │   │       ├── Calculator$$anonfun$plus$1.class
    │   │   │       ├── Calculator.class
    │   │   │       ├── EmailSnippet$$anonfun$sendEmail$1$$anonfun$apply$1.class
    │   │   │       ├── EmailSnippet$$anonfun$sendEmail$1.class
    │   │   │       ├── EmailSnippet$$anonfun$sendNow$1.class
    │   │   │       ├── EmailSnippet.class
    │   │   │       ├── HelloWorld$$anonfun$howdy$1.class
    │   │   │       ├── HelloWorld.class
    │   │   │       ├── Inner$$anonfun$logged$1.class
    │   │   │       ├── Inner$$anonfun$nonlogged$1.class
    │   │   │       ├── Inner.class
    │   │   │       ├── ListUser$$anonfun$list$1.class
    │   │   │       ├── ListUser$$anonfun$list$2$$anonfun$apply$1.class
    │   │   │       ├── ListUser$$anonfun$list$2.class
    │   │   │       ├── ListUser$$anonfun$log$1.class
    │   │   │       ├── ListUser$$anonfun$log$2.class
    │   │   │       ├── ListUser$$anonfun$log$3.class
    │   │   │       ├── ListUser.class
    │   │   │       ├── Localization$$anonfun$dynamic$1.class
    │   │   │       ├── Localization.class
    │   │   │       ├── Outer$$anonfun$1.class
    │   │   │       ├── Outer$$anonfun$choose$1.class
    │   │   │       ├── Outer$$anonfun$choose$2.class
    │   │   │       ├── Outer.class
    │   │   │       ├── Table$$anonfun$1$$anonfun$apply$1.class
    │   │   │       ├── Table$$anonfun$1.class
    │   │   │       ├── Table$$anonfun$dynamic$1.class
    │   │   │       ├── Table$$anonfun$dynamic$2.class
    │   │   │       ├── Table$$anonfun$dynamic$3$$anonfun$apply$2$$anonfun$apply$3.class
    │   │   │       ├── Table$$anonfun$dynamic$3$$anonfun$apply$2$$anonfun$apply$4.class
    │   │   │       ├── Table$$anonfun$dynamic$3$$anonfun$apply$2.class
    │   │   │       ├── Table$$anonfun$dynamic$3.class
    │   │   │       └── Table.class
    │   │   ├── logback.xml
    │   │   ├── props
    │   │   │   └── default.props
    │   │   ├── resources.properties
    │   │   ├── resources_de.properties
    │   │   └── resources_fr_FR.properties
    │   └── test-classes
    │       ├── RunWebApp$.class
    │       ├── RunWebApp$delayedInit$body.class
    │       ├── RunWebApp.class
    │       ├── WEB-INF
    │       │   └── web.xml
    │       ├── code
    │       │   └── snippet
    │       │       ├── AnimalsSpec$$anonfun$1$$anonfun$apply$1$$anonfun$apply$2.class
    │       │       ├── AnimalsSpec$$anonfun$1$$anonfun$apply$1$$anonfun$apply$3.class
    │       │       ├── AnimalsSpec$$anonfun$1$$anonfun$apply$1.class
    │       │       ├── AnimalsSpec$$anonfun$1$$anonfun$apply$4$$anonfun$apply$5.class
    │       │       ├── AnimalsSpec$$anonfun$1$$anonfun$apply$4$$anonfun$apply$6.class
    │       │       ├── AnimalsSpec$$anonfun$1$$anonfun$apply$4.class
    │       │       ├── AnimalsSpec$$anonfun$1.class
    │       │       └── AnimalsSpec.class
    │       ├── contacts
    │       │   ├── create.html
    │       │   ├── delete.html
    │       │   ├── edit.html
    │       │   ├── list.html
    │       │   └── view.html
    │       ├── images
    │       │   └── ajax-loader.gif
    │       ├── index.html
    │       ├── logback-test.xml
    │       ├── send.html
    │       ├── static
    │       │   └── index.html
    │       └── templates-hidden
    │           ├── default.html
    │           └── wizard-all.html
    ├── specs2-reports
    │   └── stats
    │       └── code.snippet.AnimalsSpec.stats
    └── streams
        ├── $global
        │   ├── $global
        │   │   └── $global
        │   │       └── out
        │   ├── ivyConfiguration
        │   │   └── $global
        │   │       └── out
        │   ├── ivySbt
        │   │   └── $global
        │   │       └── out
        │   ├── projectDescriptors
        │   │   └── $global
        │   │       └── out
        │   └── update
        │       └── $global
        │           ├── inputs
        │           ├── out
        │           └── output
        ├── compile
        │   ├── $global
        │   │   └── $global
        │   │       └── data
        │   ├── compile
        │   │   └── $global
        │   │       ├── export
        │   │       └── out
        │   ├── copyResources
        │   │   └── $global
        │   │       ├── copy-resources
        │   │       └── out
        │   ├── dependencyClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── exportedProducts
        │   │   └── $global
        │   │       └── export
        │   ├── externalDependencyClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── incCompileSetup
        │   │   └── $global
        │   │       └── inc_compile
        │   ├── internalDependencyClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── managedClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── unmanagedClasspath
        │   │   └── $global
        │   │       └── export
        │   └── unmanagedJars
        │       └── $global
        │           └── export
        ├── container
        │   └── $global
        │       └── $global
        │           └── data
        ├── runtime
        │   ├── dependencyClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── exportedProducts
        │   │   └── $global
        │   │       └── export
        │   ├── externalDependencyClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── fullClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── internalDependencyClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── managedClasspath
        │   │   └── $global
        │   │       └── export
        │   ├── unmanagedClasspath
        │   │   └── $global
        │   │       └── export
        │   └── unmanagedJars
        │       └── $global
        │           └── export
        └── test
            ├── $global
            │   └── $global
            │       └── data
            ├── compile
            │   └── $global
            │       ├── export
            │       └── out
            ├── copyResources
            │   └── $global
            │       ├── copy-resources
            │       └── out
            ├── definedTests
            │   └── $global
            │       └── out
            ├── dependencyClasspath
            │   └── $global
            │       └── export
            ├── exportedProducts
            │   └── $global
            │       └── export
            ├── externalDependencyClasspath
            │   └── $global
            │       └── export
            ├── fullClasspath
            │   └── $global
            │       └── export
            ├── incCompileSetup
            │   └── $global
            │       └── inc_compile
            ├── internalDependencyClasspath
            │   └── $global
            │       └── export
            ├── loadedTestFrameworks
            │   └── $global
            │       └── out
            ├── managedClasspath
            │   └── $global
            │       └── export
            ├── test
            │   ├── $global
            │   │   ├── out
            │   │   └── succeeded_tests
            │   └── isModule=false\ name=code.snippet.AnimalsSpec
            │       └── out
            ├── unmanagedClasspath
            │   └── $global
            │       └── export
            └── unmanagedJars
                └── $global
                    └── export

204 directories, 304 files
1

There are 1 answers

0
NoClueBlue On BEST ANSWER

Not sitting with a compiler at the moment, but should you not use new as it is a class and not an object?

val nodeSeq = Animals.list(...)

Should be

val nodeSeq = new Animals.list(...)

Or you can change class Animals into object Animals.