public ChumonResult(EPuzzleUserInfo userInfo)
 {
     StartTime = EPuzzleTime.Now;
     Chumon時間調整 = TimeSpan.Zero;
     ShomonResults = new List<ShomonResult>();
     UserInfo = userInfo;
 }
 public EPuzzleTutor(EPuzzleUserInfo userInfo, IEnumerable<MondaiDocument> mondaiDocuments, TimeSpan duration, int numberOfQuestionsThatYouHaveToDoToday)
 {
     MondaiDocuments = mondaiDocuments.ToArray();
     _userInfo = userInfo;
     _duration = duration;
     NumberOfQuestionsThatYouHaveToDoToday = numberOfQuestionsThatYouHaveToDoToday;
 }
 public override double? GetBestGrade(EPuzzleUserInfo userInfo)
 {
     if (null == userInfo) throw new ArgumentNullException();
     var mondaiResult = userInfo.MondaiResults.GetBest(Id);
     if (null == mondaiResult) return null;
     return GetGrade(mondaiResult.所要時間, GetTimeLimit(userInfo));
 }
        public void DefaultValuesTest()
        {
            var userInfo = new EPuzzleUserInfo();
            Assert.AreNotEqual(default(Guid), userInfo.UserId);
            Assert.AreEqual("User's Name", userInfo.UserName);
            Assert.AreEqual(Difficulty.Normal, userInfo.Difficulty);
            Assert.AreEqual(20, userInfo.NumberOfQuestionsThatYouHaveToDoToday);
            Assert.False(userInfo.IgnoreDifficultyWhenGettingMondaiResults);
            Assert.AreEqual(1.0f, userInfo.TimeLimit.TimeLimitTweak);
            Assert.AreEqual(6.0f, userInfo.HoursToIgnoreMondaisThatYouHaveDone);
            //			Assert.AreEqual(TimeSpan.FromHours(6f), userInfo.GradeProcessor.Nodes.Last().Duration);
            Assert.AreEqual(new TimeSpan(3, 0, 0), userInfo.TimeToChangeDay);
            Assert.False(userInfo.UseNewMethodThatGetsChumonsThatYouHaveDoneToday);
            Assert.False(userInfo.DoesNotShowChumonsYouHaveNeverDone);
            Assert.False(userInfo.TreatChumonsThatWillExpireTodayAsOnesThatHaveAlreadyExpired);
            Assert.False(userInfo.HideChumonsYouHaveGotGradeAToday);

            //			Assert.AreEqual("名称未設定", userInfo.UserName);
            //			Assert.False(userInfo.LastDaimonInfos.Any());
            Assert.False(userInfo.MondaiResults.Any());

            Assert.AreEqual(24, userInfo.KeyBindings.Count());

            CollectionAssert.AreEquivalent(new []
            {
                new KeyBinding(Command.Action0, Keys.Return, false, false, false),
                new KeyBinding(Command.Action1, Keys.Back, false, false, false),
                new KeyBinding(Command.Action2, Keys.Tab, false, false, false),
                new KeyBinding(Command.Action3, Keys.Escape, false, false, false),
                new KeyBinding(Command.Action4, Keys.OemOpenBrackets, false, false, false),

                new KeyBinding(Command.Action5, Keys.F2, false, false, false),
                new KeyBinding(Command.Action6, Keys.F3, false, false, false),
                new KeyBinding(Command.Action7, Keys.F4, false, false, false),
                new KeyBinding(Command.Action8, Keys.F5, false, false, false),
                new KeyBinding(Command.Action9, Keys.F6, false, false, false),
                new KeyBinding(Command.Action10, Keys.F7, false, false, false),
                new KeyBinding(Command.Action11, Keys.F8, false, false, false),

                new KeyBinding(Command.ActionLeft, Keys.Left, false, true, false),
                new KeyBinding(Command.ActionRight, Keys.Right, false, true, false),
                new KeyBinding(Command.ActionUp, Keys.Up, false, true, false),
                new KeyBinding(Command.ActionDown, Keys.Down, false, true, false),
                new KeyBinding(Command.MoveLeft, Keys.Left, false, false, false),
                new KeyBinding(Command.MoveRight, Keys.Right, false, false, false),
                new KeyBinding(Command.MoveUp, Keys.Up, false, false, false),
                new KeyBinding(Command.MoveDown, Keys.Down, false, false, false),

                new KeyBinding(Command.MoveLeft, Keys.NumPad4, false, false, false),
                new KeyBinding(Command.MoveRight, Keys.NumPad6, false, false, false),
                new KeyBinding(Command.MoveUp, Keys.NumPad8, false, false, false),
                new KeyBinding(Command.MoveDown, Keys.NumPad2, false, false, false),
            }, userInfo.KeyBindings);

            Assert.AreEqual(Fish.eigotest.Command.Action0, userInfo.GetKeyBindings(Keys.Return).First().Command);
            Assert.AreEqual(Fish.eigotest.Command.Action1, userInfo.GetKeyBindings(Keys.Back).First().Command);
        }
 public ChumonButton(EPuzzleUserInfo userInfo, Chumon chumon, bool longName = false)
 {
     var mondaiResult = userInfo.MondaiResults.GetBest(chumon.Id);
     var shoyou = null == mondaiResult ? TimeSpan.Zero : mondaiResult.所要時間;
     _userInfo = userInfo;
     Chumon = chumon;
     Text = longName ? Chumon.LongName : Chumon.Name;
     Name = chumon.Id;
 }
 public override bool IsLocked(EPuzzleUserInfo userInfo)
 {
     if (null == PreviousItem) return false;
     var xx = ((IEnumerable<EigoTestMondai>)PreviousItem.Items).Reverse().SkipWhile(x => x.IsOptional).First();
     if (xx.合格判定(userInfo))
     {
         return false;
     }
     return true;
 }
        public void Test0()
        {
            var t0 = new DateTime(2013, 7, 18, 0, 0, 0); // UTC
            EPuzzleTime.Now = t0;
            var userInfo = new EPuzzleUserInfo();

            var chumonResult = new ChumonResult(userInfo);
            Assert.AreEqual(t0, chumonResult.StartTime);
            Assert.AreEqual(TimeSpan.Zero, chumonResult.Chumon時間調整);
        }
 public override bool IsLocked(EPuzzleUserInfo userInfo)
 {
     if (null == PreviousItem) return false;
     if (PreviousItem.合格判定(userInfo))
     {
         return false;
     }
     else if (PreviousItem.IsOptional && !PreviousItem.IsLocked(userInfo))
     {
         return false;
     }
     return true;
 }
 public void XElementToShomonTest()
 {
     using (var tempFile = new TempFile(TestResources.Mondai03))
     {
         var xdocument = XDocument.Load(tempFile.Name);
         var shomonElement = xdocument.Descendants("shomon").Where(x => "4-1-1" == x.Attribute("id").Value).Single();
         var shomon = (Shomon)shomonElement;
         var userInfo = new EPuzzleUserInfo();
         userInfo.TimeLimit.TimeLimitTweak = 1d;
         CollectionAssert.AreEqual(new [] { "Feb", "ru", "ar", "y" }, shomon.MondaiWords.Select(x => x.Text));
     //				Assert.AreEqual(TimeSpan.FromSeconds(4d), TestUtility.Inv(shomon, "制限時間の計算"));
         Assert.AreEqual(TimeSpan.FromSeconds(4d), shomon.GetTimeLimit(userInfo));
     }
 }
        public DaimonButtonBox(Daimon[] daimons, int daimonIndex, EPuzzleUserInfo userInfo)
        {
            if (null == userInfo) throw new ArgumentNullException("userInfo");

            BorderLine = true;

            Daimons = daimons;
            DaimonIndex = daimonIndex;
            _userInfo = userInfo;

            var daimonButtons = Daimons.Select(x =>
            {
                return new DaimonButton(x)
                {
                    FukushuFlag = x.復習判定_2(userInfo),
                    Floating = DrawingObjectFloating.Left,
                };
            });
            foreach (var daimonButton in daimonButtons)
            {
                Items.Add(daimonButton);
            }
            SetDaimonButtonValue(new SizeF(30, 30), 10f, 10f, 10f);
        }
        public void MondaiResultsThatAreReturnedFromGetItemsMethodDependOnDifficultyProperty()
        {
            var t0 = new DateTime(2013, 10, 2, 0, 0, 0); // UTC
            var t1 = t0 + TimeSpan.FromDays(2d);
            EPuzzleTime.Now = t1;
            var userInfo = new EPuzzleUserInfo();

            userInfo.Difficulty = Difficulty.Hard;

            Assert.AreEqual(Difficulty.Hard, userInfo.Difficulty);
            var mondaiResult0 = new MondaiResult("id50", t0, TimeSpan.FromSeconds(8d), Difficulty.Normal);
            var mondaiResult1 = new MondaiResult("id50", t1, TimeSpan.FromSeconds(8d), Difficulty.Hard);
            userInfo.MondaiResults.Add(mondaiResult0);
            userInfo.MondaiResults.Add(mondaiResult1);

            CollectionAssert.AreEqual(new [] { mondaiResult1, }, userInfo.MondaiResults.GetItems("id50"));

            var mondaiResult2 = userInfo.CreateMondaiResult("id50", t1, TimeSpan.FromSeconds(8d));
            Assert.AreEqual(Difficulty.Hard, mondaiResult2.Difficulty);
        }
        public void GetItemsThatHaveBeenDoneWithinTest()
        {
            var t0 = new DateTime(2013, 10, 2, 0, 0, 0); // UTC
            var t1 = t0 + TimeSpan.FromDays(2d);
            EPuzzleTime.Now = t1;
            var userInfo = new EPuzzleUserInfo();

            Assert.AreEqual(Difficulty.Normal, userInfo.Difficulty);
            var mondaiResult0 = new MondaiResult("id50", t0, TimeSpan.FromSeconds(8d), userInfo.Difficulty);
            var mondaiResult1 = new MondaiResult("id60", t1, TimeSpan.FromSeconds(8d), userInfo.Difficulty);
            var mondaiResult2 = new MondaiResult("id70", t1, TimeSpan.FromSeconds(8d), Difficulty.Hard);

            userInfo.MondaiResults.Add(mondaiResult0);
            userInfo.MondaiResults.Add(mondaiResult1);
            userInfo.MondaiResults.Add(mondaiResult2);

            {
            //				var mondaiResults = userInfo.MondaiResults.GetItemsThatHaveBeenDoneWithin(TimeSpan.FromHours(24d));
                var mondaiResults = (IEnumerable<MondaiResult>)TestUtility.Invoke(userInfo, "GetMondaiResultsThatYouHaveDoneWithin", TimeSpan.FromHours(24d));
                Assert.AreEqual(1, mondaiResults.Count());
                Assert.AreSame(mondaiResult1, mondaiResults.Single());
            }
            {
            //				var mondaiResults = userInfo.MondaiResults.GetItemsThatHaveBeenDoneWithin(TimeSpan.FromDays(3d));
                var mondaiResults = (IEnumerable<MondaiResult>)TestUtility.Invoke(userInfo, "GetMondaiResultsThatYouHaveDoneWithin", TimeSpan.FromDays(3d));
                Assert.AreEqual(2, mondaiResults.Count());
                CollectionAssert.AreEquivalent(new [] { mondaiResult0, mondaiResult1, }, mondaiResults);
            }
        }
 public double GetGrade(MondaiResult mondaiResult, EPuzzleUserInfo userInfo)
 {
     if (null == mondaiResult) throw new ArgumentNullException();
     if (Id != mondaiResult.MondaiId) throw new ArgumentException("Ids are not equal.");
     return GetGrade(mondaiResult.所要時間, GetTimeLimit(userInfo));
 }
 // Static members
 public static string GetString(MondaiResult mondaiResult, Chumon chumon, EPuzzleUserInfo userInfo)
 {
     var text = string.Format
     (
     @"({0}日前)
     {1}
     {2:00}:{3:00} ({4})",
         (int)Math.Round((EPuzzleTime.Now - mondaiResult.EndTime).TotalDays),
         mondaiResult.EndTime.ToString("yyyy/MM/dd(ddd) HH:mm"),
         (int)mondaiResult.所要時間.TotalMinutes, (int)mondaiResult.所要時間.Seconds,
         chumon.GetGradeString(mondaiResult.所要時間, userInfo)
     );
     return text;
 }
 public void GetItemsTest()
 {
     var userInfo = new EPuzzleUserInfo();
     userInfo.MondaiResults.AddNew("id0", DateTime.MinValue, TimeSpan.FromSeconds(8d));
     userInfo.MondaiResults.AddNew("id0", DateTime.MinValue, TimeSpan.FromSeconds(9d));
     userInfo.MondaiResults.AddNew("id0", DateTime.MinValue, TimeSpan.FromSeconds(1d));
     userInfo.MondaiResults.AddNew("id1", DateTime.MinValue, TimeSpan.FromSeconds(1d));
     CollectionAssert.AreEquivalent(new []
     {
         TimeSpan.FromSeconds(1d),
         TimeSpan.FromSeconds(8d),
         TimeSpan.FromSeconds(9d),
     }, userInfo.MondaiResults.GetItems("id0").Select(x => x.所要時間).ToArray());
 }
 public virtual double? GetLastGrade(EPuzzleUserInfo userInfo)
 {
     throw new NotSupportedException();
 }
 public override bool 復習判定_2(EPuzzleUserInfo userInfo)
 {
     return userInfo.GradeProcessor.復習判定_2(this, userInfo);
 }
 public virtual MondaiResult 最低の結果を取得(EPuzzleUserInfo userInfo, TimeSpan duration)
 {
     throw new NotSupportedException();
 }
 public override double? GetLastGrade(EPuzzleUserInfo userInfo)
 {
     var results = Items.OfType<Chumon>().Select(chumon => chumon.GetLastGrade(userInfo)).ToArray();
     if (results.Any(x => null == x)) return null;
     return results.Where(x => null != x).Cast<double>().Max();
 }
 public string GetGradeString(TimeSpan shoyou, EPuzzleUserInfo userInfo)
 {
     return userInfo.GradeProcessor.GetGradeString(GetGrade(shoyou, GetTimeLimit(userInfo)));
 }
 public virtual bool 復習判定_2(EPuzzleUserInfo userInfo)
 {
     throw new NotSupportedException();
 }
        public void 囮項目テスト()
        {
            var text = @"

            document
            {
            id = document1
            title = documentD

            daimon
            {
            id = id1
            title = ""daimonTitle""

            chumon
            {
            id = chumon2-2
            title = ""chumonTitle""

            shomon
            {
                id = shomon1
                mon
                {
                    Are these cameras?
                }

                sei
                {
                    No, they aren't.
                }
                sei
                {
                    Yes, they are.
                }
                otori
                {
                    Yes, we are.
                }
            }
            }
            }
            }

            ";

            using (var tempFile = new TempFile(text))
            {
                var element = EmpDocument.Load(tempFile.Name);
                var mondaiDocument = element.MondaiDocument;
                var userInfo = new EPuzzleUserInfo();
                Assert.AreEqual("document1", mondaiDocument.Id);

                var daimon = mondaiDocument.Items[0];

                Assert.AreEqual(@"""daimonTitle""", daimon.Name);
                Assert.IsNotEmpty(daimon.Id);

                var chumon = (Chumon)daimon.Items[0];
                Assert.AreEqual(@"""chumonTitle""", chumon.Name);
                Assert.IsNotEmpty(chumon.Id);

                var shomon = (Shomon)chumon.Items[0];
                Assert.AreEqual("shomon1", shomon.Id);
                Assert.AreEqual("Are these cameras?", shomon.Mondaibun);
                CollectionAssert.AreEqual(new [] { "No, they aren't.", "Yes, they are." }, shomon.CorrectAnswers.Select(x => x.Text));
                CollectionAssert.AreEquivalent(new [] { "No", ",", "they", "aren't", "Yes", "are", ".", "we", }, shomon.MondaiWords.Select(x => x.Text).ToArray());
                Assert.AreEqual(TimeSpan.FromSeconds(6d), chumon.GetTimeLimit(userInfo));
            }
        }
 public TimeSpan GetTimeLimit(EPuzzleUserInfo userInfo)
 {
     if (null == _timeLimitCache)
     {
     //				_timeLimitCache = 制限時間の計算();
         _timeLimitCache = userInfo.TimeLimit.GetTimeLimit(this);
     }
     return (TimeSpan)_timeLimitCache;
 }
 public string GetNewestGradeString(EPuzzleUserInfo userInfo)
 {
     double? grade = GetLastGrade(userInfo);
     return null == grade ? "-" : userInfo.GradeProcessor.GetGradeString((double)grade);
 }
        public void LoadingTest()
        {
            var text =
            @"version = 1.1
            document
            {
            id = document1
            title = Document Title 1

            daimon
            {
            id = daimon1
            title = ""Daimon Title 1""

            chumon
            {
            id = chumon1
            title = ""Chumon Title 1""

            shomon
            {
                id = shomon1
                question = Are these cameras?
                correct = No, they aren't.
                words = Yes,
                words = they are.
            }
            }
            chumon
            {
            id = chumon2
            title = ""Chumon Title 2""

            shomon
            {
                id = shomon2
                q = Are these cameras?
                c = No, they aren't.
                w = Yes,
                w = they are.
            }
            }
            }
            daimon
            {
            id = daimon2
            title = ""Daimon Title 2""

            chumon
            {
            id = chumon3
            title = ""Chumon Title 3""

            shomon
            {
                id = shomon3
                q = Are these cameras?
                c = No, they aren't.
                w = Yes,
                w = they are.
            }
            }
            }
            }";

            using (var tempFile = new TempFile(text))
            {
                var accessor = new EmpDocumentAccessor1_1();
                var mondaiDocument = accessor.Load(tempFile.Name);
                var userInfo = new EPuzzleUserInfo();

                Assert.AreEqual("document1", mondaiDocument.Id);

                var daimon = mondaiDocument.Items[0];

                Assert.AreEqual(@"""Daimon Title 1""", daimon.Name);
                Assert.IsNotEmpty(daimon.Id);

                {
                    var chumon = (Chumon)daimon.Items[0];
                    Assert.AreEqual(@"""Chumon Title 1""", chumon.Name);
                    Assert.IsNotEmpty(chumon.Id);

                    Assert.AreEqual(1, chumon.Items.Count());
                    var shomon = (Shomon)chumon.Items[0];
                    Assert.AreEqual("shomon1", shomon.Id);
                    Assert.AreEqual("Are these cameras?", shomon.Mondaibun);
                    Assert.AreEqual("No, they aren't.", shomon.CorrectAnswers.First().Text);
                    CollectionAssert.AreEquivalent(new [] { "No", ",", "they", "aren't", ".", "Yes,", "they are." }, shomon.MondaiWords.Select(x => x.Text).ToArray());

                    Assert.AreEqual(TimeSpan.FromSeconds(6d), chumon.GetTimeLimit(userInfo));
                }
                {
                    var daimon2 = (Daimon)mondaiDocument.Items[1];
                    Assert.AreEqual("daimon2", daimon2.Id);

                    var chumon2 = (Chumon)daimon2.Items[0];
                    Assert.AreEqual("chumon3", chumon2.Id);

                    var shomon = (Shomon)chumon2.Items[0];
                    Assert.AreEqual("shomon3", shomon.Id);
                    Assert.AreEqual("Are these cameras?", shomon.Mondaibun);
                    Assert.AreEqual("No, they aren't.", shomon.CorrectAnswers.First().Text);
                    CollectionAssert.AreEquivalent(new [] { "No", ",", "they", "aren't", ".", "Yes,", "they are." }, shomon.MondaiWords.Select(x => x.Text).ToArray());
                }

            }
        }
 public double GetGrade(TimeSpan shoyou, EPuzzleUserInfo userInfo)
 {
     return GetGrade(shoyou, GetTimeLimit(userInfo));
 }
 public virtual bool IsLocked(EPuzzleUserInfo userInfo)
 {
     throw new NotSupportedException();
 }
 public string GetLastAndBestString(EPuzzleUserInfo userInfo)
 {
     var last = GetLastGrade(userInfo);
     if (null == last) return "-";
     var best = GetBestGrade(userInfo);
     var lastStr = userInfo.GradeProcessor.GetGradeString((double)last);
     var bestStr = userInfo.GradeProcessor.GetGradeString((double)best);
     return lastStr == bestStr ? lastStr : lastStr + ":" + bestStr;
 }
        public void GetMondaiDocumentTest()
        {
            var text = @"

            document
            {
            id = document1
            title = documentA

            daimon
            {
            id = daimon1
            title = ""daimonTitle""

            chumon
            {
            id = chumon1
            title = ""chumonTitle""

            shomon
            {
                id = shomon1
                mon
                {
                    Are these cameras?
                }

                sei
                {
                    No, they aren't.
                }

                word
                {
                    Yes,
                }
                word
                {
                    they are.
                }
            }
            }
            chumon
            {
            id = id2
            title = ""chumonTitle""

            shomon
            {
                id = shomon2
                mon
                {
                    Are these cameras?
                }

                sei
                {
                    No, they aren't.
                }

                word
                {
                    Yes,
                }
                word
                {
                    they are.
                }
            }
            }

            }

            daimon
            {
            id = id1
            title = ""daimonTitle""

            chumon
            {
            id = chumon2-2
            title = ""chumonTitle""

            shomon
            {
                id = shomon3
                mon
                {
                    Are these cameras?
                }

                sei
                {
                    No, they aren't.
                }

                word
                {
                    Yes,
                }
                word
                {
                    they are.
                }
            }
            }
            }
            }

            ";

            using (var tempFile = new TempFile(text))
            {
                var emp = EmpDocument.Load(tempFile.Name);
                var mondaiDocument = emp.MondaiDocument;
                var userInfo = new EPuzzleUserInfo();

                Assert.AreEqual("document1", mondaiDocument.Id);

                var daimon = mondaiDocument.Items[0];

                Assert.AreEqual(@"""daimonTitle""", daimon.Name);
                Assert.IsNotEmpty(daimon.Id);

                var chumon = (Chumon)daimon.Items[0];
                Assert.AreEqual(@"""chumonTitle""", chumon.Name);
                Assert.IsNotEmpty(chumon.Id);

                Assert.AreEqual(1, chumon.Items.Count());
                var shomon = (Shomon)chumon.Items[0];
                Assert.AreEqual("shomon1", shomon.Id);
                Assert.AreEqual("Are these cameras?", shomon.Mondaibun);
                Assert.AreEqual("No, they aren't.", shomon.CorrectAnswers.First().Text);
                CollectionAssert.AreEquivalent(new [] { "No", ",", "they", "aren't", ".", "Yes,", "they are." }, shomon.MondaiWords.Select(x => x.Text).ToArray());

                Assert.AreEqual(TimeSpan.FromSeconds(6d), chumon.GetTimeLimit(userInfo));

                var daimon2 = (Daimon)mondaiDocument.Items[1];
                Assert.AreEqual("id1", daimon2.Id);

                var chumon2 = (Chumon)daimon.Items[1];
                Assert.AreEqual("id2", chumon2.Id);
            }
        }
 public virtual TimeSpan? 復習までの猶予期間を取得(EPuzzleUserInfo userInfo)
 {
     throw new NotSupportedException();
 }