Пример #1
0
        public void ExceptionThrownIsHandled()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            environment.Setup(x => x.Execute <string>(@"ReactDOMServer.renderToString(React.createElement(Foo, {""hello"":""World""}))"))
            .Throws(new JsRuntimeException("'undefined' is not an object"));

            var config = new Mock <IReactSiteConfiguration>();

            config.Setup(x => x.UseServerSideRendering).Returns(true);
            config.Setup(x => x.ExceptionHandler).Returns(() => throw new ReactServerRenderingException("test"));

            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container")
            {
                Props = new { hello = "World" }
            };

            // Default behavior
            bool exceptionCaught = false;

            try
            {
                component.RenderHtml();
            }
            catch (ReactServerRenderingException)
            {
                exceptionCaught = true;
            }

            Assert.True(exceptionCaught);

            // Custom handler passed into render call
            bool customHandlerInvoked = false;
            Action <Exception, string, string> customHandler = (ex, name, id) => customHandlerInvoked = true;

            component.RenderHtml(exceptionHandler: customHandler);
            Assert.True(customHandlerInvoked);

            // Custom exception handler set
            Exception caughtException = null;

            config.Setup(x => x.ExceptionHandler).Returns((ex, name, id) => caughtException = ex);

            var result = component.RenderHtml();

            Assert.Equal(@"<div id=""container""></div>", result);
            Assert.NotNull(caughtException);
        }
Пример #2
0
        public void RenderFunctionsCalled()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            environment.Setup(x => x.Execute <string>(@"outerWrap(ReactDOMServer.renderToString(wrap(React.createElement(Foo, {""hello"":""World""}))))"))
            .Returns("[HTML]");

            environment.Setup(x => x.Execute <string>(@"prerender();"))
            .Returns("prerender-result");

            environment.Setup(x => x.Execute <string>(@"postrender();"))
            .Returns("postrender-result");

            var config = new Mock <IReactSiteConfiguration>();

            config.Setup(x => x.UseServerSideRendering).Returns(true);
            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container")
            {
                Props = new { hello = "World" }
            };
            var renderFunctions = new TestRenderFunctions();
            var result          = component.RenderHtml(renderFunctions: renderFunctions);

            Assert.Equal(@"<div id=""container"">[HTML]</div>", result);
            Assert.Equal(@"prerender-result", renderFunctions.PreRenderResult);
            Assert.Equal(@"postrender-result", renderFunctions.PostRenderResult);
        }
Пример #3
0
		public void RenderHtmlShouldThrowExceptionIfComponentDoesNotExist()
		{
			var environment = new Mock<IReactEnvironment>();
			environment.Setup(x => x.Execute<bool>("typeof Foo !== 'undefined'")).Returns(false);
			var component = new ReactComponent(environment.Object, null, "Foo", "container");

			Assert.Throws<ReactInvalidComponentException>(() =>
			{
				component.RenderHtml();
			});
		}
		public void RenderHtmlShouldThrowExceptionIfComponentDoesNotExist()
		{
			var environment = new Mock<IReactEnvironment>();
			environment.Setup(x => x.HasVariable("Foo")).Returns(false);
			var component = new ReactComponent(environment.Object, "Foo", "container");

			Assert.Throws<ReactInvalidComponentException>(() =>
			{
				component.RenderHtml();
			});
		}
Пример #5
0
        public void RenderHtmlShouldThrowExceptionIfComponentDoesNotExist()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.HasVariable("Foo")).Returns(false);
            var component = new ReactComponent(environment.Object, "Foo", "container");

            Assert.Throws <ReactInvalidComponentException>(() =>
            {
                component.RenderHtml();
            });
        }
