public void Test2()
        {
            MondaiDocument doc = null;
            using (var tempFile = new TempFile(TestResources.Mondai03))
            {
                doc = MondaiDocument.Load(tempFile.FileName);
            }
            var window = new EPuzzleWindow();
            var ankimon = (Ankimon)doc.GetAllItems().First(x => "3-3-1" == x.Id);
            CollectionAssert.AreEqual(new [] { "swim", "swam", "swum", "run", "ran", "run" }, ankimon.GetMondaiWords().Select(x => x.Text));

            var ankimonState = new AnkimonState(window, ankimon);
            Assert.AreSame(ankimon, ankimonState.Ankimon);

            WindowState.NowObject = new TestNowObject();
            var t0 = new DateTime(2013, 8, 22, 0, 0, 0); // UTC
            WindowState.NowObject.Now = t0;

            window.State = ankimonState;

            var xxx = window.State.GetAllItems().OfType<WordCard>().ToArray();
            var a = xxx[0];
            var b = xxx[3];
            var parentOfA = a.Parent;
            var parentOfB = b.Parent;
            Assert.AreSame(a.Parent, xxx[1].Parent);
            Assert.AreNotSame(parentOfA, parentOfB);
            Assert.AreSame(window.State.CurrentItem, a);
            /*
            WindowState.NowObject.Now += TimeSpan.FromSeconds(0.1d);
            window.Tick();
            */

            // WordCardにAction0で選択
            window.State.OnAction0();
            Assert.True(a.IsSelected);
            Assert.AreSame(a, window.State.GetAllItems().Single(x => x.IsSelected));

            // WordCardにAction0で選択、2回目
            window.State.OnAction0();
            Assert.True(a.IsSelected);
            Assert.AreSame(a, window.State.GetAllItems().Single(x => x.IsSelected));

            // Action1で選択解除
            window.State.OnAction1();
            Assert.False(window.State.GetAllItems().Any(x => x.IsSelected));

            // WordCardにAction0で選択
            window.State.OnAction0();
            Assert.True(a.IsSelected);
            Assert.AreSame(a, window.State.GetAllItems().Single(x => x.IsSelected));

            // カード交換開始
            window.State.CurrentItem = b;
            if ("run" == b.Text)
            {
                Assert.Pass("'run', 'run'は交換しないのでテストはここで終了");
            }
            window.State.OnAction0();
            Assert.False(window.State.GetAllItems().OfType<WordCard>().Where(x => x.IsSelected).Any());

            // カード交換完了
            WindowState.NowObject.Now += TimeSpan.FromSeconds(1d);
            window.Tick();

            // カード交換で正解した場合は、次へ遷移してしまうのでここでエラー

            var xxxx = window.State.GetAllItems().OfType<WordCard>().ToArray();
            Assert.False(xxxx.Any(x => x.IsSelected));
            Assert.AreEqual(6, xxxx.Count());
            var aa = xxxx[0];
            var bb = xxxx[3];
            Assert.AreEqual(a.Text, bb.Text);
            Assert.AreEqual(b.Text, aa.Text);

            // マウスクリックテスト
            window.MouseMove(aa.BorderLeft, aa.BorderTop);
            window.Tick();
            Assert.AreSame(aa, window.State.CurrentItem);
            window.MouseUp(aa.BorderLeft, aa.BorderTop, MouseButtons.Left);
            Assert.True(aa.IsSelected);

            // 右クリックで選択を全解除
            window.State.CurrentItem = bb;
            window.MouseUp(0f, 0f, MouseButtons.Right);
            Assert.False(window.State.GetAllItems().Any(x => x.IsSelected));
        }
        public void カード分割機能に対応させる()
        {
            using (var test = new EPuzzleTestManager())
            {
                test.AddFile(@"mondai\MondaiDocument.xml", TestResources.Mondai03);
                test.AddFile(@"help\HelpDocument.xml", TestResources.HelpDocumentXml);
                test.Initialize();

                var window = test.Window;
                var ankimon = (Ankimon)window.EPuzzleData.CurrentMondaiDocument.GetItem("3-3-4");
                var ankimonState = new AnkimonState(window, ankimon);
                window.State = ankimonState;

                var ankimonRowContainer = ankimonState.GetAllItems().OfType<AnkimonRowContainer>().Single();
                var wordCards = ankimonRowContainer.GetAllItems().OfType<WordCard>().ToArray();

                ankimonRowContainer.WordCardContainer.Items.Clear();

                Assert.False(ankimonState.正解判定());
                ankimonRowContainer.WordCardContainer.Items.Add(wordCards.Single(x => x.Text == "Jan"));
                ankimonRowContainer.WordCardContainer.Items.Add(wordCards.Single(x => x.Text == "u"));
                ankimonRowContainer.WordCardContainer.Items.Add(wordCards.Single(x => x.Text == "ar"));
                ankimonRowContainer.WordCardContainer.Items.Add(wordCards.Single(x => x.Text == "y"));
                Assert.True(ankimonState.正解判定());
            }
        }
        public void Test1()
        {
            MondaiDocument doc = null;
            using (var tempFile = new TempFile(TestResources.Mondai03))
            {
                doc = MondaiDocument.Load(tempFile.FileName);
            }
            var window = new EPuzzleWindow();
            var ankimon = (Ankimon)doc.GetAllItems().First(x => "3-3-1" == x.Id);
            CollectionAssert.AreEqual(new []
            {
                new MondaiWord("swim"),
                new MondaiWord("swam"),
                new MondaiWord("swum"),
                new MondaiWord("run"),
                new MondaiWord("ran"),
                new MondaiWord("run")

            }, ankimon.GetMondaiWords());

            var ankimonState = new AnkimonState(window, ankimon);
            Assert.AreSame(ankimon, ankimonState.Ankimon);

            var ankimonBox = ankimonState.GetAllItems().OfType<AnkimonBox>().Single();
            Assert.AreEqual(2, ankimonBox.Items.Count());
            CollectionAssert.AllItemsAreInstancesOfType(ankimonBox.Items, typeof(AnkimonRowContainer));
            var ankimonRowContainer0 = (AnkimonRowContainer)ankimonBox.Items[0];
            var ankimonRowContainer1 = (AnkimonRowContainer)ankimonBox.Items[1];

            Assert.AreEqual(3, ankimonRowContainer0.WordCardContainer.Items.Count());
            Assert.AreEqual(3, ankimonRowContainer1.WordCardContainer.Items.Count());

            CollectionAssert.AreEquivalent
            (
                new [] { "swim", "swam", "swum", "run", "ran", "run" },
                ankimonBox.GetAllItems().Where(x => x is WordCard).Select(x => x.Text).ToArray()
            );

            Assert.AreEqual(100, ankimonBox.BorderLeft);
            Assert.AreEqual(100, ankimonBox.BorderTop);

            // AnkimonRowContainer
            Assert.AreEqual(DrawingObjectPosition.Relative, ankimonRowContainer0.Position);
            Assert.AreEqual(110, ankimonRowContainer0.BorderLeft);
            Assert.AreEqual(100, ankimonRowContainer0.BorderTop);

            // LabelItem
            var label0 = ankimonRowContainer0.Label;
            Assert.AreEqual("泳ぐ", label0.Text);
            Assert.AreEqual(100, label0.Width);
            Assert.AreEqual(110, label0.BorderLeft);
            Assert.AreEqual(100, label0.OuterWidth);
            Assert.AreEqual(210, label0.BorderRight);

            // wordCard00
            var wordCard00 = ankimonRowContainer0.WordCardContainer.Items[0];
            var wordCard10 = ankimonRowContainer1.WordCardContainer.Items[0];
            Assert.IsInstanceOf<WordCard>(wordCard00);
            Assert.AreEqual(DrawingObjectPosition.Absolute, wordCard00.Position);
            Assert.AreEqual(100, wordCard00.OuterTop);
            Assert.AreEqual(110, ankimonRowContainer1.BorderLeft);
            //			Assert.AreEqual(110 + WordCard.WordCardHeight + 10, wordCard10.BorderTop);
            //			Assert.AreEqual(110 + WordCard.WordCardHeight + 10, ankimonRowContainer1.BorderTop);
        }