public void DefaultConstructor()
    {
        MethodControlPanel control = new MethodControlPanel();

        Assert.IsFalse(control.comboBoxMessageBar.Enabled);
        Assert.AreEqual("1", control.comboBoxTimes.Text);
    }
    public void UpdatingInvokeTimeUpdatesInvokeCount()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.comboBoxTimes.Text = Convert.ToString(3456);
        control.invoke_box_Validating(null, null);
        Assert.AreEqual(3456, control.InvokeCount);
    }
    public void InvokingInstanceMethod()
    {
        MethodControlPanel control = new MethodControlPanel();
        MethodInfo         info    = typeof(String).GetMethod("ToUpper", new Type[] { });

        control.Initialize("abc", info);
        control.buttonCall_Click(null, null);
        Assert.AreEqual("ABC", control.previewControl.textBoxToString.Text);
    }
    public void InvokingMethodUpdatesPreview()
    {
        MethodControlPanel control = new MethodControlPanel();
        MethodInfo         info    = typeof(TestClass).GetMethod("PublicStaticVoid", new Type[] { });

        control.Initialize(info);
        control.buttonCall_Click(null, null);
        Assert.AreEqual("Hello World", control.previewControl.textBoxToString.Text);
    }
    public void InvokingMethodUpdatesStats()
    {
        MethodControlPanel control = new MethodControlPanel();
        MethodInfo         info    = typeof(TestClass).GetMethod("PublicStaticVoid", new Type[] { });

        control.Initialize(info);
        control.buttonCall_Click(null, null);
        Assert.IsTrue(control.comboBoxMessageBar.Items[0].ToString().EndsWith("to Call."));
    }
    public void InvokingStaticMethod()
    {
        MethodControlPanel control = new MethodControlPanel();
        MethodInfo         method  = typeof(String).GetMethod("Copy", new Type[] { typeof(String) });

        control.Initialize(method);
        control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT].Text = "abc";
        control.buttonCall_Click(null, null);
        Assert.AreEqual("abc", control.previewControl.textBoxToString.Text);
    }
    public void PopulateArgumentRowStoresInstanceInControlTag()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.Show();
        control.PopulateNextArgumentRow(typeof(ArrayList), "arr");
        Control input = control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT];

        Assert.IsInstanceOf(typeof(ArrayList), input.Tag);
        control.Hide();
    }
    public void InvokingMethodCatchesAndReportsExceptions()
    {
        MethodControlPanel control = new MethodControlPanel();
        MethodInfo         info    = typeof(String).GetMethod("Substring", new Type[] { typeof(Int32) });

        control.Initialize("string object", info);
        TextBox box = control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT] as TextBox;

        box.Text = "-1";
        control.buttonCall_Click(null, null);
        Assert.AreEqual("TargetInvocationException...", control.buttonDrillDown.Text);
    }
    public void PlusButtonAddsInstanceToObjectPool()
    {
        ObjectPool.pool.Clear();
        MethodControlPanel control = new MethodControlPanel();
        MethodInfo         info    = typeof(String).GetMethod("Substring", new Type[] { typeof(Int32) });

        control.Initialize("string object", info);
        string instance = "something";

        control.Lastresult = instance;
        control.OnAddToPool(null, null);
        Assert.IsTrue(ObjectPool.pool.Contains(instance));
    }
    public void GetDateTimeArgumentType()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.Show();
        control.PopulateNextArgumentRow(typeof(DateTime), "datetime");
        Control input = control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT];

        input.Text = "2009-12-25";
        Object[] arguments = control.GetArguments();
        Assert.AreEqual(new DateTime(2009, 12, 25, 00, 00, 00), (DateTime)arguments[0]);
        control.Hide();
    }
    public void GetStringArgumentType()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.Show();
        control.PopulateNextArgumentRow(typeof(string), "enum");
        Control input = control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT];

        input.Text = "Hello World!";
        Object[] arguments = control.GetArguments();
        Assert.AreEqual("Hello World!", (string)arguments[0]);
        control.Hide();
    }
    public void GetPrimitiveArgumentType()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.Show();
        control.PopulateNextArgumentRow(typeof(int), "int");
        Control input = control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT];

        input.Text = "-456789";
        Object[] arguments = control.GetArguments();
        Assert.AreEqual(-456789, (int)arguments[0]);
        control.Hide();
    }
    public void GetEnumArgumentType()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.Show();
        control.PopulateNextArgumentRow(typeof(EnumType), "enum");
        Control input = control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT];

        input.Text = "Feb";
        Object[] arguments = control.GetArguments();
        Assert.AreEqual(EnumType.Feb, (EnumType)arguments[0]);
        control.Hide();
    }
    public void GetBoolArgumentType()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.Show();
        control.PopulateNextArgumentRow(typeof(bool), "bool");
        CheckBox input = (CheckBox)control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT];

        Object[] arguments = control.GetArguments();
        Assert.IsFalse((Boolean)arguments[0]);
        input.Checked = true;
        arguments     = control.GetArguments();
        Assert.IsTrue((Boolean)arguments[0]);
        control.Hide();
    }
    public void PopulateArgumentRowForUnsupportedTypes()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.Show();
        control.PopulateNextArgumentRow(typeof(UnsupportedRefType <int>), "dontcare");
        CheckBox box = control.arguments_control.tableLayoutPanel.Controls[0] as CheckBox;

        Assert.IsFalse(box.Enabled);
        Assert.IsFalse(box.Checked);
        Control input = control.arguments_control.tableLayoutPanel.Controls[ArgumentsControl.Control.Index.INPUT];

        Assert.IsFalse(input.Enabled);
        control.Hide();
    }
    public void DoNotAddSameInstanceToObjectPool()
    {
        ObjectPool.pool.Clear();
        MethodControlPanel control = new MethodControlPanel();
        MethodInfo         info    = typeof(String).GetMethod("Substring", new Type[] { typeof(Int32) });

        control.Initialize("string object", info);
        string instance = "something";

        control.Lastresult = instance;
        control.OnAddToPool(null, null);
        control.OnAddToPool(null, null);
        control.OnAddToPool(null, null);
        control.OnAddToPool(null, null);
        Assert.AreEqual(1, ObjectPool.pool.Count);
    }
    public void ResetButtonClearsCountersAndListBox()
    {
        MethodControlPanel control = new MethodControlPanel();
        MethodInfo         info    = typeof(TestClass).GetMethod("PublicStaticVoid", new Type[] { });

        control.Initialize(info);
        control.InvokeCount = 18;
        control.buttonCall_Click(null, null);
        control.buttonCall_Click(null, null);
        control.buttonCall_Click(null, null);
        control.buttonCall_Click(null, null);
        control.buttonReset_Click(null, null);
        Assert.AreEqual(0, control.average_count);
        Assert.AreEqual(0, control.comboBoxMessageBar.Items.Count);
        Assert.IsFalse(control.comboBoxMessageBar.Enabled);
    }
    public void InitializationWithMethodInfo()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.comboBoxMessageBar.Items.Add("something");
        control.comboBoxMessageBar.Enabled = true;
        MethodInfo info = typeof(String).GetMethod("Contains", new Type[] { typeof(String) });

        control.Initialize(info);
        Assert.AreEqual(4, control.arguments_control.tableLayoutPanel.Controls.Count);
        Assert.AreEqual(0, control.comboBoxMessageBar.Items.Count);
        Assert.AreEqual(0, control.previewControl.textBoxToString.Text.Length);
        Assert.AreSame(info, control.method_under_test);
        Assert.IsFalse(control.buttonDrillDown.Visible);
        Assert.IsFalse(control.buttonAddToPool.Visible);
        Assert.IsFalse(control.comboBoxMessageBar.Enabled);
        Assert.IsTrue(control.buttonCall.Enabled);
    }
    public void DefaultInitialization()
    {
        MethodControlPanel control = new MethodControlPanel();

        control.comboBoxMessageBar.Items.Add("something");
        control.comboBoxMessageBar.Enabled = true;
        control.buttonDrillDown.Visible    = true;
        control.buttonAddToPool.Visible    = true;
        control.Initialize();
        Assert.AreEqual(0, control.arguments_control.tableLayoutPanel.Controls.Count);
        Assert.AreEqual(0, control.comboBoxMessageBar.Items.Count);
        Assert.AreEqual(0, control.previewControl.textBoxToString.Text.Length);
        Assert.IsFalse(control.buttonCall.Enabled);
        Assert.IsFalse(control.buttonDrillDown.Visible);
        Assert.IsFalse(control.buttonAddToPool.Visible);
        Assert.IsFalse(control.comboBoxMessageBar.Enabled);
        Assert.IsNull(control.instance_under_test);
        Assert.IsNull(control.method_under_test);
    }