using Xunit;
using Semmle.Util;

namespace SemmleTests
{
    public class LineCounterTest
    {
        //#################### PRIVATE VARIABLES ####################
        #region

        #endregion

        //#################### TEST METHODS ####################
        #region

        [Fact]
        public void ComputeLineCountsTest1()
        {
            var input = "Console.WriteLine();";
            Assert.Equal(new LineCounts { Total = 1, Code = 1, Comment = 0 }, LineCounter.ComputeLineCounts(input));
        }

        [Fact]
        public void ComputeLineCountsTest2()
        {
            var input = "Console.WriteLine();   // Wibble";
            Assert.Equal(new LineCounts { Total = 1, Code = 1, Comment = 1 }, LineCounter.ComputeLineCounts(input));
        }

        [Fact]
        public void ComputeLineCountsTest3()
        {
            var input = "Console.WriteLine();\n";
            Assert.Equal(new LineCounts { Total = 2, Code = 1, Comment = 0 }, LineCounter.ComputeLineCounts(input));
        }

        [Fact]
        public void ComputeLineCountsTest4()
        {
            var input = "\nConsole.WriteLine();";
            Assert.Equal(new LineCounts { Total = 2, Code = 1, Comment = 0 }, LineCounter.ComputeLineCounts(input));
        }

        [Fact]
        public void ComputeLineCountsTest5()
        {
            var input = "\nConsole.WriteLine();\nConsole.WriteLine();   // Foo\n";
            Assert.Equal(new LineCounts { Total = 4, Code = 2, Comment = 1 }, LineCounter.ComputeLineCounts(input));
        }

        [Fact]
        public void ComputeLineCountsTest6()
        {
            var input =
@"
/*
There once was a counter of lines,
Which worked (if one trusted the signs) -
But best to be sure,
For in old days of yore
Dodgy coders were sent down the mines.
*/

using System;   // always useful

class Program
{
    static void Main(string[] args)
    {
        // Print out something inane.
        Console.WriteLine(""Something inane!"");
    }
}
";
            Assert.Equal(new LineCounts { Total = 20, Code = 8, Comment = 9 }, LineCounter.ComputeLineCounts(input));
        }

        #endregion
    }
}
