public void Replace_a_property_value_with_a_new_value()
        {

            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer = new JsonPointer("/books/0/author");

            patchDocument.AddOperation(new ReplaceOperation() { Path = pointer, Value = new JValue("Bob Brown") });

            new JsonPatcher().Patch(ref sample, patchDocument);

            Assert.Equal("Bob Brown", (string)pointer.Find(sample));
        }
        public void Remove_a_property()
        {

            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer = new JsonPointer("/books/0/author");

            patchDocument.AddOperation(new RemoveOperation() { Path = pointer });

            new JsonPatcher().Patch(ref sample, patchDocument);

            Assert.Throws(typeof(ArgumentException), () => { pointer.Find(sample); });
        }
        protected override void Analyze(AnnotatedCodeLocation annotatedCodeLocation, string annotatedCodeLocationPointer)
        {
            var pointer = new JsonPointer(annotatedCodeLocationPointer);
            JToken token = pointer.Evaluate(Context.InputLogToken);

            if (token.HasProperty(SarifPropertyName.Importance))
            {
                if (!annotatedCodeLocationPointer.Contains(SarifPropertyName.CodeFlows))
                {
                    string importancePointer = annotatedCodeLocationPointer.AtProperty(SarifPropertyName.Importance);

                    LogResult(importancePointer, nameof(RuleResources.SARIF011_Default));
                }
            }
        }
        public void Replace_a_property_value_with_an_object()
        {

            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer = new JsonPointer("/books/0/author");

            patchDocument.AddOperation(new ReplaceOperation() { Path = pointer, Value = new JObject(new[] { new JProperty("hello", "world") }) });

            new JsonPatcher().Patch(ref sample, patchDocument);

            var newPointer = new JsonPointer("/books/0/author/hello");
            Assert.Equal("world", (string)newPointer.Find(sample));
        }
Beispiel #5
0
        public void Test_a_value()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer       = new JsonPointer("/books/0/author");

            patchDocument.AddOperation(new TestOperation()
            {
                Path = pointer, Value = new JValue("Billy Burton")
            });

            Assert.Throws(typeof(InvalidOperationException), () =>
            {
                patchDocument.ApplyTo(sample);
            });
        }
        public void Test_a_value()
        {

            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer = new JsonPointer("/books/0/author");

            patchDocument.AddOperation(new TestOperation() { Path = pointer, Value = new JValue("Billy Burton") });

            Assert.Throws(typeof(InvalidOperationException), () =>
            {
                var patcher = new JsonPatcher();
                patcher.Patch(ref sample, patchDocument);
            });

        }
        private JsonPatchResult _Copy(JsonValue json)
        {
            var results = JsonPointer.Parse(From).Evaluate(json);

            if (results.Error != null)
            {
                return(new JsonPatchResult(json, results.Error));
            }

            var(result, success) = JsonPointerFunctions.InsertValue(json, Path, results.Result);
            if (!success)
            {
                return(new JsonPatchResult(json, "Could not add the value"));
            }

            return(new JsonPatchResult(result));
        }
Beispiel #8
0
        public void Append_array_elements_wrongDataType()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer       = new JsonPointer("/books/");

            patchDocument.AddOperation(new AddEachOperation()
            {
                Path  = pointer,
                Value = new JObject(new[] { new JProperty("producer", "Kingston") })
            });

            Assert.Throws(typeof(ArgumentException), () => {
                patchDocument.ApplyTo(sample);
            });
        }
Beispiel #9
0
        protected override void Analyze(Region region, string regionPointer)
        {
            var jsonPointer = new JsonPointer(regionPointer);
            var regionToken = jsonPointer.Evaluate(Context.InputLogToken);

            if (regionToken.HasProperty(SarifPropertyName.EndLine) &&
                region.EndLine < region.StartLine)
            {
                string endLinePointer = regionPointer.AtProperty(SarifPropertyName.EndLine);

                LogResult(
                    endLinePointer,
                    nameof(RuleResources.SARIF012_Default),
                    region.EndLine.ToInvariantString(),
                    region.StartLine.ToInvariantString());
            }
        }
