예제 #1
0
        public void BaristaObjectPoolAddOrGetThrowsOnInvalidHandles()
        {
            var bop = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
                using (var ctx = rt.CreateContext())
                    using (ctx.Scope())
                    {
                        var value = ctx.CreateString("Test 123");
                        Assert.Throws <ArgumentNullException>(() =>
                        {
                            var addedVal = bop.GetOrAdd(JavaScriptValueSafeHandle.Invalid, () =>
                            {
                                return(ctx.CreateValue <JsString>(value.Handle));
                            });
                        });

                        Assert.Throws <ArgumentNullException>(() =>
                        {
                            var addedVal = bop.GetOrAdd(default(JavaScriptValueSafeHandle), () =>
                            {
                                return(ctx.CreateValue <JsString>(value.Handle));
                            });
                        });
                    }
        }
예제 #2
0
        public void BaristaObjectPoolCanBeCreated()
        {
            var bop = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();

            Assert.NotNull(bop);
            Assert.Equal(0, bop.Count);
        }
예제 #3
0
        public void BaristaObjectPoolCanAddOrGetItemsThatHaveBeenDisposed()
        {
            var bop = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
                using (var ctx = rt.CreateContext())
                    using (ctx.Scope())
                    {
                        var str    = "Hello, World.";
                        var handle = ctx.Engine.JsCreateString(str, (ulong)str.Length);

                        var addedVal = bop.GetOrAdd(handle, () =>
                        {
                            return(new JsString(rt.Engine, ctx, handle));
                        });

                        addedVal.Dispose();
                        addedVal = null;

                        GC.Collect();
                        GC.WaitForPendingFinalizers();
                        GC.WaitForFullGCComplete();
                        GC.Collect();

                        var added2Val = bop.GetOrAdd(handle, () =>
                        {
                            return(ctx.CreateValue <JsString>(handle));
                        });

                        Assert.Equal(1, bop.Count);
                    }
        }
예제 #4
0
        public void BaristaObjectPoolTryGetRemovedHandlesAreNull()
        {
            var bop    = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();
            var handle = new JavaScriptValueSafeHandle();

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
            {
                using (var ctx = rt.CreateContext())
                    using (ctx.Scope())
                    {
                        var value = ctx.CreateString("Test 123");
                        bop.TryAdd(value);
                        handle = value.Handle;
                        value.Dispose();
                        value = null;
                    }
                rt.CollectGarbage();
            }

            //m_provider = null;
            //m_serviceCollection.FreeBaristaCoreServices();
            //m_serviceCollection = null;

            //GC.Collect();
            //GC.WaitForPendingFinalizers();
            //GC.WaitForFullGCComplete();
            //GC.Collect();

            bop.RemoveHandle(handle);
            bop.TryGet(handle, out JsValue retrievedValue);
            Assert.Null(retrievedValue);
        }
예제 #5
0
        public void BaristaObjectPoolCanTryAddItems()
        {
            var bop = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
                using (var ctx = rt.CreateContext())
                    using (ctx.Scope())
                    {
                        var value = ctx.CreateString("Test 123");
                        bop.TryAdd(value);
                        Assert.Equal(1, bop.Count);
                    }
        }
예제 #6
0
        public void BaristaObjectPoolTryGetRetrievesAddedItems()
        {
            var bop = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
                using (var ctx = rt.CreateContext())
                    using (ctx.Scope())
                    {
                        var value = ctx.CreateString("Test 123");
                        bop.TryAdd(value);
                        bop.TryGet(value.Handle, out JsValue retrievedValue);

                        Assert.Same(value, retrievedValue);
                    }
        }
예제 #7
0
        public void BaristaObjectPoolTryAddItemsCannotBeNull()
        {
            var bop = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
                using (var ctx = rt.CreateContext())
                    using (ctx.Scope())
                    {
                        var value = ctx.CreateString("Test 123");

                        Assert.Throws <ArgumentNullException>(() =>
                        {
                            bop.TryAdd(null);
                        });
                    }
        }
예제 #8
0
        public void BaristaObjectPoolCanAddOrGetItems()
        {
            var bop = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
                using (var ctx = rt.CreateContext())
                    using (ctx.Scope())
                    {
                        var value    = ctx.CreateString("Test 123");
                        var addedVal = bop.GetOrAdd(value.Handle, () =>
                        {
                            return(ctx.CreateValue <JsString>(value.Handle));
                        });

                        Assert.Equal(1, bop.Count);
                        Assert.Same(value, addedVal);
                    }
        }
예제 #9
0
        public void BaristaObjectPoolTryGetCannotRetrieveInvalidHandles()
        {
            var bop = new BaristaObjectPool <JsValue, JavaScriptValueSafeHandle>();

            using (var rt = BaristaRuntimeFactory.CreateRuntime())
                using (var ctx = rt.CreateContext())
                    using (ctx.Scope())
                    {
                        var value = ctx.CreateString("Test 123");
                        bop.TryAdd(value);

                        Assert.Throws <ArgumentNullException>(() =>
                        {
                            bop.TryGet(JavaScriptValueSafeHandle.Invalid, out JsValue retrievedValue);
                        });

                        Assert.Throws <ArgumentNullException>(() =>
                        {
                            bop.TryGet(default(JavaScriptValueSafeHandle), out JsValue retrievedValue);
                        });
                    }
        }