Esempio n. 1
0
        public void open_read_and_actually_read_and_close_bytes(EnumOpenFlags mode, ushort bufSize)
        {
            Reset();

            var filePath = CreateTextFile("file.txt", LOREM_IPSUM);

            new FileInfo(filePath).Length.Should().Be(LOREM_IPSUM.Length);

            var fd = open("file.txt", mode);

            fd.Should().NotBe(0xFFFF);

            var memoryStream = new MemoryStream();
            var dstBuf       = mbbsEmuMemoryCore.AllocateVariable(null, 4096);

            while (memoryStream.Length < LOREM_IPSUM.Length)
            {
                var elementsRead = read(fd, dstBuf, bufSize);
                if (elementsRead == 0)
                {
                    break;
                }

                elementsRead.Should().BeLessOrEqualTo(bufSize);

                memoryStream.Write(mbbsEmuMemoryCore.GetArray(dstBuf, elementsRead));
            }

            Encoding.ASCII.GetString(memoryStream.ToArray()).Should().Be(LOREM_IPSUM);

            close(fd).Should().Be(0);
            close(fd).Should().Be(0xFFFF);
        }
Esempio n. 2
0
        public void open_write_new_file(EnumOpenFlags mode, ushort elementSize)
        {
            Reset();

            var fd = open("FILE.TXT", mode);

            fd.Should().NotBe(0xFFFF);

            var buffer = mbbsEmuMemoryCore.AllocateVariable(null, LOREM_IPSUM_LENGTH);

            mbbsEmuMemoryCore.SetArray(buffer, Encoding.ASCII.GetBytes(LOREM_IPSUM));

            var written = 0;

            while (written < LOREM_IPSUM.Length)
            {
                var bytesWritten = write(fd, buffer + written, (ushort)Math.Min(LOREM_IPSUM.Length - written, elementSize));
                bytesWritten.Should().BeLessThan(0xFFFF);
                written += bytesWritten;
            }

            close(fd).Should().Be(0);

            new FileInfo(Path.Join(mbbsModule.ModulePath, "FILE.TXT")).Length.Should().Be(LOREM_IPSUM.Length);
        }
Esempio n. 3
0
        public void open_read_doesntExist(EnumOpenFlags mode)
        {
            Reset();

            var fd = open("NOEXIST.TXT", mode);

            fd.Should().Be(0xFFFF);
        }
Esempio n. 4
0
        public void open_write_implicitCreate(EnumOpenFlags mode)
        {
            Reset();

            var fd = open("NOWEXIST.TXT", mode);

            fd.Should().NotBe(0xFFFF);

            File.Exists(Path.Combine(mbbsModule.ModulePath, "NOWEXIST.TXT")).Should().BeTrue();

            close(fd).Should().Be(0);
        }
Esempio n. 5
0
        public void open_read_and_close(EnumOpenFlags mode)
        {
            Reset();

            var filePath = CreateTextFile("file.txt", LOREM_IPSUM);

            new FileInfo(filePath).Length.Should().Be(LOREM_IPSUM.Length);

            var fd = open("file.txt", mode);

            fd.Should().NotBe(0xFFFF);

            close(fd).Should().Be(0);
        }
Esempio n. 6
0
        protected ushort open(string filename, EnumOpenFlags mode)
        {
            var filenamePointer = mbbsEmuMemoryCore.AllocateVariable(null, (ushort)(filename.Length + 1));

            mbbsEmuMemoryCore.SetArray(filenamePointer, Encoding.ASCII.GetBytes(filename));

            ExecuteApiTest(HostProcess.ExportedModules.Majorbbs.Segment, OPEN_ORDINAL, new List <ushort>
            {
                filenamePointer.Offset,
                filenamePointer.Segment,
                (ushort)mode
            });

            return(mbbsEmuCpuRegisters.AX);
        }
Esempio n. 7
0
        public void open_write_truncate_preexisting_file(EnumOpenFlags mode)
        {
            Reset();

            var contents = "This is really cool!\r\n";
            var filePath = CreateTextFile("file.txt", contents);

            new FileInfo(filePath).Length.Should().Be(contents.Length);

            var fd = open("file.txt", mode);

            fd.Should().NotBe(0xFFFF);

            close(fd).Should().Be(0);

            new FileInfo(filePath).Length.Should().Be(0);
        }
Esempio n. 8
0
        public void open_initial_read(EnumOpenFlags mode, ushort bytes, string expectedString, ushort expectedFileLength)
        {
            Reset();

            var filePath = CreateTextFile("file.txt", LOREM_IPSUM);

            new FileInfo(filePath).Length.Should().Be(LOREM_IPSUM.Length);

            var fd = open("file.txt", mode);

            fd.Should().NotBe(0xFFFF);

            var dstBuf    = mbbsEmuMemoryCore.AllocateVariable(null, 4096);
            var bytesRead = read(fd, dstBuf, bytes);

            if ((short)bytesRead > 0)
            {
                Encoding.ASCII.GetString(mbbsEmuMemoryCore.GetArray(dstBuf, bytesRead)).Should().Be(expectedString);
            }

            close(fd).Should().Be(0);

            new FileInfo(filePath).Length.Should().Be(expectedFileLength);
        }