using Microsoft.VisualStudio.TestPlatform.TestHost;
using Turing;

namespace TestyJednostkoweMaszynyTuringa
{
    [TestClass]
    public sealed class TestProgram
    {
        private static List<string> kodWzorcowy = new List<string>()
        {
            "aARa", "aBAa", "aCAa", "aDAa", "aEAa", "aFAb"
        };

        private static void sprawdźKod(List<Czwórka> czwórki)
        {
            Assert.AreEqual(kodWzorcowy.Count, czwórki.Count);
            for(int i = 0; i < czwórki.Count; i++)
            {
                Assert.AreEqual(kodWzorcowy[i], czwórki[i].ToString());
            }
        }

        [TestMethod]
        public void TestKonstruktora1()
        {
            List<Czwórka> czwórki = new List<Czwórka>();
            foreach(string linia in kodWzorcowy)
            {
                czwórki.Add(new Czwórka(linia));
            }
            Turing.Program program = new Turing.Program(czwórki);
            sprawdźKod(program.Kod);
        }

        [TestMethod]
        [ExpectedException(typeof(Exception))]
        public void TestKonstruktora2()
        {
            Turing.Program program = new Turing.Program(null);            
        }

        [TestMethod]
        public void TestPseudokonstruktora()
        {
            File.WriteAllLines("program.txt", kodWzorcowy);
            //TODO: IEnumerable
            Turing.Program program = Turing.Program.Wczytaj("program.txt");
            sprawdźKod(program.Kod);
        }
    }
}