Beispiel #10
0
        public void Copy_property()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var frompointer = new JsonPointer("/books/0/ISBN");
            var topointer = new JsonPointer("/books/1/ISBN");

            patchDocument.AddOperation(new AddOperation() { Path = frompointer, Value = new JValue("21123123") });
            patchDocument.AddOperation(new CopyOperation() { FromPath = frompointer, Path = topointer });

            var patcher = new JsonPatcher();
            patcher.Patch(ref sample, patchDocument);

            var result = new JsonPointer("/books/1/ISBN").Find(sample);
            Assert.Equal("21123123", result);
        }
Beispiel #11
0
        private void RunTestCase(ParsingTestCase test, JsonPointerRepresentation format)
        {
            JsonPointer jPointer = null;

            Action action = () => jPointer = new JsonPointer(test.Value, format);

            if (test.Valid)
            {
                action.Should().NotThrow();
                jPointer.ReferenceTokens.Should().ContainInOrder(test.ReferenceTokens);
                jPointer.ReferenceTokens.Length.Should().Be(test.ReferenceTokens.Length);
            }
            else
            {
                action.Should().Throw <ArgumentException>();
            }
        }
Beispiel #12
0
        public void Constructor_TemplateExists_ShouldSetCorrectValues()
        {
            // Arrange
            JsonSchemaKeywords.RegisterXsdKeywords();

            var expectedId = "https://dev.altinn.studio/org/repository/app/model/model.schema.json";

            // Act
            var actualJsonTemplate = new GeneralJsonTemplate(new Uri(expectedId), "model");

            // Assert
            JsonSchema jsonSchema = JsonSchema.FromText(actualJsonTemplate.GetJsonString());
            var        idKeyword  = jsonSchema.GetKeyword <IdKeyword>();

            idKeyword.Id.Should().Be(expectedId);
            var messageType = jsonSchema.FollowReference(JsonPointer.Parse("#/$defs/model")).Should().NotBeNull();
        }
        protected override void Analyze(Region region, string regionPointer)
        {
            var jsonPointer = new JsonPointer(regionPointer);
            var regionToken = jsonPointer.Evaluate(Context.InputLogToken);

            if (regionToken.HasProperty(SarifPropertyName.EndLine) &&
                region.EndLine < region.StartLine)
            {
                string endLinePointer = regionPointer.AtProperty(SarifPropertyName.EndLine);

                LogResult(
                    endLinePointer,
                    nameof(RuleResources.SARIF012_Default),
                    region.EndLine.ToInvariantString(),
                    region.StartLine.ToInvariantString());
            }
        }
Beispiel #14
0
        protected override void Analyze(Region region, string regionPointer)
        {
            var    jsonPointer = new JsonPointer(regionPointer);
            JToken regionToken = jsonPointer.Evaluate(Context.InputLogToken);

            if (!region.IsBinaryRegion &&
                !region.IsLineColumnBasedTextRegion &&
                !region.IsOffsetBasedTextRegion)
            {
                // {0}: This 'region' object does not specify 'startLine', 'charOffset', or 'byteOffset'.
                // As a result, it is impossible to determine whether this 'region' object describes
                // a line/column text region, a character offset/length text region, or a binary region.
                LogResult(
                    regionPointer,
                    nameof(RuleResources.SARIF1007_RegionPropertiesMustBeConsistent_Error_RegionStartPropertyMustBePresent_Text));
            }

            if (regionToken.HasProperty(SarifPropertyName.EndLine) &&
                region.EndLine < region.StartLine)
            {
                string endLinePointer = regionPointer.AtProperty(SarifPropertyName.EndLine);

                // {0}: In this 'region' object, the 'endLine' property '{1}' is less than the 'startLine'
                // property '{2}'. The properties of a 'region' object must be internally consistent.
                LogResult(
                    endLinePointer,
                    nameof(RuleResources.SARIF1007_RegionPropertiesMustBeConsistent_Error_EndLineMustNotPrecedeStartLine_Text),
                    region.EndLine.ToInvariantString(),
                    region.StartLine.ToInvariantString());
            }

            if (RegionIsOnOneLine(region, regionToken) &&
                regionToken.HasProperty(SarifPropertyName.EndColumn) &&
                region.EndColumn < region.StartColumn)
            {
                string endColumnPointer = regionPointer.AtProperty(SarifPropertyName.EndColumn);

                // {0}: In this 'region' object, the 'endColumn' property '{1}' is less than the 'startColumn'
                // property '{2}'. The properties of a 'region' object must be internally consistent.
                LogResult(
                    endColumnPointer,
                    nameof(RuleResources.SARIF1007_RegionPropertiesMustBeConsistent_Error_EndColumnMustNotPrecedeStartColumn_Text),
                    region.EndColumn.ToInvariantString(),
                    region.StartColumn.ToInvariantString());
            }
        }
