Exemplo n.º 1
0
        public void Test003()
        {
            // UTF-8 でビルダを初期化
            var encoding   = Encoding.UTF8;
            var binBuilder = new PropBinaryBuilder(encoding);

            // セクションの定義
            var sections = new PropSectionCollection()
            {
                new PropSection("DEBUG01"),
                new PropSection("DEBUG02"),
            };

            // 処理実行
            try
            {
                var bufResult1 = binBuilder.CreateSectionTable(sections, new ulong[] { 0, 0 });
                var bufResult2 = binBuilder.CreateSectionTable(sections, new ulong[] { 1000, 2000 });

                Assert.IsTrue(bufResult1.Length == bufResult2.Length);
            }
            catch (Exception ex)
            {
                Assert.Fail($"予期せぬエラー: {ex}");
            }
        }
Exemplo n.º 2
0
        public void Test001()
        {
            // UTF-8 でビルダ・ローダを初期化
            var encoding   = Encoding.UTF8;
            var binBuilder = new PropBinaryBuilder(encoding);
            var binLoader  = new PropBinaryLoader(encoding);

            // セクションの定義
            var sections = new PropSectionCollection()
            {
                // 0 件
            };

            // セクション テーブルを生成
            var ms = new MemoryStream(binBuilder.CreateSectionTable(sections, new ulong[sections.Count]));

            ms.Seek(0, SeekOrigin.Begin);

            // 処理実行
            try
            {
                using (var br = new BinaryReader(ms))
                {
                    var sectionTable = binLoader.LoadSectionTable(br);

                    // 0 件のセクション情報が格納されていることを確認
                    Assert.AreEqual(0, sectionTable.Count);
                }
            }
            catch (Exception ex)
            {
                Assert.Fail($"予期せぬエラー: {ex}");
            }
        }
Exemplo n.º 3
0
        public void Test051()
        {
            // UTF-8 でビルダを初期化
            var encoding   = Encoding.UTF8;
            var binBuilder = new PropBinaryBuilder(encoding);

            // セクションの定義
            var sections = new PropSectionCollection()
            {
                new PropSection("DEBUG01"),
            };

            // 処理実行
            Exception thrown = null;

            try
            {
                var bufResult = binBuilder.CreateSectionTable(sections, new ulong[0]);
            }
            catch (Exception ex)
            {
                thrown = ex;

                this.TestContext.WriteLine("Thrown: {0}", ex);
            }

            Assert.IsTrue(thrown is ArgumentException);
        }
Exemplo n.º 4
0
        public void Test002()
        {
            // UTF-8 でビルダ・ローダを初期化
            var encoding   = Encoding.UTF8;
            var binBuilder = new PropBinaryBuilder(encoding);
            var binLoader  = new PropBinaryLoader(encoding);

            // セクションの定義
            var sectionNames = new string[]
            {
                "DEBUG_SECTION_01",
                "DEBUG_SECTION_02",
                "DEBUG_SECTION_03",
                "DEBUG_SECTION_04",
                "DEBUG_SECTION_05",
            };

            var sections = new PropSectionCollection()
            {
                new PropSection(sectionNames[0]),
                new PropSection(sectionNames[1]),
                new PropSection(sectionNames[2]),
                new PropSection(sectionNames[3]),
                new PropSection(sectionNames[4]),
            };

            // セクション テーブルを生成
            var ms = new MemoryStream(binBuilder.CreateSectionTable(sections, new ulong[sections.Count]));

            ms.Seek(0, SeekOrigin.Begin);

            // 処理実行
            try
            {
                using (var br = new BinaryReader(ms))
                {
                    var sectionTable = binLoader.LoadSectionTable(br);

                    // 5 件のセクション情報が格納されていることを確認
                    Assert.AreEqual(5, sectionTable.Count);

                    // 各セクションのセクション名が正しいことを確認
                    var loadedNames = sectionTable.Keys.Select(s => s.Name).ToArray();
                    for (var i = 0; i < 5; i++)
                    {
                        this.TestContext.WriteLine("expected: {0}, actual: {1}", sectionNames[i], loadedNames[i]);
                        Assert.AreEqual(sectionNames[i], loadedNames[i]);
                    }
                }
            }
            catch (Exception ex)
            {
                Assert.Fail($"予期せぬエラー: {ex}");
            }
        }
Exemplo n.º 5
0
        public void Test002()
        {
            // UTF-8 でビルダを初期化
            var encoding   = Encoding.UTF8;
            var binBuilder = new PropBinaryBuilder(encoding);

            // セクションの定義
            var sections = new PropSectionCollection()
            {
                new PropSection("DEBUG01"),
            };

            // 処理実行
            try
            {
                var binResult = binBuilder.CreateSectionTable(sections, new ulong[sections.Count]);
                this.TestContext.WriteLine("Added sections = {0}", sections.Count);
                this.TestContext.WriteLine("Created buffer = {0} bytes", binResult.Length);
            }
            catch (Exception ex)
            {
                Assert.Fail($"予期せぬエラー: {ex}");
            }
        }
Exemplo n.º 6
0
        // 公開メソッド

        public void Write(Props props)
        {
            if (this._isDisposed)
            {
                throw new ObjectDisposedException(nameof(PropWriter));
            }

            using (var bw = new BinaryWriter(this._stream, this._encoding, true))
            {
                // アイテム バッファの空書き込みを実行し、アイテム バッファのマップを作成する
                var itemBufferMap = this._createItemBufferMap(_binBuilder, props.Sections);

#if DEBUG
                Console.WriteLine("== ITEM BUFFER MAPPING ==");
                for (var i = 0; i < props.Sections.Count; i++)
                {
                    var sect = props.Sections[i];
                    Console.WriteLine("[{0}]", sect.Name);
                    for (var j = 0; j < sect.Items.Count; j++)
                    {
                        var item      = sect.Items[j];
                        var itemName  = item.Name;
                        var bufferPos = itemBufferMap[i][j];
                        Console.WriteLine("{0}={1}", itemName, bufferPos);
                    }
                }
#endif

                // アイテム バッファ テーブルを作成する
                var itemBufferTableBuffer = new byte[props.Sections.Count][];
                var itemBufferTableMap    = new ulong[props.Sections.Count];
                var currentPosition       = 0uL;
                for (var i = 0; i < props.Sections.Count; i++)
                {
                    itemBufferTableBuffer[i] = _binBuilder.CreateItemBufferTable(props.Sections[i].Items, itemBufferMap[i]);
                    itemBufferTableMap[i]    = currentPosition;
                    currentPosition         += (ulong)itemBufferTableBuffer[i].Length; //itemBufferTableMap[i];
                }

                // セクション テーブルを作成し、書き込む
                bw.Write(_binBuilder.CreateSectionTable(props.Sections, itemBufferTableMap));

                // アイテム バッファ テーブルを書き込む
                for (var i = 0; i < itemBufferTableBuffer.Length; i++)
                {
                    bw.Write(itemBufferTableBuffer[i]);
                }

                // バイナリライタを Flush してからアイテム バッファを書き込む
                bw.Flush();
                for (var i = 0; i < props.Sections.Count; i++)
                {
                    var section = props.Sections[i];
                    for (var j = 0; j < section.Items.Count; j++)
                    {
                        var item = section.Items[j];

                        // Reference アルゴリズム未実装
                        var bufferMode = PropItemBufferMode.Buffered;
                        if (item.IsNull)
                        {
                            bufferMode = PropItemBufferMode.Null;
                        }
                        _binBuilder.WriteItemBuffer(this._stream, section.Items[j], bufferMode);
                    }
                }
            }

            this._stream.Flush();
        }