public void 複数のsekai項目のロードテスト()
        {
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, _mondai03);

            //				var mondaiDocument = MondaiDocument.Load(tempFile.Value);
                var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);

                var shomon = (Shomon)mondaiDocument.Items[1].Items[0].Items[1];
                Assert.AreEqual("私には従兄弟がありません。", shomon.Mondaibun);
                Assert.AreEqual(3, shomon.CorrectAnswers.Count());
                Assert.AreEqual("I don't have any cousins.", shomon.CorrectAnswers[0].Text);
                Assert.AreEqual("I don't have a cousin.", shomon.CorrectAnswers[1].Text);
                Assert.AreEqual("I have no cousins.", shomon.CorrectAnswers[2].Text);

                // 正解判定テスト
                Assert.True(shomon.正解判定(new []
                {
                    new MondaiWord("I"),
                    new MondaiWord("don't"),
                    new MondaiWord("have"),
                    new MondaiWord("any"),
                    new MondaiWord("cousins"),
                    new MondaiWord("."),
                }));
                Assert.True(shomon.正解判定(new []
                {
                    new MondaiWord("I"),
                    new MondaiWord("don't"),
                    new MondaiWord("have"),
                    new MondaiWord("a"),
                    new MondaiWord("cousin"),
                    new MondaiWord("."),
                }));
                Assert.True(shomon.正解判定(new []
                {
                    new MondaiWord("I"),
                    new MondaiWord("have"),
                    new MondaiWord("no"),
                    new MondaiWord("cousins"),
                    new MondaiWord("."),
                }));
            }
        }
        public void 整合性検証テスト()
        {
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, @"<?xml version=""1.0"" encoding=""utf-8""?>
            <mondai-document id=""mondaiDocument1"" title=""DocumentC"">
            <daimon id=""daimon1"" title=""基礎I"">
            <chumon id=""chumon1"" title=""This is a pen."">
            <shomon id=""1-1-1"">
                <mondaibun>[英訳] これはノートです。</mondaibun>
                <seikai>Is this a notebook?</seikai>
                <word>This</word>
                <word>is</word>
                <word>a notebook</word>
                <word>.</word>
                <word></word>
            </shomon>
            </chumon>
            </daimon>
            </mondai-document>");

                Assert.Throws<MondaiDocumentException>(() =>
                {
            //					var mondaiDocument = MondaiDocument.Load(tempFile.Value);
                    var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);
                });
            }

            // id重複
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, @"<?xml version=""1.0"" encoding=""utf-8""?>
            <mondai-document id=""mondaiDocument1"" title=""DocumentD"">
            <daimon id=""id1"" title=""基礎I"">
            <chumon id=""id1"" title=""This is a pen."">
            <shomon id=""1-1-1"">
                <mondaibun>[英訳] これはノートです。</mondaibun>
                <seikai>This is a notebook.</seikai>
                <word>This</word>
                <word>is</word>
                <word>a notebook</word>
                <word>.</word>
            </shomon>
            <shomon id=""1-1-2"">
                <mondaibun>[英訳] これはボールです。</mondaibun>
                <seikai>This is a ball.</seikai>
                <word>This is</word>
                <word>a ball.</word>
            </shomon>
            </chumon>
            <chumon id=""chumon2"" title=""He is a policeman."">
            <optional />
            <shomon id=""1-2-1"">
                <mondaibun>[英訳] これはボールです。</mondaibun>
                <seikai>This is a ball.</seikai>
                <word>This is</word>
                <word>a ball.</word>
            </shomon>
            </chumon>
            </daimon>
            </mondai-document>");

                Assert.Throws<MondaiDocumentException>(() =>
                {
            //					var mondaiDocument = MondaiDocument.Load(tempFile.Value);
                    var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);
                });
            }
        }
        public void 正解探索テスト()
        {
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, _mondai03);

            //				var mondaiDocument = MondaiDocument.Load(tempFile.Value);
                var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);

                var shomon = (Shomon)mondaiDocument.Items[1].Items[0].Items[1];
                var result = shomon.正解探索();
                CollectionAssert.AreEqual(new []
                {
                    new MondaiWord("I"),
                    new MondaiWord("don't"),
                    new MondaiWord("have"),
                    new MondaiWord("any"),
                    new MondaiWord("cousins"),
                    new MondaiWord("."),

                }, result[0]);

                CollectionAssert.AreEqual(new []
                {
                    new MondaiWord("I"),
                    new MondaiWord("don't"),
                    new MondaiWord("have"),
                    new MondaiWord("a"),
                    new MondaiWord("cousin"),
                    new MondaiWord("."),

                }, result[1]);

                CollectionAssert.AreEqual(new []
                {
                    new MondaiWord("I"),
                    new MondaiWord("have"),
                    new MondaiWord("no"),
                    new MondaiWord("cousins"),
                    new MondaiWord("."),

                }, result[2]);
            }
        }
        public void OptionalPropertyTest()
        {
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, _mondai02);

            //				var mondaiDocument = MondaiDocument.Load(tempFile.Value);
                var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);

                Assert.False(mondaiDocument.GetItem("d2_chumon1").IsOptional);
                Assert.True(mondaiDocument.GetItem("d2_chumon2").IsOptional);
                Assert.True(mondaiDocument.GetItem("d2_chumon3").IsOptional);
                Assert.False(mondaiDocument.GetItem("d2_chumon4").IsOptional);

                // shuffle
                Assert.True(mondaiDocument.GetItem("d2_chumon1").IsShuffled);
                Assert.True(mondaiDocument.GetItem("d2_chumon2").IsShuffled);
                Assert.False(mondaiDocument.GetItem("d2_chumon3").IsShuffled);
            }
        }
        public void SaveTest()
        {
            using (var tempFile1 = new TempFile())
            using (var tempFile2 = new TempFile())
            {
                FileUtility.Save(tempFile1.Value, _mondai02);

                var accessor = new MondaiDocumentFileAccessor1_0();
                var mondaiDocument = accessor.Load(tempFile1.Value);
                accessor.Save(tempFile2.Value, mondaiDocument);
                FileAssert.AreEqual(tempFile1.Value, tempFile2.Value);
            }
            using (var tempFile1 = new TempFile())
            using (var tempFile2 = new TempFile())
            {
                FileUtility.Save(tempFile1.Value, _mondai03);

                var accessor = new MondaiDocumentFileAccessor1_0();
                var mondaiDocument = accessor.Load(tempFile1.Value);
                accessor.Save(tempFile2.Value, mondaiDocument);
                FileAssert.AreEqual(tempFile1.Value, tempFile2.Value);
            }
        }
        public void NextItemTest()
        {
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, _mondai02);

            //				var mondaiDocument = MondaiDocument.Load(tempFile.Value);
                var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);

                var daimon1 = mondaiDocument.GetDaimon("daimon1");
                var daimon2 = mondaiDocument.GetDaimon("daimon2");
                var daimon3 = mondaiDocument.GetDaimon("daimon3");

                Assert.Null(daimon1.PreviousItem);
                Assert.AreSame(daimon2, daimon1.NextItem);
                Assert.AreSame(daimon1, daimon2.PreviousItem);
                Assert.AreSame(daimon3, daimon2.NextItem);
                Assert.Null(daimon3.NextItem);

                var chumon1 = daimon1.Items[0];
                var chumon2 = daimon1.Items[1];
                Assert.Null(chumon1.PreviousItem);
                Assert.AreSame(chumon2, chumon1.NextItem);
                Assert.AreSame(chumon1, chumon2.PreviousItem);
                Assert.Null(chumon2.NextItem);

                var shomon0 = daimon1.Items[0].Items[0];
                var shomon1 = daimon1.Items[0].Items[1];
                Assert.Null(shomon0.PreviousItem);
                Assert.AreSame(shomon1, shomon0.NextItem);
                Assert.AreSame(shomon0, shomon1.PreviousItem);
                Assert.Null(shomon1.NextItem);
            }
        }
        public void mondaiWordタグが空な場合は無視する()
        {
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, _mondai03);

                var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);
            //				var mondaiDocument = MondaiDocument.Load(tempFile.Value);

                var shomon = (Shomon)mondaiDocument.Items[0].Items[0].Items[0];
                Assert.AreEqual(4, shomon.MondaiWords.Count());
            }
        }
        public void LoadTest()
        {
            var userInfo = new EPuzzleUserInfo();
            MondaiDocument doc = null;
            using (var tempFile = new TempFile(_mondai03))
            {
                var accessor = new MondaiDocumentFileAccessor1_0();
                doc = accessor.Load(tempFile.FileName);
            }
            Assert.AreEqual(7, doc.Items.Count());

            var daimon = doc.Items[0];
            Assert.AreEqual(2, daimon.Items.Count());
            Assert.AreEqual("daimon1", daimon.Id);
            Assert.AreEqual("基礎I", daimon.Name);

            var chumon = doc.Items[0].Items[0];
            Assert.AreEqual(2, chumon.Items.Count());
            Assert.AreEqual("chumon1", chumon.Id);
            Assert.AreEqual("This is a pen.", chumon.Name);
            Assert.AreSame(daimon, chumon.Parent);
            Assert.AreEqual(TimeSpan.FromSeconds(8), chumon.GetTimeLimit(userInfo));

            var i = 0;
            {
                var item = (Shomon)chumon.Items[i++];
                Assert.AreEqual("[英訳] これはノートです。", item.Mondaibun);
                Assert.AreEqual("This is a notebook.", item.CorrectAnswers.First().Text);
                Assert.AreEqual("1-1-1", item.Id);
                Assert.AreSame(chumon, item.Parent);

                var k = 0;
                {
                    var word = item.MondaiWords[k++];
                    Assert.AreEqual("This", word.Text);
                }
                {
                    var word = item.MondaiWords[k++];
                    Assert.AreEqual("is", word.Text);
                }
                {
                    var word = item.MondaiWords[k++];
                    Assert.AreEqual("a notebook", word.Text);
                }
                {
                    var word = item.MondaiWords[k++];
                    Assert.AreEqual(".", word.Text);
                }
            }
        }
        public void GetDaimonTest()
        {
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, _mondai02);

            //				var mondaiDocument = MondaiDocument.Load(tempFile.Value);

                var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);

                Assert.AreEqual("基礎I", mondaiDocument.GetDaimon("daimon1").Name);
                Assert.AreEqual("基礎II", mondaiDocument.GetDaimon("daimon2").Name);
                Assert.AreEqual("基礎III", mondaiDocument.GetDaimon("daimon3").Name);
                Assert.Null(mondaiDocument.GetDaimon("daimon4"));
            }
        }
        public void GetAllItemsTest()
        {
            using (var tempFile = new TempFile())
            {
                FileUtility.Save(tempFile.Value, _mondai02);

            //				var mondaiDocument = MondaiDocument.Load(tempFile.Value);
                var mondaiDocument = new MondaiDocumentFileAccessor1_0().Load(tempFile.Value);

                var daimon1 = mondaiDocument.GetDaimon("daimon1");
                var daimon2 = mondaiDocument.GetDaimon("daimon2");

                Assert.AreEqual(14, daimon2.GetAllItems().Count());
                {
                    var item = mondaiDocument.GetItem("d2_chumon2");
                    Assert.AreEqual("She isn't Nancy.", item.Name);
                }
                {
                    var item = mondaiDocument.GetItem("存在しないID");
                    Assert.Null(item);
                }
            }
        }