Beispiel #15
0
        /// <summary>
        /// Creates a new parameter <see cref="OasFieldExpression"/>.
        /// </summary>
        /// <param name="expressionType">
        ///     The expression type. This must be <see cref="OasFieldExpressionType.Request"/> or <see cref="OasFieldExpressionType.Response"/>.
        /// </param>
        /// <param name="pointer">
        ///     The JSON pointer.
        /// </param>
        public OasFieldExpression(OasFieldExpressionType expressionType, JsonPointer pointer)
        {
            switch (expressionType)
            {
            case OasFieldExpressionType.Request:
            case OasFieldExpressionType.Response:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(expressionType));
            }

            ExpressionType   = expressionType;
            ExpressionSource = OasFieldExpressionSource.Body;
            Name             = null;
            Pointer          = pointer;
        }
Beispiel #16
0
        public void Move_array_element()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var frompointer = new JsonPointer("/books/1");
            var topointer = new JsonPointer("/books/0/child");

            patchDocument.AddOperation(new MoveOperation() { FromPath = frompointer, Path = topointer });

            var patcher = new JsonPatcher();
            patcher.Patch(ref sample, patchDocument);


            var result = topointer.Find(sample);
            Assert.IsType(typeof(JObject), result);
        }
Beispiel #17
0
        public void Move_property()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var frompointer = new JsonPointer("/books/0/author");
            var topointer = new JsonPointer("/books/1/author");

            patchDocument.AddOperation(new MoveOperation() { FromPath = frompointer, Path = topointer });

            var patcher = new JsonPatcher();
            patcher.Patch(ref sample, patchDocument);


            var result = (string)topointer.Find(sample);
            Assert.Equal("F. Scott Fitzgerald", result);
        }
        private static IOpenApiReferenceable ResolveReferenceOnParameterElement(
            OpenApiParameter parameterElement,
            string propertyName,
            string mapKey,
            JsonPointer pointer)
        {
            switch (propertyName)
            {
            case OpenApiConstants.Schema:
                return(parameterElement.Schema);

            case OpenApiConstants.Examples when mapKey != null:
                return(parameterElement.Examples[mapKey]);

            default:
                throw new OpenApiException(string.Format(SRResource.InvalidReferenceId, pointer));
            }
        }
Beispiel #19
0
        public void Add_an_array_element()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer       = new JsonPointer("/books");

            patchDocument.AddOperation(new AddOperation()
            {
                Path = pointer, Value = new JObject(new[] { new JProperty("author", "James Brown") })
            });

            patchDocument.ApplyTo(sample);

            var list = sample["books"] as JArray;

            Assert.Equal(3, list.Count);
        }
Beispiel #20
0
        public override JsonElement Apply(JsonElement data)
        {
            var expected = _components.SelectMany(c => c.Apply(data).Flatten())
                           .Where(e => e.ValueKind == JsonValueKind.String);

            if (data.ValueKind != JsonValueKind.Object)
            {
                return(expected.AsJsonElement());
            }

            var paths = expected.Select(e => e.GetString())
                        .Select(p => new { Path = p, Pointer = JsonPointer.Parse(p == string.Empty ? "" : $"/{p.Replace('.', '/')}") })
                        .Select(p => new { Path = p.Path, Value = p.Pointer.Evaluate(data) });

            return(paths.Where(p => p.Value == null)
                   .Select(k => k.Path.AsJsonElement())
                   .AsJsonElement());
        }
