コード例 #1
0
        public void it_closes_its_file_stream_before_deleting_the_file()
        {
            var theUnderlyingFile = new FileInfo("xxx_any_fake_file_name_xxx");
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();
            var fakeFileStream = NewFakeFileStream();
            var itHasDeletedTheFile = false;

            fakeFileSystem.Stub(it => it.New(Arg<String>.Is.Anything)).Return(theUnderlyingFile);

            fakeFileSystem.
                Expect(it => it.Delete(Arg<FileInfo>.Is.Anything)).
                Repeat.Once().Message("Expected it to delete its underlying file").
                Callback((FileInfo file) => { itHasDeletedTheFile = true; return true; });

            fakeFileStream.Expect(it => it.Close()).Repeat.Once().
                Callback(() => { Assert.IsFalse(itHasDeletedTheFile, "Expected it to close the stream BEFORE deleting the file"); return true; }).
                Message("Expected it to close its file stream");

            fakeFileSystem.
                Stub(it => it.Open(Arg<FileInfo>.Is.Anything)).
                Return(fakeFileStream);

            var tempFile = new TempFileStream(fakeFileSystem);
            tempFile.Write(new Byte[0], 0, 0);
            tempFile.Dispose();
        }
コード例 #2
0
        public void it_writes_to_its_underlying_file()
        {
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();
            var fakeFileStream = NewFakeFileStream();

            fakeFileSystem.
                Stub(it => it.Open(Arg<FileInfo>.Is.Anything)).
                Return(fakeFileStream);

            var tempFile = new TempFileStream(fakeFileSystem);

            var lineOne = Encoding.UTF8.GetBytes("Lasciate ogne speranza, voi ch'intrate");
            var lineTwo = Encoding.UTF8.GetBytes("Abandon all hope, ye who enter here");

            tempFile.Write(lineOne, 0, lineOne.Length);
            tempFile.Write(lineTwo, 0, lineOne.Length);

            var allTheArgs = fakeFileStream.GetArgumentsForCallsMadeOn(it =>
                it.Write(
                    Arg<Byte[]>.Is.Anything,
                    Arg<Int32>.Is.Anything,
                    Arg<Int32>.Is.Anything
                )
            );

            var firstWrittenLine = Encoding.UTF8.GetString((Byte[])allTheArgs[0][0]);
            var secondWrittenLine = Encoding.UTF8.GetString((Byte[])allTheArgs[1][0]);

            Assert.AreEqual(Encoding.UTF8.GetString(lineOne), firstWrittenLine);
            Assert.AreEqual(Encoding.UTF8.GetString(lineTwo), secondWrittenLine);
        }
コード例 #3
0
        public void it_skips_closing_the_file_stream_if_nothing_has_been_written()
        {
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();
            var fakeFileStream = NewFakeFileStream();

            fakeFileSystem.Stub(it => it.New(Arg<String>.Is.Anything)).
                Return(new FileInfo("xxx_any_fake_file_name_xxx"));

            fakeFileSystem.Stub(it => it.Delete(Arg<FileInfo>.Is.Anything));

            fakeFileSystem.Stub(it => it.Open(Arg<FileInfo>.Is.Anything)).
                Return(fakeFileStream);

            var tempFile = new TempFileStream(fakeFileSystem);
            tempFile.Dispose();

            fakeFileStream.AssertWasNotCalled(it => it.Close(), options => options.Message(
                "Expected it to skip closing the stream because it is only initialized on the first write"
            ));
        }
コード例 #4
0
        public void it_seeks_on_its_underlying_file()
        {
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();
            var fakeFileStream = NewFakeFileStream();

            fakeFileSystem.
                Stub(it => it.Open(Arg<FileInfo>.Is.Anything)).
                Return(fakeFileStream);

            var tempFile = new TempFileStream(fakeFileSystem);

            var expectedOffset = 1337;
            var expectedSeekOrigin = SeekOrigin.Begin;

            tempFile.Seek(expectedOffset, expectedSeekOrigin);

            fakeFileStream.AssertWasCalled(
                it => it.Seek(expectedOffset, expectedSeekOrigin),
                options => options.Message("Expected it to seek from the supplied offset using the supplied seek origin")
            );
        }
コード例 #5
0
        public void it_reads_from_its_underlying_file()
        {
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();
            var fakeFileStream = NewFakeFileStream();

            fakeFileSystem.
                Stub(it => it.Open(Arg<FileInfo>.Is.Anything)).
                Return(fakeFileStream);

            var tempFile = new TempFileStream(fakeFileSystem);

            var buffer = new Byte[32];

            tempFile.Read(buffer, 0, 32);

            fakeFileStream.AssertWasCalled(
                it => it.Read(buffer, 0, 32),
                options => options.Message("Expected it to read 32 bytes from its underlying stream")
            );
        }
コード例 #6
0
        public void it_opens_its_underlying_file_the_first_time_you_write_to_it()
        {
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();
            var fakeFileStream = NewFakeFileStream();

            fakeFileSystem.
                Expect(it => it.Open(Arg<FileInfo>.Is.Anything)).
                Return(fakeFileStream).
                Repeat.Once(); // [!] Does not work, try setting it to Twice() and it doesn't fail

            var tempFile = new TempFileStream(fakeFileSystem);

            var anyBytes = Encoding.UTF8.GetBytes("Ben rules");

            tempFile.Write(anyBytes, 0, anyBytes.Length);
            tempFile.Write(anyBytes, 0, anyBytes.Length);
        }
コード例 #7
0
        public void it_does_not_support_reading_or_writing_its_length()
        {
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();
            var tempFile = new TempFileStream(fakeFileSystem);

            Assert.Throws<NotImplementedException>(() => tempFile.SetLength(1337));
            Assert.Throws<NotImplementedException>(() => { var length = tempFile.Length; });
        }
コード例 #8
0
        public void it_deletes_the_same_file_it_creates()
        {
            var theUnderlyingFile = new FileInfo("xxx_any_fake_file_name_xxx");
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();

            fakeFileSystem.Stub(it => it.New(Arg<String>.Is.Anything)).Return(theUnderlyingFile);

            var tempFile = new TempFileStream(fakeFileSystem);
            tempFile.Dispose();

            fakeFileSystem.AssertWasCalled(
                it => it.Delete(Arg<FileInfo>.Is.Same(theUnderlyingFile)),
                options => options.Repeat.Once().Message(
                    "Expected that when it deletes its underlying file, " +
                    "it is the same one that was returned by the file system at the beginning"
                )
            );
        }
コード例 #9
0
        public void it_deletes_its_underlying_file_when_it_is_disposed()
        {
            var fakeFileSystem = MockRepository.GenerateMock<FileSystem>();
            var tempFile = new TempFileStream(fakeFileSystem);

            tempFile.Dispose();

            fakeFileSystem.AssertWasCalled(
                it => it.Delete(Arg<FileInfo>.Is.Anything),
                options => options.Repeat.Once().Message("Expected that when I close a TempFile, the underlying file is deleted.")
            );
        }