Skip to content

Commit

Permalink
Merge pull request #82 from MoeOrganization/prakashk/misc-fixes
Browse files Browse the repository at this point in the history
Misc fixes
  • Loading branch information
Stevan Little committed Apr 17, 2013
2 parents 45d80b7 + 02d94da commit b06a871
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 23 deletions.
21 changes: 13 additions & 8 deletions src/main/scala/org/moe/Moe.scala
Expand Up @@ -82,8 +82,20 @@ object Moe {

val dumpAST = cmd.hasOption("u")

def setupArgv(args: List[String]) =
runtime.getRootEnv.set(
"@ARGV",
runtime.NativeObjects.getArray(
args.map(arg => runtime.NativeObjects.getStr(arg)):_*
)
)

val rest: List[String] = cmd.getArgs().toList

if (cmd.hasOption("e")) {
val code: String = cmd.getOptionValue("e")
if (!rest.isEmpty)
setupArgv(rest)
REPL.evalLine(
interpreter,
runtime,
Expand All @@ -93,8 +105,6 @@ object Moe {
return
}
else {
val rest: List[String] = cmd.getArgs().toList

def evalProgram (path: String) = REPL.evalLine(
interpreter,
runtime,
Expand All @@ -106,12 +116,7 @@ object Moe {
case List() => REPL.enter(interpreter, runtime, dumpAST)
case program :: List() => evalProgram(program)
case program :: args => {
runtime.getRootEnv.set(
"@ARGV",
runtime.NativeObjects.getArray(
args.map(arg => runtime.NativeObjects.getStr(arg)):_*
)
)
setupArgv(args)
evalProgram(program)
}
}
Expand Down
28 changes: 14 additions & 14 deletions src/main/scala/org/moe/runtime/MoeRuntime.scala
Expand Up @@ -96,20 +96,20 @@ class MoeRuntime (
val exceptionClass = new MoeClass("Exception", Some(VERSION), Some(AUTHORITY), Some(scalarClass))

// set the associated class for all classes
anyClass.setAssociatedClass(Some(classClass))
scalarClass.setAssociatedClass(Some(classClass))
arrayClass.setAssociatedClass(Some(classClass))
hashClass.setAssociatedClass(Some(classClass))
pairClass.setAssociatedClass(Some(classClass))
ioClass.setAssociatedClass(Some(classClass))
codeClass.setAssociatedClass(Some(classClass))

undefClass.setAssociatedClass(Some(classClass))
boolClass.setAssociatedClass(Some(classClass))
strClass.setAssociatedClass(Some(classClass))
intClass.setAssociatedClass(Some(classClass))
numClass.setAssociatedClass(Some(classClass))
exceptionClass.setAssociatedClass(Some(classClass))
anyClass.setAssociatedClass(Some(anyClass))
scalarClass.setAssociatedClass(Some(scalarClass))
arrayClass.setAssociatedClass(Some(arrayClass))
hashClass.setAssociatedClass(Some(hashClass))
pairClass.setAssociatedClass(Some(pairClass))
ioClass.setAssociatedClass(Some(ioClass))
codeClass.setAssociatedClass(Some(codeClass))

undefClass.setAssociatedClass(Some(undefClass))
boolClass.setAssociatedClass(Some(boolClass))
strClass.setAssociatedClass(Some(strClass))
intClass.setAssociatedClass(Some(intClass))
numClass.setAssociatedClass(Some(numClass))
exceptionClass.setAssociatedClass(Some(exceptionClass))

// add all these classes to the corePackage
corePackage.addClass(objectClass)
Expand Down
Expand Up @@ -66,7 +66,7 @@ class MoeArrayObject(

def reverse(r: MoeRuntime): MoeArrayObject = r.NativeObjects.getArray(array.reverse:_*)

def join(r: MoeRuntime): MoeStrObject = r.NativeObjects.getStr(array.map(_.toString).mkString(""))
def join(r: MoeRuntime): MoeStrObject = r.NativeObjects.getStr(array.map(_.unboxToString.get).mkString(""))
def join(r: MoeRuntime, sep: MoeStrObject): MoeStrObject = r.NativeObjects.getStr(
array.map(_.unboxToString.get).mkString(sep.unboxToString.get)
)
Expand Down
14 changes: 14 additions & 0 deletions src/test/scala/org/moe/parser/ArrayMethodTestSuite.scala
Expand Up @@ -121,4 +121,18 @@ class ArrayMethodTestSuite extends FunSuite with BeforeAndAfter with ParserTestU
array.mkString(",") should equal ("1,2,3,1,2,3,1,2,3")
}

test("... basic test with array join") {
val result = interpretCode("""my @a = ["a", "b", "c"]; @a.join("|")""")
result.unboxToString.get should equal ("a|b|c")
}

test("... basic test with array join -- empty separator") {
val result = interpretCode("""my @a = ["a", "b", "c"]; @a.join("")""")
result.unboxToString.get should equal ("abc")
}

test("... basic test with array join -- no separator") {
val result = interpretCode("""my @a = ["a", "b", "c"]; @a.join""")
result.unboxToString.get should equal ("abc")
}
}
60 changes: 60 additions & 0 deletions src/test/scala/org/moe/parser/IOClassTestSuite.scala
@@ -0,0 +1,60 @@
package org.moe.parser

import org.scalatest.FunSuite
import org.scalatest.BeforeAndAfter
import org.scalatest.matchers.ShouldMatchers

import org.moe.runtime._
import org.moe.interpreter._
import org.moe.ast._
import org.moe.parser._

class IOClassTestSuite extends FunSuite with BeforeAndAfter with ParserTestUtils with ShouldMatchers {

// NOTE: These tests depend on the file t/000-load.t to exist.
// Should the contents of this file change, the tests must also be
// updated appropriately.

private val goodPath = """my $path = "t/000-load.t";"""
private val badPath = """my $path = "t/000-load.x";"""

test("... basic IO test -- .new") {
val result = interpretCode(goodPath + """my $io = ^IO.new($path); $io.isa("IO")""")
result.unboxToBoolean.get should equal (true)
}

test("... basic IO test -- existence") {
val result = interpretCode(goodPath + """my $io = ^IO.new($path); -e $io""")
result.unboxToBoolean.get should equal (true)
}

test("... basic IO test -- existence with invalid file") {
val result = interpretCode(badPath + """my $io = ^IO.new($path); -e $io""")
result.unboxToBoolean.get should equal (false)
}

test("... basic IO test -- readable") {
val result = interpretCode(goodPath + """my $io = ^IO.new($path); -r $io""")
result.unboxToBoolean.get should equal (true)
}

test("... basic IO test -- readable with invalid file") {
val result = interpretCode(badPath + """my $io = ^IO.new($path); -r $io""")
result.unboxToBoolean.get should equal (false)
}

test("... basic IO test -- readline") {
val result = interpretCode(goodPath + """my $io = ^IO.new($path); $io.readline""")
result.unboxToString.get should equal ("use Test::More;")
}

test("... basic IO test -- readlines") {
val result = interpretCode(goodPath + """my $io = ^IO.new($path); $io.readlines""")
val lines = result.unboxToArrayBuffer.get
lines(0).unboxToString.get should equal ("use Test::More;")
lines(1).unboxToString.get should equal ("")
lines(2).unboxToString.get should equal ("plan(1);")
lines(3).unboxToString.get should equal ("")
lines(4).unboxToString.get should equal ("""ok(true, "... this worked!");""")
}
}

0 comments on commit b06a871

Please sign in to comment.