|
@@ -69,12 +69,11 @@ public class RavenApiUsageTests
|
|
var obj = new JsObject(engine);
|
|
var obj = new JsObject(engine);
|
|
obj.FastSetDataProperty("name", "test");
|
|
obj.FastSetDataProperty("name", "test");
|
|
|
|
|
|
- var array1 = new JsArray(engine, new JsValue[]
|
|
|
|
- {
|
|
|
|
|
|
+ var array1 = new JsArray(engine, [
|
|
JsNumber.Create(1),
|
|
JsNumber.Create(1),
|
|
JsNumber.Create(2),
|
|
JsNumber.Create(2),
|
|
JsNumber.Create(3)
|
|
JsNumber.Create(3)
|
|
- });
|
|
|
|
|
|
+ ]);
|
|
engine.SetValue("array1", array1);
|
|
engine.SetValue("array1", array1);
|
|
|
|
|
|
TestArrayAccess(engine, array1, "array1");
|
|
TestArrayAccess(engine, array1, "array1");
|
|
@@ -86,7 +85,7 @@ public class RavenApiUsageTests
|
|
Assert.Equal(0, engine.Evaluate("emptyArray.length"));
|
|
Assert.Equal(0, engine.Evaluate("emptyArray.length"));
|
|
Assert.Equal(1, engine.Evaluate("emptyArray.push(1); return emptyArray.length"));
|
|
Assert.Equal(1, engine.Evaluate("emptyArray.push(1); return emptyArray.length"));
|
|
|
|
|
|
- engine.SetValue("emptyArray", new JsArray(engine, Array.Empty<JsValue>()));
|
|
|
|
|
|
+ engine.SetValue("emptyArray", new JsArray(engine, []));
|
|
Assert.Equal(0, engine.Evaluate("emptyArray.length"));
|
|
Assert.Equal(0, engine.Evaluate("emptyArray.length"));
|
|
Assert.Equal(1, engine.Evaluate("emptyArray.push(1); return emptyArray.length"));
|
|
Assert.Equal(1, engine.Evaluate("emptyArray.push(1); return emptyArray.length"));
|
|
|
|
|
|
@@ -100,7 +99,7 @@ public class RavenApiUsageTests
|
|
Assert.Equal(2, array.GetOwnProperty("1").Value);
|
|
Assert.Equal(2, array.GetOwnProperty("1").Value);
|
|
|
|
|
|
array.Push(4);
|
|
array.Push(4);
|
|
- array.Push(new JsValue[] { 5, 6 });
|
|
|
|
|
|
+ array.Push([5, 6]);
|
|
|
|
|
|
var i = 0;
|
|
var i = 0;
|
|
foreach (var entry in array.GetEntries())
|
|
foreach (var entry in array.GetEntries())
|
|
@@ -144,6 +143,8 @@ public class RavenApiUsageTests
|
|
var empty = new CustomString("");
|
|
var empty = new CustomString("");
|
|
engine.SetValue("empty", empty);
|
|
engine.SetValue("empty", empty);
|
|
|
|
|
|
|
|
+ engine.SetValue("x", new CustomString("x", allowMaterialize: true));
|
|
|
|
+
|
|
var obj = new JsObject(engine);
|
|
var obj = new JsObject(engine);
|
|
obj.Set("name", new CustomString("the name"));
|
|
obj.Set("name", new CustomString("the name"));
|
|
engine.SetValue("obj", obj);
|
|
engine.SetValue("obj", obj);
|
|
@@ -157,7 +158,7 @@ public class RavenApiUsageTests
|
|
Assert.True(engine.Evaluate("array.includes('2')").AsBoolean());
|
|
Assert.True(engine.Evaluate("array.includes('2')").AsBoolean());
|
|
Assert.True(engine.Evaluate("array.filter(x => x === '2').length > 0").AsBoolean());
|
|
Assert.True(engine.Evaluate("array.filter(x => x === '2').length > 0").AsBoolean());
|
|
|
|
|
|
- engine.SetValue("objArray", new JsArray(engine, new JsValue[] { obj, obj }));
|
|
|
|
|
|
+ engine.SetValue("objArray", new JsArray(engine, [obj, obj]));
|
|
Assert.True(engine.Evaluate("objArray.filter(x => x.name === 'the name').length === 2").AsBoolean());
|
|
Assert.True(engine.Evaluate("objArray.filter(x => x.name === 'the name').length === 2").AsBoolean());
|
|
|
|
|
|
Assert.Equal(9, engine.Evaluate("str.length"));
|
|
Assert.Equal(9, engine.Evaluate("str.length"));
|
|
@@ -174,6 +175,9 @@ public class RavenApiUsageTests
|
|
Assert.True(engine.Evaluate("empty.trim() === ''").AsBoolean());
|
|
Assert.True(engine.Evaluate("empty.trim() === ''").AsBoolean());
|
|
Assert.True(engine.Evaluate("empty.trimStart() === ''").AsBoolean());
|
|
Assert.True(engine.Evaluate("empty.trimStart() === ''").AsBoolean());
|
|
Assert.True(engine.Evaluate("empty.trimEnd() === ''").AsBoolean());
|
|
Assert.True(engine.Evaluate("empty.trimEnd() === ''").AsBoolean());
|
|
|
|
+
|
|
|
|
+ Assert.True(engine.Evaluate("str[1] === 'h'").AsBoolean());
|
|
|
|
+ Assert.True(engine.Evaluate("str[x] === undefined").AsBoolean());
|
|
}
|
|
}
|
|
|
|
|
|
[Fact]
|
|
[Fact]
|
|
@@ -203,16 +207,23 @@ public class RavenApiUsageTests
|
|
file sealed class CustomString : JsString
|
|
file sealed class CustomString : JsString
|
|
{
|
|
{
|
|
private readonly string _value;
|
|
private readonly string _value;
|
|
|
|
+ private readonly bool _allowMaterialize;
|
|
|
|
|
|
- public CustomString(string value) : base(null)
|
|
|
|
|
|
+ public CustomString(string value, bool allowMaterialize = false) : base(null)
|
|
{
|
|
{
|
|
_value = value;
|
|
_value = value;
|
|
|
|
+ _allowMaterialize = allowMaterialize;
|
|
}
|
|
}
|
|
|
|
|
|
public override string ToString()
|
|
public override string ToString()
|
|
{
|
|
{
|
|
- // when called we know that we couldn't use fast paths
|
|
|
|
- throw new InvalidOperationException("I don't want to be materialized!");
|
|
|
|
|
|
+ if (!_allowMaterialize)
|
|
|
|
+ {
|
|
|
|
+ // when called we know that we couldn't use fast paths
|
|
|
|
+ throw new InvalidOperationException("I don't want to be materialized!");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return _value;
|
|
}
|
|
}
|
|
|
|
|
|
public override char this[int index] => _value[index];
|
|
public override char this[int index] => _value[index];
|