public async Task LogPluginHost_HandleProcessExceptions() { using (TestHostContext tc = new TestHostContext(this)) { AgentLogPluginHostContext hostContext = CreateTestLogPluginHostContext(); hostContext.Variables["throw_process"] = "1"; List <IAgentLogPlugin> plugins = new List <IAgentLogPlugin>() { new TestPlugin1(), new TestPluginException() }; TestTrace trace = new TestTrace(tc); AgentLogPluginHost logPluginHost = new AgentLogPluginHost(hostContext, plugins, trace); var task = logPluginHost.Run(); for (int i = 0; i < 1000; i++) { logPluginHost.EnqueueOutput($"{Guid.Empty.ToString("D")}:{i}"); } await Task.Delay(1000); logPluginHost.Finish(); await task; // regular one still running Assert.True(trace.Outputs.Contains("Test1: 0")); Assert.True(trace.Outputs.Contains("Test1: 999")); Assert.True(trace.Outputs.Contains("Test1: Done")); Assert.True(!trace.Outputs.Contains("TestException: 0")); Assert.True(!trace.Outputs.Contains("TestException: 999")); Assert.True(trace.Outputs.Contains("TestException: Done")); } }
public async Task LogPluginHost_SlowPluginRecover() { using (TestHostContext tc = new TestHostContext(this)) { AgentLogPluginHostContext hostContext = CreateTestLogPluginHostContext(); List <IAgentLogPlugin> plugins = new List <IAgentLogPlugin>() { new TestPlugin1(), new TestPluginSlowRecover() }; TestTrace trace = new TestTrace(tc); AgentLogPluginHost logPluginHost = new AgentLogPluginHost(hostContext, plugins, trace, 950, 100); var task = logPluginHost.Run(); for (int i = 0; i < 1000; i++) { logPluginHost.EnqueueOutput($"{Guid.Empty.ToString("D")}:{i}"); } await Task.Delay(1000); logPluginHost.Finish(); await task; // regular one still running Assert.True(trace.Outputs.Contains("Test1: 0")); Assert.True(trace.Outputs.Contains("Test1: 999")); Assert.True(trace.Outputs.Contains("Test1: Done")); Assert.True(trace.Outputs.Contains("TestSlowRecover: Done")); Assert.True(trace.Outputs.Exists(x => x.Contains("TestPluginSlowRecover' has too many buffered outputs."))); Assert.True(trace.Outputs.Exists(x => x.Contains("TestPluginSlowRecover' has cleared out buffered outputs."))); } }
public async Task LogPluginHost_NotInitialized() { using (TestHostContext tc = new TestHostContext(this)) { AgentLogPluginHostContext hostContext = CreateTestLogPluginHostContext(); List <IAgentLogPlugin> plugins = new List <IAgentLogPlugin>() { new TestPlugin1(), new TestPluginNotInitialized() }; TestTrace trace = new TestTrace(tc); AgentLogPluginHost logPluginHost = new AgentLogPluginHost(hostContext, plugins, trace); var task = logPluginHost.Run(); for (int i = 0; i < 1000; i++) { logPluginHost.EnqueueOutput($"{Guid.Empty.ToString("D")}:{i}"); } await Task.Delay(1000); logPluginHost.Finish(); await task; // regular one still running Assert.True(trace.Outputs.Contains("Test1: 0")); Assert.True(trace.Outputs.Contains("Test1: 999")); Assert.True(trace.Outputs.Contains("Test1: Done")); Assert.True(!trace.Outputs.Contains("TestNotInitialized: 0")); Assert.True(!trace.Outputs.Contains("TestNotInitialized: Done")); } }
public async Task LogPluginHost_ShortCircuitSlowPlugin() { using (TestHostContext tc = new TestHostContext(this)) { AgentLogPluginHostContext hostContext = CreateTestLogPluginHostContext(); List <IAgentLogPlugin> plugins = new List <IAgentLogPlugin>() { new TestPlugin1(), new TestPluginSlow() }; TestTrace trace = new TestTrace(tc); AgentLogPluginHost logPluginHost = new AgentLogPluginHost(hostContext, plugins, trace, 100, 100); var task = logPluginHost.Run(); for (int i = 0; i < 1000; i++) { logPluginHost.EnqueueOutput($"{Guid.Empty.ToString("D")}:{i}"); } await Task.Delay(1000); logPluginHost.Finish(); await task; // regular one still running Assert.True(trace.Outputs.Contains("Test1: 0")); Assert.True(trace.Outputs.Contains("Test1: 999")); Assert.True(trace.Outputs.Contains("Test1: Done")); // slow one got killed Assert.False(trace.Outputs.Contains("TestSlow: Done")); Assert.True(trace.Outputs.Exists(x => x.Contains("Plugin has been short circuited"))); } }
private void IsAddToChart_Click(object sender, RoutedEventArgs e) { if (vm.SelectedItem as TreeNodeVM != null && (vm.SelectedItem.NodeObj as TestItem != null)) { // string traceName = (vm.SelectedItem.ParentNode.NodeObj as TestStep).Name + (vm.SelectedItem.NodeObj as TestItem).TypeName + vm.SelectedItem.ParentNode.SubTreeNodeList.IndexOf(vm.SelectedItem); string traceName = (vm.SelectedItem.ParentNode.NodeObj as TestStep).Name + "_" + (vm.SelectedItem.NodeObj as TestItem).TypeName; if (vm.SelectedItem.ParentNode.ParentNode.NodeObj as LoopTestStep == null) { TestTrace tr = (treeView.SelectedItem as TreeNodeVM).NodeObj as TestTrace; if (tr != null && tr.ResultData != null) { ShowChart(tr, traceName); } } else { DataTable dt = loopGridControl.ItemsSource as DataTable; TraceEditValuelist.Clear(); if (dt != null) { TraceSetWindow window = new TraceSetWindow(dt, TraceEditValuelist, traceName); window.updateTraceData += UpdateTraceData; window.Show(); } } } }
/// <summary> /// Setup generic environment for unit testing with XFS code. /// </summary> public static void SetupUnitTests() { ErrorHandling.ErrorHandler = (message) => { TestTrace.Trace("Testing", "Error", message); if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debugger.Break(); } throw new TestFatalErrorException(message); }; }
public TestVerdict GetProjects( [TestParameter("TestRail Url", "Enter the TestRail Url", "[TestRailUrl]")] string url, [TestParameter("User name", "Enter the TestRail user name.", "[TestRailUser]")] string userName, [TestParameter("User password", "Enter the TestRail user password.", "[TestRailPassword]")] string password) { try { var client = new TestRail.TestRailClient(url, userName, password); var projects = client.GetProjects(); var project = projects.Find(x => x.Name.Equals("TestProject")); //client.GetProject() var runs = client.GetRuns(project.ID); var bob = client.GetResults(136); var results = client.GetResultsForCase(59, 136); var suites = client.GetSuites(project.ID); var suite = suites.Find(x => x.Name.Equals("Master test suite")); var testRun = client.AddRun(project.ID, (ulong)suite.ID, $"Very important test run: {DateTime.Now}", "Blah, blah, blah", 1); var dorks = client.GetResultsForRun(60); var tests = client.GetTests(60); var cases = client.GetCases(project.ID, (ulong)suite.ID); var comment = File.ReadAllText(@"C:\DevProjects\Quintity\Repos\Quintity.TestFramework.TestListeners\Quintity.TestFramework.TestListeners.Test\TestProperties\TestProperties.props"); foreach (var @case in cases) { var spud = client.AddResultForCase(testRun.Value, (ulong)@case.ID, TestRail.Types.ResultStatus.Passed, comment, "version 1.0", new TimeSpan(0, 0, 30)); TestTrace.Trace($"Added result: {spud.Value}"); } TestMessage += "Success"; TestVerdict = TestVerdict.Pass; } catch (Exception e) { TestMessage += e.ToString(); TestVerdict = TestVerdict.Error; } return(TestVerdict.Pass); }
bool RecoverySentinel() { var ing = false; if (RecoverySentineling == false) { lock (RecoverySentinelingLock) { if (RecoverySentineling == false) { RecoverySentineling = ing = true; } } } if (ing) { new Thread(() => { while (true) { Thread.CurrentThread.Join(1000); try { ResetSentinel(); if (_ib.Get(_masterHost).CheckAvailable()) { if (!TopOwner.OnNotice(null, new NoticeEventArgs(NoticeType.Info, null, $"{_connectionString.Host.PadRight(21)} > Redis Sentinel switch to {_masterHost}", null))) { TestTrace.WriteLine($"【{_connectionString.Host}】Redis Sentinel switch to {_masterHost}", ConsoleColor.DarkGreen); } RecoverySentineling = false; return; } } catch (Exception ex21) { if (!TopOwner.OnNotice(null, new NoticeEventArgs(NoticeType.Info, null, $"{_connectionString.Host.PadRight(21)} > Redis Sentinel switch to {_masterHost}", null))) { TestTrace.WriteLine($"【{_connectionString.Host}】Redis Sentinel: {ex21.Message}", ConsoleColor.DarkYellow); } } } }).Start(); } return(ing); }
public async Task LogPluginHost_RunSinglePluginWithEmptyLinesInput() { using (TestHostContext tc = new TestHostContext(this)) { AgentLogPluginHostContext hostContext = CreateTestLogPluginHostContext(); List <IAgentLogPlugin> plugins = new List <IAgentLogPlugin>() { new TestPlugin1() }; TestTrace trace = new TestTrace(tc); AgentLogPluginHost logPluginHost = new AgentLogPluginHost(hostContext, plugins, trace); var task = logPluginHost.Run(); for (int i = 0; i < 100; i++) { logPluginHost.EnqueueOutput($"{Guid.Empty.ToString("D")}:{i}"); } for (int i = 0; i < 100; i++) { logPluginHost.EnqueueOutput($"{Guid.Empty.ToString("D")}:{i}"); } for (int i = 0; i < 10; i++) { logPluginHost.EnqueueOutput($"{Guid.Empty.ToString("D")}:"); } for (int i = 100; i < 200; i++) { logPluginHost.EnqueueOutput($"{Guid.Empty.ToString("D")}:{i}"); } await Task.Delay(1000); logPluginHost.Finish(); await task; Assert.True(trace.Outputs.Contains("Test1: 0")); Assert.True(trace.Outputs.Contains("Test1: 99")); Assert.True(trace.Outputs.Contains("Test1: ")); Assert.True(trace.Outputs.Contains("Test1: 100")); Assert.True(trace.Outputs.Contains("Test1: 199")); Assert.Equal(10, trace.Outputs.FindAll(x => x == "Test1: ").Count); } }
private DataTable GeneralTableConvert(DataTable dt) { string where = "全选='{0}'"; DataRow[] drs = vm.TestResultTable.Select(string.Format(where, true)); DataTable dtResult = ToDataTable(drs); List <string> AllDynamicColumn = new List <string>(); foreach (DataRow dr in dt.DefaultView.ToTable(true, "X").Rows) { if (dr["X"] != null && !string.IsNullOrEmpty(dr["X"].ToString())) { dtResult.Columns.Add(dr["X"].ToString()); } } foreach (DataRow row in dtResult.Rows) { string[] strs = row["IndexStr"].ToString().Split(','); if (!string.IsNullOrWhiteSpace(row["IndexStr"].ToString())) { TestTrace trace = TestPlan.ManualConnectionList[Convert.ToInt32(strs[0])].TestStepList[Convert.ToInt32(strs[1])].ItemList[Convert.ToInt32(strs[2])] as TestTrace; if (trace != null) { for (int i = 0; i < trace.ResultData.Count(); i++) { string xValue = (new FreqStringConverter()).Convert(trace.ResultData[i].X, null, null, null).ToString(); string yValue = trace.ResultData[i].Y.ToDigits(GeneTestSetup.Instance.DataDisplayDigits); row[xValue] = yValue; } } } else { string xValue = row["X"].ToString(); string yValue = row["测试数据"].ToString(); row[xValue] = yValue; } } dtResult.Columns.Remove("X"); dtResult.Columns.Remove("IndexStr"); dtResult.Columns.Remove("测试数据"); dtResult.Columns.Remove("全选"); return(dtResult); }
public TestVerdict MyTestMethod( [TestParameter("String parameter", "Enter string parameter", "Default value")] string param1, [TestParameter("Int parameter", "Enter integer parameter", 0)] int param2, [TestParameter("Boolean parameter", "Enter boolean parameter", true)] bool param3) { try { Setup(); TestTrace.Trace("This is a sample TestTrace message."); TestAssert.IsTrue(param3, "This is a sample assertion."); TestCheck.IsTrue("Test of param3", param3, "This is a sample TestCheck."); TestMessage += "This is the returned test message."; TestVerdict = TestVerdict.Pass; } catch (TestAssertFailedException e) { TestMessage += e.ToString(); TestVerdict = TestVerdict.Fail; } catch (Exception e) { TestMessage += e.ToString(); TestVerdict = TestVerdict.Error; } finally { Teardown(); } return(TestVerdict); }
public string GetTestName() => string.Join(",", TestTrace.ToArray());
public void AddTestName(string testName) => TestTrace.Add(testName);
private void updateResultData(int stepIndex) { TestStep step = TestPlan.ManualConnectionList[TestPlan.currentConnIndex].TestStepList[stepIndex]; if (step is LoopTestStep) { return; } for (int i = 0; i < step.ItemList.Count(); i++) { var item = step.ItemList[i]; string sn = TestPlan.ManualConnectionList[TestPlan.currentConnIndex].SN; if (item is TestTrace) { TestTrace trace = item as TestTrace; if (trace.ResultData.Count() == 0) { continue; } double ymaxValue = trace.ResultData.Select(x => x.Y).Max(); double yminValue = trace.ResultData.Select(x => x.Y).Min(); double maxValue = Convert.ToDouble(ymaxValue.ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); double minValue = Convert.ToDouble(yminValue.ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); string xmaxValue = (new FreqStringConverter()).Convert(trace.ResultData.Find(x => x.Y == ymaxValue).X, null, null, null).ToString(); string xminValue = (new FreqStringConverter()).Convert(trace.ResultData.Find(x => x.Y == yminValue).X, null, null, null).ToString(); string tracePassFail = trace.PassFail == false ? "Fail" : "Pass"; for (int j = 0; j < TestPlan.TestSpecs.Count(); j++) { vm.TestResultTable.Rows.Add(new object[] { false, TestPlan.currentConnIndex + "," + stepIndex + "," + i, sn, trace.TypeName, TestPlan.TestSpecs[j].SpecName, trace.UserDefName, trace.TestConfigDesciption, trace.XDescription, trace.TestSpecList[j].LimitDescription, xmaxValue + "," + xminValue, maxValue + "," + minValue, tracePassFail }); foreach (XYTestMarker marker in trace.TestSpecList[j].TestMarkerList) { string markerPassFail = marker.PassFail == false ? "Fail" : "Pass"; double valueY = Convert.ToDouble(marker.MarkerResult[0].Y.ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); string valueX = (new FreqStringConverter()).Convert(marker.MarkerResult[0].X, null, null, null).ToString(); vm.TestResultTable.Rows.Add(new object[] { false, "", sn, "Marker", TestPlan.TestSpecs[j].SpecName, marker.UserDefName, marker.TestConfigDesciption, marker.XDescription, trace.TestSpecList[j].LimitDescription, valueX, valueY, markerPassFail }); } } } else if (item is PointTestItem) { PointTestItem pointItem = item as PointTestItem; double valueY = Convert.ToDouble(pointItem.Y.ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); string valueX = (new FreqStringConverter()).Convert(pointItem.X, null, null, null).ToString(); string pointItemPassFail = pointItem.PassFail == false ? "Fail" : "Pass"; for (int j = 0; j < TestPlan.TestSpecs.Count(); j++) { vm.TestResultTable.Rows.Add(new object[] { false, "", sn, pointItem.TypeName, TestPlan.TestSpecs[j].SpecName, pointItem.UserDefName, pointItem.TestConfigDesciption, pointItem.XDescription, pointItem.TestSpecList[j].LimitDescription, valueX, valueY, pointItemPassFail }); } } else if (item is TRTestItem) { TRTestItem trTestItem = item as TRTestItem; if (trTestItem.Data == null) { return; } if (trTestItem.FreqList == null || trTestItem.FreqList.Count() == 0) { return; } if (trTestItem.StateList == null || trTestItem.StateList.Count() == 0) { return; } double?maxValue; double?minValue; int maxRowIndex; int maxColumnIndex; int minRowIndex; int minColumnIndex; GeneFun.GetArrayMax(out maxRowIndex, out maxColumnIndex, out maxValue, trTestItem.Data); GeneFun.GetArrayMin(out minRowIndex, out minColumnIndex, out minValue, trTestItem.Data); maxValue = Convert.ToDouble(Convert.ToDouble(maxValue).ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); minValue = Convert.ToDouble(Convert.ToDouble(minValue).ToDigits(GeneTestSetup.Instance.DataDisplayDigits)); int maxAtt = trTestItem.StateList[maxRowIndex].Att; int maxPhase = trTestItem.StateList[maxRowIndex].Phase; double maxFreq = trTestItem.FreqList[maxColumnIndex]; int minAtt = trTestItem.StateList[minRowIndex].Att; int minPhase = trTestItem.StateList[minRowIndex].Phase; double minFreq = trTestItem.FreqList[minColumnIndex]; for (int j = 0; j < TestPlan.TestSpecs.Count(); j++) { string maxValueStr = "最大值:att =" + maxAtt + "phase = " + maxPhase + "freq = " + maxFreq; string minValueStr = "最小值:att =" + minAtt + "phase = " + minPhase + "freq = " + minFreq; string trTestItemPassFail = trTestItem.TestSpecList[j].PassFail == false ? "Fail" : "Pass"; vm.TestResultTable.Rows.Add(new object[] { false, TestPlan.currentConnIndex + "," + stepIndex + "," + i, sn, trTestItem.TypeName, TestPlan.TestSpecs[j].SpecName, trTestItem.UserDefName, trTestItem.TestConfigDesciption, trTestItem.XDescription, trTestItem.TestSpecList[j].LimitDescription, maxValueStr + "\r\n" + minValueStr, maxValue + "," + minValue, trTestItemPassFail }); } } } this.Dispatcher.Invoke(new Action(() => { bindGridControl(); })); }
public void OnTestStepRunCompleted(int stepIndex) { TestStep step = TestPlan.ManualConnectionList[TestPlan.currentConnIndex].TestStepList[stepIndex]; if (step is LoopTestStep) { return; } for (int k = 0; k < step.ItemList.Count; k++) { if (step.ItemList[k] as TestTrace != null) { TestTrace tc = step.ItemList[k] as TestTrace; for (int j = 0; j < tc.TestSpecList.Count; j++) { TestTraceSpec tp = tc.TestSpecList[j]; for (int p = 0; p < tp.TestMarkerList.Count; p++) { TestMarker tm = tp.TestMarkerList[p]; if (tm as XYTestMarker != null) { XYTestMarker xyM = tm as XYTestMarker; foreach (XYData xyData in xyM.MarkerResult) { if (vm.XYMarkerDisplist.Count <= j) { ObservableCollection <XYMarkerDisp> XYMarkerDisps = new ObservableCollection <XYMarkerDisp>(); vm.XYMarkerDisplist.Add(XYMarkerDisps); } if (vm.XYMarkerDisplist[j].Where(x => x.ConnIndex == TestPlan.currentConnIndex && x.StepIndex == stepIndex && x.TraceIndex == k && x.MarkerIndex == p).Count() == 0) { vm.XYMarkerDisplist[j].Add(new XYMarkerDisp() { ConnIndex = TestPlan.currentConnIndex, StepIndex = stepIndex, TraceIndex = k, MarkerIndex = p, PortName = xyM.TestConfigDesciption, UserDefName = xyM.UserDefName, Freq = xyData.X, TestResult = xyData.Y, PassFail = xyM.PassFail, LimitDescription = xyM.LimitDescription, XDescription = xyM.XDescription }); } else { var item = vm.XYMarkerDisplist[j].Where(x => x.ConnIndex == TestPlan.currentConnIndex && x.StepIndex == stepIndex && x.TraceIndex == k && x.MarkerIndex == p).First(); item.Freq = xyData.X; item.TestResult = xyData.Y; item.PassFail = xyM.PassFail; } } } } } } else if (step.ItemList[k] as TRTestItem != null) { TRTestItem tt = step.ItemList[k] as TRTestItem; for (int j = 0; j < tt.TestSpecList.Count; j++) { TRTestItemSpec tp = tt.TestSpecList[j]; for (int p = 0; p < tp.TestMarkerList.Count; p++) { TestMarker tm = tp.TestMarkerList[p]; if (tm as XYTestMarker != null) { XYTestMarker xyM = tm as XYTestMarker; foreach (XYData xyData in xyM.MarkerResult) { if (vm.XYMarkerDisplist.Count <= j) { ObservableCollection <XYMarkerDisp> XYMarkerDisps = new ObservableCollection <XYMarkerDisp>(); vm.XYMarkerDisplist.Add(XYMarkerDisps); } if (vm.XYMarkerDisplist[j].Where(x => x.ConnIndex == TestPlan.currentConnIndex && x.StepIndex == stepIndex && x.TraceIndex == k && x.MarkerIndex == p).Count() == 0) { vm.XYMarkerDisplist[j].Add(new XYMarkerDisp() { ConnIndex = TestPlan.currentConnIndex, StepIndex = stepIndex, TraceIndex = k, MarkerIndex = p, PortName = xyM.TestConfigDesciption, UserDefName = xyM.UserDefName, Freq = xyData.X, TestResult = xyData.Y, PassFail = xyM.PassFail, LimitDescription = xyM.LimitDescription, XDescription = xyM.XDescription }); } else { var item = vm.XYMarkerDisplist[j].Where(x => x.ConnIndex == TestPlan.currentConnIndex && x.StepIndex == stepIndex && x.TraceIndex == k && x.MarkerIndex == p).First(); item.Freq = xyData.X; item.TestResult = xyData.Y; item.PassFail = xyM.PassFail; } } } } } } else if (step.ItemList[k] is PointTestItem) { PointTestItem pTestItem = step.ItemList[k] as PointTestItem; for (int j = 0; j < pTestItem.TestSpecList.Count; j++) { if (vm.XYMarkerDisplist.Count <= j) { ObservableCollection <XYMarkerDisp> XYMarkerDisps = new ObservableCollection <XYMarkerDisp>(); vm.XYMarkerDisplist.Add(XYMarkerDisps); } if (vm.XYMarkerDisplist[j].Where(x => x.ConnIndex == TestPlan.currentConnIndex && x.StepIndex == stepIndex && x.TraceIndex == k && x.MarkerIndex == 0).Count() == 0) { vm.XYMarkerDisplist[j].Add(new XYMarkerDisp() { ConnIndex = TestPlan.currentConnIndex, StepIndex = stepIndex, TraceIndex = k, MarkerIndex = 0, PortName = pTestItem.TestConfigDesciption, UserDefName = pTestItem.UserDefName, Freq = pTestItem.X, TestResult = pTestItem.Y, PassFail = pTestItem.PassFail, LimitDescription = pTestItem.TestSpecList[j].LimitDescription, XDescription = pTestItem.XDescription }); } else { var item = vm.XYMarkerDisplist[j].Where(x => x.ConnIndex == TestPlan.currentConnIndex && x.StepIndex == stepIndex && x.TraceIndex == k && x.MarkerIndex == 0).First(); item.Freq = pTestItem.X; item.TestResult = pTestItem.Y; item.PassFail = pTestItem.PassFail; } } } else if (step.ItemList[k] is BoolTestItem) { BoolTestItem bTestItem = step.ItemList[k] as BoolTestItem; int resultData = bTestItem.ResultData == true ? 1 : 0; vm.XYMarkerDisplist[0].Add(new XYMarkerDisp() { TestResult = Convert.ToDouble(resultData), UserDefName = bTestItem.UserDefName }); } } this.Dispatcher.Invoke(new Action(() => { gridControl.ItemsSource = vm.XYMarkerDisplist[0]; })); // gridControl.ItemsSource = vm.XYMarkerDisplist; }
private void ShowChart(TestTrace tr, string str) { SymtChartLib.Trace trace = new SymtChartLib.Trace(); if (lstXAxis.Where(x => x.Start == tr.XAxisInfo.Start && x.Stop == tr.XAxisInfo.Stop && x.Center == tr.XAxisInfo.Center).Count() == 0) { lstXAxis.Add(new SymtChartLib.XAxis() { Start = tr.XAxisInfo.Start, Stop = tr.XAxisInfo.Stop, Center = tr.XAxisInfo.Center }); } int k = InterfaceChart2.Traces.Count; trace.Title = str; trace.AxisIndex = lstXAxis.FindIndex(x => x.Start == tr.XAxisInfo.Start && x.Stop == tr.XAxisInfo.Stop && x.Center == tr.XAxisInfo.Center); if (tr.ResultData != null) { List <XYData> xyData = tr.ResultData; if (xyData.Count > 0) { Point[] point = new Point[xyData.Count]; for (int i = 0; i < xyData.Count; i++) { Point p = new Point() { X = xyData[i].X, Y = xyData[i].Y }; point[i] = p; } trace.TraceData = point; InterfaceChart2.Traces.Add(trace); } } if (tr.TestSpecList.Count > 0 && vm.SelectedSpecIndex >= 0) { XYTestLimit testLimit = tr.TestSpecList[vm.SelectedSpecIndex].TestLimit; if (testLimit != null) { foreach (var limit in testLimit.LimitLine) { SymtChartLib.LimitLineTypeEnum type = new SymtChartLib.LimitLineTypeEnum(); if (limit.Type == LimitLineTypeEnum.Max) { type = SymtChartLib.LimitLineTypeEnum.Max; } else if (limit.Type == LimitLineTypeEnum.Min) { type = SymtChartLib.LimitLineTypeEnum.Min; } else { type = SymtChartLib.LimitLineTypeEnum.None; } trace.LimitLineList.Add(new SymtChartLib.LimitLine() { X1 = limit.X1, Y1 = limit.Y1, X2 = limit.X2, Y2 = limit.Y2, Type = type }); } } } trace.Scale = tr.Scale; trace.DivisionCount = tr.DivCount; trace.ReferenceLevel = tr.RefValue; trace.Unit = tr.Unit; trace.ReferencePosition = tr.RefPosition; InterfaceChart2.XAxisList = lstXAxis; InterfaceChart2.UpdateData(); }