Beispiel #21
0
        public void Replace_a_property_value_with_an_object()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer       = new JsonPointer("/books/0/author");

            patchDocument.AddOperation(new ReplaceOperation()
            {
                Path = pointer, Value = new JObject(new[] { new JProperty("hello", "world") })
            });

            patchDocument.ApplyTo(new JsonNetTargetAdapter(sample));

            var newPointer = new JsonPointer("/books/0/author/hello");

            Assert.Equal("world", (string)newPointer.Find(sample));
        }
Beispiel #22
0
        /// <summary>
        /// Creates a new simple <see cref="OasFieldExpression"/>.
        /// </summary>
        /// <param name="expressionType">
        ///     The expression type. This must be <see cref="OasFieldExpressionType.Url"/>, <see cref="OasFieldExpressionType.Method"/>
        ///     or <see cref="OasFieldExpressionType.StatusCode"/>.
        /// </param>
        public OasFieldExpression(OasFieldExpressionType expressionType)
        {
            switch (expressionType)
            {
            case OasFieldExpressionType.Url:
            case OasFieldExpressionType.Method:
            case OasFieldExpressionType.StatusCode:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(expressionType));
            }

            ExpressionType   = expressionType;
            ExpressionSource = OasFieldExpressionSource.None;
            Name             = null;
            Pointer          = default;
        }
Beispiel #23
0
        protected override void Analyze(Region region, string regionPointer)
        {
            var    jsonPointer = new JsonPointer(regionPointer);
            JToken regionToken = jsonPointer.Evaluate(Context.InputLogToken);

            if (RegionIsOnOneLine(region, regionToken) &&
                regionToken.HasProperty(SarifPropertyName.EndColumn) &&
                region.EndColumn < region.StartColumn)
            {
                string endColumnPointer = regionPointer.AtProperty(SarifPropertyName.EndColumn);

                LogResult(
                    endColumnPointer,
                    nameof(RuleResources.SARIF1013_Default),
                    region.EndColumn.ToInvariantString(),
                    region.StartColumn.ToInvariantString());
            }
        }
        public void TestRemoveArrayElement()
        {
            using var doc = JsonDocument.Parse(@"{ ""foo"": [ ""bar"", ""qux"", ""baz"" ] }");

            using var expected = JsonDocument.Parse(@"{ ""foo"": [ ""bar"", ""baz"" ] }");

            var documentBuilder = new JsonDocumentBuilder(doc.RootElement);

            JsonPointer location;

            Assert.IsTrue(JsonPointer.TryParse(@"/foo/1", out location));

            Assert.IsTrue(location.TryRemove(ref documentBuilder));
            JsonDocument result = documentBuilder.ToJsonDocument();

            JsonElementEqualityComparer.Instance.Equals(expected.RootElement,
                                                        result.RootElement);
        }
        private static IOpenApiReferenceable ResolveReferenceOnResponseElement(
            OpenApiResponse responseElement,
            string propertyName,
            string mapKey,
            JsonPointer pointer)
        {
            switch (propertyName)
            {
            case OpenApiConstants.Headers when mapKey != null:
                return(responseElement.Headers[mapKey]);

            case OpenApiConstants.Links when mapKey != null:
                return(responseElement.Links[mapKey]);

            default:
                throw new OpenApiException(string.Format(SRResource.InvalidReferenceId, pointer));
            }
        }
