From d4d72523e0b9e6fe4c02f2603d814425e5983642 Mon Sep 17 00:00:00 2001 From: Kenneth Pouncey Date: Mon, 6 Jul 2020 12:03:33 +0200 Subject: [PATCH] [browser][wasm][tests] Add tests for javascript Array --- ...me.InteropServices.JavaScript.Tests.csproj | 1 + .../InteropServices/JavaScript/ArrayTests.cs | 175 ++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 src/libraries/System.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/ArrayTests.cs diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.Tests.csproj b/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.Tests.csproj index 637229871d2853..e0feae33ae5f9f 100644 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.Tests.csproj +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.Tests.csproj @@ -11,5 +11,6 @@ + \ No newline at end of file diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/ArrayTests.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/ArrayTests.cs new file mode 100644 index 00000000000000..537e8b6f91c371 --- /dev/null +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/ArrayTests.cs @@ -0,0 +1,175 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; +using System.Runtime.InteropServices.JavaScript; +using Xunit; + +namespace System.Runtime.InteropServices.JavaScript.Tests +{ + public static class ArrayTests + { + [Fact] + public static void ArrayLength() + { + Array d = new Array(); + Assert.Equal(0, d.Length); + } + + [Fact] + public static void ArrayLength1() + { + Array d = new Array(50); + Assert.Equal(50, d.Length); + } + + [Fact] + public static void Array_GetSetItem() + { + var jsArray = new Array(7, 8, 9, 10, 11, 12, 13); + IList iList = new int[] { 7, 8, 9, 10, 11, 12, 13 }; + + Assert.Equal(jsArray.Length, iList.Count); + for (int i = 0; i < iList.Count; i++) + { + Assert.Equal(jsArray[i], iList[i]); + + iList[i] = 99; + jsArray[i] = 99; + Assert.Equal(99, iList[i]); + Assert.Equal(99, jsArray[i]); + } + } + + [Fact] + public static void Array_GetSetItemInvalid() + { + var jsArray = new Array(7, 8, 9, 10, 11, 12, 13); + Assert.Null(jsArray[-1]); + Assert.Null(jsArray[jsArray.Length]); + Assert.Equal(0, jsArray[-1] = 0); + Assert.Equal(0, jsArray[jsArray.Length] = 0); + } + + [Fact] + public static void Array_GetItemIndex() + { + var jsArray = new Array(7, 8, 9, 10, 11, 12, 13); + Assert.Equal(7, jsArray[0]); + Assert.Equal(8, jsArray[1]); + Assert.Equal(9, jsArray[2]); + Assert.Equal(10, jsArray[3]); + Assert.Equal(11, jsArray[4]); + Assert.Equal(12, jsArray[5]); + Assert.Equal(13, jsArray[6]); + } + + [Fact] + public static void Array_GetSetItemIndex() + { + var jsArray = new Array(7, 8, 9, 10, 11, 12, 13); + for (int d = 0; d < jsArray.Length; d++) + { + jsArray[d] = (int)jsArray[d] + 1; + } + Assert.Equal(8, jsArray[0]); + Assert.Equal(9, jsArray[1]); + Assert.Equal(10, jsArray[2]); + Assert.Equal(11, jsArray[3]); + Assert.Equal(12, jsArray[4]); + Assert.Equal(13, jsArray[5]); + Assert.Equal(14, jsArray[6]); + } + + [Fact] + public static void Array_Pop() + { + var jsArray = new Array(7, 8, 9, 10, 11, 12, 13); + Assert.Equal(13, jsArray.Pop()); + Assert.Equal(12, jsArray.Pop()); + Assert.Equal(11, jsArray.Pop()); + Assert.Equal(10, jsArray.Pop()); + Assert.Equal(9, jsArray.Pop()); + Assert.Equal(8, jsArray.Pop()); + Assert.Equal(7, jsArray.Pop()); + Assert.Equal(0, jsArray.Length); + } + + [Fact] + public static void Array_PushPop() + { + var objArray = new object[] { "test7", "test8", "test9", "test10", "test11", "test12", "test13" }; + var jsArray = new Array(); + for (int d = 0; d < objArray.Length; d++) + { + jsArray.Push(objArray[d]); + } + Assert.Equal("test13", jsArray.Pop()); + Assert.Equal("test12", jsArray.Pop()); + Assert.Equal("test11", jsArray.Pop()); + Assert.Equal("test10", jsArray.Pop()); + Assert.Equal("test9", jsArray.Pop()); + Assert.Equal("test8", jsArray.Pop()); + Assert.Equal("test7", jsArray.Pop()); + Assert.Equal(0, jsArray.Length); + } + + [Fact] + public static void Array_PushShift() + { + var objArray = new object[] { "test7", "test8", "test9", "test10", "test11", "test12", "test13" }; + var jsArray = new Array(); + for (int d = 0; d < objArray.Length; d++) + { + jsArray.Push(objArray[d]); + } + Assert.Equal("test7", jsArray.Shift()); + Assert.Equal("test8", jsArray.Shift()); + Assert.Equal("test9", jsArray.Shift()); + Assert.Equal("test10", jsArray.Shift()); + Assert.Equal("test11", jsArray.Shift()); + Assert.Equal("test12", jsArray.Shift()); + Assert.Equal("test13", jsArray.Shift()); + Assert.Equal(0, jsArray.Length); + } + + [Fact] + public static void Array_UnShiftShift() + { + var objArray = new object[] { "test7", "test8", "test9", "test10", "test11", "test12", "test13" }; + var jsArray = new Array(); + for (int d = 0; d < objArray.Length; d++) + { + Assert.Equal(d + 1, jsArray.UnShift(objArray[d])); + } + Assert.Equal("test13", jsArray.Shift()); + Assert.Equal("test12", jsArray.Shift()); + Assert.Equal("test11", jsArray.Shift()); + Assert.Equal("test10", jsArray.Shift()); + Assert.Equal("test9", jsArray.Shift()); + Assert.Equal("test8", jsArray.Shift()); + Assert.Equal("test7", jsArray.Shift()); + Assert.Equal(0, jsArray.Length); + } + + [Fact] + public static void Array_IndexOf() + { + var beasts = new Array("ant", "bison", "camel", "duck", "bison"); + Assert.Equal(1, beasts.IndexOf("bison")); + Assert.Equal(4, beasts.IndexOf("bison", 2)); + Assert.Equal(-1, beasts.IndexOf("giraffe")); + } + + [Fact] + public static void Array_LastIndexOf() + { + var beasts = new Array("Dodo", "Tiger", "Penguin", "Dodo"); + Assert.Equal(3, beasts.LastIndexOf("Dodo")); + Assert.Equal(1, beasts.LastIndexOf("Tiger")); + Assert.Equal(0, beasts.LastIndexOf("Dodo", 2)); // The array is searched backwards + Assert.Equal(-1, beasts.LastIndexOf("giraffe")); + } + } +}