Newer
Older
TIASShot / TIASshot.Tests / IScamDeviceSelectorTests.cs
using System.Collections.Generic;
using NUnit.Framework;

namespace TIASshot.Tests {
    /// <summary>
    /// ImagingSource の接続先デバイスの選択(IScamDeviceSelector)のテスト(層①.IScam から切り出した判断ロジック).
    ///
    /// 仕様: PLAN_06「カメラの選択」(両機種を同時につないでも指定した機種だけを使う)・IScamDeviceSelector の契約
    ///   - DeviceName(デバイス状態ファイル名・設定キー)は列挙名から空白を除いたもの
    ///   - キーが(大文字小文字を区別して)一致する最初の列挙名(空白入りの元の名前)を返す.見つからなければ null
    /// </summary>
    [TestFixture]
    public class IScamDeviceSelectorTests {

        [Test]
        public void ToDeviceKey_空白を除く() {
            Assert.That(IScamDeviceSelector.ToDeviceKey("DFK 33UX178"), Is.EqualTo("DFK33UX178"));
        }

        [Test]
        public void ToDeviceKey_複数の空白_すべて除く() {
            Assert.That(IScamDeviceSelector.ToDeviceKey(" DFK  33 UX178 "), Is.EqualTo("DFK33UX178"));
        }

        [Test]
        public void ToDeviceKey_null_null() {
            Assert.That(IScamDeviceSelector.ToDeviceKey(null), Is.Null);
        }

        [Test]
        public void FindDeviceName_キーが一致する元の名前を返す() {
            var names = new[] { "DFK 23UX249", "DFK 33UX178" };
            Assert.That(IScamDeviceSelector.FindDeviceName(names, "DFK33UX178"), Is.EqualTo("DFK 33UX178"));
        }

        [Test]
        public void FindDeviceName_同じキーが複数_最初の名前() {
            var names = new[] { "DFK 33UX178", "DFK33UX178" };
            Assert.That(IScamDeviceSelector.FindDeviceName(names, "DFK33UX178"), Is.EqualTo("DFK 33UX178"));
        }

        [Test]
        public void FindDeviceName_大文字小文字が違う_一致しない() {
            var names = new[] { "DFK 33UX178" };
            Assert.That(IScamDeviceSelector.FindDeviceName(names, "dfk33ux178"), Is.Null);
        }

        [Test]
        public void FindDeviceName_一致なし_null() {
            var names = new[] { "DFK 23UX249" };
            Assert.That(IScamDeviceSelector.FindDeviceName(names, "DFK33UX178"), Is.Null);
        }

        [Test]
        public void FindDeviceName_一覧がnull_null() {
            Assert.That(IScamDeviceSelector.FindDeviceName(null, "DFK33UX178"), Is.Null);
        }

        [Test]
        public void FindDeviceName_一覧が空_null() {
            Assert.That(IScamDeviceSelector.FindDeviceName(new List<string>(), "DFK33UX178"), Is.Null);
        }

        [Test]
        public void FindDeviceName_キーがnull_null() {
            Assert.That(IScamDeviceSelector.FindDeviceName(new[] { "DFK 33UX178" }, null), Is.Null);
        }

        [Test]
        public void FindDeviceName_キーが空_null() {
            // 一覧に空の名前があっても空のキーには一致させない
            Assert.That(IScamDeviceSelector.FindDeviceName(new[] { "", "DFK 33UX178" }, ""), Is.Null);
        }

        [Test]
        public void FindDeviceName_一覧中のnullと空を飛ばす() {
            var names = new[] { null, "", "DFK 33UX178" };
            Assert.That(IScamDeviceSelector.FindDeviceName(names, "DFK33UX178"), Is.EqualTo("DFK 33UX178"));
        }
    }
}