示例#1
0
            public void ConvertStringEnumerableToIntArray()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary();
                MetadataStack      metadata        = new MetadataStack(initialMetadata);

                // When
                metadata = metadata.Clone(new[] { new KeyValuePair <string, object>("A", new List <string> {
                        "1", "2", "3"
                    }) });
                IMetadata <int[]> metadataAs = metadata.MetadataAs <int[]>();

                // Then
                CollectionAssert.AreEqual(new string[] { "1", "2", "3" }, (IEnumerable)metadata["A"]);
                CollectionAssert.AreEqual(new int[] { 1, 2, 3 }, (IEnumerable)metadataAs["A"]);
            }
示例#2
0
            public void ReturnsListForSingleDocument()
            {
                // Given
                IDocument          a = Substitute.For <IDocument>();
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = a
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                IReadOnlyList <IDocument> result = metadata.Documents("A");

                // Then
                Assert.IsNotNull(result);
                CollectionAssert.AreEqual(new[] { a }, result);
            }
示例#3
0
            public void ContainsNewValues()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = "a"
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                MetadataStack clone = metadata.Clone(new Dictionary <string, object> {
                    { "B", "b" }
                });

                // Then
                Assert.AreEqual("b", clone["B"]);
            }
示例#4
0
            public void ClonedMetadataDoesNotContainNewValues()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = "a"
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                MetadataStack clone = metadata.Clone(new Dictionary <string, object> {
                    { "B", "b" }
                });

                // Then
                Assert.IsFalse(metadata.ContainsKey("B"));
            }
示例#5
0
            public void ReturnsFalseForInvalidValue()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = "a"
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                object value;
                bool   contains = metadata.TryGetValue("B", out value);

                // Then
                Assert.IsFalse(contains);
                Assert.AreEqual(null, value);
            }
示例#6
0
            public void ReturnsEmptyListForListOfInt()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = new List <int> {
                        1, 2, 3
                    }
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                IReadOnlyList <IDocument> result = metadata.DocumentList("A");

                // Then
                Assert.IsNotNull(result);
                CollectionAssert.IsEmpty(result);
            }
示例#7
0
            public void ReturnsCorrectResultForConvertedIntList()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = new List <int> {
                        1, 2, 3
                    }
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                IReadOnlyList <string> result = metadata.List <string>("A");

                // Then
                Assert.IsNotNull(result);
                CollectionAssert.AreEqual(result, new[] { "1", "2", "3" });
            }
示例#8
0
            public void ReplacesValue()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = "a"
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                MetadataStack clone = metadata.Clone(new Dictionary <string, object> {
                    { "A", "b" }
                });

                // Then
                Assert.AreEqual("a", metadata["A"]);
                Assert.AreEqual("b", clone["A"]);
            }
示例#9
0
            public void ReturnsCorrectResultForKeysWithDifferentCase()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary
                {
                    ["A"] = new SimpleMetadataValue {
                        Value = "a"
                    }
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                object value = metadata["a"];

                // Then
                Assert.AreEqual("a", value);
            }
示例#10
0
            public void ReturnsCorrectResultWithDerivedMetadataValue()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary
                {
                    ["A"] = new DerivedMetadataValue {
                        Key = "X"
                    },
                    ["X"] = "x"
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                object value = metadata.Get("A");

                // Then
                Assert.AreEqual("x", value);
            }
示例#11
0
            public void ReturnsCorrectResultWithMetadataValue()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary
                {
                    ["A"] = new SimpleMetadataValue {
                        Value = "a"
                    }
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                object value;
                bool   contains = metadata.TryGetValue("A", out value);

                // Then
                Assert.IsTrue(contains);
                Assert.AreEqual("a", value);
            }
示例#12
0
            public void ReturnsListForList()
            {
                // Given
                IDocument          a = new TestDocument();
                IDocument          b = new TestDocument();
                IDocument          c = new TestDocument();
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = new List <IDocument> {
                        a, b, c
                    }
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                IReadOnlyList <IDocument> result = metadata.DocumentList("A");

                // Then
                Assert.IsNotNull(result);
                CollectionAssert.AreEqual(new[] { a, b, c }, result);
            }
示例#13
0
            public void ReturnsCorrectDirectoryPathForString(string path, string expected)
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary();
                MetadataStack      metadata        = new MetadataStack(initialMetadata);

                // When
                metadata = metadata.Clone(new[] { new KeyValuePair <string, object>("A", path) });
                object result = metadata.DirectoryPath("A");

                // Then
                if (expected == null)
                {
                    Assert.IsNull(result);
                }
                else
                {
                    Assert.IsInstanceOf <DirectoryPath>(result);
                    Assert.AreEqual(expected, ((DirectoryPath)result).FullPath);
                }
            }
示例#14
0
            public void MetadataValueCalledForEachRequest()
            {
                // Given
                SimpleMetadataValue metadataValue = new SimpleMetadataValue {
                    Value = "a"
                };
                MetadataDictionary initialMetadata = new MetadataDictionary {
                    ["A"] = metadataValue
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                object value = metadata.Get("A");

                value = metadata.Get("A");
                value = metadata.Get("A");

                // Then
                Assert.AreEqual("a", value);
                Assert.AreEqual(3, metadataValue.Calls);
            }
示例#15
0
        private Document(string id, MetadataStack metadata, FilePath source, Stream stream, object streamLock, IEnumerable <KeyValuePair <string, object> > items, bool disposeStream)
        {
            if (id == null)
            {
                throw new ArgumentNullException(nameof(id));
            }
            if (source != null && !source.IsAbsolute)
            {
                throw new ArgumentException("Document sources must be absolute", nameof(source));
            }

            Id        = id;
            Source    = source;
            _metadata = items == null ? metadata : metadata.Clone(items);

            if (stream == null)
            {
                _stream = Stream.Null;
            }
            else
            {
                if (!stream.CanRead)
                {
                    throw new ArgumentException("Document stream must support reading.", nameof(stream));
                }

                if (!stream.CanSeek)
                {
                    _stream        = new SeekableStream(stream, disposeStream);
                    _disposeStream = true;
                }
                else
                {
                    _stream        = stream;
                    _disposeStream = disposeStream;
                }
            }
            _streamLock = streamLock ?? new object();
        }
示例#16
0
            public void EnumeratingMetadataValuesReturnsCorrectResults()
            {
                // Given
                MetadataDictionary initialMetadata = new MetadataDictionary
                {
                    ["A"] = new SimpleMetadataValue {
                        Value = "a"
                    },
                    ["B"] = new SimpleMetadataValue {
                        Value = "b"
                    },
                    ["C"] = new SimpleMetadataValue {
                        Value = "c"
                    }
                };
                MetadataStack metadata = new MetadataStack(initialMetadata);

                // When
                object[] values = metadata.Select(x => x.Value).ToArray();

                // Then
                CollectionAssert.AreEquivalent(new[] { "a", "b", "c" }, values);
            }
示例#17
0
文件: Document.cs 项目: cederlof/Wyam
 private Document(string id, MetadataStack metadata, FilePath source, Stream stream, object streamLock, IEnumerable <KeyValuePair <string, object> > items, bool disposeStream)
     : this(id, metadata, source, stream, streamLock, null, items, disposeStream)
 {
 }
示例#18
0
文件: Document.cs 项目: cederlof/Wyam
 private Document(string id, MetadataStack metadata, FilePath source, string content, IEnumerable <KeyValuePair <string, object> > items)
     : this(id, metadata, source, null, null, content, items, true)
 {
 }