Best JavaScript code snippet using playwright-internal
ReactComponent.js
Source:ReactComponent.js
1/**2 * Copyright 2013 Facebook, Inc.3 *4 * Licensed under the Apache License, Version 2.0 (the "License");5 * you may not use this file except in compliance with the License.6 * You may obtain a copy of the License at7 *8 * http://www.apache.org/licenses/LICENSE-2.09 *10 * Unless required by applicable law or agreed to in writing, software11 * distributed under the License is distributed on an "AS IS" BASIS,12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13 * See the License for the specific language governing permissions and14 * limitations under the License.15 *16 * @providesModule ReactComponent17 */18"use strict";19var ExecutionEnvironment = require('ExecutionEnvironment');20var ReactCurrentOwner = require('ReactCurrentOwner');21var ReactDOMIDOperations = require('ReactDOMIDOperations');22var ReactMount = require('ReactMount');23var ReactOwner = require('ReactOwner');24var ReactReconcileTransaction = require('ReactReconcileTransaction');25var invariant = require('invariant');26var keyMirror = require('keyMirror');27var merge = require('merge');28/**29 * Prop key that references a component's owner.30 * @private31 */32var OWNER = '{owner}';33/**34 * Every React component is in one of these life cycles.35 */36var ComponentLifeCycle = keyMirror({37 /**38 * Mounted components have a DOM node representation and are capable of39 * receiving new props.40 */41 MOUNTED: null,42 /**43 * Unmounted components are inactive and cannot receive new props.44 */45 UNMOUNTED: null46});47/**48 * Components are the basic units of composition in React.49 *50 * Every component accepts a set of keyed input parameters known as "props" that51 * are initialized by the constructor. Once a component is mounted, the props52 * can be mutated using `setProps` or `replaceProps`.53 *54 * Every component is capable of the following operations:55 *56 * `mountComponent`57 * Initializes the component, renders markup, and registers event listeners.58 *59 * `receiveProps`60 * Updates the rendered DOM nodes given a new set of props.61 *62 * `unmountComponent`63 * Releases any resources allocated by this component.64 *65 * Components can also be "owned" by other components. Being owned by another66 * component means being constructed by that component. This is different from67 * being the child of a component, which means having a DOM representation that68 * is a child of the DOM representation of that component.69 *70 * @class ReactComponent71 */72var ReactComponent = {73 /**74 * @param {?object} object75 * @return {boolean} True if `object` is a valid component.76 * @final77 */78 isValidComponent: function(object) {79 return !!(80 object &&81 typeof object.mountComponentIntoNode === 'function' &&82 typeof object.receiveProps === 'function'83 );84 },85 /**86 * @internal87 */88 LifeCycle: ComponentLifeCycle,89 /**90 * React references `ReactDOMIDOperations` using this property in order to91 * allow dependency injection.92 *93 * @internal94 */95 DOMIDOperations: ReactDOMIDOperations,96 /**97 * React references `ReactReconcileTransaction` using this property in order98 * to allow dependency injection.99 *100 * @internal101 */102 ReactReconcileTransaction: ReactReconcileTransaction,103 /**104 * @param {object} DOMIDOperations105 * @final106 */107 setDOMOperations: function(DOMIDOperations) {108 ReactComponent.DOMIDOperations = DOMIDOperations;109 },110 /**111 * @param {Transaction} ReactReconcileTransaction112 * @final113 */114 setReactReconcileTransaction: function(ReactReconcileTransaction) {115 ReactComponent.ReactReconcileTransaction = ReactReconcileTransaction;116 },117 /**118 * Base functionality for every ReactComponent constructor.119 *120 * @lends {ReactComponent.prototype}121 */122 Mixin: {123 /**124 * Returns the DOM node rendered by this component.125 *126 * @return {?DOMElement} The root node of this component.127 * @final128 * @protected129 */130 getDOMNode: function() {131 invariant(132 ExecutionEnvironment.canUseDOM,133 'getDOMNode(): The DOM is not supported in the current environment.'134 );135 invariant(136 this._lifeCycleState === ComponentLifeCycle.MOUNTED,137 'getDOMNode(): A component must be mounted to have a DOM node.'138 );139 var rootNode = this._rootNode;140 if (!rootNode) {141 rootNode = document.getElementById(this._rootNodeID);142 if (!rootNode) {143 // TODO: Log the frequency that we reach this path.144 rootNode = ReactMount.findReactRenderedDOMNodeSlow(this._rootNodeID);145 }146 this._rootNode = rootNode;147 }148 return rootNode;149 },150 /**151 * Sets a subset of the props.152 *153 * @param {object} partialProps Subset of the next props.154 * @final155 * @public156 */157 setProps: function(partialProps) {158 this.replaceProps(merge(this.props, partialProps));159 },160 /**161 * Replaces all of the props.162 *163 * @param {object} props New props.164 * @final165 * @public166 */167 replaceProps: function(props) {168 invariant(169 !this.props[OWNER],170 'replaceProps(...): You called `setProps` or `replaceProps` on a ' +171 'component with an owner. This is an anti-pattern since props will ' +172 'get reactively updated when rendered. Instead, change the owner\'s ' +173 '`render` method to pass the correct value as props to the component ' +174 'where it is created.'175 );176 var transaction = ReactComponent.ReactReconcileTransaction.getPooled();177 transaction.perform(this.receiveProps, this, props, transaction);178 ReactComponent.ReactReconcileTransaction.release(transaction);179 },180 /**181 * Base constructor for all React component.182 *183 * Subclasses that override this method should make sure to invoke184 * `ReactComponent.Mixin.construct.call(this, ...)`.185 *186 * @param {?object} initialProps187 * @param {*} children188 * @internal189 */190 construct: function(initialProps, children) {191 this.props = initialProps || {};192 if (typeof children !== 'undefined') {193 this.props.children = children;194 }195 // Record the component responsible for creating this component.196 this.props[OWNER] = ReactCurrentOwner.current;197 // All components start unmounted.198 this._lifeCycleState = ComponentLifeCycle.UNMOUNTED;199 },200 /**201 * Initializes the component, renders markup, and registers event listeners.202 *203 * NOTE: This does not insert any nodes into the DOM.204 *205 * Subclasses that override this method should make sure to invoke206 * `ReactComponent.Mixin.mountComponent.call(this, ...)`.207 *208 * @param {string} rootID DOM ID of the root node.209 * @param {ReactReconcileTransaction} transaction210 * @return {?string} Rendered markup to be inserted into the DOM.211 * @internal212 */213 mountComponent: function(rootID, transaction) {214 invariant(215 this._lifeCycleState === ComponentLifeCycle.UNMOUNTED,216 'mountComponent(%s, ...): Can only mount an unmounted component.',217 rootID218 );219 var props = this.props;220 if (props.ref != null) {221 ReactOwner.addComponentAsRefTo(this, props.ref, props[OWNER]);222 }223 this._rootNodeID = rootID;224 this._lifeCycleState = ComponentLifeCycle.MOUNTED;225 // Effectively: return '';226 },227 /**228 * Releases any resources allocated by `mountComponent`.229 *230 * NOTE: This does not remove any nodes from the DOM.231 *232 * Subclasses that override this method should make sure to invoke233 * `ReactComponent.Mixin.unmountComponent.call(this)`.234 *235 * @internal236 */237 unmountComponent: function() {238 invariant(239 this._lifeCycleState === ComponentLifeCycle.MOUNTED,240 'unmountComponent(): Can only unmount a mounted component.'241 );242 var props = this.props;243 if (props.ref != null) {244 ReactOwner.removeComponentAsRefFrom(this, props.ref, props[OWNER]);245 }246 this._rootNode = null;247 this._rootNodeID = null;248 this._lifeCycleState = ComponentLifeCycle.UNMOUNTED;249 },250 /**251 * Updates the rendered DOM nodes given a new set of props.252 *253 * Subclasses that override this method should make sure to invoke254 * `ReactComponent.Mixin.receiveProps.call(this, ...)`.255 *256 * @param {object} nextProps Next set of properties.257 * @param {ReactReconcileTransaction} transaction258 * @internal259 */260 receiveProps: function(nextProps, transaction) {261 invariant(262 this._lifeCycleState === ComponentLifeCycle.MOUNTED,263 'receiveProps(...): Can only update a mounted component.'264 );265 var props = this.props;266 // If either the owner or a `ref` has changed, make sure the newest owner267 // has stored a reference to `this`, and the previous owner (if different)268 // has forgotten the reference to `this`.269 if (nextProps[OWNER] !== props[OWNER] || nextProps.ref !== props.ref) {270 if (props.ref != null) {271 ReactOwner.removeComponentAsRefFrom(this, props.ref, props[OWNER]);272 }273 // Correct, even if the owner is the same, and only the ref has changed.274 if (nextProps.ref != null) {275 ReactOwner.addComponentAsRefTo(this, nextProps.ref, nextProps[OWNER]);276 }277 }278 },279 /**280 * Mounts this component and inserts it into the DOM.281 *282 * @param {string} rootID DOM ID of the root node.283 * @param {DOMElement} container DOM element to mount into.284 * @final285 * @internal286 * @see {ReactMount.renderComponent}287 */288 mountComponentIntoNode: function(rootID, container) {289 var transaction = ReactComponent.ReactReconcileTransaction.getPooled();290 transaction.perform(291 this._mountComponentIntoNode,292 this,293 rootID,294 container,295 transaction296 );297 ReactComponent.ReactReconcileTransaction.release(transaction);298 },299 /**300 * @param {string} rootID DOM ID of the root node.301 * @param {DOMElement} container DOM element to mount into.302 * @param {ReactReconcileTransaction} transaction303 * @final304 * @private305 */306 _mountComponentIntoNode: function(rootID, container, transaction) {307 var renderStart = Date.now();308 var markup = this.mountComponent(rootID, transaction);309 ReactMount.totalInstantiationTime += (Date.now() - renderStart);310 var injectionStart = Date.now();311 // Asynchronously inject markup by ensuring that the container is not in312 // the document when settings its `innerHTML`.313 var parent = container.parentNode;314 if (parent) {315 var next = container.nextSibling;316 parent.removeChild(container);317 container.innerHTML = markup;318 if (next) {319 parent.insertBefore(container, next);320 } else {321 parent.appendChild(container);322 }323 } else {324 container.innerHTML = markup;325 }326 ReactMount.totalInjectionTime += (Date.now() - injectionStart);327 },328 /**329 * Unmounts this component and removes it from the DOM.330 *331 * @param {DOMElement} container DOM element to unmount from.332 * @final333 * @internal334 * @see {ReactMount.unmountAndReleaseReactRootNode}335 */336 unmountComponentFromNode: function(container) {337 this.unmountComponent();338 // http://jsperf.com/emptying-a-node339 while (container.lastChild) {340 container.removeChild(container.lastChild);341 }342 },343 /**344 * Checks if this component is owned by the supplied `owner` component.345 *346 * @param {ReactComponent} owner Component to check.347 * @return {boolean} True if `owners` owns this component.348 * @final349 * @internal350 */351 isOwnedBy: function(owner) {352 return this.props[OWNER] === owner;353 }354 }355};356function logDeprecated(msg) {357 if (__DEV__) {358 throw new Error(msg);359 } else {360 console && console.warn && console.warn(msg);361 }362}363/**364 * @deprecated365 */366ReactComponent.Mixin.update = function(props) {367 logDeprecated('this.update() is deprecated. Use this.setProps()');368 this.setProps(props);369};370ReactComponent.Mixin.updateAll = function(props) {371 logDeprecated('this.updateAll() is deprecated. Use this.replaceProps()');372 this.replaceProps(props);373};...
ReactNativeComponent-test.js
Source:ReactNativeComponent-test.js
...26 beforeEach(function() {27 React = require('React');28 ReactTestUtils = require('ReactTestUtils');29 var ReactReconcileTransaction = require('ReactReconcileTransaction');30 transaction = new ReactReconcileTransaction();31 });32 it("should handle className", function() {33 var stub = ReactTestUtils.renderIntoDocument(<div style={{}} />);34 stub.receiveProps({ className: 'foo' }, transaction);35 expect(stub.getDOMNode().className).toEqual('foo');36 stub.receiveProps({ className: 'bar' }, transaction);37 expect(stub.getDOMNode().className).toEqual('bar');38 stub.receiveProps({ className: null }, transaction);39 expect(stub.getDOMNode().className).toEqual('');40 });41 it("should gracefully handle various style value types", function() {42 var stub = ReactTestUtils.renderIntoDocument(<div style={{}} />);43 var stubStyle = stub.getDOMNode().style;44 // set initial style45 var setup = { display: 'block', left: '1', top: 2, fontFamily: 'Arial' };46 stub.receiveProps({ style: setup }, transaction);47 expect(stubStyle.display).toEqual('block');48 expect(stubStyle.left).toEqual('1px');49 expect(stubStyle.fontFamily).toEqual('Arial');50 // reset the style to their default state51 var reset = { display: '', left: null, top: false, fontFamily: true };52 stub.receiveProps({ style: reset }, transaction);53 expect(stubStyle.display).toEqual('');54 expect(stubStyle.left).toEqual('');55 expect(stubStyle.top).toEqual('');56 expect(stubStyle.fontFamily).toEqual('');57 });58 it("should update styles when mutating style object", function() {59 var styles = { display: 'none', fontFamily: 'Arial' };60 var stub = ReactTestUtils.renderIntoDocument(<div style={styles} />);61 var stubStyle = stub.getDOMNode().style;62 stubStyle.display = styles.display;63 stubStyle.fontFamily = styles.fontFamily;64 styles.display = 'block';65 stub.receiveProps({ style: styles }, transaction);66 expect(stubStyle.display).toEqual('block');67 expect(stubStyle.fontFamily).toEqual('Arial');68 styles.fontFamily = 'Helvetica';69 stub.receiveProps({ style: styles }, transaction);70 expect(stubStyle.display).toEqual('block');71 expect(stubStyle.fontFamily).toEqual('Helvetica');72 });73 it("should update styles if initially null", function() {74 var styles = null;75 var stub = ReactTestUtils.renderIntoDocument(<div style={styles} />);76 var stubStyle = stub.getDOMNode().style;77 styles = {display: 'block'};78 stub.receiveProps({ style: styles }, transaction);79 expect(stubStyle.display).toEqual('block');80 });81 });82 describe('createOpenTagMarkup', function() {83 var genMarkup;84 function quoteRegexp(str) {85 return (str+'').replace(/([.?*+\^$\[\]\\(){}|-])/g, "\\$1");86 }87 beforeEach(function() {88 require('mock-modules').dumpCache();89 var mixInto = require('mixInto');90 var ReactNativeComponent = require('ReactNativeComponent');91 var NodeStub = function(initialProps) {92 this.props = initialProps || {};93 this._rootNodeID = 'test';94 };95 mixInto(NodeStub, ReactNativeComponent.Mixin);96 genMarkup = function(props) {97 return (new NodeStub(props))._createOpenTagMarkup();98 };99 this.addMatchers({100 toHaveAttribute: function(attr, value) {101 var expected = '(?:^|\\s)' + attr + '=[\\\'"]';102 if (typeof value != 'undefined') {103 expected += quoteRegexp(value) + '[\\\'"]';104 }105 return this.actual.match(new RegExp(expected));106 }107 });108 });109 it("should handle className", function() {110 expect(genMarkup({ className: 'a' })).toHaveAttribute('class', 'a');111 expect(genMarkup({ className: 'a b' })).toHaveAttribute('class', 'a b');112 expect(genMarkup({ className: '' })).toHaveAttribute('class', '');113 });114 });115 describe('createContentMarkup', function() {116 var genMarkup;117 function quoteRegexp(str) {118 return (str+'').replace(/([.?*+\^$\[\]\\(){}|-])/g, "\\$1");119 }120 beforeEach(function() {121 require('mock-modules').dumpCache();122 var mixInto = require('mixInto');123 var ReactNativeComponent = require('ReactNativeComponent');124 var ReactReconcileTransaction = require('ReactReconcileTransaction');125 var NodeStub = function(initialProps) {126 this.props = initialProps || {};127 this._rootNodeID = 'test';128 };129 mixInto(NodeStub, ReactNativeComponent.Mixin);130 genMarkup = function(props) {131 var transaction = new ReactReconcileTransaction();132 return (new NodeStub(props))._createContentMarkup(transaction);133 };134 this.addMatchers({135 toHaveInnerhtml: function(html) {136 var expected = '^' + quoteRegexp(html) + '$';137 return this.actual.match(new RegExp(expected));138 }139 });140 });141 it("should handle dangerouslySetInnerHTML", function() {142 var innerHTML = {__html: 'testContent'};143 expect(144 genMarkup({ dangerouslySetInnerHTML: innerHTML })145 ).toHaveInnerhtml('testContent');146 });147 });148 describe('mountComponent', function() {149 var mountComponent;150 beforeEach(function() {151 require('mock-modules').dumpCache();152 var mixInto = require('mixInto');153 var ReactComponent = require('ReactComponent');154 var ReactNativeComponent = require('ReactNativeComponent');155 var ReactReconcileTransaction = require('ReactReconcileTransaction');156 var NodeStub = function(initialProps) {157 ReactComponent.Mixin.construct.call(this, initialProps);158 };159 mixInto(NodeStub, ReactNativeComponent.Mixin);160 mountComponent = function(props) {161 var transaction = new ReactReconcileTransaction();162 return (new NodeStub(props)).mountComponent('test', transaction);163 };164 });165 it("should validate against multiple children props", function() {166 expect(function() {167 mountComponent({ content: '', children: '' });168 }).toThrow(169 'Invariant Violation: Can only set one of `children`, ' +170 '`props.content`, or `props.dangerouslySetInnerHTML`.'171 );172 expect(function() {173 mountComponent({ content: '', dangerouslySetInnerHTML: '' });174 }).toThrow(175 'Invariant Violation: Can only set one of `children`, ' +...
CompositeInternalComponent.js
Source:CompositeInternalComponent.js
1import BaseComponent from '../isomorphic/BaseComponent';2import internalComponentFactory from './internalComponentFactory';3import shouldUpdateInternalInstance from './shouldUpdateInternalInstance';4import componentInstanceMap from '../isomorphic/componentInstanceMap';5function StatelessComponent(Component) {6}7StatelessComponent.prototype.render = function () {8 const Component = componentInstanceMap.get(this)._currentReactElement.type;9 return Component(this.props);10};11function initializePublicComponent(type, props) {12 if (type.prototype instanceof BaseComponent) {13 return new type(props);14 } else {15 return new StatelessComponent(type);16 }17}18let nextMountID = 1;19export default class InternalComponent {20 constructor(reactElement) {21 this._currentContainer = null;22 this._currentReactElement = reactElement;23 this._currentPublicComponentInstance = null;24 this._currentChildInternalComponentInstance = null;25 this._pendingState = [];26 this._pendingCallbacks = [];27 // used to sort dirty components from up to bottom in order to optimise their update28 this._mountOrder = 0;29 }30 mount(reactReconcileTransaction, container, preserveChildren, insertBefore) {31 const {type, props} = this._currentReactElement;32 this._currentContainer = container;33 this._mountOrder = nextMountID++;34 const inst = this._currentPublicComponentInstance = initializePublicComponent(type, props);35 componentInstanceMap.set(inst, this);36 inst.props = props;37 inst.state = inst.state || {};38 this._prevState = inst.state;39 if (inst.componentWillMount) {40 inst.componentWillMount.call(inst);41 if (this._pendingState.length) {42 inst.state = this._processPendingState(inst.state);43 this._pendingState.length = 0;44 }45 }46 if (this._nextState) {47 inst.state = this._nextState;48 }49 const childReactElement = inst.render();50 this._currentChildInternalComponentInstance = internalComponentFactory.createInternalComponent(childReactElement);51 this._currentChildInternalComponentInstance.mount(reactReconcileTransaction, container, preserveChildren, insertBefore);52 if (inst.componentDidMount) {53 reactReconcileTransaction.getReactMountReady().enqueue(54 inst.componentDidMount,55 inst56 );57 }58 const ref = this._currentReactElement.props.ref;59 if (ref) {60 ref(this._currentPublicComponentInstance);61 }62 this._enqueueCallbacks(reactReconcileTransaction);63 }64 update(reactReconcileTransaction, nextReactElement) {65 const prevReactElement = this._currentReactElement;66 const nextProps = nextReactElement.props;67 const currentInst = this._currentPublicComponentInstance;68 this._prevState = currentInst.state;69 this._nextState = this._nextState || currentInst.state;70 const willReceive = nextReactElement !== prevReactElement;71 if (willReceive) {72 if (currentInst.componentWillReceiveProps) {73 currentInst.componentWillReceiveProps.call(currentInst, nextProps);74 }75 }76 if (this._pendingState.length) {77 this._nextState = this._processPendingState(this._currentPublicComponentInstance.state);78 }79 let shouldUpdate = currentInst.shouldComponentUpdate80 ? currentInst.shouldComponentUpdate.call(currentInst, nextProps, this._nextState)81 : true;82 if (shouldUpdate) {83 this._performUpdate(reactReconcileTransaction, prevReactElement, nextReactElement);84 }85 }86 updateIfNecessary(reactReconcileTransaction) {87 if (this._pendingState.length) {88 this._nextState = this._processPendingState();89 if (this._currentChildInternalComponentInstance) {90 this.update(reactReconcileTransaction, this._currentReactElement);91 }92 }93 }94 _enqueueCallbacks(reactReconcileTransaction) {95 if (this._pendingCallbacks.length) {96 const length = this._pendingCallbacks.length;97 for (let i = 0; i < length; i++) {98 reactReconcileTransaction.getReactMountReady().enqueue(99 this._pendingCallbacks[i],100 this._currentPublicComponentInstance101 );102 }103 this._pendingCallbacks.length = 0;104 }105 }106 _processPendingState(instState) {107 const pendingState = [].concat(this._pendingState);108 this._pendingState.length = 0;109 return pendingState.reduce((newState, partialState) => {110 return Object.assign({}, newState, partialState);111 }, instState);112 }113 _performUpdate(reactReconcileTransaction, prevReactElement, nextReactElement) {114 const nextProps = nextReactElement.props;115 const currentInst = this._currentPublicComponentInstance;116 let newChildReactElement;117 if (currentInst.componentWillUpdate) {118 currentInst.componentWillUpdate.call(currentInst, nextProps, this._nextState);119 }120 this._currentReactElement = nextReactElement;121 currentInst.state = this._nextState;122 currentInst.props = nextProps;123 newChildReactElement = currentInst.render();124 if (shouldUpdateInternalInstance(this._currentChildInternalComponentInstance._currentReactElement, newChildReactElement)) {125 this._currentChildInternalComponentInstance.update(reactReconcileTransaction, newChildReactElement);126 } else {127 this._currentChildInternalComponentInstance.unmount();128 this._currentChildInternalComponentInstance = internalComponentFactory.createInternalComponent(newChildReactElement);129 this._currentChildInternalComponentInstance.mount(reactReconcileTransaction, this._currentContainer);130 }131 if (currentInst.componentDidUpdate) {132 reactReconcileTransaction.getReactMountReady().enqueue(133 currentInst.componentDidUpdate,134 currentInst,135 prevReactElement.props,136 this._prevState137 );138 }139 this._enqueueCallbacks(reactReconcileTransaction);140 }141 unmount() {142 if (this._currentPublicComponentInstance.componentWillUnmount) {143 this._currentPublicComponentInstance.componentWillUnmount.call(this._currentPublicComponentInstance);144 }145 this._currentChildInternalComponentInstance.unmount();146 }...
ReactReconcileTransaction.js
Source:ReactReconcileTransaction.js
...102 * track of which dimensions must be remeasured.103 *104 * @class ReactReconcileTransaction105 */106function ReactReconcileTransaction() {107 this.reinitializeTransaction();108 this.reactOnDOMReady = ReactOnDOMReady.getPooled(null);109}110var Mixin = {111 /**112 * @see Transaction113 * @abstract114 * @final115 * @return {array<object>} List of operation wrap proceedures.116 * TODO: convert to array<TransactionWrapper>117 */118 getTransactionWrappers: function() {119 if (ExecutionEnvironment.canUseDOM) {120 return TRANSACTION_WRAPPERS;...
HostInternalComponent.js
Source:HostInternalComponent.js
1import internalComponentFactory from './internalComponentFactory';2import shouldUpdateInternalInstance from './shouldUpdateInternalInstance';3const RESERVED_PROPS = {4 children: true,5 ref: true6};7export default class HostInternalComponent {8 constructor(reactElement) {9 this._currentContainer = null;10 this._currentReactElement = reactElement;11 this._currentNode = null;12 }13 mount(reactReconcileTransaction, container, preserveChildren, insertBefore) {14 const {type, props} = this._currentReactElement;15 if (container.lastChild && !preserveChildren) {16 while (container.lastChild) {17 container.removeChild(container.lastChild);18 }19 }20 this._currentContainer = container;21 this._currentNode = document.createElement(type);22 if (props.children) {23 this._mountChildren(reactReconcileTransaction, props.children);24 }25 this._applyPropsToCurrentNode(props);26 this._insertNodeIntoContainer(insertBefore);27 const ref = this._currentReactElement.props.ref;28 if (ref) {29 ref(this._currentNode);30 }31 }32 update(reactReconcileTransaction, newReactElement) {33 const {props} = newReactElement;34 this._applyPropsToCurrentNode(props);35 if (props.children) {36 this._updateChildInstances(reactReconcileTransaction, props.children);37 }38 }39 unmount() {40 this._currentNode.remove();41 }42 _mountChildren(reactReconcileTransaction, children) {43 if (typeof children === 'string' || typeof children === 'number') {44 this._currentNode.textContent = children;45 } else {46 this._currentChildInternalComponentInstances = (Array.isArray(children) ? children : [children])47 .map((childReactElement) => internalComponentFactory.createInternalComponent(childReactElement));48 this._currentChildInternalComponentInstances.forEach((childInternalComponentInstance) => {49 childInternalComponentInstance.mount(reactReconcileTransaction, this._currentNode, true);50 });51 }52 }53 _insertNodeIntoContainer(insertBefore) {54 const currentNode = this._currentNode;55 const container = this._currentContainer;56 if (insertBefore !== undefined) {57 container.insertBefore(currentNode, container.children[insertBefore]);58 } else {59 container.appendChild(currentNode);60 }61 }62 _applyPropsToCurrentNode(props) {63 for (let propName in props) {64 if (props.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {65 this._currentNode[propName] = props[propName];66 }67 }68 }69 _updateChildInstances(reactReconcileTransaction, children) {70 if (typeof children === 'string' || typeof children === 'number') {71 this._currentNode.textContent = children;72 } else {73 const childReactElements = Array.isArray(children) ? children : [children];74 this._currentChildInternalComponentInstances.forEach((childInternalComponentInstance, i) => {75 const childReactElement = childReactElements[i];76 if (shouldUpdateInternalInstance(childInternalComponentInstance._currentReactElement, childReactElement)) {77 childInternalComponentInstance.update(reactReconcileTransaction, childReactElement);78 } else {79 this._currentChildInternalComponentInstances[i].unmount();80 const currentChildInternalInstance = this._currentChildInternalComponentInstances[i] = internalComponentFactory.createInternalComponent(childReactElement);81 currentChildInternalInstance.mount(reactReconcileTransaction, this._currentNode, true, i);82 }83 });84 }85 }...
ReactTestMount.js
Source:ReactTestMount.js
1/* */ 2(function(process) {3 'use strict';4 var _prodInvariant = require('./reactProdInvariant');5 var ReactElement = require('./ReactElement');6 var ReactReconciler = require('./ReactReconciler');7 var ReactUpdates = require('./ReactUpdates');8 var emptyObject = require('fbjs/lib/emptyObject');9 var getHostComponentFromComposite = require('./getHostComponentFromComposite');10 var instantiateReactComponent = require('./instantiateReactComponent');11 var invariant = require('fbjs/lib/invariant');12 var TopLevelWrapper = function() {};13 TopLevelWrapper.prototype.isReactComponent = {};14 if (process.env.NODE_ENV !== 'production') {15 TopLevelWrapper.displayName = 'TopLevelWrapper';16 }17 TopLevelWrapper.prototype.render = function() {18 return this.props;19 };20 function mountComponentIntoNode(componentInstance, transaction) {21 var image = ReactReconciler.mountComponent(componentInstance, transaction, null, null, emptyObject);22 componentInstance._renderedComponent._topLevelWrapper = componentInstance;23 return image;24 }25 function batchedMountComponentIntoNode(componentInstance) {26 var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();27 var image = transaction.perform(mountComponentIntoNode, null, componentInstance, transaction);28 ReactUpdates.ReactReconcileTransaction.release(transaction);29 return image;30 }31 var ReactTestInstance = function(component) {32 this._component = component;33 };34 ReactTestInstance.prototype.getInstance = function() {35 return this._component._renderedComponent.getPublicInstance();36 };37 ReactTestInstance.prototype.update = function(nextElement) {38 !this._component ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactTestRenderer: .update() can\'t be called after unmount.') : _prodInvariant('139') : void 0;39 var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);40 var component = this._component;41 ReactUpdates.batchedUpdates(function() {42 var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true);43 transaction.perform(function() {44 ReactReconciler.receiveComponent(component, nextWrappedElement, transaction, emptyObject);45 });46 ReactUpdates.ReactReconcileTransaction.release(transaction);47 });48 };49 ReactTestInstance.prototype.unmount = function(nextElement) {50 var component = this._component;51 ReactUpdates.batchedUpdates(function() {52 var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(true);53 transaction.perform(function() {54 ReactReconciler.unmountComponent(component, false);55 });56 ReactUpdates.ReactReconcileTransaction.release(transaction);57 });58 this._component = null;59 };60 ReactTestInstance.prototype.toJSON = function() {61 var inst = getHostComponentFromComposite(this._component);62 if (inst === null) {63 return null;64 }65 return inst.toJSON();66 };67 var ReactTestMount = {render: function(nextElement) {68 var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);69 var instance = instantiateReactComponent(nextWrappedElement, false);70 ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, instance);71 return new ReactTestInstance(instance);72 }};73 module.exports = ReactTestMount;...
ReactUpdates.js
Source:ReactUpdates.js
1"use strict";2function r() {3 g(T.ReactReconcileTransaction && _);4}5function o() {6 this.reinitializeTransaction();7 this.dirtyComponentsLength = null;8 this.callbackQueue = c.getPooled();9 this.reconcileTransaction = T.ReactReconcileTransaction.getPooled();10}11function i(e, t, n, o, i) {12 r();13 _.batchedUpdates(e, t, n, o, i);14}15function s(e, t) {16 return e._mountOrder - t._mountOrder;17}18function a(e) {19 var t = e.dirtyComponentsLength;20 g(t === v.length);21 v.sort(s);22 for (var n = 0; t > n; n++) {23 var r = v[n], o = r._pendingCallbacks;24 r._pendingCallbacks = null;25 h.performUpdateIfNecessary(r, e.reconcileTransaction);26 if (o) {27 for (var i = 0; i < o.length; i++) {28 e.callbackQueue.enqueue(o[i], r.getPublicInstance());29 }30 }31 }32}33function u(e) {34 r();35 if (_.isBatchingUpdates) {36 return void v.push(e);37 }38 return void _.batchedUpdates(u, e);39}40function l(e, t) {41 g(_.isBatchingUpdates);42 b.enqueue(e, t);43 y = true;44}45var c = require("./CallbackQueue"), p = require("./PooledClass"), d = (require("./ReactCurrentOwner"), 46require("./ReactPerf")), h = require("./ReactReconciler"), f = require("./Transaction"), m = require("./Object.assign"), g = require("./invariant"), v = (require("./warning"), 47[]), b = c.getPooled(), y = false, _ = null, w = {48 initialize: function() {49 this.dirtyComponentsLength = v.length;50 },51 close: function() {52 if (this.dirtyComponentsLength !== v.length) {53 v.splice(0, this.dirtyComponentsLength);54 C();55 } else {56 v.length = 0;57 }58 }59}, k = {60 initialize: function() {61 this.callbackQueue.reset();62 },63 close: function() {64 this.callbackQueue.notifyAll();65 }66}, x = [ w, k ];67m(o.prototype, f.Mixin, {68 getTransactionWrappers: function() {69 return x;70 },71 destructor: function() {72 this.dirtyComponentsLength = null;73 c.release(this.callbackQueue);74 this.callbackQueue = null;75 T.ReactReconcileTransaction.release(this.reconcileTransaction);76 this.reconcileTransaction = null;77 },78 perform: function(e, t, n) {79 return f.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, e, t, n);80 }81});82p.addPoolingTo(o);83var C = function() {84 for (;v.length || y; ) {85 if (v.length) {86 var e = o.getPooled();87 e.perform(a, null, e);88 o.release(e);89 }90 if (y) {91 y = false;92 var t = b;93 b = c.getPooled();94 t.notifyAll();95 c.release(t);96 }97 }98};99C = d.measure("ReactUpdates", "flushBatchedUpdates", C);100var E = {101 injectReconcileTransaction: function(e) {102 g(e);103 T.ReactReconcileTransaction = e;104 },105 injectBatchingStrategy: function(e) {106 g(e);107 g(typeof e.batchedUpdates == "function");108 g(typeof e.isBatchingUpdates == "boolean");109 _ = e;110 }111}, T = {112 ReactReconcileTransaction: null,113 batchedUpdates: i,114 enqueueUpdate: u,115 flushBatchedUpdates: C,116 injection: E,117 asap: l118};...
ReactDOM.js
Source:ReactDOM.js
...19 if (currentRootReactElement === reactElement) {20 return;21 }22 if (shouldUpdateInternalInstance(currentRootReactElement, reactElement)) {23 const reactReconcileTransaction = new ReactReconcileTransaction();24 reactReconcileTransaction.perform(mountedRootInternalComponent.update.bind(mountedRootInternalComponent), null, reactReconcileTransaction, reactElement);25 return getPublicInstance(mountedRootInternalComponent);26 } else {27 mountedRootInternalComponent.unmount();28 }29 }30 const rootInternalComponent = internalComponentFactory.createInternalComponent(reactElement);31 ReactBatchingStrategy.batchedUpdates(batchedMountComponent);32 container[reactComponentKey] = rootInternalComponent;33 return getPublicInstance(rootInternalComponent);34 function batchedMountComponent() {35 const reactReconcileTransaction = new ReactReconcileTransaction();36 reactReconcileTransaction.perform(rootInternalComponent.mount.bind(rootInternalComponent), null, reactReconcileTransaction, container);37 }38 }39};...
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright.chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.reactReconcileTransaction();7 await browser.close();8})();9const playwright = require('playwright');10(async () => {11 const browser = await playwright.chromium.launch();12 const context = await browser.newContext();13 const page = await context.newPage();14 await page.reactReconcileTransaction();15 await browser.close();16})();17const playwright = require('playwright');18(async () => {19 const browser = await playwright.chromium.launch();20 const context = await browser.newContext();21 const page = await context.newPage();22 await page.reactReconcileTransaction();23 await browser.close();24})();25const playwright = require('playwright');26(async () => {27 const browser = await playwright.chromium.launch();28 const context = await browser.newContext();29 const page = await context.newPage();30 await page.reactReconcileTransaction();31 await browser.close();32})();33const playwright = require('playwright');34(async () => {35 const browser = await playwright.chromium.launch();36 const context = await browser.newContext();37 const page = await context.newPage();38 await page.reactReconcileTransaction();39 await browser.close();40})();41const playwright = require('playwright');42(async () => {43 const browser = await playwright.chromium.launch();44 const context = await browser.newContext();45 const page = await context.newPage();46 await page.reactReconcileTransaction();47 await browser.close();48})();49const playwright = require('
Using AI Code Generation
1const { ReactReconcileTransaction } = require('playwright/lib/server/react');2const { ReactTestRenderer } = require('playwright/lib/server/reactTestRenderer');3const { ReactTestComponent } = require('playwright/lib/server/reactTestComponent');4const { ReactTestTextComponent } = require('playwright/lib/server/reactTestTextComponent');5const { ReactTestMount } = require('playwright/lib/server/reactTestMount');6const { ReactTestRendererAct } = require('playwright/lib/server/reactTestRendererAct');7const { ReactTestRendererActAsync } = require('playwright/lib/server/reactTestRendererActAsync');8const { ReactTestRendererActAsyncThrow } = require('playwright/lib/server/reactTestRendererActAsyncThrow');9const { ReactTestRendererActAsyncThrow2 } = require('playwright/lib/server/reactTestRendererActAsyncThrow2');10const { ReactTestRendererActAsyncThrow3 } = require('playwright/lib/server/reactTestRendererActAsyncThrow3');11const { ReactTestRendererActAsyncThrow4 } = require('playwright/lib/server/reactTestRendererActAsyncThrow4');12const { ReactTestRendererActAsyncThrow5 } = require('playwright/lib/server/reactTestRendererActAsyncThrow5');13const { ReactTestRendererActAsyncThrow6 } = require('playwright/lib/server/reactTestRendererActAsyncThrow6');14const { ReactTestRendererActAsyncThrow7 } = require('playwright/lib/server/reactTestRendererActAsyncThrow7');15const { ReactTestRendererActAsyncThrow8 } = require('playwright/lib/server/reactTestRendererActAsyncThrow8');16const { ReactTestRendererActAsyncThrow9 } = require('playwright/lib/server/reactTestRendererActAsyncThrow9');17const { ReactTestRendererActAsyncThrow10 } = require('playwright/lib/server/reactTestRendererActAsyncThrow10');18const { ReactTestRendererActAsyncThrow11 } = require('playwright/lib/server/reactTestRendererActAsyncThrow11');19const { ReactTestRendererActAsyncThrow12 } = require('playwright/lib/server/reactTestRendererActAsyncThrow12');20const { ReactTestRendererActAsyncThrow13 } = require('playwright/lib/server/reactTestRendererActAsyncThrow13');21const { ReactTestRendererActAsyncThrow14 } = require('playwright/lib/server/reactTestRendererActAsyncThrow14');22const { ReactTestRendererActAsyncThrow15 } = require('playwright/lib/server/reactTestRendererActAsync
Using AI Code Generation
1const { ReactReconcileTransaction } = require("@playwright/test/lib/react");2const { React } = require("@playwright/test/lib/react");3const { createReactRoot } = require("@playwright/test/lib/react");4const { ReactTestRoot } = require("@playwright/test/lib/react");5const { ReactTestRenderer } = require("@playwright/test/lib/react");6const { ReactTestComponent } = require("@playwright/test/lib/react");7const { ReactReconcileTransaction } = require("@playwright/test/lib/react");8const { React } = require("@playwright/test/lib/react");9const { ReactReconcileTransaction } = require("@playwright/test/lib/react");10const { React } = require("@playwright/test/lib/react");11const { ReactReconcileTransaction } = require("@playwright/test/lib/react");12const { React } = require("@playwright/test/lib/react");13const { ReactReconcileTransaction } = require("@playwright/test/lib/react");14const { React } = require("@playwright/test/lib/react");15const { ReactReconcileTransaction } = require("@playwright/test/lib/react");16const { React } = require("@playwright/test/lib/react");17const { ReactReconcileTransaction } = require("@playwright/test/lib/react");18const { React } = require("@playwright/test/lib/react");19const { ReactReconcileTransaction } = require("@playwright/test/lib/react");20const { React } = require("@playwright/test/lib/react");21const { ReactReconcileTransaction } = require("@playwright/test/lib/react");22const { React } = require("@playwright/test/lib/react");23const { ReactReconcileTransaction } = require("@playwright/test/lib/react");24const { React } = require
Using AI Code Generation
1import { ReactReconcileTransaction } from "playwright/lib/server/dom.js";2const transaction = new ReactReconcileTransaction();3const element = document.createElement("div");4transaction.perform(() => {5 element.textContent = "Hello World";6});7const transaction = new ReactReconcileTransaction();8const element = document.createElement("div");9transaction.perform(() => {10 element.textContent = "Hello World";11});12const transaction = new ReactReconcileTransaction();13const element = document.createElement("div");14transaction.perform(() => {15 element.textContent = "Hello World";16});
Using AI Code Generation
1const playwright = require("playwright");2const { ReactReconcileTransaction } = require("playwright/lib/server/react");3const { createReactRenderer } = require("playwright/lib/server/reactRenderer");4const { chromium } = playwright;5const createReactRenderer = async () => {6 const browser = await chromium.launch();7 const page = await browser.newPage();8 const { context, renderer } = await createReactRenderer(page);9 return { context, renderer };10};11const reactReconcileTransaction = async () => {12 const { context, renderer } = await createReactRenderer();13 const transaction = new ReactReconcileTransaction(renderer);14 transaction.perform(() => {15 const element = context.createElement("div");16 context.appendChild(element);17 });18};19reactReconcileTransaction();
Using AI Code Generation
1const { ReactReconcileTransaction } = require('playwright');2const transaction = new ReactReconcileTransaction();3transaction.perform(() => {4});5await transaction.flush();6await transaction.close();
Using AI Code Generation
1const {ReactReconcileTransaction} = require('playwright');2const {chromium} = require('playwright');3async function main() {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const reactReconcileTransaction = new ReactReconcileTransaction(page);8 await reactReconcileTransaction.flush();9 await page.screenshot({path: 'example.png'});10 await browser.close();11}12main();13const {test, expect} = require('@playwright/test');14test('should render', async ({page}) => {15 const reactReconcileTransaction = new ReactReconcileTransaction(page);16 await reactReconcileTransaction.flush();17 const rendered = await page.$('div');18 expect(rendered).toBeTruthy();19});
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!