From c22a035860827f3c50247e601cc491a187294c7f Mon Sep 17 00:00:00 2001 From: exoego Date: Tue, 24 Sep 2019 09:03:01 +0900 Subject: [PATCH] Overhaul os module --- .../scala/io/scalajs/nodejs/os/CPUInfo.scala | 18 +++++--- .../scala/io/scalajs/nodejs/os/CPUTime.scala | 15 ------- .../main/scala/io/scalajs/nodejs/os/OS.scala | 14 +++++- .../io/scalajs/nodejs/os/UserInfoObject.scala | 4 +- .../scala/io/scalajs/nodejs/os/package.scala | 21 --------- .../src/test/scala/nodejs/os/OSTest.scala | 44 ++++++------------- 6 files changed, 42 insertions(+), 74 deletions(-) delete mode 100644 app/current/src/main/scala/io/scalajs/nodejs/os/CPUTime.scala delete mode 100644 app/current/src/main/scala/io/scalajs/nodejs/os/package.scala diff --git a/app/current/src/main/scala/io/scalajs/nodejs/os/CPUInfo.scala b/app/current/src/main/scala/io/scalajs/nodejs/os/CPUInfo.scala index 09d117a7b..e733bfe40 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/os/CPUInfo.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/os/CPUInfo.scala @@ -2,12 +2,18 @@ package io.scalajs.nodejs.os import scala.scalajs.js -/** - * CPU Information - */ @js.native trait CPUInfo extends js.Object { - var model: String = js.native - var speed: Double = js.native - var times: js.Dictionary[Double] = js.native + val model: String = js.native + val speed: Double = js.native + val times: CPUTime = js.native +} + +@js.native +trait CPUTime extends js.Object { + val user: Double = js.native + val nice: Double = js.native + val sys: Double = js.native + val idle: Double = js.native + val irq: Double = js.native } diff --git a/app/current/src/main/scala/io/scalajs/nodejs/os/CPUTime.scala b/app/current/src/main/scala/io/scalajs/nodejs/os/CPUTime.scala deleted file mode 100644 index 347342aa1..000000000 --- a/app/current/src/main/scala/io/scalajs/nodejs/os/CPUTime.scala +++ /dev/null @@ -1,15 +0,0 @@ -package io.scalajs.nodejs.os - -import scala.scalajs.js - -/** - * CPU Time - */ -@js.native -trait CPUTime extends js.Object { - var user: Double = js.native - var nice: Double = js.native - var sys: Double = js.native - var idle: Double = js.native - var irq: Double = js.native -} diff --git a/app/current/src/main/scala/io/scalajs/nodejs/os/OS.scala b/app/current/src/main/scala/io/scalajs/nodejs/os/OS.scala index 8bed63bae..97e0e1cbb 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/os/OS.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/os/OS.scala @@ -1,5 +1,7 @@ package io.scalajs.nodejs.os +import com.thoughtworks.enableIf + import scala.scalajs.js import scala.scalajs.js.annotation.JSImport @@ -20,6 +22,7 @@ trait OS extends js.Object { * are described in OS Constants. * @see https://nodejs.org/api/os.html#os_os_constants_1 */ + // TODO: Implement as object def constants: js.Dictionary[js.Any] = js.native /** @@ -63,6 +66,9 @@ trait OS extends js.Object { */ def freemem(): Double = js.native + @enableIf(io.scalajs.nodejs.CompilerSwitches.gteNodeJs10) + def getPriority(pid: Int = js.native): Int = js.native + /** * Returns the home directory of the current user. * @example os.homedir() @@ -92,7 +98,7 @@ trait OS extends js.Object { * Get a list of network interfaces * @example os.networkInterfaces() */ - def networkInterfaces(): js.Dictionary[NetworkInterface] = js.native + def networkInterfaces(): js.Dictionary[js.Array[NetworkInterface]] = js.native /** * Returns the operating system platform. Possible values are 'darwin', 'freebsd', 'linux', 'sunos' or 'win32'. @@ -107,6 +113,11 @@ trait OS extends js.Object { */ def release(): String = js.native + @enableIf(io.scalajs.nodejs.CompilerSwitches.gteNodeJs10) + def setPriority(pid: Int, priority: Int): Unit = js.native + @enableIf(io.scalajs.nodejs.CompilerSwitches.gteNodeJs10) + def setPriority(priority: Int): Unit = js.native + /** * Returns the operating system's default directory for temporary files. * @example os.tmpdir() @@ -129,6 +140,7 @@ trait OS extends js.Object { * Returns the system uptime in seconds. * @example os.uptime() */ + // TODO: Return type should be Int after dropping Node.js 8 (Windows returns decimal until Node.js 10)) def uptime(): Double = js.native /** diff --git a/app/current/src/main/scala/io/scalajs/nodejs/os/UserInfoObject.scala b/app/current/src/main/scala/io/scalajs/nodejs/os/UserInfoObject.scala index 960748d88..6b024d47d 100644 --- a/app/current/src/main/scala/io/scalajs/nodejs/os/UserInfoObject.scala +++ b/app/current/src/main/scala/io/scalajs/nodejs/os/UserInfoObject.scala @@ -1,10 +1,12 @@ package io.scalajs.nodejs.os +import io.scalajs.nodejs.{GID, UID} + import scala.scalajs.js /** * User Information Object * @example {{{ {"uid":501,"gid":20,"username":"ldaniels","homedir":"/Users/ldaniels","shell":"/bin/bash"} }}} */ -class UserInfoObject(val uid: Int, val gid: Int, val username: String, val homedir: String, val shell: String) +class UserInfoObject(val uid: UID, val gid: GID, val username: String, val homedir: String, val shell: String) extends js.Object diff --git a/app/current/src/main/scala/io/scalajs/nodejs/os/package.scala b/app/current/src/main/scala/io/scalajs/nodejs/os/package.scala deleted file mode 100644 index a06e868c8..000000000 --- a/app/current/src/main/scala/io/scalajs/nodejs/os/package.scala +++ /dev/null @@ -1,21 +0,0 @@ -package io.scalajs.nodejs - -import scala.scalajs.js - -/** - * os package object - */ -package object os { - - /** - * CPU Info Enrichment - * @param cpuInfo the given [[CPUInfo CPU Info]] - */ - final implicit class CPUInfoEnrichment(val cpuInfo: CPUInfo) extends AnyVal { - - @inline - def timesObject: js.Array[CPUTime] = cpuInfo.times.asInstanceOf[js.Array[CPUTime]] - - } - -} diff --git a/app/nodejs-v8/src/test/scala/nodejs/os/OSTest.scala b/app/nodejs-v8/src/test/scala/nodejs/os/OSTest.scala index 2effcffb4..71ba26bd3 100644 --- a/app/nodejs-v8/src/test/scala/nodejs/os/OSTest.scala +++ b/app/nodejs-v8/src/test/scala/nodejs/os/OSTest.scala @@ -1,6 +1,5 @@ package io.scalajs.nodejs.os -import io.scalajs.JSON import io.scalajs.util.ScalaJsHelper._ import org.scalatest.FunSpec @@ -12,97 +11,82 @@ class OSTest extends FunSpec { describe("OS") { it("supports arch()") { - info(s"arch: ${OS.arch()}") - assert(isDefined(OS.arch())) + assert(OS.arch().nonEmpty) } it("supports constants") { - info(s"constants: ${JSON.stringify(OS.constants)}") assert(isDefined(OS.constants)) } it("supports cpus()") { val cpus = OS.cpus() - cpus.zipWithIndex foreach { - case (cpu, n) => - info(s"cpu$n: ${JSON.stringify(cpu)}") - } assert(isDefined(cpus)) + assert(cpus(0).model.nonEmpty) + assert(cpus(0).speed > 0) + assert(cpus(0).times.user > 0) } it("supports endianness()") { - info(s"endianness: ${OS.endianness()}") - assert(isDefined(OS.endianness())) + assert(OS.endianness() === "BE" || OS.endianness() === "LE") } it("supports EOL") { - info(s"EOL: ${OS.EOL}") - assert(isDefined(OS.EOL)) + assert(OS.EOL === "\n" || OS.EOL === "\r\n") } it("supports freemem()") { - info(s"freemem: ${OS.freemem()}") - assert(isDefined(OS.freemem())) + assert(OS.freemem() > 0) } it("supports homedir()") { - info(s"homedir: ${OS.homedir()}") assert(isDefined(OS.homedir())) } it("supports hostname()") { - info(s"hostname: ${OS.hostname()}") assert(isDefined(OS.hostname())) } it("supports loadavg()") { - info(s"loadavg: ${OS.loadavg()}") assert(isDefined(OS.loadavg())) + assert(OS.loadavg().nonEmpty) } it("supports networkInterfaces()") { - OS.networkInterfaces() foreach { + val networkInterfaces = OS.networkInterfaces() + assert(isDefined(networkInterfaces)) + networkInterfaces foreach { case (name, iface) => - info(s"$name: ${JSON.stringify(iface)}") + assert(name.nonEmpty) + assert(iface.nonEmpty) } - assert(isDefined(OS.networkInterfaces())) } it("supports platform()") { - info(s"platform: ${OS.platform()}") - assert(isDefined(OS.platform())) + assert(OS.platform().nonEmpty) } it("supports release()") { - info(s"release: ${OS.release()}") assert(isDefined(OS.release())) } it("supports tmpdir()") { - info(s"tmpdir: ${OS.tmpdir()}") assert(isDefined(OS.tmpdir())) } it("supports totalmem()") { - info(s"totalmem: ${OS.totalmem()}") assert(isDefined(OS.totalmem())) } it("supports type()") { - info(s"type: ${OS.`type`()}") assert(isDefined(OS.`type`())) } it("supports uptime()") { - info(s"uptime: ${OS.uptime()}") assert(isDefined(OS.uptime())) } it("supports userInfo()") { - info(s"userInfo: ${JSON.stringify(OS.userInfo())}") assert(isDefined(OS.userInfo())) } - } - }