Пример #6
0
        public void RenderHtmlShouldThrowExceptionIfComponentDoesNotExist()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(false);
            var component = new ReactComponent(environment.Object, "Foo", "container");

            Assert.Throws <ReactInvalidComponentException>(() =>
            {
                component.RenderHtml();
            });
        }
		public void RenderHtmlShouldCallRenderComponent()
		{
			var environment = new Mock<IReactEnvironment>();
			environment.Setup(x => x.HasVariable("Foo")).Returns(true);

			var component = new ReactComponent(environment.Object, "Foo", "container")
			{
				Props = new { hello = "World" }
			};
			component.RenderHtml();

			environment.Verify(x => x.Execute<string>(@"React.renderComponentToString(Foo({""hello"":""World""}))"));
		}
Пример #8
0
		public void RenderHtmlShouldCallRenderComponent()
		{
			var environment = new Mock<IReactEnvironment>();
			environment.Setup(x => x.Execute<bool>("typeof Foo !== 'undefined'")).Returns(true);
			var config = new Mock<IReactSiteConfiguration>();

			var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
			{
				Props = new { hello = "World" }
			};
			component.RenderHtml();

			environment.Verify(x => x.Execute<string>(@"React.renderToString(React.createElement(Foo, {""hello"":""World""}))"));
		}
Пример #9
0
        public void RenderHtmlShouldCallRenderComponent()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);

            var component = new ReactComponent(environment.Object, "Foo", "container")
            {
                Props = new { hello = "World" }
            };

            component.RenderHtml();

            environment.Verify(x => x.Execute <string>(@"React.renderComponentToString(Foo({""hello"":""World""}))"));
        }
Пример #10
0
		public void RenderHtmlShouldWrapComponentInDiv()
		{
			var environment = new Mock<IReactEnvironment>();
			environment.Setup(x => x.HasVariable("Foo")).Returns(true);
			environment.Setup(x => x.Execute<string>(@"React.renderComponentToString(Foo({""hello"":""World""}))"))
				.Returns("[HTML]");

			var component = new ReactComponent(environment.Object, "Foo", "container")
			{
				Props = new { hello = "World" }
			};
			var result = component.RenderHtml();

			Assert.Equal(@"<div id=""container"">[HTML]</div>", result);
		}
Пример #11
0
        public void RenderHtmlShouldNotRenderClientSideAttributes()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            var config = new Mock <IReactSiteConfiguration>();

            var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
            {
                Props = new { hello = "World" }
            };

            component.RenderHtml(renderServerOnly: true);

            environment.Verify(x => x.Execute <string>(@"ReactDOMServer.renderToStaticMarkup(React.createElement(Foo, {""hello"":""World""}))"));
        }
Пример #12
0
		public void RenderHtmlShouldWrapComponentInDiv()
		{
			var environment = new Mock<IReactEnvironment>();
			environment.Setup(x => x.Execute<bool>("typeof Foo !== 'undefined'")).Returns(true);
			environment.Setup(x => x.Execute<string>(@"React.renderToString(React.createElement(Foo, {""hello"":""World""}))"))
				.Returns("[HTML]");
			var config = new Mock<IReactSiteConfiguration>();

			var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
			{
				Props = new { hello = "World" }
			};
			var result = component.RenderHtml();

			Assert.AreEqual(@"<div id=""container"">[HTML]</div>", result);
		}
Пример #13
0
        public void RenderHtmlShouldWrapComponentInDiv()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            environment.Setup(x => x.Execute <string>(@"React.renderComponentToString(Foo({""hello"":""World""}))"))
            .Returns("[HTML]");

            var component = new ReactComponent(environment.Object, "Foo", "container")
            {
                Props = new { hello = "World" }
            };
            var result = component.RenderHtml();

            Assert.AreEqual(@"<div id=""container"">[HTML]</div>", result);
        }
Пример #14
0
        public void RenderHtmlShouldThrowExceptionIfComponentDoesNotExist()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(false);
            var config = new Mock <IReactSiteConfiguration>();

            config.Setup(x => x.UseServerSideRendering).Returns(true);
            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container");

            Assert.Throws <ReactInvalidComponentException>(() =>
            {
                component.RenderHtml();
            });
        }
