mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
* Move files * Update paths * Rename import variables * Rename /server to /writer This is mainly because "React Server Server" is weird so we need another dimension. * Use "react-server" convention to enforce that writer is only loaded in a server
79 lines
1.8 KiB
JavaScript
79 lines
1.8 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @emails react-core
|
|
* @jest-environment node
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
// Polyfills for test environment
|
|
global.ReadableStream = require('@mattiasbuelens/web-streams-polyfill/ponyfill/es6').ReadableStream;
|
|
global.TextEncoder = require('util').TextEncoder;
|
|
global.TextDecoder = require('util').TextDecoder;
|
|
|
|
let React;
|
|
let ReactServerDOMWriter;
|
|
let ReactServerDOMReader;
|
|
|
|
describe('ReactFlightDOMBrowser', () => {
|
|
beforeEach(() => {
|
|
jest.resetModules();
|
|
React = require('react');
|
|
ReactServerDOMWriter = require('react-server-dom-webpack/writer.browser.server');
|
|
ReactServerDOMReader = require('react-server-dom-webpack');
|
|
});
|
|
|
|
async function waitForSuspense(fn) {
|
|
while (true) {
|
|
try {
|
|
return fn();
|
|
} catch (promise) {
|
|
if (typeof promise.then === 'function') {
|
|
await promise;
|
|
} else {
|
|
throw promise;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
it('should resolve HTML using W3C streams', async () => {
|
|
function Text({children}) {
|
|
return <span>{children}</span>;
|
|
}
|
|
function HTML() {
|
|
return (
|
|
<div>
|
|
<Text>hello</Text>
|
|
<Text>world</Text>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
function App() {
|
|
const model = {
|
|
html: <HTML />,
|
|
};
|
|
return model;
|
|
}
|
|
|
|
const stream = ReactServerDOMWriter.renderToReadableStream(<App />);
|
|
const response = ReactServerDOMReader.createFromReadableStream(stream);
|
|
await waitForSuspense(() => {
|
|
const model = response.readRoot();
|
|
expect(model).toEqual({
|
|
html: (
|
|
<div>
|
|
<span>hello</span>
|
|
<span>world</span>
|
|
</div>
|
|
),
|
|
});
|
|
});
|
|
});
|
|
});
|