// CounterTest.cs (Coutnerのテスト・コード)

using NUnit.Framework;

namespace TestNameSpace {

  // TestFixture: テスト・クラス
  [TestFixture]
  public class CounterTest {

    // テスト対象
    private WinDevMagazine.ICounter counter;


    // SetUp: 各テストの直前に必ず呼び出す
    [SetUp]
    public void setUp() {
      counter = new WinDevMagazine.Counter();
    }

    // TearDown: 各テストの直後に必ず呼び出す
    [TearDown]
    public void tearDown() {
      counter = null;
    }

    // Test: 初期値は0か?
    [Test]
    public void test_01() {
      NUnit.Framework.Assert.AreEqual(0, counter.count);
    }

    // Test: インクリメントされるか?
    [Test]
    public void test_02() {
      for ( int i = 1; i < 10; ++i ) {
        counter.increment();
        NUnit.Framework.Assert.AreEqual(i, counter.count);
      }
    }

    // Test: デクリメントされるか?
    [Test]
    public void test_03() {
      counter.increment();
      counter.increment();
      counter.increment();
      counter.decrement();
      NUnit.Framework.Assert.AreEqual(2, counter.count);
      counter.decrement();
      NUnit.Framework.Assert.AreEqual(1, counter.count);
      counter.decrement();
      NUnit.Framework.Assert.AreEqual(0, counter.count);
      // 0で止まってくれるかな?
      counter.decrement();
      NUnit.Framework.Assert.AreEqual(0, counter.count);
    }

    // Test: 0に戻るか?
    [Test]
    public void test_04() {
      counter.increment();
      counter.increment();
      counter.increment();
      counter.clear();
      NUnit.Framework.Assert.AreEqual(0, counter.count);
    }
  }

}
