public override JsonElement Execute(JsonElement input)
        {
            input = ExecutedOn.Execute(input);

            if (input.ValueKind != JsonValueKind.Array)
            {
                return(JsonElementFactory.CreateNull());
            }

            List <JsonElement> array = input.EnumerateArray().ToList();

            if (IsAllArrayElemets)
            {
                return(input);
            }

            if (ExactElementsAccess != null && ExactElementsAccess.Any())
            {
                IEnumerable <JsonElement> res = array.GetByIndexes(ExactElementsAccess);
                return(JsonElementFactory.CreateArray(res));
            }

            List <JsonElement> result = array.GetSlice(SliceStart, SliceEnd, SliceStep);

            return(JsonElementFactory.CreateArray(result));
        }
        public void DifferentTypes_ReturnsFalse()
        {
            JsonElement n1 = JsonElementFactory.CreateBool(true);
            JsonElement n2 = JsonElementFactory.CreateArray(new List <object> {
                1, "abc", 3
            });
            bool result = JsonElementEqualityComparer.Default.Equals(n1, n2);

            Assert.False(result);
        }
        public void SameArrays_ReturnsTrue()
        {
            JsonElement n1 = JsonElementFactory.CreateArray(new List <object> {
                1, "abc", false
            });
            JsonElement n2 = JsonElementFactory.CreateArray(new List <object> {
                1, "abc", false
            });
            bool result = JsonElementEqualityComparer.Default.Equals(n1, n2);

            Assert.True(result);
        }
        public override JsonElement Execute(JsonElement input)
        {
            JsonElement result = JsonElementFactory.CreateNull();

            if (PropertyChain.Length == 0)
            {
                result = input;
            }

            foreach (string p in PropertyChain)
            {
                if (p == "length" && input.TryGetArrayOrStringLength(out int length))
                {
                    result = JsonElementFactory.CreateNumber(length);
                }
                else if (input.ValueKind == JsonValueKind.Object && input.TryGetProperty(p, out JsonElement t))
                {
                    result = t;
                    input  = t;
                }
                else
                {
                    return(JsonElementFactory.CreateNull());
                }
            }

            if (IsWhildcard)
            {
                JsonElement[] resultArray = new JsonElement[0];
                if (result.ValueKind == JsonValueKind.Object)
                {
                    resultArray = result.EnumerateObject().Select(x => x.Value).ToArray();
                }
                else if (result.ValueKind == JsonValueKind.Array)
                {
                    return(result);
                }

                return(JsonElementFactory.CreateArray(resultArray));
            }

            if (IsRecursive)
            {
                return(JsonElementFactory.CreateArray(result.EnumerateRecursively()));
            }

            return(result);
        }