private IReadOnlyList <DatabaseItemDesc> MakeItemDescList(DBTypeSetting typeSetting, DBDataSetting dataSetting) { var result = new List <DatabaseItemDesc>(); var itemSettingList = typeSetting.ItemSettingList; var valueList = dataSetting.SettingValuesList[0]; if (itemSettingList.Count != valueList.Count) { throw new InvalidOperationException( "項目設定数と項目数が異なります。"); } for (var i = 0; i < itemSettingList.Count; i++) { var desc = new DatabaseItemDesc { ItemName = itemSettingList[i].ItemName, SpecialSettingDesc = itemSettingList[i].SpecialSettingDesc, ItemType = valueList[i].Type, }; result.Add(desc); } return(result); }
public static void DataSettingTypeGetterTest(DBDataSettingType type) { var typeSetting = new DBTypeSetting(); var dataSetting = new DBDataSetting(type, DBKind.User, 0); var instance = new DatabaseTypeDesc(typeSetting, dataSetting); var changedPropertyList = new List <string>(); instance.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); }; DBDataSettingType result = null; var errorOccured = false; try { result = instance.DataSettingType; } catch (Exception ex) { logger.Exception(ex); errorOccured = true; } // エラーが発生しないこと Assert.IsFalse(errorOccured); // 取得した結果が意図した値であること Assert.AreEqual(result, type); // プロパティ変更通知が発火していないこと Assert.AreEqual(changedPropertyList.Count, 0); }
/// <summary> /// タイプ名 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadTypeName(BinaryReadStatus readStatus, DBTypeSetting setting) { var typeName = readStatus.ReadString(); setting.TypeName = typeName.String; readStatus.AddOffset(typeName.ByteLength); }
/// <summary> /// メモ /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadMemo(BinaryReadStatus readStatus, DBTypeSetting setting) { var memo = readStatus.ReadString(); setting.Memo = memo.String; readStatus.AddOffset(memo.ByteLength); }
/// <summary> /// タイプ名 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadTypeName(FileReadStatus status, DBTypeSetting setting) { var typeName = status.ReadString(); setting.TypeName = typeName.String; status.AddOffset(typeName.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "タイプ名", setting.TypeName)); }
/// <summary> /// メモ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadMemo(FileReadStatus status, DBTypeSetting setting) { var memo = status.ReadString(); setting.Memo = memo.String; status.AddOffset(memo.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "メモ", memo.String)); }
/// <summary> /// タイプ設定 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="typeSetting">読み込み結果インスタンス</param> private void ReadTypeSetting(FileReadStatus status, out DBTypeSetting typeSetting) { Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeFileReader), "タイプ設定")); var reader = new DBTypeSettingReader(status, 1, true); var settings = reader.Read(); typeSetting = settings[0]; Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeFileReader), "タイプ設定")); }
public static void SerializeTest() { var target = new DBTypeSetting { TypeName = "TypeName" }; var changedPropertyList = new List <string>(); target.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); }; var clone = DeepCloner.DeepClone(target); Assert.IsTrue(clone.Equals(target)); // プロパティ変更通知が発火していないこと Assert.AreEqual(changedPropertyList.Count, 0); }
public static void DataNameListTest(bool isSetNull, bool isError) { var instance = new DBTypeSetting(); var changedPropertyList = new List <string>(); instance.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); }; var dataNameList = isSetNull ? null : new DataNameList(); var errorOccured = false; try { instance.DataNameList = dataNameList; } catch (Exception ex) { logger.Exception(ex); errorOccured = true; } // エラーフラグが一致すること Assert.AreEqual(errorOccured, isError); if (!errorOccured) { var setValue = instance.DataNameList; Assert.NotNull(setValue); Assert.NotNull(dataNameList); // セットした値と取得した値が一致すること Assert.IsTrue(setValue.Equals(dataNameList)); } // 意図したとおりプロパティ変更通知が発火していること if (errorOccured) { Assert.AreEqual(changedPropertyList.Count, 0); } else { Assert.AreEqual(changedPropertyList.Count, 1); Assert.IsTrue(changedPropertyList[0].Equals(nameof(DBTypeSetting.DataNameList))); } }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // ReadMethod // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// DBタイプ設定一つ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="isReadDataNameList">データ名リスト読み込みフラグ</param> /// <param name="result">結果格納インスタンス</param> /// <exception cref="InvalidOperationException">バイナリデータがファイル仕様と異なる場合</exception> private void ReadOneDBTypeSetting(FileReadStatus status, bool isReadDataNameList, ICollection <DBTypeSetting> result) { Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeSettingReader), "DBタイプ設定")); var setting = new DBTypeSetting(); // DBタイプ名 ReadTypeName(status, setting); // 項目名 var itemNames = ReadItemName(status); if (isReadDataNameList) { // データ名 ReadDataName(status, setting); } // メモ ReadMemo(status, setting); // 特殊指定 var specialSettingTypes = ReadItemSpecialSettingType(status); // 項目メモ var itemMemos = ReadItemMemo(status); // 特殊指定文字列パラメータ var valueDescriptionLists = ReadSpecialStringValue(status); // 特殊指定数値パラメータ var valueCaseNumberLists = ReadSpecialNumberValue(status); // 初期値 var initValues = ReadItemInitValue(status); // 特殊指定セット SetItemSetting(setting, specialSettingTypes, itemNames, itemMemos, valueDescriptionLists, valueCaseNumberLists, initValues); Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeSettingReader), "DBタイプ設定")); result.Add(setting); }
/// <summary> /// データ名 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadDataName(BinaryReadStatus readStatus, DBTypeSetting setting) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var dataNameList = new List <DataName>(); for (var i = 0; i < length; i++) { var name = readStatus.ReadString(); readStatus.AddOffset(name.ByteLength); dataNameList.Add(name.ToString()); } setting.DataNameList = new DataNameList(dataNameList); }
private void ReadOneDBTypeSetting(BinaryReadStatus readStatus, bool isReadDataNameList, ICollection <DBTypeSetting> result) { var setting = new DBTypeSetting(); // DBタイプ名 ReadTypeName(readStatus, setting); // 項目名 var itemNames = ReadItemName(readStatus); if (isReadDataNameList) { // データ名 ReadDataName(readStatus, setting); } // メモ ReadMemo(readStatus, setting); // 特殊指定 var specialSettingTypes = ReadItemSpecialSettingType(readStatus); // 項目メモ var itemMemos = ReadItemMemo(readStatus); // 特殊指定文字列パラメータ var valueDescriptionLists = ReadSpecialStringValue(readStatus); // 特殊指定数値パラメータ var valueCaseNumberLists = ReadSpecialNumberValue(readStatus); // 初期値 var initValues = ReadItemInitValue(readStatus); // 特殊指定セット SetItemSetting(setting, specialSettingTypes, itemNames, itemMemos, valueDescriptionLists, valueCaseNumberLists, initValues); result.Add(setting); }
public static void TypeIdGetterTest(DBDataSettingType type, bool isError) { var answer = (TypeId)4; var typeSetting = new DBTypeSetting(); var dataSetting = new DBDataSetting(type, DBKind.User, answer); var instance = new DatabaseTypeDesc(typeSetting, dataSetting); var changedPropertyList = new List <string>(); instance.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); }; TypeId result = 0; var errorOccured = false; try { result = instance.TypeId; } catch (Exception ex) { logger.Exception(ex); errorOccured = true; } // エラーフラグが一致すること Assert.AreEqual(errorOccured, isError); if (errorOccured) { return; } // 取得した結果が意図した値であること Assert.AreEqual(result, answer); // プロパティ変更通知が発火していないこと Assert.AreEqual(changedPropertyList.Count, 0); }
private static DBTypeSetting CreateTypeSetting(int dataLength, int itemLength) { var typeSetting = new DBTypeSetting { TypeName = MakeTypeName(), Memo = MakeMemo(), }; typeSetting.DataNameList.AdjustLength(dataLength); for (var i = 0; i < typeSetting.DataNameList.Count; i++) { typeSetting.DataNameList[i] = MakeDataName(i); } typeSetting.ItemSettingList.AdjustLength(itemLength); for (var i = 0; i < typeSetting.ItemSettingList.Count; i++) { typeSetting.ItemSettingList[i].ItemName = MakeItemName(i); typeSetting.ItemSettingList[i].ItemType = MakeItemType(); } return(typeSetting); }
/// <summary> /// データ名 /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadDataName(FileReadStatus status, DBTypeSetting setting) { var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "データ数", length)); var dataNameList = new List <DataName>(); for (var i = 0; i < length; i++) { var name = status.ReadString(); status.AddOffset(name.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), $" データ名{i,4}", name.String)); dataNameList.Add(name.ToString()); } setting.DataNameList = new DataNameList(dataNameList); }
/// <summary> /// DataDescのリスト /// </summary> /// <param name="typeSetting">タイプ設定</param> /// <param name="dataSetting">データ設定</param> /// <returns></returns> private IReadOnlyList <DatabaseDataDesc> MakeDataDescList(DBTypeSetting typeSetting, DBDataSetting dataSetting) { var result = new List <DatabaseDataDesc>(); var dataNameList = typeSetting.DataNameList; var valuesList = dataSetting.SettingValuesList; if (dataNameList.Count != valuesList.Count) { throw new InvalidOperationException( $"データ名数とデータ数が異なります。"); } for (var i = 0; i < typeSetting.DataNameList.Count; i++) { var desc = new DatabaseDataDesc(dataNameList[i], valuesList[i].ToLengthChangeableItemValueList()); result.Add(desc); } return(result); }
/// <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); }