
using DLL_library;

namespace TestDLL.text
{
    [TestClass]
    public class UnitTest1
    {
        /// <summary>
        /// Проверка знака контрольной суммы VIS
        /// </summary>
        [TestMethod]
        public void TestMethod_CheckControlSum_VIS_ControlSum()
        {
            //WAUYP6AAAAA141245
            Task_dll task_Dll = new Task_dll("WAUYP6401N1412456");
            bool check = task_Dll.CheckControlSum();
            Assert.IsTrue(check);
        }
        /// <summary>
        /// Проверка на то, что массив имеет тип char
        /// </summary>
        [TestMethod]
        public void TestMethod_Input_Array_VIS_ArraySymbol()
        {
            Task_dll task_Dll = new Task_dll("WAUYP6401N1412456");
            bool check = task_Dll.CheckControlSum();
            char[] arraySim = task_Dll.Input_Array();    
            Assert.IsInstanceOfType(arraySim, typeof(char[]));
        }
        /// <summary>
        /// Проверка на то, что длина VIS равна 17
        /// </summary>
        [TestMethod]
        public void TestMethod_Input_Array_VIS_Count()
        {
            Task_dll task_Dll = new Task_dll("WAUYP6401N1412456");
            Assert.AreEqual(17, task_Dll.VIS.Length);
        }
        /// <summary>
        /// Проверка на то, что каждый элемент массива имеет тип char
        /// </summary>
        [TestMethod]
        public void TestMethod_Input_Array_ArraySymol_Input()
        {
            Task_dll task_Dll = new Task_dll("WAUYP6401N1412456");
            char[] arraySim = task_Dll.Input_Array();
            for (int i = 0; i < arraySim.Length; i++)
            {
                Assert.IsInstanceOfType(arraySim[i], typeof(char)); 
            }
            
        }
        /// <summary>
        /// Проверка на то, что каждый элемент массва имеет тип НЕ int
        /// </summary>
        [TestMethod]
        public void TestMethod_Input_Array_ArraySymol_NotInput()
        {
            Task_dll task_Dll = new Task_dll("WAUYP6401N1412456");
            char[] arraySim = task_Dll.Input_Array();
            for (int i = 0; i < arraySim.Length; i++)
            {
                Assert.IsNotInstanceOfType(arraySim[i], typeof(int));
            }
        }
        /// <summary>
        /// Проверка на то, что возвращаемая строка в программе по итогу не Null
        /// </summary>
        [TestMethod]
        public void TestMethod_CountSum_Output_Result()
        {
            Task_dll task = new Task_dll("WAUYP6401N1412456");
            task.CheckControlSum();
            string result = task.CountSum();
            Assert.IsNotNull(result);
        }
        /// <summary>
        /// Проверка на то, что в строке вывода нет Чисел
        /// </summary>
        [TestMethod]
        public void TestMethod_CountSum_Output_ResultNotInt()
        {
            bool check = false;
            Task_dll task = new Task_dll("WAUYP6401N1412456");
            task.CheckControlSum();
            string result = task.CountSum();
            for (int i = 0; i < result.Length; i++)
            {
                try
                {
                    string opa = Convert.ToString(result[i]);
                    double res = Convert.ToDouble(opa);
                    check = true;

                }
                catch
                {
                    if (check)
                    {
                        Assert.Fail("В строке вывода есть Число");
                    }
                    else continue;
                }
            }
        }
        /// <summary>
        /// Проверка на то, что в VIS нет I O Q
        /// </summary>
        [TestMethod]
        public void TestMethod_CheckVISAllNotSymbol_VIS_NotInSymbol()
        {
            Task_dll task = new Task_dll("WAUYP6401N1412456");
            bool result = task.CheckVISAllNotSymbol();
            Assert.AreEqual(true, result);
        }
        /// <summary>
        /// Проверка на то, что в массиве символов находятся только Заглавные английские буквы
        /// </summary>
        [TestMethod]
        public void TestMethod_Input_Array_ElementsArray_Symbol()
        {
            Task_dll task = new Task_dll("WAUYP6401N1412456");
            char[] arraySym = task.Input_Array();
            int numChar = 65;
            for (int i = 0;i < arraySym.Length;i++)
            {
                if (numChar == 73 || numChar == 79 || numChar == 81) numChar++; 
                else if ((int)arraySym[i] != numChar)
                {
                    Assert.Fail("В массиве символ не соответствует заглавным английским буквам");
                }
                numChar++;
            }
        }
        /// <summary>
        /// Проверка на то, что длина массива Эквивалентов соответствует длине VIS
        /// </summary>
        [TestMethod]
        public void TestMethod_workWithVIS_VIS_NumEcvivalent()
        {
            Task_dll task = new Task_dll("WAUYP6401N1412456");

            int[] numEcvavilent = task.workWithVIS();
            Assert.AreEqual(task.VIS.Length, numEcvavilent.Length);
        }
        /// <summary>
        /// Проерка на то, что после вызова конструктора VIS не Null
        /// </summary>
        [TestMethod]
        public void TestMethod_Task_dll_VIS_ElementsVIS()
        {
            Task_dll task = new Task_dll("WAUYP6401N1412456");
            Assert.IsNotNull(task.VIS);
        }
        /// <summary>
        /// Проверка на то, что в эквиваленте символов все числа меньше 10
        /// </summary>
        [TestMethod]
        public void TestMethod_Task_dll_valuesAsArray_ElementsvaluesAsArray()
        {
            Task_dll task = new Task_dll("WAUYP6401N1412456");
            for (int i = 0; i < task.valuesAsArray.Length; i++)
            {
                if (task.valuesAsArray[i] > 10)
                {
                    Assert.Fail("В эквиваленте есть число больше 10");
                }
            }
        }
        /// <summary>
        /// Проверка на то, что в массиве веса символ контрольной суммы имеет значение -1
        /// </summary>
        [TestMethod]
        public void TestMethod_Task_dll_weightNum_ElementsvaluesAsArray()
        {
            Task_dll task = new Task_dll("WAUYP6401N1412456");
            if (task.weightNum[8] != -1)
            {
                Assert.Fail("У веса контрольной суммы стоит не правильное значение");
            }
        }
        /// <summary>
        /// Проверка на то, что программа правильно считает контрольную сумму
        /// </summary>
        [TestMethod]
        public void TestMethod_CountSum_сontrolSum_resultSum()
        {
            Task_dll task = new Task_dll("JHMCM56557C404453");
            task.CheckControlSum();
            Assert.AreEqual(368, task.controlSum);
        }
        /// <summary>
        /// Проверка на то, что программа правильно считает разницу для контрольной суммы
        /// </summary>
        [TestMethod]
        public void TestMethod_CountSum_raznSum_resultRaznSum()
        {
            Task_dll task = new Task_dll("JHMCM56557C404453");
            task.CheckControlSum();
            Assert.AreEqual(5, task.raznSum);
        }
    }
}
