Skip to content

Commit 11119f5

Browse files
authored
Merge pull request #49 from scala-exercises/dv-48-pass-scalac-flags-endpoint
Pass scalac flags to the endpoint
2 parents 8ba24b2 + ab282e2 commit 11119f5

File tree

8 files changed

+91
-118
lines changed

8 files changed

+91
-118
lines changed

client/shared/src/main/scala/org/scalaexercises/evaluator/EvaluatorAPI.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ class EvaluatorAPI[F[_]](url: String, authKey: String)(
1616
dependencies: List[Dependency] = Nil,
1717
code: String): Free[F, EvaluationResponse[EvalResponse]] =
1818
O.evaluates(url, authKey, resolvers, dependencies, code)
19-
}
19+
}

client/shared/src/main/scala/org/scalaexercises/evaluator/api/Evaluator.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
package org.scalaexercises.evaluator.api
77

8-
import org.scalaexercises.evaluator.EvaluatorResponses.EvaluationResponse
9-
import org.scalaexercises.evaluator.{Decoders, Dependency, EvalRequest, EvalResponse}
10-
import org.scalaexercises.evaluator.http.HttpClient
118
import io.circe.generic.auto._
129
import io.circe.syntax._
10+
import org.scalaexercises.evaluator.EvaluatorResponses.EvaluationResponse
11+
import org.scalaexercises.evaluator.http.HttpClient
12+
import org.scalaexercises.evaluator.{Decoders, Dependency, EvalRequest, EvalResponse}
1313

1414
import scala.concurrent.Future
1515

client/shared/src/main/scala/org/scalaexercises/evaluator/free/algebra/EvaluatorOps.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
package org.scalaexercises.evaluator.free.algebra
77

88
import cats.free.{Free, Inject}
9-
import org.scalaexercises.evaluator.{Dependency, EvalResponse}
109
import org.scalaexercises.evaluator.EvaluatorResponses.EvaluationResponse
10+
import org.scalaexercises.evaluator.{Dependency, EvalResponse}
1111

