Exemplo n.º 1
0
        public void Events_OnClear()
        {
            using (var cache = TestManagers.WithOneDicCacheHandle)
            {
                // arrange
                var key1    = Guid.NewGuid().ToString();
                var key2    = Guid.NewGuid().ToString();
                var region1 = Guid.NewGuid().ToString();
                var region2 = Guid.NewGuid().ToString();
                var data    = new EventCallbackData();

                // all callbacks should be triggered, so result count should be 4
                cache.OnClear       += (sender, args) => data.AddCall();
                cache.OnClear       += (sender, args) => data.AddCall();
                cache.OnClear       += (sender, args) => data.AddCall();
                cache.OnClearRegion += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnGet         += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnRemove      += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.Put(key1, "something", region1);
                cache.Put(key2, "something", region2);
                cache.Put(key1, "something", region1);
                cache.Put(key1, "something");

                // act
                cache.Clear();
                cache.Clear();

                // assert 2x calls x 3 event handles = 6 calls
                data.Calls.Should().Be(6, "we expect 6 hits");
            }
        }
Exemplo n.º 2
0
        public void Events_OnGetManyHandles <T>(T cache)
            where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var key1    = Guid.NewGuid().ToString();
                var region1 = Guid.NewGuid().ToString();
                var data    = new EventCallbackData();

                // all callbacks should be triggered, so result count should be 4
                cache.OnGet += (sender, args) => data.AddCall(args, key1);
                cache.OnGet += (sender, args) => data.AddCall(args, key1);
                cache.OnGet += (sender, args) => data.AddCall(args, key1);
                cache.OnGet += (sender, args) => data.AddCall(args, key1);
                cache.Add(key1, "something", region1);

                // act get without region, should not return anything and should not trigger the event
                var result = cache.Get(key1, region1);

                // assert
                result.Should().Be("something");
                data.Calls.Should().Be(4, "we expect 4 hits");
                data.Keys.ShouldAllBeEquivalentTo(Enumerable.Repeat(key1, 4), "we expect 4 hits");
                data.Regions.ShouldAllBeEquivalentTo(Enumerable.Repeat(region1, 4), "we expect 4 hits");
            }
        }
Exemplo n.º 3
0
 private static void eventCallback(EventCallbackData data)
 {
     if (data.type == EVENT_CALLBACK_TYPE.TIMELINE_MARKER)
     {
         //if a marker was encountered, then get the marker name and
         //set it to the subtitle text
         targetSubtitleText = data.createMarker().name;
     }
     else if (data.type == EVENT_CALLBACK_TYPE.STOPPED)
     {
         //the subtitle event has ended, so set the subtitle text to blank
         targetSubtitleText = "";
     }
 }
Exemplo n.º 4
0
        public void Events_OnAddMany <T>(T cache)
            where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var key1    = Guid.NewGuid().ToString();
                var key2    = Guid.NewGuid().ToString();
                var region1 = Guid.NewGuid().ToString();
                var region2 = Guid.NewGuid().ToString();
                var data    = new EventCallbackData();

                // all callbacks should be triggered, so result count should be 4
                cache.OnAdd    += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnAdd    += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnAdd    += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnGet    += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnRemove += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger

                // act get without region, should not return anything and should not trigger the event
                var r1 = cache.Add(key1, "something", region1); // true
                var r2 = cache.Add(key2, "something", region2); // true
                var r3 = cache.Add(key1, "something", region1); // false
                var r4 = cache.Add(key2, "something", region2); // false
                var r5 = cache.Add(key1, "something");          // true
                var r6 = cache.Add(key1, "something");          // false

                // assert
                (r1 && r2 && r5).Should().BeTrue();
                (r3 && r4 && r6).Should().BeFalse();

                // 3x true x 3 event handles = 9 calls
                data.Calls.Should().Be(9, "we expect 9 hits");
                data.Keys.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat(key1, 3)
                    .Concat(Enumerable.Repeat(key2, 3))
                    .Concat(Enumerable.Repeat(key1, 3)),
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 9 hits");

                data.Regions.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat(region1, 3)                     // 3 times region
                    .Concat(Enumerable.Repeat(region2, 3)),           // 3 times region2
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 6 hits");
            }
        }
