public void データの無いDATの保存() { //setUp string fileName = "iniDbTestTmp"; //テンポラリファイル名 string progDir = Directory.GetCurrentDirectory(); string path = string.Format("{0}\\{1}.ini", progDir, fileName); IniDb sut = new IniDb(progDir, fileName); ListVal listVal = new ListVal(); var l = new ListVal(); l.Add(new OneVal("mimeExtension", "", Crlf.Nextline, new CtrlTextBox("Extension", 10))); l.Add(new OneVal("mimeType", "", Crlf.Nextline, new CtrlTextBox("MIME Type", 50))); var oneVal = new OneVal("mime", null, Crlf.Nextline, new CtrlDat("comment", l, 350, LangKind.Jp)); listVal.Add(oneVal); sut.Save("Basic", listVal); // nameTagは"Basic"で決め打ちされている //exercise var lines = File.ReadAllLines(path); string actual = lines[0]; //verify Assert.That(actual, Is.EqualTo("DAT=Basic\bmime=")); //tearDown sut.Delete(); }
//名前からコントロールを詮索する //処理だと処理が重くなるので、該当が無い場合nullを返す protected OneCtrl GetCtrl(String name) { OneVal oneVal = ListVal.Search(name); if (oneVal == null) { return(null); } return(oneVal.OneCtrl); }
//OneValの追加 public void Add(OneVal oneVal) { ListVal.Add(oneVal); }
public void Add(OneVal oneVal) { ListVal.Add(oneVal); }
//出力ファイル(Option.ini)からの入力用<br> //不正な文字列があった場合は、無効行として無視される<br> public bool FromReg(String str) { if (str == null){ Value = null; return false; } switch (OneCtrl.GetCtrlType()){ case CtrlType.Dat: CtrlDat ctrlDat = (CtrlDat) OneCtrl; Dat dat = new Dat(ctrlDat.CtrlTypeList); if (!dat.FromReg(str)){ Value = null; return false; } //Ver5.8.7 Java fix Datの中にComboBoxが存在する場合の旧バージョンの変換 foreach (var d in dat){ for (int i = 0; i < ctrlDat.ListVal.Count; i++){ if (ctrlDat.ListVal[i].OneCtrl.GetCtrlType() == CtrlType.ComboBox){ int val; if(!int.TryParse(d.StrList[i],out val)){ //Ver5.7.x以前のデータ OneVal dmy = new OneVal("dmy",null,Crlf.Nextline, ctrlDat.ListVal[i].OneCtrl); if (dmy.FromRegConv(d.StrList[i])){ d.StrList[i] = dmy.ToReg(false); } } } } } Value = dat; break; case CtrlType.CheckBox: try { Value = Boolean.Parse(str); } catch { Value = false; return false; } break; case CtrlType.Font: Value = null; var tmp = str.Split(','); if (tmp.Length == 3){ try{ var family = new FontFamily(tmp[0]); var size = (float) Convert.ToDouble(tmp[1]); var style = (FontStyle) Enum.Parse(typeof (FontStyle), tmp[2]); Value = new Font(family, size, style); }catch(Exception){ Value = null; } } if(Value==null){ return false; } break; case CtrlType.Memo: Value = Util.SwapStr("\t", "\r\n", str); break; case CtrlType.File: case CtrlType.Folder: case CtrlType.TextBox: Value = str; break; case CtrlType.Hidden: try{ Value = Crypt.Decrypt(str); } catch (Exception){ Value = ""; return false; } break; case CtrlType.Radio: try{ Value = Int32.Parse(str); }catch (Exception){ Value = 0; return false; } if ((int) Value < 0){ Value = 0; return false; } break; case CtrlType.ComboBox: int max = ((CtrlComboBox) OneCtrl).Max; try { var n = Int32.Parse(str); if (n < 0 || max <= n) { Value = 0; return false; } Value = n; } catch { Value = 0; //Ver5.9.2 Ver5.7.x以前のデータのコンバート OneVal dmy = new OneVal("dmy", null, Crlf.Nextline, OneCtrl); if (dmy.FromRegConv(str)) { int n; Int32.TryParse(dmy.ToReg(false), out n); if (n < 0 || max <= n) { Value = 0; return false; } Value = n; } return false; } break; case CtrlType.Int: try { Value = Int32.Parse(str); } catch { Value = 0; return false; } break; case CtrlType.BindAddr: try{ Value = new BindAddr(str); } catch (ValidObjException){ Value = 0; return false; } break; case CtrlType.AddressV4: try{ Value = new Ip(str); } catch (ValidObjException){ Value = null; return false; } break; case CtrlType.TabPage: case CtrlType.Group: break; default: Value = 0; return false; // "実装されていないCtrlTypeが指定されました OneVal.fromReg()" } return true; }
//出力ファイル(Option.ini)からの入力用<br> //不正な文字列があった場合は、無効行として無視される<br> public bool FromReg(String str) { if (str == null) { Value = null; return(false); } switch (OneCtrl.GetCtrlType()) { case CtrlType.Dat: CtrlDat ctrlDat = (CtrlDat)OneCtrl; Dat dat = new Dat(ctrlDat.CtrlTypeList); if (!dat.FromReg(str)) { Value = null; return(false); } //Ver5.8.7 Java fix Datの中にComboBoxが存在する場合の旧バージョンの変換 foreach (var d in dat) { for (int i = 0; i < ctrlDat.ListVal.Count; i++) { if (ctrlDat.ListVal[i].OneCtrl.GetCtrlType() == CtrlType.ComboBox) { int val; if (!int.TryParse(d.StrList[i], out val)) { //Ver5.7.x以前のデータ OneVal dmy = new OneVal("dmy", null, Crlf.Nextline, ctrlDat.ListVal[i].OneCtrl); if (dmy.FromRegConv(d.StrList[i])) { d.StrList[i] = dmy.ToReg(false); } } } } } Value = dat; break; case CtrlType.CheckBox: try { Value = Boolean.Parse(str); } catch { Value = false; return(false); } break; case CtrlType.Font: Value = null; var tmp = str.Split(','); if (tmp.Length == 3) { try{ var family = new FontFamily(tmp[0]); var size = (float)Convert.ToDouble(tmp[1]); var style = (FontStyle)Enum.Parse(typeof(FontStyle), tmp[2]); Value = new Font(family, size, style); }catch (Exception) { Value = null; } } if (Value == null) { return(false); } break; case CtrlType.Memo: Value = Util.SwapStr("\t", "\r\n", str); break; case CtrlType.File: case CtrlType.Folder: case CtrlType.TextBox: Value = str; break; case CtrlType.Hidden: try{ Value = Crypt.Decrypt(str); } catch (Exception) { Value = ""; return(false); } break; case CtrlType.Radio: try{ Value = Int32.Parse(str); }catch (Exception) { Value = 0; return(false); } if ((int)Value < 0) { Value = 0; return(false); } break; case CtrlType.ComboBox: int max = ((CtrlComboBox)OneCtrl).Max; try { var n = Int32.Parse(str); if (n < 0 || max <= n) { Value = 0; return(false); } Value = n; } catch { Value = 0; //Ver5.9.2 Ver5.7.x以前のデータのコンバート OneVal dmy = new OneVal("dmy", null, Crlf.Nextline, OneCtrl); if (dmy.FromRegConv(str)) { int n; Int32.TryParse(dmy.ToReg(false), out n); if (n < 0 || max <= n) { Value = 0; return(false); } Value = n; } return(false); } break; case CtrlType.Int: try { Value = Int32.Parse(str); } catch { Value = 0; return(false); } break; case CtrlType.BindAddr: try{ Value = new BindAddr(str); } catch (ValidObjException) { Value = 0; return(false); } break; case CtrlType.AddressV4: try{ Value = new Ip(str); } catch (ValidObjException) { Value = null; return(false); } break; case CtrlType.TabPage: case CtrlType.Group: break; default: Value = 0; return(false); // "実装されていないCtrlTypeが指定されました OneVal.fromReg()" } return(true); }