public void ConstructedWithoutEncoding_EmptyStream_DetectsEncoding()
        {
            // Arrange
            var content = TestRazorSourceDocument.CreateStreamContent(content: string.Empty, encoding: Encoding.UTF32);

            // Act
            var document = new StreamSourceDocument(content, null, RazorSourceDocumentProperties.Default);

            // Assert
            Assert.IsType <StreamSourceDocument>(document);
            Assert.Equal(Encoding.UTF32, document.Encoding);
        }
        public void RelativePath_Null()
        {
            // Arrange
            var content = "Hello World!";
            var stream  = CreateBOMStream(content, Encoding.UTF8);

            // Act
            var document = new StreamSourceDocument(stream, Encoding.UTF8, new RazorSourceDocumentProperties(filePath: null, relativePath: null));

            // Assert
            Assert.Null(document.RelativePath);
        }
        public void FilePath()
        {
            // Arrange
            var content = "Hello World!";
            var stream  = CreateBOMStream(content, Encoding.UTF8);

            // Act
            var document = new StreamSourceDocument(stream, Encoding.UTF8, new RazorSourceDocumentProperties(filePath: "file.cshtml", relativePath: null));

            // Assert
            Assert.Equal("file.cshtml", document.FilePath);
        }
        public void ConstructedWithoutEncoding_EmptyStream_DetectsEncoding()
        {
            // Arrange
            var content = TestRazorSourceDocument.CreateStreamContent(content: string.Empty, encoding: Encoding.UTF32);

            // Act
            var document = new StreamSourceDocument(content, encoding: null, fileName: "file.cshtml");

            // Assert
            Assert.IsType <StreamSourceDocument>(document);
            Assert.Equal("file.cshtml", document.FilePath);
            Assert.Equal(Encoding.UTF32, document.Encoding);
        }
        public void GetChecksum_ComputesCorrectChecksum_UTF8()
        {
            // Arrange
            var content          = "Hello World!";
            var stream           = CreateBOMStream(content, Encoding.UTF8);
            var document         = new StreamSourceDocument(stream, Encoding.UTF8, RazorSourceDocumentProperties.Default);
            var expectedChecksum = new byte[] { 70, 180, 84, 105, 70, 79, 152, 31, 71, 157, 46, 159, 50, 83, 1, 243, 222, 48, 90, 18 };

            // Act
            var checksum = document.GetChecksum();

            // Assert
            Assert.Equal(expectedChecksum, checksum);
        }
        public void GetChecksum_ComputesCorrectChecksum_UTF32AutoDetect()
        {
            // Arrange
            var content          = "Hello World!";
            var stream           = CreateBOMStream(content, Encoding.UTF32);
            var document         = new StreamSourceDocument(stream, null, RazorSourceDocumentProperties.Default);
            var expectedChecksum = new byte[] { 159, 154, 109, 89, 250, 163, 165, 108, 2, 112, 34, 4, 247, 161, 82, 168, 77, 213, 107, 71 };

            // Act
            var checksum = document.GetChecksum();

            // Assert
            Assert.Equal(expectedChecksum, checksum);
        }
        public void GetChecksum_ReturnsCopiedChecksum()
        {
            // Arrange
            var content  = "Hello World!";
            var stream   = CreateBOMStream(content, Encoding.UTF8);
            var document = new StreamSourceDocument(stream, null, RazorSourceDocumentProperties.Default);

            // Act
            var firstChecksum  = document.GetChecksum();
            var secondChecksum = document.GetChecksum();

            // Assert
            Assert.Equal(firstChecksum, secondChecksum);
            Assert.NotSame(firstChecksum, secondChecksum);
        }
        public void DetectsSizeOfStreamForLargeContent(int contentLength)
        {
            // Arrange
            var content = new string('a', contentLength);
            var stream  = TestRazorSourceDocument.CreateStreamContent(content);

            // Act
            var document = new StreamSourceDocument(stream, null, RazorSourceDocumentProperties.Default);

            // Assert
            var streamDocument = Assert.IsType <StreamSourceDocument>(document);

            Assert.IsType <LargeTextSourceDocument>(streamDocument._innerSourceDocument);
            Assert.Same(Encoding.UTF8, document.Encoding);
            Assert.Equal(content, ReadContent(document));
        }
        public void DetectsSizeOfStreamForLargeContent(int contentLength)
        {
            // Arrange
            var content = new string('a', contentLength);
            var stream  = TestRazorSourceDocument.CreateStreamContent(content);

            // Act
            var document = new StreamSourceDocument(stream, encoding: null, fileName: "file.cshtml");

            // Assert
            var streamDocument = Assert.IsType <StreamSourceDocument>(document);

            Assert.IsType <LargeTextSourceDocument>(streamDocument._innerSourceDocument);
            Assert.Equal("file.cshtml", document.FilePath);
            Assert.Same(Encoding.UTF8, document.Encoding);
            Assert.Equal(content, ReadContent(document));
        }