public void Add_requires_predicate()
        {
            var g = new Graph();
            var s = g.CreateBlankNode();
            var d = new DynamicNode(s);

            Assert.Throws <ArgumentNullException>(() =>
                                                  d.Add(null as string, null));
        }
        public void Add_requires_objects()
        {
            var g = new Graph();
            var s = g.CreateBlankNode();
            var p = "urn:p";
            var d = new DynamicNode(s);

            Assert.Throws <ArgumentNullException>(() =>
                                                  d.Add(p, null));
        }
예제 #3
0
        /// <summary>
        /// Asserts statements equivalent to the parameters.
        /// </summary>
        /// <param name="subject">The subject to assert.</param>
        /// <param name="predicateAndObjects">An object with public properties or a dictionary representing predicates and objects to assert.</param>
        /// <exception cref="ArgumentNullException">When <paramref name="subject"/> or <paramref name="predicateAndObjects"/> is null.</exception>
        /// <exception cref="InvalidOperationException">When <paramref name="predicateAndObjects"/> is a dictionary with keys other than <see cref="INode"/>, <see cref="Uri"/> or <see cref="string"/>.</exception>
        public void Add(INode subject, object predicateAndObjects)
        {
            if (subject is null)
            {
                throw new ArgumentNullException(nameof(subject));
            }

            if (predicateAndObjects is null)
            {
                throw new ArgumentNullException(nameof(predicateAndObjects));
            }

            // Make a copy of the key node local to this graph
            // so dynamic references are resolved correctly
            // (they depend on node's graph)
            // TODO: Which graph exactly are we copying into?
            var targetNode = new DynamicNode(subject.CopyNode(this._g), PredicateBaseUri);

            foreach (DictionaryEntry entry in ConvertToDictionary(predicateAndObjects))
            {
                switch (entry.Key)
                {
                case string stringKey:
                    targetNode.Add(stringKey, entry.Value);
                    break;

                case Uri uriKey:
                    targetNode.Add(uriKey, entry.Value);
                    break;

                case INode nodeKey:
                    targetNode.Add(nodeKey, entry.Value);
                    break;

                default:
                    throw new InvalidOperationException("Only INode, Uri and string keys are allowed.");
                }
            }
        }
        public void Add_handles_pairs()
        {
            var expected = new Graph();

            expected.LoadFromString(@"
<urn:s> <urn:p> ""o"" .
");

            var g = new Graph();
            var s = g.CreateUriNode(UriFactory.Create("urn:s"));
            var p = "urn:p";
            var d = new DynamicNode(s) as IDictionary <string, object>;

            d.Add(new KeyValuePair <string, object>(p, "o"));

            Assert.Equal(expected, g);
        }
        public void Add_handles_strings()
        {
            var expected = new Graph();

            expected.LoadFromString(@"
<urn:s> <urn:p> ""abc"" .
");

            var g = new Graph();
            var s = g.CreateUriNode(UriFactory.Create("urn:s"));
            var p = "urn:p";
            var d = new DynamicNode(s);

            d.Add(p, "abc");

            Assert.Equal(expected, g);
        }
        public void Add_handles_enumerables()
        {
            var expected = new Graph();

            expected.LoadFromString(@"
<urn:s> <urn:p> <urn:s> .
<urn:s> <urn:p> <urn:p> .
<urn:s> <urn:p> <urn:o> .
");

            var g = new Graph();
            var s = UriFactory.Create("urn:s");
            var p = UriFactory.Create("urn:p");
            var o = UriFactory.Create("urn:o");
            var d = new DynamicNode(g.CreateUriNode(s));

            d.Add(p.AbsoluteUri, new[] { s, p, o });

            Assert.Equal(expected, g);
        }
 /// <summary>
 /// Asserts statements equivalent to given subject and predicate and <paramref name="object"/>.
 /// </summary>
 /// <param name="object">The object to assert.</param>
 public void Add(object @object)
 {
     subject.Add(predicate, @object);
 }