using System.Linq; using System.Web.UI; using NUnit.Framework; using Umbraco.Core.Cache; using umbraco; namespace Umbraco.Tests.Cache { public abstract class CacheProviderTests { internal abstract ICacheProvider Provider { get; } protected abstract int GetTotalItemCount { get; } [SetUp] public virtual void Setup() { } [TearDown] public virtual void TearDown() { Provider.ClearAllCache(); } [Test] public void Can_Get_By_Search() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); var cacheContent2 = new MacroCacheContent(new LiteralControl(), "Test2"); var cacheContent3 = new MacroCacheContent(new LiteralControl(), "Test3"); var cacheContent4 = new LiteralControl(); Provider.GetCacheItem("Test1", () => cacheContent1); Provider.GetCacheItem("Tester2", () => cacheContent2); Provider.GetCacheItem("Tes3", () => cacheContent3); Provider.GetCacheItem("different4", () => cacheContent4); Assert.AreEqual(4, GetTotalItemCount); var result = Provider.GetCacheItemsByKeySearch("Tes"); Assert.AreEqual(3, result.Count()); } [Test] public void Can_Clear_By_Expression() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); var cacheContent2 = new MacroCacheContent(new LiteralControl(), "Test2"); var cacheContent3 = new MacroCacheContent(new LiteralControl(), "Test3"); var cacheContent4 = new LiteralControl(); Provider.GetCacheItem("TTes1t", () => cacheContent1); Provider.GetCacheItem("Tester2", () => cacheContent2); Provider.GetCacheItem("Tes3", () => cacheContent3); Provider.GetCacheItem("different4", () => cacheContent4); Assert.AreEqual(4, GetTotalItemCount); Provider.ClearCacheByKeyExpression("^\\w+es\\d.*"); Assert.AreEqual(2, GetTotalItemCount); } [Test] public void Can_Clear_By_Search() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); var cacheContent2 = new MacroCacheContent(new LiteralControl(), "Test2"); var cacheContent3 = new MacroCacheContent(new LiteralControl(), "Test3"); var cacheContent4 = new LiteralControl(); Provider.GetCacheItem("Test1", () => cacheContent1); Provider.GetCacheItem("Tester2", () => cacheContent2); Provider.GetCacheItem("Tes3", () => cacheContent3); Provider.GetCacheItem("different4", () => cacheContent4); Assert.AreEqual(4, GetTotalItemCount); Provider.ClearCacheByKeySearch("Test"); Assert.AreEqual(2, GetTotalItemCount); } [Test] public void Can_Clear_By_Key() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); var cacheContent2 = new MacroCacheContent(new LiteralControl(), "Test2"); var cacheContent3 = new MacroCacheContent(new LiteralControl(), "Test3"); var cacheContent4 = new LiteralControl(); Provider.GetCacheItem("Test1", () => cacheContent1); Provider.GetCacheItem("Test2", () => cacheContent2); Provider.GetCacheItem("Test3", () => cacheContent3); Provider.GetCacheItem("Test4", () => cacheContent4); Assert.AreEqual(4, GetTotalItemCount); Provider.ClearCacheItem("Test1"); Provider.ClearCacheItem("Test2"); Assert.AreEqual(2, GetTotalItemCount); } [Test] public void Can_Clear_All_Items() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); var cacheContent2 = new MacroCacheContent(new LiteralControl(), "Test2"); var cacheContent3 = new MacroCacheContent(new LiteralControl(), "Test3"); var cacheContent4 = new LiteralControl(); Provider.GetCacheItem("Test1", () => cacheContent1); Provider.GetCacheItem("Test2", () => cacheContent2); Provider.GetCacheItem("Test3", () => cacheContent3); Provider.GetCacheItem("Test4", () => cacheContent4); Assert.AreEqual(4, GetTotalItemCount); Provider.ClearAllCache(); Assert.AreEqual(0, GetTotalItemCount); } [Test] public void Can_Add_When_Not_Available() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); Provider.GetCacheItem("Test1", () => cacheContent1); Assert.AreEqual(1, GetTotalItemCount); } [Test] public void Can_Get_When_Available() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); var result = Provider.GetCacheItem("Test1", () => cacheContent1); var result2 = Provider.GetCacheItem("Test1", () => cacheContent1); Assert.AreEqual(1, GetTotalItemCount); Assert.AreEqual(result, result2); } [Test] public void Can_Remove_By_Type_Name() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); var cacheContent2 = new MacroCacheContent(new LiteralControl(), "Test2"); var cacheContent3 = new MacroCacheContent(new LiteralControl(), "Test3"); var cacheContent4 = new LiteralControl(); Provider.GetCacheItem("Test1", () => cacheContent1); Provider.GetCacheItem("Test2", () => cacheContent2); Provider.GetCacheItem("Test3", () => cacheContent3); Provider.GetCacheItem("Test4", () => cacheContent4); Assert.AreEqual(4, GetTotalItemCount); //Provider.ClearCacheObjectTypes("umbraco.MacroCacheContent"); Provider.ClearCacheObjectTypes(typeof(MacroCacheContent).ToString()); Assert.AreEqual(1, GetTotalItemCount); } [Test] public void Can_Remove_By_Strong_Type() { var cacheContent1 = new MacroCacheContent(new LiteralControl(), "Test1"); var cacheContent2 = new MacroCacheContent(new LiteralControl(), "Test2"); var cacheContent3 = new MacroCacheContent(new LiteralControl(), "Test3"); var cacheContent4 = new LiteralControl(); Provider.GetCacheItem("Test1", () => cacheContent1); Provider.GetCacheItem("Test2", () => cacheContent2); Provider.GetCacheItem("Test3", () => cacheContent3); Provider.GetCacheItem("Test4", () => cacheContent4); Assert.AreEqual(4, GetTotalItemCount); Provider.ClearCacheObjectTypes(); Assert.AreEqual(1, GetTotalItemCount); } } }