summaryrefslogtreecommitdiff
path: root/examples/scala-js/compiler/src/test/scala/scala/scalajs/compiler/test/EnumerationInteropTest.scala
blob: e186cf4553dc1b65497441ff1c6e576c5fac90c9 (plain) (blame)
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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

  }

}