//#region Write to Object public override void OnWriteObjectHeader(IndentedTextWriter writer, IALObject Target) { base.OnWriteObjectHeader(writer, Target); TestALCodeunit testALCodeunit = (TestALCodeunit)Target; ALMethod aLMethod = new ALMethod { MethodKind = ALMethodKind.Trigger, Name = "OnRun" }; List <string> contentLines = new List <string>(); foreach (ITestFeature feature in testALCodeunit.Features) { contentLines.Add(string.Format("[Feature] {0}", feature.Name)); } aLMethod.Content = String.Join("\r\n ", contentLines); writer.Write(OnWriteObjectMethod(Target, aLMethod)); }
public override void OnRead(IEnumerable <string> Lines, IALObject Target, out IALObject NewTarget) { base.OnRead(Lines, Target, out NewTarget); var str = JsonConvert.SerializeObject(Target); var TestTarget = new TestALCodeunit { Id = Target.Id, Name = Target.Name, Methods = Target.Methods.Select(s => new TestALMethod { Attributes = s.Attributes, Comments = s.Comments, Content = s.Content, IsLocal = s.IsLocal, MethodBody = s.MethodBody, MethodKind = s.MethodKind, Name = s.Name, Parameters = s.Parameters, ReturnTypeDefinition = s.ReturnTypeDefinition, TestMethod = s.TestMethod, MethodRange = s.MethodRange }).ToList(), GlobalVariables = Target.GlobalVariables, Properties = Target.Properties, Type = Target.Type, Comments = Target.Comments, Sections = Target.Sections }; if (TestTarget.Methods == null) { return; } if (TestTarget.Methods.Count == 0) { return; } var testMethods = TestTarget.Methods.Where(w => w.TestMethod == true).ToList(); var enumNames = Enum.GetNames(typeof(ScenarioElementType)); var enumNamesJoined = String.Join('|', enumNames); var pattern = @".*\[(" + enumNamesJoined + @")(.*?)\]\s+(.*)"; var features = new List <ITestFeature>(); foreach (var method in testMethods) { var matches = Regex.Matches(method.Content, pattern, RegexOptions.IgnoreCase); if (matches.Count > 0) { var matchList = matches.ToList(); var scenarioElems = matchList .Select(m => new { Type = m.Groups[1].Value.ToEnum <ScenarioElementType>(), Id = m.Groups[2].Value.Trim().Replace("#", ""), Name = m.Groups[3].Value.Trim(), LineText = m.Groups[0].Value.Trim() }); ITestFeature feature = new TestFeature(); var scenario = new TestScenario(); foreach (var elem in scenarioElems) { switch (elem.Type) { case ScenarioElementType.FEATURE: feature = features.FirstOrDefault(a => a.Name == elem.Name); if (feature == null) { feature = new TestFeature { Name = elem.Name, Scenarios = new List <ITestScenario>() }; features.Add(feature); } break; case ScenarioElementType.SCENARIO: scenario = new TestScenario(); scenario.ID = int.Parse(elem.Id); scenario.Name = elem.Name; scenario.MethodName = method.Name; scenario.Feature = feature; feature.Scenarios.Add(scenario); break; case ScenarioElementType.GIVEN: var given = new TestScenarioElement(); given.Type = elem.Type; given.Value = elem.Name; given.LineText = elem.LineText; scenario.Elements.Add(given); break; case ScenarioElementType.WHEN: var when = new TestScenarioElement(); when.Type = elem.Type; when.Value = elem.Name; when.LineText = elem.LineText; scenario.Elements.Add(when); break; case ScenarioElementType.THEN: var then = new TestScenarioElement(); then.Type = elem.Type; then.Value = elem.Name; then.LineText = elem.LineText; scenario.Elements.Add(then); break; default: break; } } method.Scenario = scenario; } } TestTarget.Features = features; NewTarget = TestTarget; }