private void ReadTests(UUTReport uut, XElement testRun) { foreach (XElement testGroup in testRun.Elements("testgroup")) { SequenceCall sequence = uut.GetRootSequenceCall().AddSequenceCall(testGroup.Attribute("name").Value); foreach (XElement testFunction in testGroup.Elements("testfunction")) { XElement result = testFunction.Element("result"); PassFailStep step = sequence.AddPassFailStep(testFunction.Attribute("name").Value); StepStatusType stepStatus = (StepStatusType)Enum.Parse(typeof(StepStatusType), result.Attribute("value").Value); step.AddTest(stepStatus == StepStatusType.Passed, stepStatus); step.ReportText = testFunction.Element("text-output").Value; if (testFunction.Element("time-taken") != null) { step.StepTime = double.Parse(testFunction.Element("time-taken").Value) / 1000.0; } } } }
private void ReadDataFile(UUTReport uut, string fileName) { string[] seqName = Path.GetFileNameWithoutExtension(fileName).Split(new char[] { '-' }); if (currentSequence == null || currentSequence.Name != seqName[0]) { currentSequence = uut.GetRootSequenceCall().AddSequenceCall(seqName[0]); } using (TextReader reader = new StreamReader(fileName)) { string line = reader.ReadLine(); string[] headers = line.Split(new char[] { '\t' }); line = reader.ReadLine(); List <double> x = new List <double>(); List <double> y = new List <double>(); List <double> min = new List <double>(); List <double> max = new List <double>(); while (line != null) { if (headers[0] == "name") //Single measure { NumericLimitStep numericLimitStep = currentSequence.AddNumericLimitStep(line.Split(new char[] { '\t' }).First()); double[] values = ReadDoubles(line); //Format: name value max min if (double.IsNaN(values[2])) //No limits { numericLimitStep.AddTest(values[1], ""); } else if (!double.IsNaN(values[3]) && !double.IsNaN(values[2])) { numericLimitStep.AddTest(values[1], CompOperatorType.GELE, values[3], values[2], ""); } else { throw new NotImplementedException("Assumed no limits or max / min"); } } else if (headers[0] == "frq") { double[] values = ReadDoubles(line); if (values.Length == 1) { } //No Y value, skip else { x.Add(values[0]); y.Add(values[1]); if (values.Length == 4) { max.Add(values[2]); min.Add(values[3]); } else if (values.Length == 3) { max.Add(values[2]); } else { throw new NotImplementedException("Assumed x,y,min,max or x,y,max"); } } } else { throw new NotImplementedException("Assumed either name or frq in header"); } line = reader.ReadLine(); } if (headers[0] == "frq") { NumericLimitStep numericLimitStep = currentSequence.AddNumericLimitStep(headers[1]); numericLimitStep.AddMultipleTest(y.Average(), "Hz", "avg"); if (min.Count > 0) { numericLimitStep.AddMultipleTest(y.Min(), "Hz", "min"); } if (max.Count > 0) { numericLimitStep.AddMultipleTest(y.Max(), "Hz", "max"); } int errorCount = 0; for (int i = 0; i < y.Count; i++) { if (i < max.Count && double.IsNaN(max[i])) //Skip if limit is Nan or not exist { continue; } if (i < min.Count && double.IsNaN(min[i])) { continue; } if (y[i] > max[i]) { errorCount++; } if (min.Count > 0 && y[i] < min[i]) { errorCount++; } } numericLimitStep.AddMultipleTest(errorCount, CompOperatorType.LT, 1, "#", "OutOfBounds"); Chart chart = numericLimitStep.AddChart(ChartType.LineLogX, headers[1], "Frequency", "Hz", "res", ""); chart.AddSeries("values", x.ToArray(), y.ToArray()); if (min.Count > 0) { chart.AddSeries("min", x.ToArray(), min.ToArray()); } if (max.Count > 0) { chart.AddSeries("max", x.ToArray(), max.ToArray()); } } } }