public void TestCurrentChapter()
        {
            // Set up Mock
            var book = new Mock <IBook>();

            book.Setup(b => b.Chapters).Returns(new ReadOnlyObservableCollection <IChapter>(new ObservableCollection <IChapter>()));

            var vm = new ContentsPageViewModel(book.Object);

            Assert.IsNotNull(vm.CurrentChapter);
            Assert.IsNull(vm.CurrentChapter.Value);

            // ModelのCurrentChapterが更新された倍に、VMのCurrentChapterが更新されることを確認する
            var chapter1 = new Mock <IChapter>();

            book.Setup(b => b.CurrentChapter).Returns(chapter1.Object);
            book.Raise(b => b.PropertyChanged += null, new PropertyChangedEventArgs("CurrentChapter"));
            Assert.AreEqual(chapter1.Object, vm.CurrentChapter.Value);

            // VMのCurrentChapterを更新した場合に、ModelのCurrentChapterに値が設定されることを確認する
            var      chapter2      = new Mock <IChapter>();
            IChapter updateChapter = null;

            book.SetupSet(m => m.CurrentChapter     = It.IsAny <IChapter>())
            .Callback <IChapter>(c => updateChapter = c);
            vm.CurrentChapter.Value = chapter2.Object;
            Assert.IsNotNull(updateChapter);
            Assert.AreEqual(chapter2.Object, updateChapter);
        }
        public void TestChapters()
        {
            // Set up Mock
            var book     = new Mock <IBook>();
            var chapters = new ObservableCollection <IChapter>();

            book.Setup(b => b.Chapters).Returns(new ReadOnlyObservableCollection <IChapter>(chapters));

            var vm = new ContentsPageViewModel(book.Object);

            Assert.IsNotNull(vm.Chapters);
            Assert.AreEqual(0, vm.Chapters.Count);

            var chapter = new Mock <IChapter>();

            chapters.Add(chapter.Object);
            Assert.AreEqual(1, vm.Chapters.Count);
            Assert.AreEqual(chapter.Object, vm.Chapters.First());
        }