Beispiel #26
0
        public async Task Analyze_SimpleContent_Restriction(string path)
        {
            JsonSchemaKeywords.RegisterXsdKeywords();

            var schema = await ResourceHelpers.LoadJsonSchemaTestData(path);

            var analyzer = new SeresJsonSchemaAnalyzer();

            var metadata = analyzer.AnalyzeSchema(schema, new Uri("dummy", UriKind.Relative));

            metadata.GetCompatibleTypes(JsonPointer.Parse("#/$defs/ageType")).Should().Contain(CompatibleXsdType.SimpleType);
            metadata.GetCompatibleTypes(JsonPointer.Parse("#/$defs/limitedAgeType")).Should().Contain(CompatibleXsdType.SimpleTypeRestriction);
            metadata.GetCompatibleTypes(JsonPointer.Parse("#/$defs/genderType")).Should().Contain(CompatibleXsdType.SimpleType);
            metadata.GetCompatibleTypes(JsonPointer.Parse("#/$defs/limitedGenderType")).Should().Contain(CompatibleXsdType.SimpleTypeRestriction);
            metadata.GetCompatibleTypes(JsonPointer.Parse("#/$defs/person")).Should().Contain(CompatibleXsdType.SimpleContentExtension);
            metadata.GetCompatibleTypes(JsonPointer.Parse("#/$defs/limitedPerson")).Should().Contain(CompatibleXsdType.SimpleContentRestriction);
            metadata.GetCompatibleTypes(JsonPointer.Parse("#/$defs/limitedPerson-inline")).Should().Contain(CompatibleXsdType.SimpleContentRestriction);
        }
        public void GetWithRefTest()
        {
            using var doc = JsonDocument.Parse(@"{""foo"": [""bar"", ""baz""]}");

            var         root = doc.RootElement;
            JsonPointer pointer;

            Assert.IsTrue(JsonPointer.TryParse("/foo/0", out pointer));
            JsonElement value;

            Assert.IsTrue(pointer.TryGetValue(root, out value));

            var comparer = JsonElementEqualityComparer.Instance;

            var expected = root.GetProperty("foo")[0];

            Assert.IsTrue(comparer.Equals(value, expected));
        }
        public void ValidateReturnsValidOnUnknownFormat()
        {
            JsonSchemaOptions.OutputFormat = SchemaValidationOutputFormat.Detailed;
            var schema   = new JsonSchema().Type(JsonSchemaType.String).Format(StringFormat.GetFormat("Int32"));
            var json     = (JsonValue)"32";
            var expected = new SchemaValidationResults
            {
                IsValid          = true,
                RelativeLocation = JsonPointer.Parse("#/format"),
                InstanceLocation = JsonPointer.Parse("#"),
                Keyword          = "format",
                AnnotationValue  = "Int32"
            };

            var results = schema.Validate(json);

            results.AssertValid(expected);
        }
Beispiel #29
0
        public void Add_an_non_existing_member_property()  // Why isn't this replace?
        {

            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer = new JsonPointer("/books/0/ISBN");

            patchDocument.AddOperation(new AddOperation() { Path = pointer, Value = new JValue("213324234343") });

            var patcher = new JsonPatcher();
            patcher.Patch(ref sample, patchDocument);


            var result = (string)pointer.Find(sample);
            Assert.Equal("213324234343", result);

        }
Beispiel #30
0
        private JToken GetSpecifiedToken(CommonOptions options)
        {
            string pointer = GetSpecifiedPointer(options.JsonPointer);

            JToken token;

            if (pointer == PointerSegmentSeparator)
            {
                token = _rootToken;
            }
            else
            {
                var jPointer = new JsonPointer(pointer);
                token = jPointer.Evaluate(_rootToken);
            }

            return(token);
        }
Beispiel #31
0
        public void Add_an_array_element()
        {

            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer = new JsonPointer("/books");

            patchDocument.AddOperation(new AddOperation() { Path = pointer, Value = new JObject(new[] { new JProperty("author", "James Brown") }) });

            var patcher = new JsonPatcher();
            patcher.Patch(ref sample, patchDocument);

            var list = sample["books"] as JArray;

            Assert.Equal(3, list.Count);

        }
Beispiel #32
0
        public async Task IsValidComplexType_ComplexType_ShouldReturnTrue(string path, string jsonPointer, string testCase)
        {
            _testOutputHelper.WriteLine($"{testCase}");

            var schema = await ResourceHelpers.LoadJsonSchemaTestData(path);

            var normalizer       = new JsonSchemaNormalizer();
            var normalizedSchema = normalizer.Normalize(schema);
            var json             = JsonSerializer.Serialize(normalizedSchema, new JsonSerializerOptions {
                WriteIndented = true
            });

            var analyzer = new SeresJsonSchemaAnalyzer();

            var results = analyzer.AnalyzeSchema(schema, new Uri("dummy", UriKind.Relative));

            results.GetCompatibleTypes(JsonPointer.Parse(jsonPointer)).Should().Contain(CompatibleXsdType.ComplexType);
        }
