Ejemplo n.º 1
0
        public void Test_Convert_Dispose()
        {
            // モック
            var resourceUnicodeMock = new Mock <IDisposable>();
            var resourceAnsiMock    = new Mock <IDisposable>();
            var dataMock            = new TestDataObject();

            dataMock.Setup_GetDataPresent("UniformResourceLocatorW", () => true);
            dataMock.Setup_GetDataPresent("UniformResourceLocator", () => true);
            dataMock.Setup_GetData("UniformResourceLocatorW", () => resourceUnicodeMock.Object);
            dataMock.Setup_GetData("UniformResourceLocator", () => resourceAnsiMock.Object);

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // 変換テスト
            var target = new DragEventArgsToUrlConverter();

            target.ConvertToUri = false;
            target.Convert(args, null, null, null)
            .Should().BeNull();

            resourceUnicodeMock.Verify(m => m.Dispose(), Times.Once());
            resourceAnsiMock.Verify(m => m.Dispose(), Times.Once());
        }
Ejemplo n.º 2
0
        public void Test_Convert_ToString_PriorityUnicode()
        {
            // ドロップテストデータ
            var urlUnicode = "https://www.google.com/unicode";
            var urlAnsi    = "https://www.google.com/ansi";

            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent("UniformResourceLocatorW", () => true);
            dataMock.Setup_GetDataPresent("UniformResourceLocator", () => true);
            dataMock.Setup_GetData("UniformResourceLocatorW", () => new MemoryStream(Encoding.Unicode.GetBytes(urlUnicode)));
            dataMock.Setup_GetData("UniformResourceLocator", () => new MemoryStream(Encoding.ASCII.GetBytes(urlAnsi)));

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // 変換テスト
            var target = new DragEventArgsToUrlConverter();

            target.ConvertToUri = false;
            target.Convert(args, null, null, null)
            .Should().BeOfType <string>()
            .Which
            .Should().Be(urlUnicode);
        }
Ejemplo n.º 3
0
        public void Test_Convert_ToString_Fallback2()
        {
            // ドロップテストデータ
            var url = "https://www.google.com";

            // モック
            var resourceMock = new Mock <IDisposable>();

            resourceMock.Setup(m => m.Dispose()).Throws(new Exception());
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent("UniformResourceLocatorW", () => true);
            dataMock.Setup_GetDataPresent("UniformResourceLocator", () => true);
            dataMock.Setup_GetData("UniformResourceLocatorW", () => resourceMock.Object);
            dataMock.Setup_GetData("UniformResourceLocator", () => new MemoryStream(Encoding.ASCII.GetBytes(url)));

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // 変換テスト
            var target = new DragEventArgsToUrlConverter();

            target.ConvertToUri = false;
            target.Convert(args, null, null, null)
            .Should().BeOfType <string>()
            .Which
            .Should().Be(url);
        }
Ejemplo n.º 4
0
        public void Test_DragOver_Reject()
        {
            // テスト対象のアクションを呼び出すためのトリガ作成
            var element = new UIElement();
            var action  = new TestAction();

            // テスト対象の準備
            var trigger = new DragDropTerigger();

            trigger.AcceptDropFormats = new[] { DataFormats.FileDrop };
            trigger.AcceptDropEffect  = DragDropEffects.Move;

            // 要素にアタッチ
            trigger.Attach(element);
            trigger.Actions.Add(action);

            // ドロップデータのモック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent(DataFormats.FileDrop, () => false);

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object, allowedEffects: DragDropEffects.All);

            args.RoutedEvent = UIElement.DragOverEvent;
            args.Effects     = DragDropEffects.Copy;

            // イベントを発生させる
            element.RaiseEvent(args);

            // イベント処理結果検証
            args.Effects.Should().Be(DragDropEffects.None);
        }
Ejemplo n.º 5
0
        public void Test_Convert_ToUri()
        {
            // ドロップテストデータ
            var paths = new string[] { @"c:\directory\file.ext", @"d:\path\to\data" };

            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent(DataFormats.FileDrop, () => true);
            dataMock.Setup_GetData(DataFormats.FileDrop, () => paths);

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // テストデータを期待値の型に変換しておく
            var expects = paths.Select(p => new Uri(p)).ToArray();

            // 変換テスト
            var target = new DragEventArgsToFilePathConverter();

            target.ConvertToUri = true;
            target.Convert(args, null, null, null)
            .Should().BeOfType <Uri[]>()
            .Which
            .Should().Equal(expects);
        }
Ejemplo n.º 6
0
        public void Test_Convert_ToUri_FromAnsi()
        {
            // ドロップテストデータ
            var url = "https://www.google.com";

            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent("UniformResourceLocator", () => true);
            dataMock.Setup_GetData("UniformResourceLocator", () => new MemoryStream(Encoding.ASCII.GetBytes(url)));

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // テストデータを期待値の型に変換しておく
            var expects = new Uri(url);

            // 変換テスト
            var target = new DragEventArgsToUrlConverter();

            target.ConvertToUri = true;
            target.Convert(args, null, null, null)
            .Should().BeOfType <Uri>()
            .Which
            .Should().Be(expects);
        }