Пример #15
0
        public void RenderHtmlShouldWrapComponentInCustomElement()
        {
            var config      = new Mock <IReactSiteConfiguration>();
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            environment.Setup(x => x.Execute <string>(@"React.renderToString(React.createElement(Foo, {""hello"":""World""}))"))
            .Returns("[HTML]");

            var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
            {
                Props        = new { hello = "World" },
                ContainerTag = "span"
            };
            var result = component.RenderHtml();

            Assert.AreEqual(@"<span id=""container"">[HTML]</span>", result);
        }
Пример #16
0
        public void RenderHtmlShouldAddClassToElement()
        {
            var config      = new Mock <IReactSiteConfiguration>();
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            environment.Setup(x => x.Execute <string>(@"ReactDOMServer.renderToString(React.createElement(Foo, {""hello"":""World""}))"))
            .Returns("[HTML]");

            var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
            {
                Props          = new { hello = "World" },
                ContainerClass = "test-class"
            };
            var result = component.RenderHtml();

            Assert.AreEqual(@"<div id=""container"" class=""test-class"">[HTML]</div>", result);
        }
Пример #17
0
        public void RenderHtmlShouldNotRenderComponentHtml()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            environment.Setup(x => x.Execute <string>(@"React.renderToString(React.createElement(Foo, {""hello"":""World""}))"))
            .Returns("[HTML]");
            var config = new Mock <IReactSiteConfiguration>();

            var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
            {
                Props = new { hello = "World" }
            };
            var result = component.RenderHtml(renderContainerOnly: true);

            Assert.Equal(@"<div id=""container""></div>", result);
            environment.Verify(x => x.Execute(It.IsAny <string>()), Times.Never);
        }
Пример #18
0
        public void RenderHtmlShouldCallRenderComponent()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            var config = new Mock <IReactSiteConfiguration>();

            config.Setup(x => x.UseServerSideRendering).Returns(true);
            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container")
            {
                Props = new { hello = "World" }
            };

            component.RenderHtml();

            environment.Verify(x => x.Execute <string>(@"ReactDOMServer.renderToString(React.createElement(Foo, {""hello"":""World""}))"));
        }
Пример #19
0
        public void RenderHtmlShouldWrapComponentInDiv()
        {
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            environment.Setup(x => x.Execute <string>(@"ReactDOMServer.renderToString(React.createElement(Foo, {""hello"":""World""}))"))
            .Returns("[HTML]");
            var config = CreateDefaultConfigMock();

            config.Setup(x => x.UseServerSideRendering).Returns(true);
            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container")
            {
                Props = new { hello = "World" }
            };
            var result = component.RenderHtml();

            Assert.Equal(@"<div id=""container"">[HTML]</div>", result);
        }
Пример #20
0
        public void RenderHtmlShouldNotWrapComponentWhenServerSideOnly()
        {
            var config = new Mock <IReactSiteConfiguration>();

            config.Setup(x => x.UseServerSideRendering).Returns(true);
            var environment = new Mock <IReactEnvironment>();

            environment.Setup(x => x.Execute <bool>("typeof Foo !== 'undefined'")).Returns(true);
            environment.Setup(x => x.Execute <string>(@"ReactDOMServer.renderToStaticMarkup(React.createElement(Foo, {""hello"":""World""}))"))
            .Returns("[HTML]");
            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container")
            {
                Props = new { hello = "World" },
            };
            var result = component.RenderHtml(false, true);

            Assert.Equal(@"[HTML]", result);
        }
Пример #21
0
		public void RenderHtmlShouldNotRenderClientSideAttributes()
		{
			var environment = new Mock<IReactEnvironment>();
			environment.Setup(x => x.Execute<bool>("typeof Foo !== 'undefined'")).Returns(true);
			var config = new Mock<IReactSiteConfiguration>();
			config.Setup(x => x.UseServerSideRendering).Returns(true);

			var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
			{
				Props = new { hello = "World" }
			};
			component.RenderHtml(renderServerOnly: true);

			environment.Verify(x => x.Execute<string>(@"ReactDOMServer.renderToStaticMarkup(React.createElement(Foo, {""hello"":""World""}))"));
		}