Merge pull request #2824 from lambdageek/dev/monoerror-icalls-noraise
[mono.git] / mcs / nunit24 / ConsoleRunner / nunit-console / Runner.cs
1 using System;\r
2 using System.IO;\r
3 using System.Reflection;\r
4 using NUnit.Core;\r
5 using NUnit.Util;\r
6 \r
7 \r
8 namespace NUnit.ConsoleRunner\r
9 {\r
10         /// <summary>\r
11         /// Summary description for Runner.\r
12         /// </summary>\r
13         public class Runner\r
14         {\r
15                 [STAThread]\r
16                 public static int Main(string[] args)\r
17                 {\r
18                         NTrace.Info( "NUnit-console.exe starting" );\r
19 \r
20                         ConsoleOptions options = new ConsoleOptions(args);\r
21                         \r
22                         if(!options.nologo)\r
23                                 WriteCopyright();\r
24 \r
25                         if(options.help)\r
26                         {\r
27                                 options.Help();\r
28                                 return ConsoleUi.OK;\r
29                         }\r
30                         \r
31                         if(options.NoArgs) \r
32                         {\r
33                                 Console.Error.WriteLine("fatal error: no inputs specified");\r
34                                 options.Help();\r
35                                 return ConsoleUi.OK;\r
36                         }\r
37                         \r
38                         if(!options.Validate())\r
39                         {\r
40                                 foreach( string arg in options.InvalidArguments )\r
41                                         Console.Error.WriteLine("fatal error: invalid argument: {0}", arg );\r
42                                 options.Help();\r
43                                 return ConsoleUi.INVALID_ARG;\r
44                         }\r
45 \r
46                         // Add Standard Services to ServiceManager\r
47                         ServiceManager.Services.AddService( new SettingsService() );\r
48                         ServiceManager.Services.AddService( new DomainManager() );\r
49                         //ServiceManager.Services.AddService( new RecentFilesService() );\r
50                         //ServiceManager.Services.AddService( new TestLoader() );\r
51                         ServiceManager.Services.AddService( new AddinRegistry() );\r
52                         ServiceManager.Services.AddService( new AddinManager() );\r
53                         // TODO: Resolve conflict with gui testagency when running\r
54                         // console tests under the gui.\r
55                         //ServiceManager.Services.AddService( new TestAgency() );\r
56 \r
57                         // Initialize Services\r
58                         ServiceManager.Services.InitializeServices();\r
59 \r
60                         try\r
61                         {\r
62                                 ConsoleUi consoleUi = new ConsoleUi();\r
63                                 return consoleUi.Execute( options );\r
64                         }\r
65                         catch( FileNotFoundException ex )\r
66                         {\r
67                                 Console.WriteLine( ex.Message );\r
68                                 return ConsoleUi.FILE_NOT_FOUND;\r
69                         }\r
70                         catch( Exception ex )\r
71                         {\r
72                                 Console.WriteLine( "Unhandled Exception:\n{0}", ex.ToString() );\r
73                                 return ConsoleUi.UNEXPECTED_ERROR;\r
74                         }\r
75                         finally\r
76                         {\r
77                                 if(options.wait)\r
78                                 {\r
79                                         Console.Out.WriteLine("\nHit <enter> key to continue");\r
80                                         Console.ReadLine();\r
81                                 }\r
82 \r
83                                 NTrace.Info( "NUnit-console.exe terminating" );\r
84                         }\r
85 \r
86                 }\r
87 \r
88                 private static void WriteCopyright()\r
89                 {\r
90                         Assembly executingAssembly = Assembly.GetExecutingAssembly();\r
91                         System.Version version = executingAssembly.GetName().Version;\r
92 \r
93                         string productName = "NUnit";\r
94                         string copyrightText = "Copyright (C) 2002-2007 Charlie Poole.\r\nCopyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.\r\nCopyright (C) 2000-2002 Philip Craig.\r\nAll Rights Reserved.";\r
95 \r
96                         object[] objectAttrs = executingAssembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false);\r
97                         if ( objectAttrs.Length > 0 )\r
98                                 productName = ((AssemblyProductAttribute)objectAttrs[0]).Product;\r
99 \r
100                         objectAttrs = executingAssembly.GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);\r
101                         if ( objectAttrs.Length > 0 )\r
102                                 copyrightText = ((AssemblyCopyrightAttribute)objectAttrs[0]).Copyright;\r
103 \r
104                         Console.WriteLine(String.Format("{0} version {1}", productName, version.ToString(3)));\r
105                         Console.WriteLine(copyrightText);\r
106                         Console.WriteLine();\r
107 \r
108                         Console.WriteLine( "Runtime Environment - " );\r
109                         RuntimeFramework framework = RuntimeFramework.CurrentFramework;\r
110                         Console.WriteLine( string.Format("   OS Version: {0}", Environment.OSVersion ) );\r
111                         Console.WriteLine( string.Format("  CLR Version: {0} ( {1} )",\r
112                                 Environment.Version,  framework.GetDisplayName() ) );\r
113 \r
114                         Console.WriteLine();\r
115                 }\r
116         }\r
117 }\r