Ejemplo n.º 1
0
        public void TrackObjectReference_AllowsMultipleCallsUsingTheSameJSRuntime()
        {
            // Arrange
            var jsRuntime = new TestJSRuntime();
            var objRef    = DotNetObjectReference.Create(new object());

            // Act
            var objectId1 = jsRuntime.TrackObjectReference(objRef);
            var objectId2 = jsRuntime.TrackObjectReference(objRef);

            // Act
            Assert.Equal(objectId1, objectId2);
        }
Ejemplo n.º 2
0
        public void TrackObjectReference_AssignsObjectId()
        {
            // Arrange
            var jsRuntime = new TestJSRuntime();
            var objRef    = DotNetObjectReference.Create(new object());

            // Act
            var objectId = jsRuntime.TrackObjectReference(objRef);

            // Act
            Assert.Equal(objectId, objRef.ObjectId);
            Assert.Equal(1, objRef.ObjectId);
        }
Ejemplo n.º 3
0
        public void DoubleDispose_Works()
        {
            // Arrange
            var objRef    = DotNetObjectReference.Create("Hello world");
            var jsRuntime = new TestJSRuntime();

            jsRuntime.TrackObjectReference(objRef);
            var objectId = objRef.ObjectId;

            // Act
            Assert.Same(objRef, jsRuntime.GetObjectReference(objectId));
            objRef.Dispose();

            // Assert
            objRef.Dispose();
            // If we got this far, this did not throw.
        }
Ejemplo n.º 4
0
        public void TrackObjectReference_ThrowsIfDifferentJSRuntimeInstancesAreUsed()
        {
            // Arrange
            var objRef   = DotNetObjectReference.Create("Hello world");
            var expected = $"{objRef.GetType().Name} is already being tracked by a different instance of {nameof(JSRuntime)}. A common cause is caching an instance of {nameof(DotNetObjectReference<string>)}" +
                           $" globally. Consider creating instances of {nameof(DotNetObjectReference<string>)} at the JSInterop callsite.";
            var jsRuntime1 = new TestJSRuntime();
            var jsRuntime2 = new TestJSRuntime();

            jsRuntime1.TrackObjectReference(objRef);

            // Act
            var ex = Assert.Throws <InvalidOperationException>(() => jsRuntime2.TrackObjectReference(objRef));

            // Assert
            Assert.Equal(expected, ex.Message);
        }
Ejemplo n.º 5
0
        public void Dispose_StopsTrackingObject()
        {
            // Arrange
            var objRef    = DotNetObjectReference.Create("Hello world");
            var jsRuntime = new TestJSRuntime();

            jsRuntime.TrackObjectReference(objRef);
            var objectId = objRef.ObjectId;
            var expected = $"There is no tracked object with id '{objectId}'. Perhaps the DotNetObjectReference instance was already disposed.";

            // Act
            Assert.Same(objRef, jsRuntime.GetObjectReference(objectId));
            objRef.Dispose();

            // Assert
            Assert.True(objRef.Disposed);
            Assert.Throws <ArgumentException>(() => jsRuntime.GetObjectReference(objectId));
        }