Ejemplo n.º 7
0
        public void Test_AcceptDropFormats_UnrelatedConverter()
        {
            // テスト対象のアクションを呼び出すためのトリガ作成
            var element = new UIElement();
            var action  = new TestAction();

            // 専用インターフェースを実装していない(ただAcceptFormatsプロパティがあるだけの)コンバータ
            var converter = new TestHasFormatsValueConverter();

            converter.AcceptFormats = new[] { "Conv1", "Conv2", };

            // テスト対象の準備
            var trigger = new DragDropTerigger();

            trigger.AcceptDropEffect   = DragDropEffects.Move;
            trigger.ParameterConverter = converter;

            // 要素にアタッチ
            trigger.Attach(element);
            trigger.Actions.Add(action);

            // ドロップデータのモック
            var dataMock = new TestDataObject();

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object, allowedEffects: DragDropEffects.All);

            args.RoutedEvent = UIElement.DragOverEvent;

            // 専用インターフェスでなければコンパータでの指定はできない。プロパティ指定もしていなければ何でも受け付ける状態。
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Conv1", () => false);
                dataMock.Setup_GetDataPresent("Conv2", () => false);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.Move);
            }
        }
Ejemplo n.º 8
0
        public void Test_Convert_NotFileDrop2()
        {
            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent(DataFormats.FileDrop, () => true);
            dataMock.Setup_GetData(DataFormats.FileDrop, () => null);

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // 変換テスト
            var target = new DragEventArgsToFilePathConverter();

            target.ConvertToUri = false;
            target.Convert(args, null, null, null)
            .Should().BeNull();
        }
Ejemplo n.º 9
0
        public void Test_Convert_NotUrlDrop2()
        {
            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent("UniformResourceLocatorW", () => true);
            dataMock.Setup_GetData("UniformResourceLocatorW", () => null);

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // 変換テスト
            var target = new DragEventArgsToUrlConverter();

            target.ConvertToUri = false;
            target.Convert(args, null, null, null)
            .Should().BeNull();
        }
Ejemplo n.º 10
0
        public void Test_Convert_ToUri_NotConvert()
        {
            // ドロップテストデータ
            var url = "::::::::::::";

            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent("UniformResourceLocatorW", () => true);
            dataMock.Setup_GetData("UniformResourceLocatorW", () => new MemoryStream(Encoding.Unicode.GetBytes(url)));

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // 変換テスト
            var target = new DragEventArgsToUrlConverter();

            target.ConvertToUri = true;
            target.Convert(args, null, null, null)
            .Should().BeNull();
        }
Ejemplo n.º 11
0
        public void Test_Convert_ToString_Empty()
        {
            // ドロップテストデータ
            var paths = new string[] { };

            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent(DataFormats.FileDrop, () => true);
            dataMock.Setup_GetData(DataFormats.FileDrop, () => paths);

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // 変換テスト
            var target = new DragEventArgsToFilePathConverter();

            target.ConvertToUri = false;
            target.Convert(args, null, null, null)
            .Should().BeOfType <string[]>()
            .Which
            .Should().BeEmpty();
        }
Ejemplo n.º 12
0
        public void Test_Convert_ByTargetType_NotUri()
        {
            // ドロップテストデータ
            var url = "https://www.google.com";

            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent("UniformResourceLocatorW", () => true);
            dataMock.Setup_GetData("UniformResourceLocatorW", () => new MemoryStream(Encoding.Unicode.GetBytes(url)));

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object);

            // 変換テスト
            var target = new DragEventArgsToUrlConverter();

            target.ConvertToUri = false;
            target.Convert(args, typeof(int), null, null)
            .Should().BeOfType <string>()
            .Which
            .Should().Be(url);
        }
Ejemplo n.º 13
0
        public void Test_DragDrop_Convert()
        {
            // テスト対象のアクションを呼び出すためのトリガ作成
            var element = new UIElement();
            var action  = new TestAction();

            // テスト対象の準備
            var trigger = new DragDropTerigger();

            trigger.ParameterConverter = new DragEventArgsToFilePathConverter();

            // 要素にアタッチ
            trigger.Attach(element);
            trigger.Actions.Add(action);

            // ドロップテストデータ
            var paths = new string[] { @"c:\directory\file.ext", @"d:\path\to\data" };

            // モック
            var dataMock = new TestDataObject();

            dataMock.Setup_GetDataPresent(DataFormats.FileDrop, () => true);
            dataMock.Setup_GetData(DataFormats.FileDrop, () => paths);

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object, allowedEffects: DragDropEffects.All);

            args.RoutedEvent = UIElement.DropEvent;
            args.Effects     = DragDropEffects.Copy;

            // イベントを発生させる
            element.RaiseEvent(args);

            // イベント処理結果検証
            action.InvokedParameters.Should().Contain(new[] { paths });
        }
