コード例 #1
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();
			});
		}
コード例 #2
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();
			});
		}
コード例 #3
0
		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""}))"));
		}
コード例 #4
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""}))"));
		}
コード例 #5
0
        public override IReactComponent CreateComponent(string tag, string text)
        {
            ReactComponent res = null;

            if (ComponentCreators.TryGetValue(tag, out var creator))
            {
                res = creator(tag, text, this);
            }
            else
            {
                res = defaultCreator(tag, text, this);
            }
            res.GameObject.name = $"<{tag}>";
            return(res);
        }
コード例 #6
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 component = new ReactComponent(environment.Object, config.Object, "Foo", "container");

            Assert.Throws <ReactInvalidComponentException>(() =>
            {
                component.RenderHtml();
            });
        }
コード例 #7
0
		public void RenderJavaScriptShouldCallRenderComponent()
		{
			var environment = new Mock<IReactEnvironment>();

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

			Assert.Equal(
				@"React.renderComponent(Foo({""hello"":""World""}), document.getElementById(""container""))",
				result
			);
		}
コード例 #8
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);
		}
コード例 #9
0
        public void RenderJavaScriptShouldCallRenderComponent()
        {
            var environment = new Mock <IReactEnvironment>();
            var config      = new Mock <IReactSiteConfiguration>();

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

            Assert.Equal(
                @"ReactDOM.render(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))",
                result
                );
        }
コード例 #10
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);
        }
コード例 #11
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);
		}
コード例 #12
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""}))"));
        }
コード例 #13
0
        public void RenderJavaScriptShouldCallRenderComponent()
        {
            var environment      = new Mock <IReactEnvironment>();
            var config           = CreateDefaultConfigMock();
            var reactIdGenerator = new Mock <IReactIdGenerator>();

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

            Assert.Equal(
                @"ReactDOM.hydrate(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))",
                result
                );
        }
コード例 #14
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);
        }
コード例 #15
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);
        }
コード例 #16
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);
        }
コード例 #17
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""}))"));
        }
コード例 #18
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 = 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 result = component.RenderHtml();

            Assert.Equal(@"<div id=""container"">[HTML]</div>", result);
        }
コード例 #19
0
        public void RenderHtmlShouldNotWrapComponentWhenServerSideOnly()
        {
            var config = CreateDefaultConfigMock();

            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);
        }
コード例 #20
0
        public void RenderJavaScriptShouldCallRenderComponentWithReactDomRenderWhenSsrDisabled()
        {
            var environment = new Mock <IReactEnvironment>();
            var config      = CreateDefaultConfigMock();

            config.SetupGet(x => x.UseServerSideRendering).Returns(false);

            var reactIdGenerator = new Mock <IReactIdGenerator>();
            var component        = new ReactComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container")
            {
                ClientOnly = false,
                Props      = new { hello = "World" }
            };
            var result = component.RenderJavaScript();

            Assert.Equal(
                @"ReactDOM.render(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))",
                result
                );
        }
コード例 #21
0
        public void RenderJavaScriptShouldHandleWaitForContentLoad()
        {
            var environment = new Mock <IReactEnvironment>();
            var config      = CreateDefaultConfigMock();

            config.SetupGet(x => x.UseServerSideRendering).Returns(false);

            var reactIdGenerator = new Mock <IReactIdGenerator>();
            var component        = new ReactComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container")
            {
                ClientOnly = false,
                Props      = new { hello = "World" }
            };

            using (var writer = new StringWriter())
            {
                component.RenderJavaScript(writer, waitForDOMContentLoad: true);
                Assert.Equal(
                    @"window.addEventListener('DOMContentLoaded', function() {ReactDOM.render(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))});",
                    writer.ToString()
                    );
            }
        }
コード例 #22
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""}))"));
		}
コード例 #23
0
		public void GeneratesContainerIdIfNotProvided()
		{
			var environment = new Mock<IReactEnvironment>();
			var config = new Mock<IReactSiteConfiguration>();

			var component = new ReactComponent(environment.Object, config.Object, "Foo", null);
			StringAssert.StartsWith("react_", component.ContainerId);
		}