diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-10-26 11:45:55 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2016-11-17 07:49:03 -0800 |
commit | fbcfba212fff76272c509c6781ea2a2897d84bff (patch) | |
tree | 2ff682f1233400ad9626294c1f6ca6e0d17666fb /test | |
parent | 51e77408160fcef8b8c0669e1c62ec9a36f3b606 (diff) | |
download | scala-fbcfba212fff76272c509c6781ea2a2897d84bff.tar.gz scala-fbcfba212fff76272c509c6781ea2a2897d84bff.tar.bz2 scala-fbcfba212fff76272c509c6781ea2a2897d84bff.zip |
SI-10007 sys.process thread sync
A previous change to replace `SyncVar.set` with `SyncVar.put`
breaks things.
This commit tweaks the thread synchronizing in `sys.process`
to actually use `SyncVar` to sync and pass a var.
Joining the thread about to exit is superfluous.
A result is put exactly once, and consumers use
non-destructive `get`.
Note that as usual, avoid kicking off threads in a static
context, since class loading cycles are somewhat dicier
with 2.12 lambdas. In particular, REPL is a static context
by default.
SI-10007 Clarify deprecation message
The message on `set` was self-fulfilling, as it didn't
hint that `put` has different semantics.
So explain why `put` helps avoid errors instead of
creating them.
SI-10007 Always set exit value
Always put a value to exit code, defaulting to None.
Also clean up around tuple change to unfortunately
named Future.apply. Very hard to follow those types.
Date command pollutes output, so tweak test.
Diffstat (limited to 'test')
-rw-r--r-- | test/junit/scala/sys/process/PipedProcessTest.scala (renamed from test/junit/scala/sys/process/t7350.scala) | 1 | ||||
-rw-r--r-- | test/junit/scala/sys/process/ProcessTest.scala | 25 |
2 files changed, 26 insertions, 0 deletions
diff --git a/test/junit/scala/sys/process/t7350.scala b/test/junit/scala/sys/process/PipedProcessTest.scala index 9fdcac8ccc..53f053e9aa 100644 --- a/test/junit/scala/sys/process/t7350.scala +++ b/test/junit/scala/sys/process/PipedProcessTest.scala @@ -12,6 +12,7 @@ import scala.concurrent.ExecutionContext.Implicits.global import scala.util.control.Exception.ignoring // Each test normally ends in a moment, but for failure cases, waits until one second. +// SI-7350, SI-8768 @RunWith(classOf[JUnit4]) class PipedProcessTest { diff --git a/test/junit/scala/sys/process/ProcessTest.scala b/test/junit/scala/sys/process/ProcessTest.scala new file mode 100644 index 0000000000..f6d779c2c8 --- /dev/null +++ b/test/junit/scala/sys/process/ProcessTest.scala @@ -0,0 +1,25 @@ +package scala.sys.process + +import java.io.ByteArrayInputStream +// should test from outside the package to ensure implicits work +//import scala.sys.process._ +import scala.util.Properties._ + +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 +import org.junit.Test +import org.junit.Assert.assertEquals + +@RunWith(classOf[JUnit4]) +class ProcessTest { + private def testily(body: => Unit) = if (!isWin) body + @Test def t10007(): Unit = testily { + val res = ("cat" #< new ByteArrayInputStream("lol".getBytes)).!! + assertEquals("lol\n", res) + } + // test non-hanging + @Test def t10055(): Unit = testily { + val res = ("cat" #< ( () => -1 ) ).! + assertEquals(0, res) + } +} |