Ejemplo n.º 1
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);
                    }
        }
Ejemplo n.º 2
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));
                            });
                        });
                    }
        }
Ejemplo n.º 3
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);
                    }
        }