Beispiel #33
0
        private Region GetRegionFromJPointer(string jPointer)
        {
            JsonPointer   jsonPointer = new JsonPointer(jPointer);
            JToken        jToken      = jsonPointer.Evaluate(Context.InputLogToken);
            IJsonLineInfo lineInfo    = jToken;

            Region region = null;

            if (lineInfo.HasLineInfo())
            {
                region = new Region
                {
                    StartLine   = lineInfo.LineNumber,
                    StartColumn = lineInfo.LinePosition
                };
            }

            return(region);
        }
Beispiel #34
0
        public void Remove_an_array_element()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer       = new JsonPointer("/books/0");

            patchDocument.AddOperation(new RemoveOperation()
            {
                Path = pointer
            });

            patchDocument.ApplyTo(sample);

            Assert.Throws(typeof(ArgumentException), () =>
            {
                var x = pointer.Find("/books/1");
            });
        }
        internal (JsonSchema, Uri) FindSubschema(JsonPointer pointer, Uri currentUri)
        {
            IRefResolvable resolvable = this;

            for (var i = 0; i < pointer.Segments.Length; i++)
            {
                var segment       = pointer.Segments[i];
                var newResolvable = resolvable.ResolvePointerSegment(segment.Value);
                if (newResolvable == null)
                {
                    // TODO: document that this process does not consider `$id` in extraneous data
                    if (resolvable is JsonSchema subSchema &&
                        subSchema.OtherData != null &&
                        subSchema.OtherData.TryGetValue(segment.Value, out var element))
                    {
                        var newPointer = JsonPointer.Create(pointer.Segments.Skip(i + 1), true);
                        var value      = newPointer.Evaluate(element);
                        var asSchema   = FromText(value.ToString());
                        return(asSchema, currentUri);
                    }

                    return(null, currentUri);
                }

                if (newResolvable is JsonSchema schema && schema.Keywords != null)
                {
                    var idKeyword = schema.Keywords.OfType <IdKeyword>().SingleOrDefault();
                    if (idKeyword != null && i != pointer.Segments.Length - 1)
                    {
                        currentUri = idKeyword.UpdateUri(currentUri);
                    }
                }

                resolvable = newResolvable;
            }

            if (!(resolvable is JsonSchema))
            {
                resolvable = resolvable.ResolvePointerSegment(null);
            }

            return(resolvable as JsonSchema, currentUri);
        }
        protected override void Analyze(AnnotatedCodeLocation annotatedCodeLocation, string annotatedCodeLocationPointer)
        {
            var    pointer = new JsonPointer(annotatedCodeLocationPointer);
            JToken token   = pointer.Evaluate(Context.InputLogToken);

            if (token.HasProperty(SarifPropertyName.Essential))
            {
                string essentialPointer = annotatedCodeLocationPointer.AtProperty(SarifPropertyName.Essential);

                // Emit a different warning depending on whether or not this annotatedCodeLocation
                // occurs in a codeFlow, because the "importance" property is only meaningful within
                // a codeFlow.
                string formatId = annotatedCodeLocationPointer.Contains(SarifPropertyName.CodeFlows)
                    ? nameof(RuleResources.SARIF005_Default)
                    : nameof(RuleResources.SARIF005_OnlyInCodeFlow);

                LogResult(essentialPointer, formatId);
            }
        }
Beispiel #37
0
        public void Copy_array_element()
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var frompointer   = new JsonPointer("/books/0");
            var topointer     = new JsonPointer("/books/-");

            patchDocument.AddOperation(new CopyOperation()
            {
                FromPath = frompointer, Path = topointer
            });

            patchDocument.ApplyTo(sample);

            var result = new JsonPointer("/books/2").Find(sample);

            Assert.IsType(typeof(JObject), result);
        }
        public void Remove_an_array_element()
        {

            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer = new JsonPointer("/books/0");

            patchDocument.AddOperation(new RemoveOperation() { Path = pointer });

            var patcher = new JsonPatcher();
            patcher.Patch(ref sample, patchDocument);

            Assert.Throws(typeof(ArgumentException), () =>
            {
                var x = pointer.Find("/books/1");
            });

        }
