1 using System;
2 using System.Collections.Generic;
3 using System.Diagnostics;
4 using System.IO;
5 using System.Linq;
6 using System.Text;
7 using System.Threading.Tasks;
8 using System.Windows.Forms;
9 using Mesen.GUI.Config;
10 
11 namespace Mesen.GUI.Forms
12 {
13 	public partial class frmMain
14 	{
mnuTestRun_Click(object sender, EventArgs e)15 		private void mnuTestRun_Click(object sender, EventArgs e)
16 		{
17 			using(OpenFileDialog ofd = new OpenFileDialog()) {
18 				ofd.SetFilter(ResourceHelper.GetMessage("FilterTest"));
19 				ofd.InitialDirectory = ConfigManager.TestFolder;
20 				ofd.Multiselect = true;
21 				if(ofd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) {
22 					List<string> passedTests = new List<string>();
23 					List<string> failedTests = new List<string>();
24 					List<int> failedFrameCount = new List<int>();
25 
26 					this.menuStrip.Enabled = false;
27 
28 					Task.Run(() => {
29 						foreach(string filename in ofd.FileNames) {
30 							int result = InteropEmu.RunRecordedTest(filename);
31 
32 							if(result == 0) {
33 								passedTests.Add(Path.GetFileNameWithoutExtension(filename));
34 							} else {
35 								failedTests.Add(Path.GetFileNameWithoutExtension(filename));
36 								failedFrameCount.Add(result);
37 							}
38 						}
39 
40 						this.BeginInvoke((MethodInvoker)(() => {
41 							if(failedTests.Count == 0) {
42 								MessageBox.Show("All tests passed.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
43 							} else {
44 								StringBuilder message = new StringBuilder();
45 								if(passedTests.Count > 0) {
46 									message.AppendLine("Passed tests:");
47 									foreach(string test in passedTests) {
48 										message.AppendLine("  -" + test);
49 									}
50 									message.AppendLine("");
51 								}
52 								message.AppendLine("Failed tests:");
53 								for(int i = 0, len = failedTests.Count; i < len; i++) {
54 									message.AppendLine("  -" + failedTests[i] + " (" + failedFrameCount[i] + ")");
55 								}
56 								MessageBox.Show(message.ToString(), "", MessageBoxButtons.OK, MessageBoxIcon.Error);
57 							}
58 
59 							this.menuStrip.Enabled = true;
60 						}));
61 					});
62 				}
63 			}
64 		}
65 
mnuTestRecordStart_Click(object sender, EventArgs e)66 		private void mnuTestRecordStart_Click(object sender, EventArgs e)
67 		{
68 			RecordTest(true);
69 		}
70 
mnuTestRecordNow_Click(object sender, EventArgs e)71 		private void mnuTestRecordNow_Click(object sender, EventArgs e)
72 		{
73 			RecordTest(false);
74 		}
75 
RecordTest(bool resetEmu)76 		private void RecordTest(bool resetEmu)
77 		{
78 			using(SaveFileDialog sfd = new SaveFileDialog()) {
79 				sfd.SetFilter(ResourceHelper.GetMessage("FilterTest"));
80 				sfd.InitialDirectory = ConfigManager.TestFolder;
81 				sfd.FileName = InteropEmu.GetRomInfo().GetRomName() + ".mtp";
82 				if(sfd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) {
83 					InteropEmu.RomTestRecord(sfd.FileName, resetEmu);
84 				}
85 			}
86 		}
87 
mnuTestRecordMovie_Click(object sender, EventArgs e)88 		private void mnuTestRecordMovie_Click(object sender, EventArgs e)
89 		{
90 			using(OpenFileDialog ofd = new OpenFileDialog()) {
91 				ofd.SetFilter(ResourceHelper.GetMessage("FilterMovie"));
92 				ofd.InitialDirectory = ConfigManager.MovieFolder;
93 				if(ofd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) {
94 					SaveFileDialog sfd = new SaveFileDialog();
95 					sfd.SetFilter(ResourceHelper.GetMessage("FilterTest"));
96 					sfd.InitialDirectory = ConfigManager.TestFolder;
97 					sfd.FileName = Path.GetFileNameWithoutExtension(ofd.FileName) + ".mtp";
98 					if(sfd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) {
99 						InteropEmu.RomTestRecordFromMovie(sfd.FileName, ofd.FileName);
100 					}
101 				}
102 			}
103 		}
104 
mnuTestRecordTest_Click(object sender, EventArgs e)105 		private void mnuTestRecordTest_Click(object sender, EventArgs e)
106 		{
107 			using(OpenFileDialog ofd = new OpenFileDialog()) {
108 				ofd.SetFilter(ResourceHelper.GetMessage("FilterTest"));
109 				ofd.InitialDirectory = ConfigManager.TestFolder;
110 
111 				if(ofd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) {
112 					SaveFileDialog sfd = new SaveFileDialog();
113 					sfd.SetFilter(ResourceHelper.GetMessage("FilterTest"));
114 					sfd.InitialDirectory = ConfigManager.TestFolder;
115 					sfd.FileName = Path.GetFileNameWithoutExtension(ofd.FileName) + ".mtp";
116 					if(sfd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) {
117 						InteropEmu.RomTestRecordFromTest(sfd.FileName, ofd.FileName);
118 					}
119 				}
120 			}
121 		}
122 
mnuRunAutomaticTest_Click(object sender, EventArgs e)123 		private void mnuRunAutomaticTest_Click(object sender, EventArgs e)
124 		{
125 			using(OpenFileDialog ofd = new OpenFileDialog()) {
126 				ofd.SetFilter("*.nes|*.nes");
127 				if(ofd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) {
128 					string filename = ofd.FileName;
129 
130 					Task.Run(() => {
131 						InteropEmu.RunAutomaticTest(filename);
132 					});
133 				}
134 			}
135 		}
136 
mnuRunAllTests_Click(object sender, EventArgs e)137 		private void mnuRunAllTests_Click(object sender, EventArgs e)
138 		{
139 			string workingDirectory = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
140 			ProcessStartInfo startInfo = new ProcessStartInfo();
141 			startInfo.FileName = "TestHelper.exe";
142 			startInfo.WorkingDirectory = workingDirectory;
143 			Process.Start(startInfo);
144 		}
145 
mnuRunAllGameTests_Click(object sender, EventArgs e)146 		private void mnuRunAllGameTests_Click(object sender, EventArgs e)
147 		{
148 			string workingDirectory = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
149 			ProcessStartInfo startInfo = new ProcessStartInfo();
150 			startInfo.FileName = "TestHelper.exe";
151 			startInfo.Arguments = "\"" + Path.Combine(ConfigManager.HomeFolder, "TestGames") + "\"";
152 			startInfo.WorkingDirectory = workingDirectory;
153 			Process.Start(startInfo);
154 		}
155 
mnuTestStopRecording_Click(object sender, EventArgs e)156 		private void mnuTestStopRecording_Click(object sender, EventArgs e)
157 		{
158 			InteropEmu.RomTestStop();
159 		}
160 	}
161 }
162