/// <summary>
        /// Initializes a new instance of the <see cref="MdlScanner"/> class.
        /// </summary>
        /// <param name="sourceReader"></param>
        public MdlScanner(SourceReader sourceReader)
        {
            if(sourceReader == null) 
                throw new ArgumentNullException("sourceReader");

            this.sourceReader = sourceReader;
        }
        public void ReadNextUpdatesPosition()
        {
            string source = "1 2" + System.Environment.NewLine + "3456" + System.Environment.NewLine + "789";
            SourceReader sourceReader = new SourceReader(new StringReader(source));

            Assert.IsFalse(sourceReader.Empty);
            Assert.AreEqual(0, sourceReader.Line);
            Assert.AreEqual(-1, sourceReader.Column);

            Assert.AreEqual('1', sourceReader.ReadNext());
            Assert.AreEqual(0, sourceReader.Line);
            Assert.AreEqual(0, sourceReader.Column);

            Assert.AreEqual(' ', sourceReader.ReadNext());
            Assert.AreEqual('2', sourceReader.ReadNext());
            Assert.AreEqual('\r', sourceReader.ReadNext());
            Assert.AreEqual('\n', sourceReader.ReadNext());

            Assert.AreEqual('3', sourceReader.ReadNext());
            Assert.AreEqual(1, sourceReader.Line);
            Assert.AreEqual(0, sourceReader.Column);

            Assert.AreEqual('4', sourceReader.ReadNext());
            Assert.AreEqual(1, sourceReader.Line);
            Assert.AreEqual(1, sourceReader.Column);

            Assert.AreEqual('5', sourceReader.ReadNext());
            Assert.AreEqual('6', sourceReader.ReadNext());
            Assert.AreEqual('\r', sourceReader.ReadNext());
            Assert.AreEqual('\n', sourceReader.ReadNext());

            Assert.AreEqual('7', sourceReader.ReadNext());
            Assert.AreEqual(2   , sourceReader.Line);
            Assert.AreEqual(0, sourceReader.Column);
        }
        public void ReadNextReadsAllSource()
        {
            string source = "1 2" + System.Environment.NewLine + "3456" + System.Environment.NewLine + "789";
            SourceReader sourceReader = new SourceReader(new StringReader(source));

            StringBuilder sourceBuilder = new StringBuilder();
            while(!sourceReader.Empty)
                sourceBuilder.Append(sourceReader.ReadNext());

            Assert.AreEqual(source, sourceBuilder.ToString());
        }
 public void ReadNextThrowsInvalidOperationExceptionOnEmptyReader()
 {
     SourceReader sourceReader = new SourceReader(new StringReader(string.Empty));
     sourceReader.ReadNext();
 }
 public void NextThrowsInvalidOperationExceptionOnEmptyReader()
 {
     SourceReader sourceReader = new SourceReader(new StringReader(string.Empty));
     char next = sourceReader.Next;
 }