コード例 #1
0
        /// <summary>
        /// Validate Node1 -> ByteArray1 -> Node2 -> ByteArray2
        /// </summary>
        private T CheckSerializationRoundTrip <T>(T node)
            where T : Node
        {
            byte[] firstPass;
            T      node2;

            using (var writerStream = new MemoryStream())
                using (var writer = new BuildXLWriter(false, writerStream, true, false))
                {
                    // Serialize (Node1 -> ByteArray1)
                    node.Serialize(writer);

                    // Copy for validation
                    firstPass = writerStream.ToArray();
                }

            using (var readerStream = new MemoryStream(firstPass))
                using (var reader = new BuildXLReader(true, readerStream, true))
                {
                    // Deserialize (ByteArray1 -> Node2)
                    DeserializationContext context = new DeserializationContext(null, reader, m_pathTable, GetLineMap());
                    node2 = Node.Read <T>(context);
                }

            if (node.Kind == SyntaxKind.None)
            {
                Assert.Null(node2);
                return(null);
            }
            else
            {
                Assert.NotNull(node2);

                byte[] secondPass;

                using (var writerStream2 = new MemoryStream())
                    using (var writer2 = new BuildXLWriter(false, writerStream2, true, false))
                    {
                        // Reserialize (Node2 -> ByteArray2)
                        node2.Serialize(writer2);

                        // Copy for validation
                        secondPass = writerStream2.ToArray();
                    }

                // Compare byte arrays (ByteArray1 and ByteArray2)
                XAssert.AreArraysEqual(firstPass, secondPass, true);

                // Compare ASTs (Node1 and Node2)
                ConstructorTests.ValidateEqual(null, typeof(T), node, node2, string.Empty, null);

                return(node2);
            }
        }
コード例 #2
0
        private void TestFileModuleLiteralOrAbove(FileModuleLiteral node, Type type)
        {
            using (var ms = new MemoryStream())
            {
                using (var writer = new BuildXLWriter(false, ms, true, false))
                    using (var reader = new BuildXLReader(true, ms, true))
                    {
                        // Serialize
                        node.Serialize(writer);

                        // Copy for validation
                        byte[] firstPass = ms.ToArray();

                        // Reset the stream pointer to the start for deserializing
                        ms.Position = 0;

                        // Deserialize
                        DeserializationContext context = new DeserializationContext(null, reader, m_pathTable, node.LineMap);
                        var node2 = FileModuleLiteral.Read(reader, context.PathTable, GlobalModuleLiteral, ModuleRegistry);

                        Assert.NotNull(node2);

                        // Reset the stream pointer to the start for serializing
                        ms.Position = 0;

                        // Reserialize
                        node2.Serialize(writer);

                        // Copy for validation
                        byte[] secondPass = ms.ToArray();

                        // Compare byte arrays
                        Assert.Equal(firstPass, secondPass);

                        // Compare ASTs
                        ConstructorTests.ValidateEqual(null, type, node, node2, nameof(type), null);
                    }
            }
        }