Ejemplo n.º 14
0
        public void Test_AcceptDropFormats_FromProperty()
        {
            // テスト対象のアクションを呼び出すためのトリガ作成
            var element = new UIElement();
            var action  = new TestAction();

            // テスト対象の準備
            var trigger = new DragDropTerigger();

            trigger.AcceptDropFormats = new[] { "Data1", "Data2", };
            trigger.AcceptDropEffect  = DragDropEffects.Move;

            // 要素にアタッチ
            trigger.Attach(element);
            trigger.Actions.Add(action);

            // ドロップデータのモック
            var dataMock = new TestDataObject();

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object, allowedEffects: DragDropEffects.All);

            args.RoutedEvent = UIElement.DragOverEvent;

            // プロパティで指定される書式に含めば受け付けられる
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Data1", () => true);
                dataMock.Setup_GetDataPresent("Data2", () => false);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.Move);
            }

            // プロパティで指定される書式に含めば受け付けられる
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Data1", () => false);
                dataMock.Setup_GetDataPresent("Data2", () => true);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.Move);
            }

            // プロパティでの指定に含まなければ受け付けない
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Data1", () => false);
                dataMock.Setup_GetDataPresent("Data2", () => false);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.None);
            }
        }
Ejemplo n.º 15
0
        public void Test_AcceptDropFormats_FromBoth()
        {
            // テスト対象のアクションを呼び出すためのトリガ作成
            var element = new UIElement();
            var action  = new TestAction();

            // 専用インターフェースを実装したコンバータ
            var converter = new Mock <IDragDropTriggerParameterConverter>();

            converter.Setup(m => m.AcceptFormats).Returns(() => new[] { "Conv1", "Conv2", });

            // テスト対象の準備
            var trigger = new DragDropTerigger();

            trigger.AcceptDropFormats  = new[] { "Data1", "Data2", };
            trigger.AcceptDropEffect   = DragDropEffects.Move;
            trigger.ParameterConverter = converter.Object;

            // 要素にアタッチ
            trigger.Attach(element);
            trigger.Actions.Add(action);

            // ドロップデータのモック
            var dataMock = new TestDataObject();

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object, allowedEffects: DragDropEffects.All);

            args.RoutedEvent = UIElement.DragOverEvent;

            // 両方指定されていればプロパティ優先。コンバータの持っている書式指定は無効。
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Conv1", () => true);
                dataMock.Setup_GetDataPresent("Conv2", () => false);
                dataMock.Setup_GetDataPresent("Data1", () => false);
                dataMock.Setup_GetDataPresent("Data2", () => false);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.None);
            }

            // 両方指定されていればプロパティ優先。プロパティの指定を受け付ける。
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Conv1", () => false);
                dataMock.Setup_GetDataPresent("Conv2", () => false);
                dataMock.Setup_GetDataPresent("Data1", () => true);
                dataMock.Setup_GetDataPresent("Data2", () => false);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.Move);
            }

            // プロパティでの書式指定値が null
            trigger.AcceptDropFormats = null;

            // 明示的な指定があれば全許可の値も効く。コンバータの書式指定ではなく、プロパティに null 設定したものが効く。(なのでなんでも受付になっている)
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Conv1", () => true);
                dataMock.Setup_GetDataPresent("Conv2", () => false);
                dataMock.Setup_GetDataPresent("Data1", () => false);
                dataMock.Setup_GetDataPresent("Data2", () => false);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.Move);
            }
        }
Ejemplo n.º 16
0
        public void Test_AcceptDropFormats_FromConverter()
        {
            // テスト対象のアクションを呼び出すためのトリガ作成
            var element = new UIElement();
            var action  = new TestAction();

            // 専用インターフェースを実装したコンバータ
            var converter = new Mock <IDragDropTriggerParameterConverter>();

            converter.Setup(m => m.AcceptFormats).Returns(() => new[] { "Conv1", "Conv2", });

            // テスト対象の準備
            var trigger = new DragDropTerigger();

            trigger.AcceptDropEffect   = DragDropEffects.Move;
            trigger.ParameterConverter = converter.Object;

            // 要素にアタッチ
            trigger.Attach(element);
            trigger.Actions.Add(action);

            // ドロップデータのモック
            var dataMock = new TestDataObject();

            // テスト用のイベントパラメータ生成
            var args = TestActivator.CreateDragEventArgs(dataMock.Object, allowedEffects: DragDropEffects.All);

            args.RoutedEvent = UIElement.DragOverEvent;

            // コンバータで指定される書式に含めば受け付けられる
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Conv1", () => true);
                dataMock.Setup_GetDataPresent("Conv2", () => false);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.Move);
            }

            // コンバータで指定される書式に含めば受け付けられる
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Conv1", () => false);
                dataMock.Setup_GetDataPresent("Conv2", () => true);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.Move);
            }

            // コンバータでの指定に含まなければ受け付けない
            {
                // イベントデータ設定
                dataMock.Setup_GetDataPresent("Conv1", () => false);
                dataMock.Setup_GetDataPresent("Conv2", () => false);
                args.Effects = DragDropEffects.None;

                // イベントを発生させる
                args.Handled = false;
                element.RaiseEvent(args);

                // イベント処理結果検証
                args.Effects.Should().Be(DragDropEffects.None);
            }
        }