public void CustomHoliday_OccuredHolidaySettingChangedEventOnCustomHolidayObject_OccursHolidaySettingChangedEvent()
        {
            // arrange
            var hChecker      = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");
            var customHoliday = new CustomHoliday();

            hChecker.CustomHoliday = customHoliday;

            bool actual = false;

            hChecker.HolidaySettingChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(CustomHoliday.Holidays))
                {
                    if (e.OriginalEventArgs is PropertyChangedEventArgs eventArgs)
                    {
                        if (sender == customHoliday && eventArgs.PropertyName == nameof(CustomHoliday.Holidays))
                        {
                            actual = true;
                        }
                    }
                }
            };

            // act
            hChecker.CustomHoliday.Holidays = new ObservableCollection <KeyValuePair <DateTime, string> >();

            // assert
            Assert.True(actual);
        }
        public void CustomHoliday_AddCustomHoliday_OccursHolidaySettingChangedEvent()
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            hChecker.CustomHoliday          = new CustomHoliday();
            hChecker.CustomHoliday.Holidays = new ObservableCollection <KeyValuePair <DateTime, string> >();

            bool actual = false;

            hChecker.HolidaySettingChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(CustomHoliday.Holidays))
                {
                    if (e.OriginalEventArgs is NotifyCollectionChangedEventArgs eventArgs)
                    {
                        if (eventArgs.Action == NotifyCollectionChangedAction.Add)
                        {
                            actual = true;
                        }
                    }
                }
            };

            // act
            hChecker.CustomHoliday.Holidays.Add(new KeyValuePair <DateTime, string>(new DateTime(2020, 1, 1), "HolidayName"));

            // assert
            Assert.True(actual);
        }
        public void IsAddHolidayNameToObservedHolidayName_SetValue_OccursHolidaySettingChangedEvent()
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            hChecker.IsAddHolidayNameToObservedHolidayName = false;

            bool actual = false;

            hChecker.HolidaySettingChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(HolidayChecker_ja_JP.IsAddHolidayNameToObservedHolidayName))
                {
                    if (e.OriginalEventArgs is PropertyChangedEventArgs eventArgs)
                    {
                        if (eventArgs.PropertyName == nameof(HolidayChecker_ja_JP.IsAddHolidayNameToObservedHolidayName))
                        {
                            actual = true;
                        }
                    }
                }
            };

            // act
            hChecker.IsAddHolidayNameToObservedHolidayName = true;

            // assert
            Assert.True(actual);
        }
        public void CustomHoliday_SetCustomHoliday_OccursHolidaySettingChangedEvent()
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            bool actual = false;

            hChecker.HolidaySettingChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(HolidayChecker_ja_JP.CustomHoliday))
                {
                    if (e.OriginalEventArgs is PropertyChangedEventArgs eventArgs)
                    {
                        if (eventArgs.PropertyName == nameof(HolidayChecker_ja_JP.CustomHoliday))
                        {
                            actual = true;
                        }
                    }
                }
            };

            // act
            hChecker.CustomHoliday = new CustomHoliday();

            // assert
            Assert.True(actual);
        }
        public void CustomHoliday_SetNull_ThrowsNoException()
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            // act
            // assert
            hChecker.CustomHoliday = null;
        }
        public void GetHolidayName_NotHolidayDateTime_ReturnsNull(DateTime date)
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            // act
            var actual = hChecker.GetHolidayName(date);

            // assert
            Assert.Null(actual);
        }
        public void CustomHoliday_SetNullAfterSetOnce_ThrowsInvalidOperaionException()
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            hChecker.CustomHoliday = new CustomHoliday();

            // act
            // assert
            Assert.Throws <InvalidOperationException>(() => { hChecker.CustomHoliday = null; });
        }
        public void GetHolidayName_IsAddHolidayNameToObservedHolidayName_ReturnsAddedName(DateTime date, string addedName)
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            hChecker.IsAddHolidayNameToObservedHolidayName = true;

            // act
            var actual = hChecker.GetHolidayName(date);

            // assert
            Assert.Equal(addedName, actual);
        }
        public void GetHolidayName_HolidayDateTime_ReturnsCorrectlyName(DateTime date, string expectedHolidayName)
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            hChecker.IsAddHolidayNameToObservedHolidayName = false;

            // act
            var actualHolidayName = hChecker.GetHolidayName(date);

            // assert
            Assert.Equal(expectedHolidayName, actualHolidayName);
        }
        public void GetCalendar_YearAndMonthArgs_CollectCalendar(int year, int month, int[,] days, bool[,] isHoliday, bool[,] isThisMonth, int lastRow)
        {
            // arrange

            // act
            Calendar.GetCalendar(year, month, HolidayChecker.GetHolidayChecker("ja-JP"), out int[,] actualDays, out bool[,] actualIsHoliday, out bool[,] actualIsThisMonth, out int actualLastRow);

            // assert
            Assert.Equal(days, actualDays);
            Assert.Equal(isHoliday, actualIsHoliday);
            Assert.Equal(isThisMonth, actualIsThisMonth);
            Assert.Equal(lastRow, actualLastRow);
        }
        /// <summary>
        /// MainWindow のコンストラクター。
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();


            var customHoliday = new CustomHoliday();

            customHoliday.Holidays = CustomHolidaysParser.Deserialize(Properties.Settings.Default.CustumHolidaysString);

            var dtEvtSrc = new DateTimeEventSource()
            {
                HolidayChecker = HolidayChecker.GetHolidayChecker()
            };

            dtEvtSrc.HolidayChecker.CustomHoliday = customHoliday;
            if (dtEvtSrc.HolidayChecker is HolidayChecker_ja_JP hc_ja_JP)
            {
                hc_ja_JP.IsAddHolidayNameToObservedHolidayName = true;
            }

            // カレンダー ウィンドウの生成
            var calendarWindow = new CalendarWindow();

            viewModel = new MainWindowViewModel(this.Dispatcher, calendarWindow.Dispatcher)
            {
                DateTimeEventSource          = dtEvtSrc,
                PrimaryScreenSizeEventSource = new PrimaryScreenSizeEventSource(),
                SettingsWrapper = new SettingsWrapper()
                {
                    Settings = Properties.Settings.Default
                }
            };

            viewModel.VerticalAlignment                   = (VerticalAlignment)Properties.Settings.Default.VerticalAlignment;
            viewModel.HorizontalAlignment                 = (HorizontalAlignment)Properties.Settings.Default.HorizontalAlignment;
            viewModel.VerticalMarginNumber                = Properties.Settings.Default.VerticalMarginNumber;
            viewModel.IsPercentVertical                   = Properties.Settings.Default.IsPercentVertical;
            viewModel.HorizontalMarginNumber              = Properties.Settings.Default.HorizontalMarginNumber;
            viewModel.IsPercentHorizontal                 = Properties.Settings.Default.IsPercentHorizontal;
            viewModel.ConsecutiveHolidaysMessageFormat    = (string)Application.Current.FindResource("CONSECTIVE_HOLIDAYS_MESSAGE_TOMMOROW");
            viewModel.ConsecutiveHolidaysMessageDATFormat = (string)Application.Current.FindResource("CONSECTIVE_HOLIDAYS_MESSAGE_DAT");

            this.DataContext = viewModel;

            // カレンダー ウィンドウの表示
            calendarWindow.DataContext = viewModel;
            calendarWindow.Show();
        }
        public void GetHolidayName_IfNomalDayAndCustomHoliday_RerturnsCustomHolidayName()
        {
            // arrange
            var hChecker = (HolidayChecker_ja_JP)HolidayChecker.GetHolidayChecker("ja-JP");

            hChecker.CustomHoliday          = new CustomHoliday();
            hChecker.CustomHoliday.Holidays = new ObservableCollection <KeyValuePair <DateTime, string> >();

            var targetDate  = new DateTime(2020, 1, 2);
            var defaultName = hChecker.GetHolidayName(targetDate);

            hChecker.CustomHoliday.Holidays.Add(new KeyValuePair <DateTime, string>(targetDate, "HolidayName"));


            // act
            var actual = hChecker.GetHolidayName(targetDate);

            // assert
            Assert.Null(defaultName);
            Assert.Equal("HolidayName", actual);
        }