@@ -3,9 +3,17 @@ package org.scalajs.testsuite.compiler
33import org .junit .Assert .*
44import org .junit .Test
55
6+ import scala .concurrent .ExecutionContext .Implicits .{global => globalEc }
7+ import scala .concurrent .Future
8+
69import scala .scalajs .js
710import scala .scalajs .js .annotation ._
811
12+ import org .scalajs .junit .async ._
13+
14+ import org .scalajs .testsuite .jsinterop .ExportLoopback
15+ import org .scalajs .testsuite .utils .Platform ._
16+
917class RegressionTestScala3 {
1018 import RegressionTestScala3 .*
1119
@@ -90,6 +98,39 @@ class RegressionTestScala3 {
9098
9199 assertEquals(5 , Issue16173 .bar1())
92100 }
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+ }
93134}
94135
95136object RegressionTestScala3 {
@@ -174,6 +215,39 @@ object RegressionTestScala3 {
174215 @ JSGlobal (" RegressionTestScala3_Issue16173_bar" )
175216 def bar1 (): 5 = js.native
176217 }
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+ }
177251}
178252
179253// This class needs to be at the top-level, not in an object, to reproduce the issue
0 commit comments