Exemplo n.º 5
0
        public void Events_OnRemoveMany <T>(T cache)
            where T : ICacheManager <object>
        {
            using (cache)
            {
                var mgr = cache as BaseCacheManager <T>;

                // arrange
                var key1    = Guid.NewGuid().ToString();
                var key2    = Guid.NewGuid().ToString();
                var region1 = Guid.NewGuid().ToString();
                var region2 = Guid.NewGuid().ToString();
                var data    = new EventCallbackData();

                // all callbacks should be triggered, so result count should be 4
                cache.OnRemove += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnRemove += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnRemove += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnRemove += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnGet    += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.Add(key1, "something", region1);
                cache.Add(key2, "something", region2);

                // act get without region, should not return anything and should not trigger the event
                var r1 = cache.Remove(key1);                            // false
                var r2 = cache.Remove(key1, region1);                   // true
                var r3 = cache.Remove(key2, Guid.NewGuid().ToString()); // false
                var r4 = cache.Remove(key2, region2);                   // true

                // assert
                r1.Should().BeFalse(key1 + cache.ToString());
                r2.Should().BeTrue($"{key1} {region1}" + cache.ToString());
                r3.Should().BeFalse($"{key2} random region." + cache.ToString());
                r4.Should().BeTrue($"{key2} {region2}" + cache.ToString());

                data.Calls.Should().Be(8, $"we expect 8 hits for {key1} and {key2} \n-> keys: " + string.Join(", ", data.Keys));
                data.Keys.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat(key1, 4).Concat(Enumerable.Repeat(key2, 4)),
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 8 hits");

                data.Regions.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat(region1, 4).Concat(Enumerable.Repeat(region2, 4)),
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 8 hits");
            }
        }
Exemplo n.º 6
0
        public void Events_OnPutMany <T>(T cache)
            where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var key1    = Guid.NewGuid().ToString();
                var key2    = Guid.NewGuid().ToString();
                var region1 = Guid.NewGuid().ToString();
                var region2 = Guid.NewGuid().ToString();
                var data    = new EventCallbackData();

                // all callbacks should be triggered, so result count should be 4
                cache.OnPut    += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnPut    += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnPut    += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnAdd    += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnGet    += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnRemove += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger

                // act get without region, should not return anything and should not trigger the event
                cache.Put(key1, "something", region1);
                cache.Put(key2, "something", region2);
                cache.Put(key1, "something", region1);
                cache.Put(key1, "something");

                // assert 4x Put calls x 3 event handles = 12 calls
                data.Calls.Should().Be(12, $"we expect 12 hits for {key1} and {key2} \n-> keys: " + string.Join(", ", data.Keys));
                data.Keys.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat(key1, 3)
                    .Concat(Enumerable.Repeat(key2, 3))
                    .Concat(Enumerable.Repeat(key1, 6)),
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 12 hits");

                data.Regions.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat(region1, 3)                     // 3 times region
                    .Concat(Enumerable.Repeat(region2, 3))            // 3 times region2
                    .Concat(Enumerable.Repeat(region1, 3)),           // 3 times region
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 12 hits");
            }
        }
Exemplo n.º 7
0
        public void CacheManager_Events_OnUpdate <T>(T cache)
            where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var data = new EventCallbackData();
                var key1 = Guid.NewGuid().ToString();
                var key2 = Guid.NewGuid().ToString();

                // all callbacks should be triggered, so result count should be 4
                cache.OnUpdate += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnPut    += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnAdd    += (sender, args) => data.AddCall(args, key1, key2); // we should have 3times add
                cache.OnGet    += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnRemove += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger

                // act get without region, should not return anything and should not trigger the event
                cache.Add(key1, 1, "region");
                cache.Add(key2, 1, "region2");
                cache.Add(key1, 1);

                cache.Update(key1, "region", o => ((int)o) + 1);
                cache.Update(key2, "region2", o => ((int)o) + 1);
                cache.Update(key1, o => ((int)o) + 1);

                // assert 4x Put calls x 3 event handles = 12 calls
                data.Calls.Should().Be(6, "we expect 6 hits");
                data.Keys.ShouldAllBeEquivalentTo(
                    new string[] { key1, key2, key1, key1, key2, key1 },
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 3 adds and 3 updates in exact order");

                data.Regions.ShouldAllBeEquivalentTo(
                    new string[] { "region", "region2", "region", "region2", },
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 4 region hits");

                data.Results.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat(UpdateItemResult.ForSuccess <object>(2, false, 1), 3),
                    "we expect exactly 3 update results with the same results");
            }
        }
