Skip to content

Commit

Permalink
Added Jurassic engine, still not as flexible as JavaScript.net
Browse files Browse the repository at this point in the history
  • Loading branch information
gatapia committed Jul 22, 2011
1 parent ccb5d12 commit ffc2ae9
Show file tree
Hide file tree
Showing 18 changed files with 274 additions and 116 deletions.
3 changes: 3 additions & 0 deletions js.net.test.module/js.net.test.module.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@
<Reference Include="ICSharpCode.SharpZipLib">
<HintPath>..\lib\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference>
<Reference Include="Jurassic">
<HintPath>..\lib\JSEngines\Jurassic\Jurassic.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
Expand Down
109 changes: 101 additions & 8 deletions js.net.tests/Engine/AbstractEngineTests.cs
Original file line number Diff line number Diff line change
@@ -1,36 +1,47 @@
using js.net.Engine;
using System;
using System.Diagnostics;
using System.Dynamic;
using System.Linq;
using Noesis.Javascript;
using js.net.Engine;
using NUnit.Framework;
using js.net.Util;

namespace js.net.tests.Engine
{
public abstract class AbstractEngineTests
{
static AbstractEngineTests() {
Trace.Listeners.Clear();
Trace.Listeners.Add(new ExceptionTraceListener());
}

protected IEngine engine;

protected abstract IEngine CreateEngine();

[SetUp] public void SetUp()
[SetUp] public virtual void SetUp()
{
engine = CreateEngine();
}

[TearDown] public void TearDown()
[TearDown] public virtual void TearDown()
{
engine.Dispose();
}

[Test] public void SimpleAddition()
[Test] public virtual void SimpleAddition()
{
Assert.AreEqual(2, engine.Run("1 + 1", "AbstractEngineTests.SimpleAddition"));
}

[Test] public void AccrossMultipleSessions()
[Test] public virtual void AccrossMultipleSessions()
{
engine.Run("var x = 1", "AbstractEngineTests.AccrossMultipleSessions");
Assert.AreEqual(2, engine.Run("x + 1", "AbstractEngineTests.AccrossMultipleSessions"));
}

[Test] public void ArrayReduce()
[Test] public virtual void ArrayReduce()
{
Assert.AreEqual(10, engine.Run(
@"
Expand All @@ -41,18 +52,100 @@ [Test] public void ArrayReduce()
}


[Test] public void TestSetGlobal()
[Test] public virtual void TestSetGlobal()
{
engine.SetGlobal("newglobal", this);
int add = (int) engine.Run("newglobal.TestAdd(1, 2);", "test");
Assert.AreEqual(3, add);
}

[Test] public void TestSetModifyAndGetGlobal()
[Test] public virtual void TestSetModifyAndGetGlobal()
{
engine.SetGlobal("x", 10);
engine.Run("x *= x;", "AbstractEngineTests.TestSetModifyAndGetGlobal");
Assert.AreEqual(100, engine.GetGlobal("x"));
}

[Test] public virtual void MemoryUsageTests()
{
MemoryUsageLoadInstance();
long mem = Process.GetCurrentProcess().PrivateMemorySize64;

for (int i = 0; i < 20; i++)
{
MemoryUsageLoadInstance();
}
GC.Collect();
decimal diffMBytes = Math.Round((Process.GetCurrentProcess().PrivateMemorySize64 - mem) / 1048576m, 2);
Assert.Less(diffMBytes, 1); // Allow 1 MB
}

private void MemoryUsageLoadInstance() {
using (JavascriptContext ctx = new JavascriptContext())
{
ctx.Run(
@"
buffer = [];
for (var i = 0; i < 100000; i++) {
buffer[i] = 'new string';
}
");
}
}

[Test] public virtual void TestCallbackIntoCSharp()
{
engine.SetGlobal("callbackHandler", this);
engine.Run("var retval; callbackHandler.methodWithCallback(function(val) { retval = val; });", "TestCallbackIntoCSharp");
Assert.AreEqual(10, engine.GetGlobal("retval"));
}

public virtual void methodWithCallback(Action<int> action)
{
action(10);
}

[Test] public virtual void TestSetGlobalEmbedded()
{
engine.Run("var ns = {}; ns.class = {};", "TestSetGlobalEmbedded");
engine.SetGlobal("ns.class", this);
int add = (int) engine.Run("ns.class.TestAdd(1, 2);", "test");
Assert.AreEqual(3, add);
}

[Test] public virtual void TestDynamics()
{
dynamic d = new ExpandoObject();
d.Test = "Test String";
engine.SetGlobal("d", d);
Assert.AreEqual("Test String", engine.Run("d.Test", ""));
}

[Test] public virtual void TestCallingParams()
{
engine.SetGlobal("test", this);
Assert.AreEqual(0, engine.Run("test.TestParams();", ""));
}

[Test] public virtual void TestCallingOptionals()
{
engine.SetGlobal("test", this);
Assert.AreEqual(1, engine.Run("test.TestOptional();", ""));
}

public int TestAdd(int i1, int i2)
{
return i1 + i2;
}

public int TestParams(params int[] args)
{
return args == null ? 0 : args.Sum();
}

public int TestOptional(int opt = 1)
{
return opt;
}
}
}
94 changes: 7 additions & 87 deletions js.net.tests/Engine/JSNetEngineTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
using System;
using System.Diagnostics;
using System.Dynamic;
using System.Linq;
using js.net.Engine;
using Noesis.Javascript;
using js.net.Engine;
using NUnit.Framework;

namespace js.net.tests.Engine
Expand All @@ -15,86 +10,11 @@ protected override IEngine CreateEngine()
return new JSNetEngine();
}

[Test, Ignore("Known Memory Leak in js.net")] public void MemoryUsageTests()
{
MemoryUsageLoadInstance();
long mem = Process.GetCurrentProcess().PrivateMemorySize64;

for (int i = 0; i < 20; i++)
{
MemoryUsageLoadInstance();
}
GC.Collect();
decimal diffMBytes = Math.Round((Process.GetCurrentProcess().PrivateMemorySize64 - mem) / 1048576m, 2);
Assert.Less(diffMBytes, 1); // Allow 1 MB
}

private void MemoryUsageLoadInstance() {
using (JavascriptContext ctx = new JavascriptContext())
{
ctx.Run(
@"
buffer = [];
for (var i = 0; i < 100000; i++) {
buffer[i] = 'new string';
}
");
}
}

[Test, Ignore("Not supported")] public void TestCallbackIntoCSharp()
{
engine.SetGlobal("callbackHandler", this);
engine.Run("var retval; callbackHandler.methodWithCallback(function(val) { retval = val; });", "TestCallbackIntoCSharp");
Assert.AreEqual(10, engine.GetGlobal("retval"));
}

public void methodWithCallback(Action<int> action)
{
action(10);
}

[Test, Ignore("Not supported")] public void TestSetGlobalEmbedded()
{
engine.Run("var ns = {}; ns.class = {};", "TestSetGlobalEmbedded");
engine.SetGlobal("ns.class", this);
int add = (int) engine.Run("ns.class.TestAdd(1, 2);", "test");
Assert.AreEqual(3, add);
}

[Test, Ignore("Not supported")] public void TestDynamics()
{
dynamic d = new ExpandoObject();
d.Test = "Test String";
engine.SetGlobal("d", d);
Assert.AreEqual("Test String", engine.Run("d.Test", ""));
}

[Test, Ignore("Not supported")] public void TestCallingParams()
{
engine.SetGlobal("test", this);
Assert.AreEqual(0, engine.Run("test.TestParams();", ""));
}

[Test, Ignore("Not supported")] public void TestCallingOptionals()
{
engine.SetGlobal("test", this);
Assert.AreEqual(1, engine.Run("test.TestOptional();", ""));
}

public int TestAdd(int i1, int i2)
{
return i1 + i2;
}

public int TestParams(params int[] args)
{
return args == null ? 0 : args.Sum();
}

public int TestOptional(int opt = 1)
{
return opt;
}
[Test, Ignore("Known Memory Leak in JavaScript.Net")] public override void MemoryUsageTests() { base.MemoryUsageTests(); }
[Test, Ignore("Not supported in JavaScript.Net")] public override void TestCallbackIntoCSharp() { base.TestCallbackIntoCSharp(); }
[Test, Ignore("Not supported in JavaScript.Net")] public override void TestSetGlobalEmbedded() { base.TestSetGlobalEmbedded(); }
[Test, Ignore("Not supported in JavaScript.Net")] public override void TestDynamics() { base.TestDynamics(); }
[Test, Ignore("Not supported in JavaScript.Net")] public override void TestCallingParams() { base.TestCallingParams(); }
[Test, Ignore("Not supported in JavaScript.Net")] public override void TestCallingOptionals() { base.TestCallingOptionals(); }
}
}
21 changes: 21 additions & 0 deletions js.net.tests/Engine/JurassicEngineTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using js.net.Engine;
using NUnit.Framework;

namespace js.net.tests.Engine
{
[TestFixture] public class JurassicEngineTests : AbstractEngineTests
{
protected override IEngine CreateEngine()
{
return new JurassicEngine();
}

[Test, Ignore("Known limitation of Jurassic")] public override void MemoryUsageTests() { base.MemoryUsageTests(); }
[Test, Ignore("Known limitation of Jurassic")] public override void TestCallingOptionals() { base.TestCallingOptionals(); }
[Test, Ignore("Known limitation of Jurassic")] public override void TestCallingParams() { base.TestCallingParams(); }
[Test, Ignore("Known limitation of Jurassic")] public override void TestCallbackIntoCSharp() { base.TestCallbackIntoCSharp(); }
[Test, Ignore("Known limitation of Jurassic")] public override void TestDynamics() { base.TestDynamics(); }
[Test, Ignore("Known limitation of Jurassic")] public override void TestSetGlobalEmbedded() { base.TestSetGlobalEmbedded(); }
[Test, Ignore("Known limitation of Jurassic")] public override void TestSetGlobal() { base.TestSetGlobal(); }
}
}
2 changes: 1 addition & 1 deletion js.net.tests/FrameworkAdapters/ClosureAdapterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ [TestFixture] public class ClosureAdapterTests
private ITestAdapter ctx;
[SetUp] public void SetUp()
{
const string basejsfile = @"C:\dev\Projects\Misc\closure-library\closure\goog\base.js";
const string basejsfile = @"J:\dev\Projects\Misc\closure-library\closure\goog\base.js";

ctx = JSNet.ClosureLibrary(basejsfile);
}
Expand Down
6 changes: 3 additions & 3 deletions js.net.tests/TestAdapters/ClosureTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace js.net.tests.TestAdapters
{
[TestFixture] public class ClosureTests
{
const string basejsfile = @"C:\dev\Projects\Misc\closure-library\closure\goog\base.js";
const string basejsfile = @"J:\dev\Projects\Misc\closure-library\closure\goog\base.js";

[Test] public void RunJSFileTest()
{
Expand All @@ -25,7 +25,7 @@ [Test] public void RunHtmlFileTest()
{
using (ITestAdapter adapter = JSNet.ClosureLibrary(basejsfile))
{
ITestResults results = adapter.RunTest(@"C:\dev\Projects\Misc\closure-library\closure\goog\array\array_test.html");
ITestResults results = adapter.RunTest(@"J:\dev\Projects\Misc\closure-library\closure\goog\array\array_test.html");

Assert.AreEqual(0, results.Failed.Count(), results.ToString());
Assert.AreEqual(71, results.Passed.Count(), results.ToString());
Expand All @@ -44,7 +44,7 @@ [Test] public void RunHtmlFileTest()

private IEnumerable<string> GetTestSuiteFiles()
{
const string dir = @"C:\dev\Projects\Misc\closure-library\closure\goog\";
const string dir = @"J:\dev\Projects\Misc\closure-library\closure\goog\";
string[] allFiles = Directory.GetFiles(dir, "*_test.html", SearchOption.AllDirectories);
string[] ignore = new [] {"fontsizemonitor_test.html", "icontent_test.html", "abstractdialogplugin_test.html",
"linkdialogplugin_test.html", "crossdomainrpc_test.html", "positioning_test.html", "serializer_test.html",
Expand Down
4 changes: 2 additions & 2 deletions js.net.tests/TestAdapters/JSNetNunitFixtureTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
namespace js.net.tests.TestAdapters
{
[TestFixture] public class JSNetNunitFixtureTests : JSNetNUnitFixture {
private const string qUnitJS = @"C:\dev\libs\qunit\qunit\qunit.js";
private const string qUnitJS = @"J:\dev\libs\qunit\qunit\qunit.js";

public JSNetNunitFixtureTests() : base(JSNet.QUnitTestSuiteRunner(qUnitJS).TestFiles(new[] { @"C:\dev\libs\qunit\test\same.js" })) {}
public JSNetNunitFixtureTests() : base(JSNet.QUnitTestSuiteRunner(qUnitJS).TestFiles(new[] { @"J:\dev\libs\qunit\test\same.js" })) {}

[Test] public void JavaScriptTest([ValueSource("GetTestNames")] string testName) {
Assert.IsTrue(Passed(testName));
Expand Down
6 changes: 3 additions & 3 deletions js.net.tests/TestAdapters/JasmineTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ namespace js.net.tests.TestAdapters
{
[TestFixture] public class JasmineTests
{
private const string jasmineJsFile = @"C:\dev\libs\jasmine\lib\jasmine-1.0.2\jasmine.js";
private const string jasmineJsFile = @"J:\dev\libs\jasmine\lib\jasmine-1.0.2\jasmine.js";

[Test] public void RunFailingTests()
{
using (ITestAdapter adapter = JSNet.Jasmine(jasmineJsFile))
{
adapter.LoadSourceFile(@"C:\dev\libs\jasmine\src\Player.js");
ITestResults results = adapter.RunTest(@"C:\dev\libs\jasmine\spec\PlayerSpec.js");
adapter.LoadSourceFile(@"J:\dev\libs\jasmine\src\Player.js");
ITestResults results = adapter.RunTest(@"J:\dev\libs\jasmine\spec\PlayerSpec.js");

Assert.AreEqual(5, results.Failed.Count());
Assert.AreEqual(0, results.Passed.Count());
Expand Down
2 changes: 1 addition & 1 deletion js.net.tests/TestAdapters/JsCoverageTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace js.net.tests.TestAdapters
{
[TestFixture] public class JSCoverageTests
{
const string basejsfile = @"C:\dev\Projects\Misc\closure-library\closure\goog\base.js";
const string basejsfile = @"J:\dev\Projects\Misc\closure-library\closure\goog\base.js";

[Test] public void AssertThatTheClosureTestWorksWithoutAnyCoverageStuff()
{
Expand Down
Loading

0 comments on commit ffc2ae9

Please sign in to comment.