Skip to content

Commit

Permalink
Fix for the EnsureReactLoaded method of `React.JavaScriptEngineFact…
Browse files Browse the repository at this point in the history
…ory` class (#574)
  • Loading branch information
Taritsyn authored and dustinsoftware committed Jul 23, 2018
1 parent 83785cf commit 4dfddc5
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 8 deletions.
8 changes: 5 additions & 3 deletions src/React.Core/JavaScriptEngineFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -185,11 +185,13 @@ private void LoadUserScripts(IJsEngine engine)
/// <param name="engine">Engine to check</param>
private static void EnsureReactLoaded(IJsEngine engine)
{
var result = engine.CallFunction<string[]>("ReactNET_initReact");
if (result.Length != 0)
var globalsString = engine.CallFunction<string>("ReactNET_initReact");
string[] globals = globalsString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

if (globals.Length != 0)
{
throw new ReactNotInitialisedException(
$"React has not been loaded correctly: missing ({string.Join(", ", result)})." +
$"React has not been loaded correctly: missing ({string.Join(", ", globals)})." +
"Please expose your version of React as global variables named " +
"'React', 'ReactDOM', and 'ReactDOMServer', or enable the 'LoadReact'" +
"configuration option to use the built-in version of React."
Expand Down
4 changes: 2 additions & 2 deletions src/React.Core/Resources/shims.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ if (!Object.freeze) {
/**
* Finds a user-supplied version of React and ensures it's exposed globally.
*
* @return {string[]} Which globals are missing, if any.
* @return {string} Comma-separated list of missing globals.
*/
function ReactNET_initReact() {
var missing = [];
Expand Down Expand Up @@ -76,7 +76,7 @@ function ReactNET_initReact() {
}
}

return missing;
return missing.join(',');
}

setTimeout = setTimeout || global.setTimeout;
Expand Down
6 changes: 3 additions & 3 deletions tests/React.Tests/Core/JavaScriptEngineFactoryTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public void ShouldHandleLoadingExternalReactVersion()
{
var jsEngine = new Mock<IJsEngine>();
jsEngine.Setup(x => x.Evaluate<int>("1 + 1")).Returns(2);
jsEngine.Setup(x => x.CallFunction<string[]>("ReactNET_initReact")).Returns(new string[] { });
jsEngine.Setup(x => x.CallFunction<string>("ReactNET_initReact")).Returns(string.Empty);
var config = new Mock<IReactSiteConfiguration>();
config.Setup(x => x.ScriptsWithoutTransform).Returns(new List<string>());
config.Setup(x => x.LoadReact).Returns(false);
Expand All @@ -135,15 +135,15 @@ public void ShouldHandleLoadingExternalReactVersion()

factory.GetEngineForCurrentThread();

jsEngine.Verify(x => x.CallFunction<string[]>("ReactNET_initReact"));
jsEngine.Verify(x => x.CallFunction<string>("ReactNET_initReact"));
}

[Fact]
public void ShouldThrowIfReactVersionNotLoaded()
{
var jsEngine = new Mock<IJsEngine>();
jsEngine.Setup(x => x.Evaluate<int>("1 + 1")).Returns(2);
jsEngine.Setup(x => x.CallFunction<string[]>("ReactNET_initReact")).Returns(new string[] { "React" });
jsEngine.Setup(x => x.CallFunction<string>("ReactNET_initReact")).Returns("React");
var config = new Mock<IReactSiteConfiguration>();
config.Setup(x => x.ScriptsWithoutTransform).Returns(new List<string>());
config.Setup(x => x.LoadReact).Returns(false);
Expand Down

0 comments on commit 4dfddc5

Please sign in to comment.