示例#1
0
        public static void GetAllSpecialCaseNumberTest(DBReferType referType,
                                                       TypeId typeId, bool useAdditionalItems)
        {
            var instance = new DBItemSettingDescDatabase
            {
                DatabaseReferKind = referType,
                DatabaseDbTypeId  = typeId,
                DatabaseUseAdditionalItemsFlag = useAdditionalItems
            };
            var changedPropertyList = new List <string>();

            instance.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); };
            var changedArgCaseList = new List <string>();

            instance.ArgCaseList.PropertyChanged += (sender, args) => { changedArgCaseList.Add(args.PropertyName); };
            var changedArgCaseCollection = new List <NotifyCollectionChangedEventArgs>();

            instance.ArgCaseList.CollectionChanged += (sender, args) => { changedArgCaseCollection.Add(args); };

            List <DatabaseValueCaseNumber> result = null;

            var errorOccured = false;

            try
            {
                result = instance.GetAllSpecialCaseNumber();
            }
            catch (Exception ex)
            {
                logger.Exception(ex);
                errorOccured = true;
            }

            // エラーが発生しないこと
            Assert.IsFalse(errorOccured);

            // 取得した要素がそれぞれ意図した値であること
            Assert.AreEqual(result.Count, 3);
            Assert.AreEqual((int)result[0], referType.Code);
            Assert.AreEqual((int)result[1], (int)typeId);
            var flagValue = useAdditionalItems ? 1 : 0;

            Assert.AreEqual((int)result[2], flagValue);

            // プロパティ変更通知が発火していないこと
            Assert.AreEqual(changedPropertyList.Count, 0);
            Assert.AreEqual(changedArgCaseList.Count, 0);
            Assert.AreEqual(changedArgCaseCollection.Count, 0);
        }
        /// <summary>
        /// DB項目設定セット
        /// </summary>
        /// <param name="setting">結果格納インスタンス</param>
        /// <param name="specialSettingTypes">特殊指定種別リスト</param>
        /// <param name="itemNames">項目名リスト</param>
        /// <param name="itemMemos">項目メモリスト</param>
        /// <param name="descriptionLists">特殊指定選択肢文字列リスト</param>
        /// <param name="caseNumberLists">特殊指定選択肢数値リスト</param>
        /// <param name="initValues">初期値リスト</param>
        /// <exception cref="ArgumentException">ファイルフォーマットが不正の場合</exception>
        private void SetItemSetting(DBTypeSetting setting,
                                    IReadOnlyList <DBItemSpecialSettingType> specialSettingTypes, IReadOnlyList <ItemName> itemNames,
                                    IReadOnlyList <ItemMemo> itemMemos,
                                    IReadOnlyList <IReadOnlyList <DatabaseValueCaseDescription> > descriptionLists,
                                    IReadOnlyList <List <DatabaseValueCaseNumber> > caseNumberLists, IReadOnlyList <DBValueInt> initValues)
        {
            // 項目名、項目メモ、文字列パラメータ、数値パラメータ、初期値の長さが一致する必要がある
            var itemNamesCount        = itemNames.Count;
            var itemMemosCount        = itemMemos.Count;
            var descriptionListsCount = descriptionLists.Count;
            var caseNumberListsCount  = caseNumberLists.Count;
            var initValuesCount       = initValues.Count;

            if (itemNamesCount != itemMemosCount ||
                itemNamesCount != descriptionListsCount ||
                itemNamesCount != caseNumberListsCount ||
                itemNamesCount != initValuesCount)
            {
                throw new ArgumentException(
                          "項目名、項目メモ、文字列パラメータ、数値パラメータ、初期値の要素数が一致しません。(" +
                          $"項目名数:{itemNamesCount}, 項目メモ数:{itemMemosCount}," +
                          $"文字列パラメータ数:{descriptionListsCount}, 数値パラメータ数:{caseNumberListsCount}" +
                          $"初期値数:{initValuesCount})");
            }

            // 特殊指定数が項目数より少ない場合は不正
            var specialSettingTypesCount = specialSettingTypes.Count;

            if (specialSettingTypesCount < itemNamesCount)
            {
                throw new ArgumentException(
                          $"特殊指定種別の要素数が不正です。(要素数:{specialSettingTypesCount})");
            }

            var itemSettings = new List <DBItemSetting>();

            for (var i = 0; i < itemNamesCount; i++)
            {
                var specialSettingDesc = new DBItemSpecialSettingDesc
                {
                    ItemMemo  = itemMemos[i],
                    InitValue = initValues[i]
                };

                var thisDescriptions = descriptionLists[i];
                var thisCaseNumbers  = caseNumberLists[i];

                var thisItemSettingType = specialSettingTypes[i];

                try
                {
                    var caseList = MakeValueCases(thisItemSettingType, thisCaseNumbers, thisDescriptions);

                    specialSettingDesc.ChangeValueType(thisItemSettingType, caseList);

                    if (thisItemSettingType == DBItemSpecialSettingType.ReferDatabase)
                    {
                        specialSettingDesc.DatabaseReferKind = DBReferType.FromCode(thisCaseNumbers[0]);
                        specialSettingDesc.DatabaseDbTypeId  = new TypeId(thisCaseNumbers[1]);
                        specialSettingDesc.DatabaseUseAdditionalItemsFlag = thisCaseNumbers[2] == 1;
                    }
                }
                catch (Exception ex)
                {
                    throw new ArgumentException(
                              $"項目{i,2}の特殊指定タイプと特殊指定パラメータが一致しません。" +
                              "詳細はInnerExceptionを確認してください。", ex);
                }

                var thisItemName = itemNames[i];

                var itemSetting = new DBItemSetting
                {
                    ItemName           = thisItemName,
                    SpecialSettingDesc = specialSettingDesc
                };

                itemSettings.Add(itemSetting);
            }

            setting.ItemSettingList.AddRange(itemSettings);
        }