Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

299 lines
10 KiB
C#

//
// System.ComponentModel.LicenseManagerTests test cases
//
// Authors:
// Ivan Hamilton (ivan@chimerical.com.au)
// Gonzalo Paniagua Javier (gonzalo@ximian.com)
// Martin Willemoes Hansen (mwh@sysrq.dk)
//
// (c) 2002 Ximian, Inc. (http://www.ximian.com)
// (c) 2003 Martin Willemoes Hansen
// (c) 2004 Ivan Hamilton
#if !MOBILE
using NUnit.Framework;
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace MonoTests.System.ComponentModel
{
public class UnlicensedObject
{
}
[LicenseProvider (typeof (TestLicenseProvider))]
public class LicensedObject
{
}
[LicenseProvider (typeof (TestLicenseProvider))]
public class InvalidLicensedObject
{
}
[LicenseProvider (typeof (TestLicenseProvider))]
public class RuntimeLicensedObject
{
public RuntimeLicensedObject ()
{
LicenseManager.Validate (typeof (RuntimeLicensedObject));
}
public RuntimeLicensedObject (int a): this () {}
}
[LicenseProvider (typeof (TestLicenseProvider))]
public class DesigntimeLicensedObject
{
public DesigntimeLicensedObject ()
{
LicenseManager.Validate (typeof (DesigntimeLicensedObject));
}
}
public class TestLicenseProvider : LicenseProvider
{
private class TestLicense : License
{
public override void Dispose ()
{
}
public override string LicenseKey
{
get { return "YourLicenseKey"; }
}
}
public TestLicenseProvider () : base ()
{
}
public override License GetLicense (LicenseContext context,
Type type,
object instance,
bool allowExceptions)
{
if (type.Name.Equals ("RuntimeLicensedObject")) {
if (context.UsageMode != LicenseUsageMode.Runtime)
if (allowExceptions)
throw new LicenseException (type, instance, "License fails because this is a Runtime only license");
else
return null;
return new TestLicense ();
}
if (type.Name.Equals ("DesigntimeLicensedObject"))
{
if (context.UsageMode != LicenseUsageMode.Designtime)
if (allowExceptions)
throw new LicenseException (type, instance, "License fails because this is a Designtime only license");
else
return null;
return new TestLicense ();
}
if (type.Name.Equals ("LicensedObject"))
return new TestLicense ();
if (allowExceptions)
throw new LicenseException (type, instance, "License fails because of class name.");
else
return null;
}
}
[TestFixture]
public class LicenseManagerTests
{
[SetUp]
public void GetReady ()
{
}
[Test]
public void Test ()
{
object lockObject = new object ();
//**DEFAULT CONTEXT & LicenseUsageMode**
//Get CurrentContext, check default type
Assert.AreEqual ("System.ComponentModel.Design.RuntimeLicenseContext", LicenseManager.CurrentContext.GetType().ToString(), "LicenseManager #1");
//Read default LicenseUsageMode, check against CurrentContext (LicCont).UsageMode
Assert.AreEqual (LicenseManager.CurrentContext.UsageMode, LicenseManager.UsageMode, "LicenseManager #2");
//**CHANGING CONTEXT**
//Change the context and check it changes
LicenseContext oldcontext = LicenseManager.CurrentContext;
LicenseContext newcontext = new DesigntimeLicenseContext();
LicenseManager.CurrentContext = newcontext;
Assert.AreEqual (newcontext, LicenseManager.CurrentContext, "LicenseManager #3");
//Check the UsageMode changed too
Assert.AreEqual (newcontext.UsageMode, LicenseManager.UsageMode, "LicenseManager #4");
//Set Context back to original
LicenseManager.CurrentContext = oldcontext;
//Check it went back
Assert.AreEqual (oldcontext, LicenseManager.CurrentContext, "LicenseManager #5");
//Check the UsageMode changed too
Assert.AreEqual (oldcontext.UsageMode, LicenseManager.UsageMode, "LicenseManager #6");
//**CONTEXT LOCKING**
//Lock the context
LicenseManager.LockContext(lockObject);
//Try and set new context again, should throw System.InvalidOperationException: The CurrentContext property of the LicenseManager is currently locked and cannot be changed.
bool exceptionThrown = false;
try
{
LicenseManager.CurrentContext=newcontext;
}
catch (Exception e)
{
Assert.AreEqual (typeof(InvalidOperationException), e.GetType(), "LicenseManager #7");
exceptionThrown = true;
}
//Check the exception was thrown
Assert.AreEqual (true, exceptionThrown, "LicenseManager #8");
//Check the context didn't change
Assert.AreEqual (oldcontext, LicenseManager.CurrentContext, "LicenseManager #9");
//Unlock it
LicenseManager.UnlockContext(lockObject);
//Now's unlocked, change it
LicenseManager.CurrentContext=newcontext;
Assert.AreEqual (newcontext, LicenseManager.CurrentContext, "LicenseManager #10");
//Change it back
LicenseManager.CurrentContext = oldcontext;
//Lock the context
LicenseManager.LockContext(lockObject);
//Unlock with different "user" should throw System.ArgumentException: The CurrentContext property of the LicenseManager can only be unlocked with the same contextUser.
object wrongLockObject = new object();
exceptionThrown = false;
try
{
LicenseManager.UnlockContext(wrongLockObject);
}
catch (Exception e)
{
Assert.AreEqual (typeof(ArgumentException), e.GetType(), "LicenseManager #11");
exceptionThrown = true;
}
Assert.AreEqual (true, exceptionThrown, "LicenseManager #12");
//Unlock it
LicenseManager.UnlockContext(lockObject);
//** bool IsValid(Type);
Assert.AreEqual (true, LicenseManager.IsLicensed (typeof (UnlicensedObject)), "LicenseManager #13");
Assert.AreEqual (true, LicenseManager.IsLicensed (typeof (LicensedObject)), "LicenseManager #14");
Assert.AreEqual (false, LicenseManager.IsLicensed (typeof (InvalidLicensedObject)), "LicenseManager #15");
Assert.AreEqual (true, LicenseManager.IsValid (typeof (UnlicensedObject)), "LicenseManager #16");
Assert.AreEqual (true, LicenseManager.IsValid (typeof (LicensedObject)), "LicenseManager #17");
Assert.AreEqual (false, LicenseManager.IsValid (typeof (InvalidLicensedObject)), "LicenseManager #18");
UnlicensedObject unlicensedObject = new UnlicensedObject ();
LicensedObject licensedObject = new LicensedObject ();
InvalidLicensedObject invalidLicensedObject = new InvalidLicensedObject ();
//** bool IsValid(Type, object, License);
License license=null;
Assert.AreEqual (true, LicenseManager.IsValid (unlicensedObject.GetType (), unlicensedObject, out license), "LicenseManager #19");
Assert.AreEqual (null, license, "LicenseManager #20");
license=null;
Assert.AreEqual (true, LicenseManager.IsValid (licensedObject.GetType (), licensedObject,out license), "LicenseManager #21");
Assert.AreEqual ("TestLicense", license.GetType ().Name, "LicenseManager #22");
license=null;
Assert.AreEqual (false, LicenseManager.IsValid (invalidLicensedObject.GetType (), invalidLicensedObject, out license), "LicenseManager #23");
Assert.AreEqual (null, license, "LicenseManager #24");
//** void Validate(Type);
//Shouldn't throw exception
LicenseManager.Validate (typeof (UnlicensedObject));
//Shouldn't throw exception
LicenseManager.Validate (typeof (LicensedObject));
//Should throw exception
exceptionThrown=false;
try
{
LicenseManager.Validate(typeof(InvalidLicensedObject));
}
catch (Exception e)
{
Assert.AreEqual (typeof(LicenseException), e.GetType(), "LicenseManager #25");
exceptionThrown=true;
}
//Check the exception was thrown
Assert.AreEqual (true, exceptionThrown, "LicenseManager #26");
//** License Validate(Type, object);
//Shouldn't throw exception, returns null license
license=LicenseManager.Validate (typeof (UnlicensedObject), unlicensedObject);
Assert.AreEqual (null, license, "LicenseManager #27");
//Shouldn't throw exception, returns TestLicense license
license=LicenseManager.Validate(typeof(LicensedObject), licensedObject);
Assert.AreEqual ("TestLicense", license.GetType ().Name, "LicenseManager #28");
//Should throw exception, returns null license
exceptionThrown=false;
try
{
license=null;
license=LicenseManager.Validate (typeof (InvalidLicensedObject), invalidLicensedObject);
}
catch (Exception e)
{
Assert.AreEqual (typeof (LicenseException), e.GetType (), "LicenseManager #29");
exceptionThrown=true;
}
//Check the exception was thrown
Assert.AreEqual (true, exceptionThrown, "LicenseManager #30");
Assert.AreEqual (null, license, "LicenseManager #31");
//** object CreateWithContext (Type, LicenseContext);
object cwc = null;
//Test we can create an unlicensed object with no context
cwc = LicenseManager.CreateWithContext (typeof (UnlicensedObject), null);
Assert.AreEqual ("UnlicensedObject", cwc.GetType ().Name, "LicenseManager #32");
//Test we can create RunTime with CurrentContext (runtime)
cwc = null;
cwc = LicenseManager.CreateWithContext (typeof (RuntimeLicensedObject),
LicenseManager.CurrentContext);
Assert.AreEqual ("RuntimeLicensedObject", cwc.GetType ().Name, "LicenseManager #33");
//Test we can't create DesignTime with CurrentContext (runtime)
exceptionThrown=false;
try
{
cwc = null;
cwc = LicenseManager.CreateWithContext (typeof (DesigntimeLicensedObject), LicenseManager.CurrentContext);
}
catch (Exception e)
{
Assert.AreEqual (typeof (LicenseException), e.GetType (), "LicenseManager #34");
exceptionThrown=true;
}
//Check the exception was thrown
Assert.AreEqual (true, exceptionThrown, "LicenseManager #35");
//Test we can create DesignTime with A new DesignTimeContext
cwc = null;
cwc = LicenseManager.CreateWithContext (typeof (DesigntimeLicensedObject),
new DesigntimeLicenseContext ());
Assert.AreEqual ("DesigntimeLicensedObject", cwc.GetType ().Name, "LicenseManager #36");
//** object CreateWithContext(Type, LicenseContext, object[]);
//Test we can create RunTime with CurrentContext (runtime)
cwc = null;
cwc = LicenseManager.CreateWithContext (typeof (RuntimeLicensedObject),
LicenseManager.CurrentContext, new object [] { 7 });
Assert.AreEqual ("RuntimeLicensedObject", cwc.GetType ().Name, "LicenseManager #37");
}
}
}
#endif