Files
yoga/gentest/gentest-javascript.js

233 lines
7.2 KiB
JavaScript
Raw Normal View History

/**
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
var JavascriptEmitter = function() {
Emitter.call(this, 'js', ' ');
};
function toJavascriptUpper(symbol) {
var out = '';
for (var i = 0; i < symbol.length; i++) {
var c = symbol[i];
if (c == c.toUpperCase() && i != 0 && symbol[i - 1] != symbol[i - 1].toUpperCase()) {
out += '_';
}
out += c.toUpperCase();
}
return out;
}
JavascriptEmitter.prototype = Object.create(Emitter.prototype, {
constructor:{value:JavascriptEmitter},
emitPrologue:{value:function() {
this.push([
'var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY);',
''
]);
}},
emitTestPrologue:{value:function(name, experiments) {
this.push('it(' + JSON.stringify(name) + ', function () {');
this.pushIndent();
if (experiments.length > 0) {
for (var i in experiments) {
this.push('Yoga.setExperimentalFeatureEnabled(Yoga.FEATURE_' + toJavascriptUpper(experiments[i]) + ', true);');
}
this.push('');
}
}},
emitTestTreePrologue:{value:function(nodeName) {
this.push('var ' + nodeName + ' = Yoga.Node.create();');
}},
emitTestEpilogue:{value:function(experiments) {
this.push('');
this.push('if (typeof root !== "undefined")');
this.pushIndent();
this.push('root.freeRecursive();');
this.popIndent();
this.push('');
this.push('(typeof gc !== "undefined") && gc();');
this.AssertEQ('0', 'Yoga.getInstanceCount()');
if (experiments.length > 0) {
this.push('');
for (var i in experiments) {
this.push('Yoga.setExperimentalFeatureEnabled(Yoga.FEATURE_' + toJavascriptUpper(experiments[i]) + ', false);');
}
}
this.popIndent();
this.push('});');
}},
emitEpilogue:{value:function () {
this.push('');
}},
AssertEQ:{value:function(v0, v1) {
this.push('console.assert(' + v0 + ' === ' + v1 + ', "' + v0 + ' === ' + v1 + ' (" + ' + v1 + ' + ")");');
}},
YGAlignAuto:{value:'Yoga.ALIGN_AUTO'},
YGAlignCenter:{value:'Yoga.ALIGN_CENTER'},
YGAlignFlexEnd:{value:'Yoga.ALIGN_FLEX_END'},
YGAlignFlexStart:{value:'Yoga.ALIGN_FLEX_START'},
YGAlignStretch:{value:'Yoga.ALIGN_STRETCH'},
YGDirectionInherit:{value:'Yoga.DIRECTION_INHERIT'},
YGDirectionLTR:{value:'Yoga.DIRECTION_LTR'},
YGDirectionRTL:{value:'Yoga.DIRECTION_RTL'},
YGEdgeBottom:{value:'Yoga.EDGE_BOTTOM'},
YGEdgeEnd:{value:'Yoga.EDGE_END'},
YGEdgeLeft:{value:'Yoga.EDGE_LEFT'},
YGEdgeRight:{value:'Yoga.EDGE_RIGHT'},
YGEdgeStart:{value:'Yoga.EDGE_START'},
YGEdgeTop:{value:'Yoga.EDGE_TOP'},
YGFlexDirectionColumn:{value:'Yoga.FLEX_DIRECTION_COLUMN'},
YGFlexDirectionColumnReverse:{value:'Yoga.FLEX_DIRECTION_COLUMN_REVERSE'},
YGFlexDirectionRow:{value:'Yoga.FLEX_DIRECTION_ROW'},
YGFlexDirectionRowReverse:{value:'Yoga.FLEX_DIRECTION_ROW_REVERSE'},
YGJustifyCenter:{value:'Yoga.JUSTIFY_CENTER'},
YGJustifyFlexEnd:{value:'Yoga.JUSTIFY_FLEX_END'},
YGJustifyFlexStart:{value:'Yoga.JUSTIFY_FLEX_START'},
YGJustifySpaceAround:{value:'Yoga.JUSTIFY_SPACE_AROUND'},
YGJustifySpaceBetween:{value:'Yoga.JUSTIFY_SPACE_BETWEEN'},
YGOverflowHidden:{value:'Yoga.OVERFLOW_HIDDEN'},
YGOverflowVisible:{value:'Yoga.OVERFLOW_VISIBLE'},
YGPositionTypeAbsolute:{value:'Yoga.POSITION_TYPE_ABSOLUTE'},
YGPositionTypeRelative:{value:'Yoga.POSITION_TYPE_RELATIVE'},
YGWrapNoWrap:{value:'Yoga.WRAP_NO_WRAP'},
YGWrapWrap:{value:'Yoga.WRAP_WRAP'},
YGUndefined:{value:'Yoga.UNDEFINED'},
YGNodeCalculateLayout:{value:function(node, dir) {
this.push(node + '.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, ' + dir + ');');
}},
YGNodeInsertChild:{value:function(parentName, nodeName, index) {
this.push(parentName + '.insertChild(' + nodeName + ', ' + index + ');');
}},
YGNodeLayoutGetLeft:{value:function(nodeName) {
return nodeName + '.getComputedLeft()';
}},
YGNodeLayoutGetTop:{value:function(nodeName) {
return nodeName + '.getComputedTop()';
}},
YGNodeLayoutGetWidth:{value:function(nodeName) {
return nodeName + '.getComputedWidth()';
}},
YGNodeLayoutGetHeight:{value:function(nodeName) {
return nodeName + '.getComputedHeight()';
}},
YGNodeStyleSetAlignContent:{value:function(nodeName, value) {
this.push(nodeName + '.setAlignContent(' + value + ');');
}},
YGNodeStyleSetAlignItems:{value:function(nodeName, value) {
this.push(nodeName + '.setAlignItems(' + value + ');');
}},
YGNodeStyleSetAlignSelf:{value:function(nodeName, value) {
this.push(nodeName + '.setAlignSelf(' + value + ');');
}},
YGNodeStyleSetBorder:{value:function(nodeName, edge, value) {
this.push(nodeName + '.setBorder(' + edge + ', ' + value + ');');
}},
YGNodeStyleSetDirection:{value:function(nodeName, value) {
this.push(nodeName + '.setDirection(' + value + ');');
}},
YGNodeStyleSetFlexBasis:{value:function(nodeName, value) {
this.push(nodeName + '.setFlexBasis(' + value + ');');
}},
YGNodeStyleSetFlexDirection:{value:function(nodeName, value) {
this.push(nodeName + '.setFlexDirection(' + value + ');');
}},
YGNodeStyleSetFlexGrow:{value:function(nodeName, value) {
this.push(nodeName + '.setFlexGrow(' + value + ');');
}},
YGNodeStyleSetFlexShrink:{value:function(nodeName, value) {
this.push(nodeName + '.setFlexShrink(' + value + ');');
}},
YGNodeStyleSetFlexWrap:{value:function(nodeName, value) {
this.push(nodeName + '.setFlexWrap(' + value + ');');
}},
YGNodeStyleSetHeight:{value:function(nodeName, value) {
this.push(nodeName + '.setHeight(' + value + ');');
}},
YGNodeStyleSetJustifyContent:{value:function(nodeName, value) {
this.push(nodeName + '.setJustifyContent(' + value + ');');
}},
YGNodeStyleSetMargin:{value:function(nodeName, edge, value) {
this.push(nodeName + '.setMargin(' + edge + ', ' + value + ');');
}},
YGNodeStyleSetMaxHeight:{value:function(nodeName, value) {
this.push(nodeName + '.setMaxHeight(' + value + ');');
}},
YGNodeStyleSetMaxWidth:{value:function(nodeName, value) {
this.push(nodeName + '.setMaxWidth(' + value + ');');
}},
YGNodeStyleSetMinHeight:{value:function(nodeName, value) {
this.push(nodeName + '.setMinHeight(' + value + ');');
}},
YGNodeStyleSetMinWidth:{value:function(nodeName, value) {
this.push(nodeName + '.setMinWidth(' + value + ');');
}},
YGNodeStyleSetOverflow:{value:function(nodeName, value) {
this.push(nodeName + '.setOverflow(' + value + ');');
}},
YGNodeStyleSetPadding:{value:function(nodeName, edge, value) {
this.push(nodeName + '.setPadding(' + edge + ', ' + value + ');');
}},
YGNodeStyleSetPosition:{value:function(nodeName, edge, value) {
this.push(nodeName + '.setPosition(' + edge + ', ' + value + ');');
}},
YGNodeStyleSetPositionType:{value:function(nodeName, value) {
this.push(nodeName + '.setPositionType(' + value + ');');
}},
YGNodeStyleSetWidth:{value:function(nodeName, value) {
this.push(nodeName + '.setWidth(' + value + ');');
}},
});