private void InternalMatching(string pattern, RunCode callback)
 {
     Set(true);
     lastWarning = null;
     callback.Invoke();
     Assert.IsTrue(warningOccurred, "Expected a warning, but did not get it");
     if (warningOccurred && pattern != null)
     {
         Assert.IsTrue(Regex.IsMatch(lastWarning, pattern), lastWarning + " does not match pattern " + pattern);
     }
     Set(false);
 }
        /// <summary>
        /// Starts the Stop watch and runs the code that has been passed in to be run
        /// Callback will return with results
        /// </summary>
        /// <param name="codeToRun"> code to run. This is the code inside a method being passed to the tool to form an analysis of the performance
        /// [It is required that you fill the to paramaters into you delegate, null is excepted]</param>
        /// <param name="param1"> paramater 1 that may be sent to the method [null if you are not going to need paramaters]</param>
        /// <param name="param2">parameter 2 that may be sen to the method [null if you are not going to need paramaters]</param>
        /// <returns></returns>
        public object StartStopWatch(RunCode codeToRun, object param1, object param2, bool addUserFriendlyResult)
        {
            _stopwatch.Start();
            _timeStarted = DateTime.Now.TimeOfDay;

            object codeReturned = codeToRun(param1, param2);

            StopStopWatch(addUserFriendlyResult);

            return codeReturned;
        }
 /// <summary>
 /// Declare that a specific warning is expected to be generated during the specified code.
 /// </summary>
 /// <param name="pattern">Pattern to match the warning against; if there is no match, the test fails.</param>
 /// <param name="code">Code which is expected to generate a matching warning.</param>
 public static void Matching(string pattern, RunCode code)
 {
     Initialize();
     listener.InternalMatching(pattern, code);
 }