public void Add ()
		{
			RoleGroupCollection rgc = new RoleGroupCollection ();
			Assert.AreEqual (0, rgc.Count, "0");
			RoleGroup rg1 = new RoleGroup ();
			rgc.Add (rg1);
			Assert.AreEqual (1, rgc.Count, "1");
			rgc.Add (rg1);
			Assert.AreEqual (2, rgc.Count, "2");
		}
		public void Contains ()
		{
			RoleGroupCollection rgc = new RoleGroupCollection ();
			Assert.IsFalse (rgc.Contains (null), "null");

			RoleGroup rg1 = new RoleGroup ();
			rgc.Add (rg1);
			Assert.IsTrue (rgc.Contains (rg1), "1a");

			RoleGroup rg2 = new RoleGroup ();
			Assert.IsFalse (rgc.Contains (rg2), "2a");
			rgc.Add (rg2);
			Assert.IsTrue (rgc.Contains (rg2), "2b");

			rgc.Remove (rg1);
			Assert.IsFalse (rgc.Contains (rg1), "1b");
		}
		public void ThisIndex ()
		{
			RoleGroupCollection rgc = new RoleGroupCollection ();
			RoleGroup rg = new RoleGroup ();
			rgc.Add (rg);
			Assert.IsTrue (Object.ReferenceEquals (rg, rgc [0]));
		}
		public void Add_Null ()
		{
			RoleGroupCollection rgc = new RoleGroupCollection ();
			rgc.Add (null);
		}
		public void Remove ()
		{
			RoleGroupCollection rgc = new RoleGroupCollection ();
			rgc.Remove (null);

			RoleGroup rg1 = new RoleGroup ();
			rgc.Remove (rg1);
			rgc.Add (rg1);
			rgc.Add (rg1);
			Assert.AreEqual (2, rgc.Count, "Count");
			rgc.Remove (rg1);
			Assert.IsTrue (rgc.Contains (rg1), "rg1-bis");

			RoleGroup rg2 = new RoleGroup ();
			rgc.Add (rg2);
			rgc.Remove (rg2);
			rgc.Remove (rg2);
		}
		public void IndexOf ()
		{
			RoleGroupCollection rgc = new RoleGroupCollection ();
			Assert.AreEqual (-1, rgc.IndexOf (null), "null");

			RoleGroup rg1 = new RoleGroup ();
			rgc.Add (rg1);
			Assert.AreEqual (0, rgc.IndexOf (rg1), "0");
			rgc.Add (rg1);
			Assert.AreEqual (0, rgc.IndexOf (rg1), "1");
		}
		public void ContainsUser_Out ()
		{
			RoleGroup rg = new RoleGroup ();
			rg.Roles = new string[2] { "mono", "hackers" };

			RoleGroupCollection rgc = new RoleGroupCollection ();
			rgc.Add (rg);
			Assert.AreEqual (1, rgc.Count, "Count");

			RoleGroup result = rgc.GetMatchingRoleGroup (GetPrincipal ("me", "m0n0"));
			Assert.IsNull (result, "me+MoNo");

			result = rgc.GetMatchingRoleGroup (GetPrincipal ("me", "h4ck"));
			Assert.IsNull (result, "me+h4ck");
		}
		public void GetMatchingRoleGroup_In ()
		{
			RoleGroup rg = new RoleGroup ();
			rg.Roles = new string[2] { "mono", "hackers" };

			RoleGroupCollection rgc = new RoleGroupCollection ();
			rgc.Add (rg);
			Assert.AreEqual (1, rgc.Count, "Count");

			RoleGroup result = rgc.GetMatchingRoleGroup (GetPrincipal ("me", "mono"));
			Assert.IsNotNull (result, "me+mono");
			Assert.IsTrue (Object.ReferenceEquals (result, rg), "ref1");

			result = rgc.GetMatchingRoleGroup (GetPrincipal ("me", "hackers"));
			Assert.IsNotNull (result, "me+hackers");
			Assert.IsTrue (Object.ReferenceEquals (result, rg), "ref2");

			// works for unauthenticated principals too
			result = rgc.GetMatchingRoleGroup (GetUnauthenticatedPrincipal ("me", "mono"));
			Assert.IsNotNull (result, "unauthenticated+me+mono");
			Assert.IsTrue (Object.ReferenceEquals (result, rg), "ref3");

			result = rgc.GetMatchingRoleGroup (GetUnauthenticatedPrincipal ("me", "hackers"));
			Assert.IsNotNull (result, "unauthenticated+me+hackers");
			Assert.IsTrue (Object.ReferenceEquals (result, rg), "ref4");

			// case insensitive
			result = rgc.GetMatchingRoleGroup (GetPrincipal ("me", "MoNo"));
			Assert.IsNotNull (result, "unauthenticated+me+MoNo");
			Assert.IsTrue (Object.ReferenceEquals (result, rg), "ref5");

			result = rgc.GetMatchingRoleGroup (GetPrincipal ("me", "hAcKeRs"));
			Assert.IsNotNull (result, "unauthenticated+me+hAcKeRs");
			Assert.IsTrue (Object.ReferenceEquals (result, rg), "ref6");
		}
		public void GetMatchingRoleGroup_NoRoles ()
		{
			RoleGroup rg = new RoleGroup ();
			
			RoleGroupCollection rgc = new RoleGroupCollection ();
			rgc.Add (rg);
			Assert.AreEqual (1, rgc.Count, "Count");

			RoleGroup result = rgc.GetMatchingRoleGroup (GetPrincipal ("me"));
			Assert.IsNull (result, "me");

			result = rgc.GetMatchingRoleGroup (GetPrincipal ("me", "mono"));
			Assert.IsNull (result, "me+mono");
		}