1212
sealed trait EvaluatorOp[A]
1313
final case class Evaluates(url: String,

server/src/main/resources/application.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ eval.auth {
1212

1313
# Loader IO Configuration
1414
loaderio.verificationToken=loaderio-changeme
15-
loaderio.verificationToken=${?LOADERIO_VERIFICATION_TOKEN}
15+
loaderio.verificationToken=${?LOADERIO_VERIFICATION_TOKEN}

server/src/main/scala/org/scalaexercises/evaluator/evaluation.scala

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,29 @@
55

66
package org.scalaexercises.evaluator
77

8-
import scala.language.reflectiveCalls
9-
10-
import java.io.{File, InputStream}
8+
import java.io.File
9+
import java.math.BigInteger
1110
import java.net.URLClassLoader
12-
import java.nio.file.Path
13-
import java.util.jar.JarFile
14-
import java.util.concurrent.TimeoutException
1511
import java.security.MessageDigest
16-
import java.math.BigInteger
12+
import java.util.concurrent.TimeoutException
13+
import java.util.jar.JarFile
1714

18-
import scala.tools.nsc.{Global, Settings}
19-
import scala.tools.nsc.reporters._
20-
import scala.tools.nsc.io.{VirtualDirectory, AbstractFile}
21-
import scala.reflect.internal.util.{Position, NoPosition, BatchSourceFile, AbstractFileClassLoader}
15+
import coursier._
16+
import monix.execution.Scheduler
17+
import org.scalaexercises.evaluator.Eval.CompilerException
2218

23-
import scalaz._; import Scalaz._
19+
import scala.concurrent.duration._
20+
import scala.language.reflectiveCalls
21+
import scala.reflect.internal.util.{AbstractFileClassLoader, BatchSourceFile, Position}
22+
import scala.tools.nsc.io.{AbstractFile, VirtualDirectory}
23+
import scala.tools.nsc.reporters._
24+
import scala.tools.nsc.{Global, Settings}
2425
import scala.util.Try
2526
import scala.util.control.NonFatal
26-
import scala.concurrent._
27-
import scala.concurrent.duration._
27+
import scalaz.Scalaz._
28+
import scalaz._
2829
import scalaz.concurrent.Task
2930

30-
import monix.execution.Scheduler
31-
32-
import coursier._
33-
34-
import org.scalaexercises.evaluator._
35-
3631
class Evaluator(timeout: FiniteDuration = 20.seconds)(
3732
implicit S: Scheduler
3833
) {
@@ -78,9 +73,14 @@ class Evaluator(timeout: FiniteDuration = 20.seconds)(
7873
@volatile var errors: Map[String, List[CompilationInfo]] = Map.empty
7974

8075
override lazy val compilerSettings: Settings = new EvalSettings(None) {
81-
if (!jars.isEmpty) {
76+
if (jars.nonEmpty) {
8277
val newJars = jars.mkString(File.pathSeparator)
8378
classpath.value = newJars + File.pathSeparator + classpath.value
79+
80+
(jars map (_.toString)).find(_.contains("paradise")) match {
81+
case Some(compilerJar) => plugin.appendToValue(compilerJar)
82+
case None =>
83+
}
8484
}
8585
}
8686

@@ -115,7 +115,7 @@ class Evaluator(timeout: FiniteDuration = 20.seconds)(
115115
case scala.util.Success(r) EvalSuccess[T](errors, r, "")
116116
case scala.util.Failure(t)
117117
t match {
118-
case e: Eval.CompilerException CompilationError(errors)
118+
case e: CompilerException CompilationError(errors)
119119
case NonFatal(e)
120120
EvalRuntimeError(errors, Option(RuntimeError(e, None)))
121121
case e GeneralError(e)
@@ -253,7 +253,7 @@ private class StringCompiler(
253253
case _ =>
254254
List(List(reporter.toString))
255255
}
256-
throw new Eval.CompilerException(msgs)
256+
throw new CompilerException(msgs)
257257
}
258258
}
259259

server/src/main/scala/org/scalaexercises/evaluator/services.scala

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,20 @@
55

66
package org.scalaexercises.evaluator
77

8+
import monix.execution.Scheduler
89
import org.http4s._
910
import org.http4s.dsl._
10-
import org.http4s.server._
1111
import org.http4s.server.blaze._
1212
import org.log4s.getLogger
13-
import monix.execution.Scheduler
1413

15-
import scala.language.postfixOps
16-
import scalaz.concurrent.Task
17-
import scalaz._
1814
import scala.concurrent.duration._
15+
import scala.language.postfixOps
1916

2017
object services {
2118

19+
import EvalResponse.messages._
2220
import codecs._
2321
import io.circe.generic.auto._
24-
import EvalResponse.messages._
2522

2623
private val logger = getLogger
2724

server/src/test/scala/org/scalaexercises/evaluator/EvalEndpointSpec.scala

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,25 @@
55

66
package org.scalaexercises.evaluator
77

8-
import org.scalatest._
9-
import org.http4s._
10-
import org.http4s.headers._
11-
import org.http4s.dsl._
12-
import org.http4s.server._
8+
import java.nio.charset.StandardCharsets
139

14-
import io.circe.syntax._
1510
import io.circe.generic.auto._
16-
import scalaz.stream.Process.emit
17-
import java.nio.charset.StandardCharsets
11+
import io.circe.syntax._
12+
import org.http4s.dsl._
13+
import org.http4s.headers._
14+
import org.http4s.{Status => HttpStatus, _}
15+
import org.scalatest._
16+
import pdi.jwt.{Jwt, JwtAlgorithm}
1817
import scodec.bits.ByteVector
19-
import pdi.jwt.{Jwt, JwtAlgorithm, JwtHeader, JwtClaim, JwtOptions}
2018

21-
import org.http4s.{Status => HttpStatus}
19+
import scalaz.stream.Process.emit
2220

2321
class EvalEndpointSpec extends FunSpec with Matchers {
2422

25-
import services._
26-
import codecs._
27-
import auth._
2823
import EvalResponse.messages._
24+
import auth._
25+
import codecs._
26+
import services._
2927

3028
val sonatypeReleases = "https://oss.sonatype.org/content/repositories/releases/" :: Nil
3129

server/src/test/scala/org/scalaexercises/evaluator/EvaluatorSpec.scala

Lines changed: 48 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@
55

66
package org.scalaexercises.evaluator
77

8-
import scala.concurrent.duration._
9-
import scala.language.postfixOps
108
import monix.execution.Scheduler
119
import org.scalatest._
1210
import org.scalatest.exceptions.TestFailedException
1311

12+
import scala.concurrent.duration._
13+
import scala.language.postfixOps
14+
1415
class EvaluatorSpec extends FunSpec with Matchers {
1516
implicit val scheduler: Scheduler = Scheduler.io("exercises-spec")
1617
val evaluator = new Evaluator(20 seconds)
1718

19+
val remotes = "https://oss.sonatype.org/content/repositories/releases/" :: Nil
20+
1821
describe("evaluation") {
1922
it("can evaluate simple expressions") {
2023
val result: EvalResult[Int] = evaluator.eval("{ 41 + 1 }").run
@@ -33,58 +36,32 @@ class EvaluatorSpec extends FunSpec with Matchers {
3336
}
3437
}
3538

36-
ignore("can load dependencies for an evaluation") {
37-
val code = """
38-
import cats._
39+
describe("can load dependencies for an evaluation") {
40+
val code = "{import cats._; Eval.now(42).value}"
3941

40-
Eval.now(42).value
41-
"""
42-
val remotes =
43-
List("https://oss.sonatype.org/content/repositories/releases/")
44-
val dependencies = List(
45-
Dependency("org.typelevel", "cats_2.11", "0.6.0")
46-
)
42+
val dependencies = Dependency("org.typelevel", "cats_2.11", "0.6.0") :: Nil
4743

4844
val result: EvalResult[Int] = evaluator
49-
.eval(
50-
code,
51-
remotes = remotes,
52-
dependencies = dependencies
53-
)
45+
.eval(code, remotes = remotes, dependencies = dependencies)
5446
.run
5547

5648
result should matchPattern {
5749
case EvalSuccess(_, 42, _) =>
5850
}
5951
}
6052

61-
ignore("can load different versions of a dependency across evaluations") {
62-
val code = """
63-
import cats._
64-
Eval.now(42).value
65-
"""
66-
val remotes =
67-
List("https://oss.sonatype.org/content/repositories/releases/")
68-
val dependencies1 = List(
69-
Dependency("org.typelevel", "cats_2.11", "0.4.1")
70-
)
71-
val dependencies2 = List(
72-
Dependency("org.typelevel", "cats_2.11", "0.6.0")
73-
)
53+
describe("can load different versions of a dependency across evaluations") {
54+
val code = "{import cats._; Eval.now(42).value}"
55+
56+
val dependencies1 = Dependency("org.typelevel", "cats_2.11", "0.4.1") :: Nil
57+
58+
val dependencies2 = Dependency("org.typelevel", "cats_2.11", "0.6.0") :: Nil
7459

7560
val result1: EvalResult[Int] = evaluator
76-
.eval(
77-
code,
78-
remotes = remotes,
79-
dependencies = dependencies1
80-
)
61+
.eval(code, remotes = remotes, dependencies = dependencies1)
8162
.run
8263
val result2: EvalResult[Int] = evaluator
83-
.eval(
84-
code,
85-
remotes = remotes,
86-
dependencies = dependencies2
87-
)
64+
.eval(code, remotes = remotes, dependencies = dependencies2)
8865
.run
8966

9067
result1 should matchPattern {
@@ -95,47 +72,33 @@ Eval.now(42).value
9572
}
9673
}
9774

98-
ignore("can run code from the exercises content") {
99-
val code = """
100-
import stdlib._
101-
Asserts.scalaTestAsserts(true)
102-
"""
103-
val remotes =
104-
List("https://oss.sonatype.org/content/repositories/releases/")
105-
val dependencies = List(
106-
Dependency("org.scala-exercises", "exercises-stdlib_2.11", "0.2.0")
107-
)
75+
describe("can run code from the exercises content") {
76+
val code = "{import stdlib._; Asserts.scalaTestAsserts(true)}"
77+
78+
val dependencies = Dependency(
79+
"org.scala-exercises",
80+
"exercises-stdlib_2.11",
81+
"0.2.0") :: Nil
10882

10983
val result: EvalResult[Unit] = evaluator
110-
.eval(
111-
code,
112-
remotes = remotes,
113-
dependencies = dependencies
114-
)
84+
.eval(code, remotes = remotes, dependencies = dependencies)
11585
.run
11686

11787
result should matchPattern {
11888
case EvalSuccess(_, (), _) =>
11989
}
12090
}
12191

122-
ignore("captures exceptions when running the exercises content") {
123-
val code = """
124-
import stdlib._
125-
Asserts.scalaTestAsserts(false)
126-
"""
127-
val remotes =
128-
List("https://oss.sonatype.org/content/repositories/releases/")
129-
val dependencies = List(
130-
Dependency("org.scala-exercises", "exercises-stdlib_2.11", "0.2.0")
131-
)
92+
describe("captures exceptions when running the exercises content") {
93+
val code = "{import stdlib._; Asserts.scalaTestAsserts(false)}"
94+
95+
val dependencies = Dependency(
96+
"org.scala-exercises",
97+
"exercises-stdlib_2.11",
98+
"0.2.0") :: Nil
13299

133100
val result: EvalResult[Unit] = evaluator
134-
.eval(
135-
code,
136-
remotes = remotes,
137-
dependencies = dependencies
138-
)
101+
.eval(code, remotes = remotes, dependencies = dependencies)
139102
.run
140103

141104
result should matchPattern {
@@ -144,5 +107,20 @@ Asserts.scalaTestAsserts(false)
144107
Some(RuntimeError(err: TestFailedException, _))) =>
145108
}
146109
}
110+
111+
describe("can run code from the exercises content") {
112+
val code = "{import cats._; Eval.now(42).value}"
113+
114+
val dependencies = Dependency("org.typelevel", "cats_2.11", "0.6.0") :: Nil
115+
116+
val result: EvalResult[Unit] = evaluator
117+
.eval(code, remotes = remotes, dependencies = dependencies)
118+
.run
119+
120+
result should matchPattern {
121+
case EvalSuccess(_, 42, _) =>
122+
}
123+
}
124+
147125
}
148126
}

0 commit comments

Comments
 (0)