public void TestTextReader()
        {
            Solid solid;

            using (var str = Utils.OpenDataStream("ASCII.stl"))
            {
                var reader = new StlTextReader(str);
                solid = reader.ReadSolid();
            }

            Assert.NotNull(solid);
            Assert.Equal(SolidFormat.Ascii, solid.Format);
            Assert.Equal(12, solid.Facets.Count);
            foreach (Facet facet in solid.Facets)
            {
                Assert.Equal(3, facet.Vertices.Count);
            }

            Assert.Throws <ArgumentNullException>(() => new StlTextReader(null));

            using (var str = new MemoryStream(Consts.FileEncoding.GetBytes("test")))
            {
                var reader = new StlTextReader(str);
                var ex     = Assert.Throws <FormatException>(() => reader.ReadSolid());
                Assert.Equal("Invalid text STL file header. Expected 'solid [name]' but 'test' found.", ex.Message);
            }

            using (var str = Utils.MakeStream("solid test\nfacet normal 1 2 3\nouter loop\nvertex 3 2 1\n"))
            {
                var reader = new StlTextReader(str);
                solid = reader.ReadSolid();
                Assert.Equal(0, solid.Facets.Count);
                Assert.Equal(SolidFormat.Ascii, solid.Format);
            }

            using (var str = Utils.MakeStream("solid test\nfacet normal 1 2 3\nouter loop\nvertex a 1.2 2\n"))
            {
                var reader = new StlTextReader(str);
                var ex     = Assert.Throws <FormatException>(() => reader.ReadSolid());
                Assert.Equal("Could not parse X coordinate 'a' as a decimal.", ex.Message);
            }
            using (var str = Utils.MakeStream("solid test\nfacet normal 1 2 3\nouter loop\nvertex 1.2 a 2\n"))
            {
                var reader = new StlTextReader(str);
                var ex     = Assert.Throws <FormatException>(() => reader.ReadSolid());
                Assert.Equal("Could not parse Y coordinate 'a' as a decimal.", ex.Message);
            }
            using (var str = Utils.MakeStream("solid test\nfacet normal 1 2 3\nouter loop\nvertex 1.2 2 a\n"))
            {
                var reader = new StlTextReader(str);
                var ex     = Assert.Throws <FormatException>(() => reader.ReadSolid());
                Assert.Equal("Could not parse Z coordinate 'a' as a decimal.", ex.Message);
            }
        }
        public void TestTextReader()
        {
            Solid solid;
            using (var str = Utils.OpenDataStream("ASCII.stl"))
            {
                var reader = new StlTextReader(str);
                solid = reader.ReadSolid();
            }

            Assert.NotNull(solid);
            Assert.Equal(SolidFormat.Ascii, solid.Format);
            Assert.Equal(12, solid.Facets.Count);
            foreach (Facet facet in solid.Facets)
                Assert.Equal(3, facet.Vertices.Count);

            Assert.Throws<ArgumentNullException>(() => new StlTextReader(null));

            using (var str = new MemoryStream(Consts.FileEncoding.GetBytes("test")))
            {
                var reader = new StlTextReader(str);
                var ex = Assert.Throws<FormatException>(() => reader.ReadSolid());
                Assert.Equal("Invalid text STL file header. Expected 'solid [name]' but 'test' found.", ex.Message);
            }

            using (var str = Utils.MakeStream("solid test\nfacet normal 1 2 3\nouter loop\nvertex 3 2 1\n"))
            {
                var reader = new StlTextReader(str);
                solid = reader.ReadSolid();
                Assert.Equal(0, solid.Facets.Count);
                Assert.Equal(SolidFormat.Ascii, solid.Format);
            }

            using (var str = Utils.MakeStream("solid test\nfacet normal 1 2 3\nouter loop\nvertex a 1.2 2\n"))
            {
                var reader = new StlTextReader(str);
                var ex = Assert.Throws<FormatException>(() => reader.ReadSolid());
                Assert.Equal("Could not parse X coordinate 'a' as a decimal.", ex.Message);
            }
            using (var str = Utils.MakeStream("solid test\nfacet normal 1 2 3\nouter loop\nvertex 1.2 a 2\n"))
            {
                var reader = new StlTextReader(str);
                var ex = Assert.Throws<FormatException>(() => reader.ReadSolid());
                Assert.Equal("Could not parse Y coordinate 'a' as a decimal.", ex.Message);
            }
            using (var str = Utils.MakeStream("solid test\nfacet normal 1 2 3\nouter loop\nvertex 1.2 2 a\n"))
            {
                var reader = new StlTextReader(str);
                var ex = Assert.Throws<FormatException>(() => reader.ReadSolid());
                Assert.Equal("Could not parse Z coordinate 'a' as a decimal.", ex.Message);
            }

        }