public void FailedSearch() { string[] values = { "Hello", "world", "!", "Again" }; int startY = 5; int startYoffset = 5; ws.Cells[startY, 2] = values[0]; ws.Cells[startY, 3] = values[1]; ws.Cells[startY, 5] = values[2]; ws.Cells[startY + 1, 1] = values[3]; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base>(), Fields = new Xml_Form_Fields { StartY = new Xml_Start_Y { group = new Xml_Start_Y_Group { name = "group2", position = "after", Y = startYoffset } } } }; Action testRules = () => new Work(ws, form, 1); ExceptionAssert.Throws <InvalidOperationException>(testRules); }
public void GroupThrows() { Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base> { new Xml_Equal_Group { Rules = new List <Xml_Equal> { new Xml_Equal { Text = "Проверка", X = 0, Y = 0 }, } } } }; Action testRules = () => XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); form.Rules[0].Y = null; form.Rules[0].X = 1; ExceptionAssert.Throws <ArgumentException>(testRules); form.Rules[0].Y = 1; form.Rules[0].X = null; ExceptionAssert.Throws <ArgumentException>(testRules); form.Rules[0].Y = 1; form.Rules[0].X = 1; ((Xml_Equal_Group)form.Rules[0]).Rules.Clear(); ExceptionAssert.Throws <ArgumentException>(testRules); }
public void RuleSecondForm() { int Y = 5; int X = 4; string name = "Форма 2.5"; ws.Cells[Y, X] = name; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base> { new Xml_Equal { Text = "Форма 1.2", X = X, Y = Y }, } }; Xml_Form form2 = new Xml_Form { Name = "Test 2", Rules = new List <Xml_Equal_Base> { new Xml_Equal { Text = "Форма 2.5", X = X, Y = Y }, } }; var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form, form2 }); Assert.AreEqual(finded, form2); }
protected void InitVariables(Xml_Form lForm) { if (lForm.Fields.IF != null) { foreach (var xmlelem in lForm.Fields.IF) { XElement xelem = XElement.Parse(xmlelem.OuterXml); conditions.Add(ScanCondition(xelem)); } } if (lForm.Fields.Static != null) { foreach (var xmlelem in lForm.Fields.Static) { XElement xelem = XElement.Parse(xmlelem.OuterXml); AddVar(staticVars, getVar(xelem, false)); } } if (lForm.Fields.Dynamic != null) { foreach (var xmlelem in lForm.Fields.Dynamic) { XElement xelem = XElement.Parse(xmlelem.OuterXml); AddVar(dynamicVars, getVar(xelem, true)); } } }
public void TestExcelExample1() { string pathExcel = Path.Combine(Environment.CurrentDirectory, "Data\\Example1.xlsx"); string pathTemp = TestLibrary.getTempFilename(".dbf"); Xml_Form form = generateForm(); Excel excel = new Excel(); DBF dbf = new DBF(pathTemp, form.DBF); try { excel.OpenWorksheet(pathExcel); Work work = new Work(excel.worksheet, form, 120); Logger.LogLevel old_level = Logger.Level; Logger.SetLevel(Logger.LogLevel.TRACER); work.IterateRecords(dbf.appendRecord); Logger.SetLevel(old_level); } finally { dbf.close(); excel.close(); } }
protected int findStartY(Xml_Form form) { var target = form.Fields.StartY; if (target.IsSimple && target.SimpleValue.HasValue) { return(target.SimpleValue.Value); } var group = form.Rules.OfType <Xml_Equal_Group>().FirstOrDefault(x => x.Name == target.group.name); if (group == null) { throw new InvalidOperationException($"Не удалось найти группу с именем '{target.group.name}'"); } var point = Program.XmlTools.findGroupPosition(worksheet, group); if (point == null) { throw new InvalidOperationException($"Не удалось найти координаты для группы '{group.Name}'!"); } if (target.group.position != "after") { throw new ArgumentException($"Недопустимое значение 'position': {target.group.position}", nameof(target.group.position)); } return(point.Value.Y + target.group.Y); }
public Work(Xml_Form form, int buffer) { InitVariables(form); startY = form.Fields.StartY; endX = form.Fields.EndX; validators = form.Validate; this.buffer = buffer; }
public Work(Worksheet worksheet, Xml_Form form, int buffer) { this.worksheet = worksheet; this.buffer = buffer; InitVariables(form); startY = findStartY(form); endX = form.Fields.EndX; validators = form.Validate; jScript = form.Fields.Script; }
public void GroupSearch() { string[] values = { "Hello", "world", "!", "Again" }; int startY = 5; int startYoffset = 5; ws.Cells[startY, 2] = values[0]; ws.Cells[startY, 3] = values[1]; ws.Cells[startY, 5] = values[2]; ws.Cells[startY + 1, 1] = values[3]; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base>(), Fields = new Xml_Form_Fields() { StartY = new Xml_Start_Y { group = new Xml_Start_Y_Group { name = "group1", position = "after", Y = startYoffset } } } }; var rule = new Xml_Equal_Group { Name = "group1", Rules = new List <Xml_Equal> { new Xml_Equal { Text = values[1], X = 1, Y = 0 }, new Xml_Equal { Text = values[0], X = 0, Y = 0 }, } }; form.Rules.Add(rule); Work work = new Work(ws, form, 1); Assert.AreEqual(startY + startYoffset, work.StartY); }
public void RuleSimple() { int Y = 3; int X = 1; string[] titles = { "Фамилия", "Имя", "Отчество" }; for (int i = 0; i < titles.Length; i++) { ws.Cells[Y, X + i] = titles[i]; } int offsetY = 2; string value = "Значение 1"; ws.Cells[Y + offsetY, X] = value; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base> { new Xml_Equal_Group { Y = Y, X = X, Rules = new List <Xml_Equal> { new Xml_Equal { Text = titles[0], X = 0, Y = 0 }, new Xml_Equal { Text = titles[1], X = 1, Y = 0 }, new Xml_Equal { Text = titles[2], X = 2, Y = 0 }, new Xml_Equal { Text = value, X = 0, Y = offsetY } } } } }; var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); Assert.AreEqual(form, finded); }
public void GroupSearch() { string[] values = { "Hello", "world", "!", "Again" }; ws.Cells[5, 2] = values[0]; ws.Cells[5, 3] = values[1]; ws.Cells[5, 5] = values[2]; ws.Cells[6, 1] = values[3]; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base>() }; var rule = new Xml_Equal_Group { Rules = new List <Xml_Equal> { new Xml_Equal { Text = values[1], X = 1, Y = 0 }, new Xml_Equal { Text = values[0], X = 0, Y = 0 }, } }; form.Rules.Add(rule); var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); Assert.AreEqual(form, finded); rule.Rules.Insert(0, new Xml_Equal { Text = values[3], X = -1, Y = 1 }); finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); Assert.AreEqual(form, finded); }
public void RuleInvalid() { Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base>() }; form.Rules.Clear(); form.Rules.Add(new Xml_Equal { Text = "TEST", X = 2 }); Action testRules = () => XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); ExceptionAssert.Throws <ArgumentException>(testRules); form.Rules.Clear(); form.Rules.Add(new Xml_Equal { Text = "TEST", Y = 1 }); ExceptionAssert.Throws <ArgumentException>(testRules); }
public void GroupFailedSearch() { string value = "Hello world!"; ws.Cells[5, 2] = value; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base> { new Xml_Equal_Group { Rules = new List <Xml_Equal> { new Xml_Equal { Text = "What is this?", X = 1, Y = 1 }, } } } }; var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); Assert.IsNull(finded); ((Xml_Equal_Group)form.Rules[0]).Rules.Insert(0, new Xml_Equal { Text = value, X = 0, Y = 0 }); finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); Assert.IsNull(finded); }
public void RuleNotValid() { int Y = 3; int X = 1; ws.Cells[Y, X] = "Документ"; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base> { new Xml_Equal_Group { Y = Y, X = X, Rules = new List <Xml_Equal> { new Xml_Equal { Text = "Документ", X = 0, Y = 0 }, new Xml_Equal { Text = "Простой", X = 1, Y = 0 }, new Xml_Equal { Text = "Сложный", X = 0, Y = 1 }, } } } }; var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); Assert.IsNull(finded); }
public void ValidateRegex() { int Y = 5; int X = 4; string name = "Форма 1.1"; ws.Cells[Y, X] = name; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base> { new Xml_Equal { Text = @"Форма \d.\d", X = X, Y = Y, validate = "regex" } } }; var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); Assert.AreEqual(form, finded); }
public void RuleSimple() { int Y = 5; int X = 4; string name = "Форма 1.1"; ws.Cells[Y, X] = name; Xml_Form form = new Xml_Form { Name = "Test", Rules = new List <Xml_Equal_Base> { new Xml_Equal { Text = name, X = X, Y = Y } } }; var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> { form }); Assert.AreEqual(form, finded); }
protected Xml_Form generateForm() { Xml_Form form = new Xml_Form { DBF = new List <Xml_DbfField> { new Xml_DbfField { type = "string", name = "FIO", length = "30", text = "$FIO" }, new Xml_DbfField { type = "string", name = "KP", length = "8", text = "$KP" }, new Xml_DbfField { type = "numeric", name = "SUMMA", length = "8", text = "$SUMMA" }, new Xml_DbfField { type = "date", name = "DATA", length = "8", text = "$DATA" }, new Xml_DbfField { type = "date", name = "NACHIS", length = "8", text = "$NACHIS", } }, // TODO: Переписать на нормальные объекты Fields = new Xml_Form_Fields { EndX = 8, StartY = new Xml_Start_Y() { SimpleValue = 8 }, Static = new[] { GetElement(@"<Static X=""2"" Y=""6"" name=""NACHIS"" type=""date"" regex_pattern=""на (\S+)"" language=""ru-RU"" format=""dd.MM.yyyy"" lastday=""true"" />") }, IF = new[] { GetElement(@"<IF X=""2"" VALUE=""Итого:""><THEN><STOP_LOOP/><Dynamic X=""5"" name=""XLS_SUMMA"" type=""numeric"" /></THEN></IF>"), GetElement(@"<IF X=""2"" VALUE=""Пропуск""> <THEN><SKIP_RECORD/></THEN> <ELSE><Dynamic X=""2"" name=""ID"" type=""string"" /> </ELSE></IF>") }, Dynamic = new[] { GetElement(@"<Dynamic X=""3"" name=""FIO"" type=""string"" />"), GetElement(@"<Dynamic X=""4"" name=""KP"" type=""string"" />"), GetElement(@"<Dynamic X=""5"" name=""TOTAL_SUMMA"" type=""numeric"" function=""SUM"" />"), GetElement(@"<Dynamic X=""5"" name=""SUMMA"" type=""numeric"" />"), GetElement(@"<Dynamic X=""6"" name=""DATA"" type=""date"" />"), } }, Validate = new List <Xml_Validator> { new Xml_Validator { Math = new Xml_ValidatorMath { count = 500, precision = "0,5", message = "Погрешность {1} при допуске {0}" }, Message = "{0} != {1} !", var1 = "TOTAL_SUMMA", var2 = "XLS_SUMMA" } } }; return(form); }