public void AnkimonStateへの遷移()
        {
            EPuzzleWindow window = null;
            using (var tempDirectory = new TempDirectory(true))
            {
                tempDirectory.AddFile(@"mondai\MondaiDocument.xml", TestResources.Mondai03);
                tempDirectory.AddFile(@"help\HelpDocument.xml", TestResources.HelpDocumentXml);

                var ePuzzleData = EPuzzleData.Create(tempDirectory.Name);
                var data = ePuzzleData;
                var userInfo = ePuzzleData.CurrentUserInfo;
                WindowState.NowObject = new TestNowObject();

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

                var a = new Fish.eigotest.TestState(window);
                a.MoveToStartGameState();

                Assert.IsInstanceOf<FadeoutState>(window.State);
                EPuzzleTime.Now += TimeSpan.FromSeconds(5d);
                window.Tick();
                Assert.IsInstanceOf<FadeinState>(window.State);
                EPuzzleTime.Now += TimeSpan.FromSeconds(5d);
                window.Tick();

                userInfo.SetLastDaimonInfo(new LastDaimonInfo(data.CurrentMondaiDocument.Id, "daimon3", t0));
                userInfo.MondaiResults.AddNew("3-1", t0, TimeSpan.FromSeconds(1d));
                userInfo.MondaiResults.AddNew("3-2", t0, TimeSpan.FromSeconds(1d));

                // ゲームスタート画面
                Assert.IsInstanceOf<StartGameState>(window.State);
                {
                    var item = window.State.Items.First(x => x.Name == "StartGameButton");
                    item.OnClick(new MouseEventInfo(MouseButtons.Left));
                }
                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();
                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();

                Assert.IsInstanceOf<MondaiDocumentMenuState>(window.State);
                {
                    var button = window.State.GetAllItems().Where(x => x.Tag is MondaiDocument).First();
                    window.State.CurrentItem = button;
                    window.State.OnAction0();
                }
                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();
                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();

                var daimonState = (DaimonState)window.State;
                Assert.IsInstanceOf<DaimonState>(daimonState);
                Assert.AreEqual("daimon3", daimonState.Daimon.Id);

                var chumonButton = daimonState.GetAllItems().OfType<ChumonButton>().Single(x => "3-3" == x.Chumon.Id);
                window.State.CurrentItem = chumonButton;
                window.State.OnAction0();
                window.Tick();

                Assert.IsInstanceOf<ClickDeKaishiState>(window.State);
                window.State.OnAction0();
                window.Tick();

                Assert.IsInstanceOf<AnkimonState>(window.State);
                var ankimonState = (AnkimonState)window.State;
                var ankimonRowContainer0 = ankimonState.GetAllItems().OfType<AnkimonRowContainer>().First();
                var ankimonRowContainer1 = ankimonState.GetAllItems().OfType<AnkimonRowContainer>().ElementAt(1);
                Assert.False(ankimonState.正解判定());

                // Action3でエスケープステートに
                window.State.OnAction3();
                Assert.IsInstanceOf<PauseState>(window.State);
                window.State.OnAction3();
                Assert.IsInstanceOf<AnkimonState>(window.State);

                var wordCards = ankimonRowContainer0.GetAllItems().Concat(ankimonRowContainer1.GetAllItems()).
                    Where(x => x is WordCard).ToArray();

                ankimonRowContainer0.WordCardContainer.Items.Clear();
                ankimonRowContainer1.WordCardContainer.Items.Clear();

                Assert.False(ankimonState.正解判定());
                ankimonRowContainer0.WordCardContainer.Items.Add(wordCards.First(x => x.Text == "swim"));
                ankimonRowContainer0.WordCardContainer.Items.Add(wordCards.First(x => x.Text == "swam"));
                ankimonRowContainer0.WordCardContainer.Items.Add(wordCards.First(x => x.Text == "swum"));
                ankimonRowContainer1.WordCardContainer.Items.Add(wordCards.First(x => x.Text == "run"));
                ankimonRowContainer1.WordCardContainer.Items.Add(wordCards.First(x => x.Text == "ran"));
                ankimonRowContainer1.WordCardContainer.Items.Add(wordCards.Where(x => x.Text == "run").ElementAt(1));
                Assert.True(ankimonState.正解判定());

                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();
                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();

                Assert.IsInstanceOf<ShomonState>(window.State);
                window.Tick();

                var shomonState = (ShomonState)window.State;
                var wordCard0 = shomonState.GetAllItems().First(x => "This is" == x.Text);
                Assert.NotNull(wordCard0);
                var wordCard1 = shomonState.GetAllItems().First(x => "a ball." == x.Text);
                Assert.NotNull(wordCard1);

                window.State.CurrentItem = wordCard0;
                window.State.OnAction0();
                window.Tick();
                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();

                window.State.CurrentItem = wordCard1;
                window.State.OnAction0();
                window.Tick();
                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();
                window.Tick();

                var kaitouBox = (CardBox)shomonState.GetAllItems().First(x => "kaitouBox" == x.Name);
                Assert.AreEqual("This is a ball.", MondaiWord.Join(kaitouBox.GetAllItems().OfType<WordCard>().Select(x => x.MondaiWord).ToArray()));

                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();
                WindowState.NowObject.Now += TimeSpan.FromSeconds(10d);
                window.Tick();

                Assert.IsInstanceOf<AnkimonState>(window.State);
            }
        }