@@ -3,9 +3,17 @@ package org.scalajs.testsuite.compiler
3
3
import org .junit .Assert .*
4
4
import org .junit .Test
5
5
6
+ import scala .concurrent .ExecutionContext .Implicits .{global => globalEc }
7
+ import scala .concurrent .Future
8
+
6
9
import scala .scalajs .js
7
10
import scala .scalajs .js .annotation ._
8
11
12
+ import org .scalajs .junit .async ._
13
+
14
+ import org .scalajs .testsuite .jsinterop .ExportLoopback
15
+ import org .scalajs .testsuite .utils .Platform ._
16
+
9
17
class RegressionTestScala3 {
10
18
import RegressionTestScala3 .*
11
19
@@ -90,6 +98,39 @@ class RegressionTestScala3 {
90
98
91
99
assertEquals(5 , Issue16173 .bar1())
92
100
}
101
+
102
+ @ Test def mandatoryFieldsForSJSSemanticsInNonNativeJSClassIssue14168 (): Unit = {
103
+ val nonNativeJS = new Issue14168 .NonNativeJSClass ().asInstanceOf [js.Dynamic ]
104
+ assertEquals(" string" , nonNativeJS.stringField)
105
+ assertEquals(null , nonNativeJS.nullField)
106
+ assertEquals((), nonNativeJS.unitField)
107
+ assertEquals(true , nonNativeJS.hasOwnProperty(" unitField" ))
108
+ }
109
+
110
+ @ Test def mandatoryFieldsForSJSSemanticsInStaticExportsIssue14168 (): Unit = {
111
+ val staticExports = js.constructorOf[Issue14168 .StaticExports ]
112
+ assertEquals(" string" , staticExports.stringField)
113
+ assertEquals(null , staticExports.nullField)
114
+ assertEquals((), staticExports.unitField)
115
+ assertEquals(true , staticExports.hasOwnProperty(" unitField" ))
116
+ }
117
+
118
+ @ Test def mandatoryFieldsForSJSSemanticsInTopLevelExportsIssue14168 (): AsyncResult = await {
119
+ if (isNoModule) {
120
+ import js .Dynamic .global
121
+ Future {
122
+ assertEquals(" string" , global.RegressionTestScala3_Issue14168_stringField )
123
+ assertEquals(null , global.RegressionTestScala3_Issue14168_nullField )
124
+ assertEquals((), global.RegressionTestScala3_Issue14168_unitField )
125
+ }
126
+ } else {
127
+ for (exports <- ExportLoopback .exportsNamespace) yield {
128
+ assertEquals(" string" , exports.RegressionTestScala3_Issue14168_stringField )
129
+ assertEquals(null , exports.RegressionTestScala3_Issue14168_nullField )
130
+ assertEquals((), exports.RegressionTestScala3_Issue14168_unitField )
131
+ }
132
+ }
133
+ }
93
134
}
94
135
95
136
object RegressionTestScala3 {
@@ -174,6 +215,39 @@ object RegressionTestScala3 {
174
215
@ JSGlobal (" RegressionTestScala3_Issue16173_bar" )
175
216
def bar1 (): 5 = js.native
176
217
}
218
+
219
+ object Issue14168 {
220
+ class NonNativeJSClass extends js.Object {
221
+ val stringField : " string" = " string"
222
+ val nullField : Null = null
223
+ val unitField : Unit = ()
224
+ final val finalValField = " finalVal"
225
+ }
226
+
227
+ class StaticExports extends js.Object
228
+
229
+ object StaticExports {
230
+ @ JSExportStatic
231
+ val stringField : " string" = " string"
232
+ @ JSExportStatic
233
+ val nullField : Null = null
234
+ @ JSExportStatic
235
+ val unitField : Unit = ()
236
+ @ JSExportStatic
237
+ final val finalValField = " finalVal"
238
+ }
239
+
240
+ object TopLevelExports {
241
+ @ JSExportTopLevel (" RegressionTestScala3_Issue14168_stringField" )
242
+ val stringField : " string" = " string"
243
+ @ JSExportTopLevel (" RegressionTestScala3_Issue14168_nullField" )
244
+ val nullField : Null = null
245
+ @ JSExportTopLevel (" RegressionTestScala3_Issue14168_unitField" )
246
+ val unitField : Unit = ()
247
+ @ JSExportTopLevel (" RegressionTestScala3_Issue14168_finalValField" )
248
+ final val finalValField = " finalVal"
249
+ }
250
+ }
177
251
}
178
252
179
253
// This class needs to be at the top-level, not in an object, to reproduce the issue
0 commit comments