Beispiel #39
0
        public void RunEvaluationTests(EvaluationTestCase test)
        {
            JsonPointer jPointer      = new JsonPointer(test.Pointer);
            JToken      documentToken = JToken.Parse(test.Document);
            JToken      actualResult  = null;

            Action action = () => actualResult = jPointer.Evaluate(documentToken);

            if (test.Valid)
            {
                action.Should().NotThrow();
                JToken expectedResult = JToken.Parse(test.Result);
                s_comparer.Equals(expectedResult, actualResult).Should().BeTrue();
            }
            else
            {
                action.Should().Throw <ArgumentException>().WithMessage($"*{test.Pointer}*");
            }
        }
        protected override void Analyze(AnnotatedCodeLocation annotatedCodeLocation, string annotatedCodeLocationPointer)
        {
            var pointer = new JsonPointer(annotatedCodeLocationPointer);
            JToken token = pointer.Evaluate(Context.InputLogToken);

            if (token.HasProperty(SarifPropertyName.Essential))
            {
                string essentialPointer = annotatedCodeLocationPointer.AtProperty(SarifPropertyName.Essential);

                // Emit a different warning depending on whether or not this annotatedCodeLocation
                // occurs in a codeFlow, because the "importance" property is only meaningful within
                // a codeFlow.
                string formatId = annotatedCodeLocationPointer.Contains(SarifPropertyName.CodeFlows)
                    ? nameof(RuleResources.SARIF005_Default)
                    : nameof(RuleResources.SARIF005_OnlyInCodeFlow);

                LogResult(essentialPointer, formatId);
            }
        }
Beispiel #41
0
        public override async Task ExecuteAsync(SetMaintenancePacket setMaintenancePacket, ClientSession session)
        {
            var servers = (await _channelHttpClient.GetChannelsAsync().ConfigureAwait(false))
                          ?.Where(c => c.Type == ServerType.WorldServer).ToList();

            var patch = new JsonPatch(PatchOperation.Replace(JsonPointer.Create <ChannelInfo>(o => o.IsMaintenance), setMaintenancePacket.MaintenanceMode.AsJsonElement()));

            if (setMaintenancePacket.IsGlobal == false)
            {
                await _channelHttpClient.PatchAsync(_channel.ChannelId, patch);
            }
            else
            {
                foreach (var server in servers ?? new List <ChannelInfo>())
                {
                    await _channelHttpClient.PatchAsync(server.Id, patch);
                }
            }
        }
Beispiel #42
0
        public override JsonElement Apply(JsonElement data)
        {
            if (_path == null)
            {
                return(data);
            }

            var path       = _path.Apply(data);
            var pathString = path.Stringify() !;
            var pointer    = JsonPointer.Parse(pathString == string.Empty ? "" : $"/{pathString.Replace('.', '/')}");
            var pathEval   = pointer.Evaluate(data);

            if (pathEval != null)
            {
                return(pathEval.Value);
            }

            return(_defaultValue?.Apply(data) ?? ((string?)null).AsJsonElement());
        }
Beispiel #43
0
        public void Add_an_non_existing_member_property()  // Why isn't this replace?
        {
            var sample = PatchTests.GetSample2();

            var patchDocument = new PatchDocument();
            var pointer       = new JsonPointer("/books/0/ISBN");

            patchDocument.AddOperation(new AddOperation()
            {
                Path = pointer, Value = new JValue("213324234343")
            });

            patchDocument.ApplyTo(sample);


            var result = (string)pointer.Find(sample);

            Assert.Equal("213324234343", result);
        }
        protected override void Analyze(CodeFlow codeFlow, string codeFlowPointer)
        {
            var pointer = new JsonPointer(codeFlowPointer);
            JToken codeFlowToken = pointer.Evaluate(Context.InputLogToken);

            JProperty locationsProperty = codeFlowToken.Children<JProperty>()
                .FirstOrDefault(prop => prop.Name.Equals(SarifPropertyName.Locations, StringComparison.Ordinal));
            if (locationsProperty != null)
            {
                JArray annotatedCodeLocationArray = locationsProperty.Value as JArray;
                string annotatedCodeLocationsPointer = codeFlowPointer.AtProperty(SarifPropertyName.Locations);

                ReportMissingStepProperty(
                    annotatedCodeLocationArray,
                    annotatedCodeLocationsPointer);

                ReportInvalidStepValues(
                    codeFlow.Locations.ToArray(),
                    annotatedCodeLocationArray,
                    annotatedCodeLocationsPointer);
            }
        }