Exemplo n.º 8
0
        public void Events_OnUpdate <T>(T cache)
            where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var data    = new EventCallbackData();
                var key1    = Guid.NewGuid().ToString();
                var key2    = Guid.NewGuid().ToString();
                var region1 = Guid.NewGuid().ToString();
                var region2 = Guid.NewGuid().ToString();

                cache.OnUpdate += (sender, args) => data.AddCall(args, key1, key2);
                cache.OnPut    += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnAdd    += (sender, args) => data.AddCall(args, key1, key2); // we should have 3times add
                cache.OnGet    += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger
                cache.OnRemove += (sender, args) => data.AddCall(args, key1, key2); // this should not trigger

                // act get without region, should not return anything and should not trigger the event
                cache.Add(key1, 1, region1).Should().BeTrue("add key1 to region");
                cache.Add(key2, 1, region2).Should().BeTrue("add key2 to region2");
                cache.Add(key1, 1).Should().BeTrue("add key1");

                object val;
                cache.TryUpdate(key1, region1, o => ((int)o) + 1, out val).Should().BeTrue();
                cache.TryUpdate(key2, region2, o => ((int)o) + 1, out val).Should().BeTrue();
                cache.TryUpdate(key1, o => ((int)o) + 1, out val).Should().BeTrue();

                // assert 4x Put calls x 3 event handles = 12 calls
                data.Calls.Should().Be(6, "we expect 6 hits");
                data.Keys.ShouldAllBeEquivalentTo(
                    new string[] { key1, key2, key1, key1, key2, key1 },
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 3 adds and 3 updates in exact order");

                data.Regions.ShouldAllBeEquivalentTo(
                    new string[] { region1, region2, region1, region2, },
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 4 region hits");
            }
        }
        public void CacheManager_Events_OnGetMiss <T>(T cache) where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var key1 = Guid.NewGuid().ToString();
                var data = new EventCallbackData();
                cache.OnGet += (sender, args) => data.AddCall(args);

                // act
                var result           = cache.Get(key1);
                var resultWithRegion = cache.Get(key1, "region");

                // assert
                result.Should().BeNull("the key was not set without region");
                resultWithRegion.Should().BeNull("the key was not set with a region");
                data.Calls.Should().Be(0, "we expect only one hit");
                data.Keys.ShouldAllBeEquivalentTo(new string[] { }, "we expect no calls");
                data.Regions.ShouldAllBeEquivalentTo(new string[] { }, "we expect no calls");
            }
        }
Exemplo n.º 10
0
        public void CacheManager_Events_OnRemoveMany <T>(T cache)
            where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var key1 = Guid.NewGuid().ToString();
                var key2 = Guid.NewGuid().ToString();
                var data = new EventCallbackData();

                // all callbacks should be triggered, so result count should be 4
                cache.OnRemove += (sender, args) => data.AddCall(args);
                cache.OnRemove += (sender, args) => data.AddCall(args);
                cache.OnRemove += (sender, args) => data.AddCall(args);
                cache.OnRemove += (sender, args) => data.AddCall(args);
                cache.OnGet    += (sender, args) => data.AddCall(args); // this should not trigger
                cache.Add(key1, "something", "region");
                cache.Add(key2, "something", "region2");

                // act get without region, should not return anything and should not trigger the event
                var r1 = cache.Remove(key1);              // false
                var r2 = cache.Remove(key1, "region");    // true
                var r3 = cache.Remove(key2, "region3");   // false
                var r4 = cache.Remove(key2, "region2");   // true

                // assert
                (r1 && r3).Should().BeFalse();
                (r2 && r4).Should().BeTrue();
                data.Calls.Should().Be(8, "we expect 8 hits");
                data.Keys.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat(key1, 4).Concat(Enumerable.Repeat(key2, 4)),
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 8 hits");

                data.Regions.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat("region", 4).Concat(Enumerable.Repeat("region2", 4)),
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 8 hits");
            }
        }
        public void CacheManager_Events_OnGet <T>(T cache) where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var key1 = Guid.NewGuid().ToString();
                var data = new EventCallbackData();
                cache.OnGet += (sender, args) => data.AddCall(args);
                cache.Add(key1, "something");

                // act get without region, should not return anything and should not trigger the event
                var result           = cache.Get(key1);
                var resultWithRegion = cache.Get(key1, "region");

                // assert
                result.Should().Be("something");
                resultWithRegion.Should().BeNull("the key was not set with a region");
                data.Calls.Should().Be(1, "we expect only one hit");
                data.Keys.ShouldAllBeEquivalentTo(new[] { key1 }, "we expect one call");
                data.Regions.ShouldAllBeEquivalentTo(new string[] { null }, "we expect one call without region");
            }
        }
