summaryrefslogblamecommitdiff
path: root/compiler/src/test/scala/scala/scalajs/compiler/test/EnumerationInteropTest.scala
blob: e186cf4553dc1b65497441ff1c6e576c5fac90c9 (plain) (tree)






































































































































                                                                                            
package scala.scalajs.compiler.test

import scala.scalajs.compiler.test.util._

import org.junit.Test

class EnumerationInteropTest extends DirectTest with TestHelpers {

  @Test
  def warnIfUnableToTransformValue = {

    """
    class A extends Enumeration {
      val a = {
        println("oh, oh!")
        Value
      }
      val b = {
        println("oh, oh!")
        Value(4)
      }
    }
    """ hasWarns
    """
      |newSource1.scala:5: warning: Couldn't transform call to Enumeration.Value.
      |The resulting program is unlikely to function properly as this
      |operation requires reflection.
      |        Value
      |        ^
      |newSource1.scala:9: warning: Couldn't transform call to Enumeration.Value.
      |The resulting program is unlikely to function properly as this
      |operation requires reflection.
      |        Value(4)
      |             ^
    """

  }

  @Test
  def warnIfNoNameVal = {

    """
    class A extends Enumeration {
      val a = new Val
      val b = new Val(10)
    }
    """ hasWarns
    """
      |newSource1.scala:3: warning: Calls to the non-string constructors of Enumeration.Val
      |require reflection at runtime. The resulting
      |program is unlikely to function properly.
      |      val a = new Val
      |              ^
      |newSource1.scala:4: warning: Calls to the non-string constructors of Enumeration.Val
      |require reflection at runtime. The resulting
      |program is unlikely to function properly.
      |      val b = new Val(10)
      |              ^
    """

  }

  @Test
  def warnIfNullValue = {

    """
    class A extends Enumeration {
      val a = Value(null)
      val b = Value(10, null)
    }
    """ hasWarns
    """
      |newSource1.scala:3: warning: Passing null as name to Enumeration.Value
      |requires reflection at runtime. The resulting
      |program is unlikely to function properly.
      |      val a = Value(null)
      |                   ^
      |newSource1.scala:4: warning: Passing null as name to Enumeration.Value
      |requires reflection at runtime. The resulting
      |program is unlikely to function properly.
      |      val b = Value(10, null)
      |                   ^
    """

  }

  @Test
  def warnIfNullNewVal = {

    """
    class A extends Enumeration {
      val a = new Val(null)
      val b = new Val(10, null)
    }
    """ hasWarns
    """
      |newSource1.scala:3: warning: Passing null as name to a constructor of Enumeration.Val
      |requires reflection at runtime. The resulting
      |program is unlikely to function properly.
      |      val a = new Val(null)
      |              ^
      |newSource1.scala:4: warning: Passing null as name to a constructor of Enumeration.Val
      |requires reflection at runtime. The resulting
      |program is unlikely to function properly.
      |      val b = new Val(10, null)
      |              ^
    """

  }

  @Test
  def warnIfExtNoNameVal = {

    """
    class A extends Enumeration {
      protected class Val1 extends Val
      protected class Val2 extends Val(1)
    }
    """ warns() // no message checking: position differs in 2.10 and 2.11

  }

  @Test
  def warnIfExtNullNameVal = {

    """
    class A extends Enumeration {
      protected class Val1 extends Val(null)
      protected class Val2 extends Val(1,null)
    }
    """ warns() // no message checking: position differs in 2.10 and 2.11

  }

}