using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestCaseExtension;

namespace TestCaseTesting
{
    [TestCaseClass]
    public class SimpleTestCaseSources
    {
        // Static TestCaseSources can provide more dynamic test-case types
        [TestMethod]
        [TestCaseSource("ProductPropertySource")]
        [TestCaseSource("ProductMethodSource")]
        public void TestProductWithSources(int expected, int a, int b)
        {
            Assert.AreEqual(expected, a * b);
        }

        // Static Properties, Fields, and no-argument Methods can be used
        private static IEnumerable<TestCaseData> ProductPropertySource
        {
            get
            {
                yield return new TestCaseData(6, 2, 3);
                yield return new TestCaseData(15, 3, 5);
                yield return new TestCaseData(24, 6, 4);
            }
        }

        // The type must be compatible with IEnumerable<TestCaseData>
        private static IList<TestCaseData> ProductMethodSource()
        {
            return new[]
            {
                new TestCaseData(2, 2, 1),
                new TestCaseData(4, 2, 2),
                new TestCaseData(8, 4, 2)
            };
        }
    }
}