Exemplo n.º 12
0
        public void CacheManager_Events_OnClearRegion <T>(T cache)
            where T : ICacheManager <object>
        {
            using (cache)
            {
                // arrange
                var key1 = Guid.NewGuid().ToString();
                var key2 = Guid.NewGuid().ToString();
                var data = new EventCallbackData();

                // all callbacks should be triggered, so result count should be 6
                cache.OnClearRegion += (sender, args) => data.AddCall(args);
                cache.OnClearRegion += (sender, args) => data.AddCall(args);
                cache.OnClearRegion += (sender, args) => data.AddCall(args);
                cache.OnClear       += (sender, args) => data.AddCall();     // this should not trigger
                cache.OnGet         += (sender, args) => data.AddCall(args); // this should not trigger
                cache.OnRemove      += (sender, args) => data.AddCall(args); // this should not trigger
                cache.Put(key1, "something", "region");
                cache.Put(key2, "something", "region2");
                cache.Put(key1, "something", "region");
                cache.Put(key1, "something");

                // act get without region, should not return anything and should not trigger the event
                cache.ClearRegion("region");
                cache.ClearRegion("region2");

                // assert 2x calls x 3 event handles = 6 calls
                data.Calls.Should().Be(6, "we expect 6 hits");
                data.Keys.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat((string)null, 6),
                    "we expect 6 hits");

                data.Regions.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat("region", 3)                  // 3 times region
                    .Concat(Enumerable.Repeat("region2", 3)),       // 3 times region2
                    cfg => cfg.WithStrictOrdering(),
                    "we expect 6 hits");
            }
        }
        public void CacheManager_Events_OnClear()
        {
            using (var cache = TestManagers.WithOneDicCacheHandle)
            {
                // arrange
                var key1 = Guid.NewGuid().ToString();
                var key2 = Guid.NewGuid().ToString();
                var data = new EventCallbackData();

                // all callbacks should be triggered, so result count should be 4
                cache.OnClear       += (sender, args) => data.AddCall();
                cache.OnClear       += (sender, args) => data.AddCall();
                cache.OnClear       += (sender, args) => data.AddCall();
                cache.OnClearRegion += (sender, args) => data.AddCall(args); // this should not trigger
                cache.OnGet         += (sender, args) => data.AddCall(args); // this should not trigger
                cache.OnRemove      += (sender, args) => data.AddCall(args); // this should not trigger
                cache.Put(key1, "something", "region");
                cache.Put(key2, "something", "region2");
                cache.Put(key1, "something", "region");
                cache.Put(key1, "something");

                // act
                cache.Clear();
                cache.Clear();

                // assert 2x calls x 3 event handles = 6 calls
                data.Calls.Should().Be(6, "we expect 6 hits");
                data.Keys.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat((string)null, 6),
                    "we expect 6 hits");

                data.Regions.ShouldAllBeEquivalentTo(
                    Enumerable.Repeat((string)null, 6),
                    "we expect 6 hits");
            }
        }
Exemplo n.º 14
0
    /*
     * Used to set a callback on an event instance that returns a EventCallbackData instance.
     * EventCallbackData can be used to simplify the process  of getting data from the callbacks.
     */
    public static void setCallback(
        EventInstance instance,
        Action <EventCallbackData> callback,
        EVENT_CALLBACK_TYPE callbackMask = EVENT_CALLBACK_TYPE.ALL)
    {
        EVENT_CALLBACK evCallback = (EVENT_CALLBACK_TYPE type, IntPtr eventInstance, IntPtr parameters) =>
        {
            try
            {
                EventCallbackData data = new EventCallbackData(type, eventInstance, parameters);
                callback(data);
            }
            catch (Exception ex)
            {
                UnityEngine.Debug.LogError("Error occurred during event callback: " + ex.Message);
            }
            return(RESULT.OK);
        };

        evCallbacks.Add(evCallback);

        //set callback to lambda instance (whose lifetime SHOULD be the same as this class (forever))
        instance.setCallback(evCallback, callbackMask);
    }