// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Reflection; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Microsoft.ClearScript.Test { [TestClass] [SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable", Justification = "Test classes use TestCleanupAttribute for deterministic teardown.")] public class BindSignatureTest : ClearScriptTest { #region test methods [TestMethod, TestCategory("BindSignature")] public void BindSignature_General() { var typeArgs1 = new[] { typeof(Random), typeof(string), typeof(Dictionary) }; var typeArgs2 = new[] { typeof(Random), typeof(string), typeof(Dictionary) }; var args1 = new object[] { int.MinValue, Math.E, "blah", new OutArg(DateTime.MinValue), new RefArg(TimeSpan.MinValue), DayOfWeek.Sunday }; var args2 = new object[] { int.MaxValue, Math.PI, "meh", new OutArg(DateTime.MaxValue), new RefArg(TimeSpan.MaxValue), DayOfWeek.Saturday }; { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(ClearScriptTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); AssertNotEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); AssertNotEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, new HostVariable(null), "foo", typeArgs1, args1); AssertNotEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, new HostVariable(null), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostObject.Wrap("baz"), "foo", typeArgs1, args1); AssertNotEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostObject.Wrap("baz"), "foo", typeArgs1, args1); AssertNotEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, new HostVariable(null), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, new HostVariable("baz"), "foo", typeArgs1, args1); AssertNotEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, new HostVariable("baz"), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostObject.Wrap("qux"), "foo", typeArgs1, args1); AssertEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "bar", typeArgs1, args1); AssertNotEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs2, args1); AssertNotEqual(sig1, sig2); } { var sig1 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args1); var sig2 = new BindSignature(typeof(BindSignatureTest), BindingFlags.Instance | BindingFlags.Public, HostType.Wrap(typeof(string)), "foo", typeArgs1, args2); AssertEqual(sig1, sig2); } } #endregion #region miscellaneous private static void AssertEqual(BindSignature sig1, BindSignature sig2) { Assert.AreEqual(sig1, sig2); Assert.AreEqual(sig1.GetHashCode(), sig2.GetHashCode()); } private static void AssertNotEqual(BindSignature sig1, BindSignature sig2) { Assert.AreNotEqual(sig1, sig2); Assert.AreNotEqual(sig1.GetHashCode(), sig2.GetHashCode()); } #endregion } }