gentest/gentest-java.js (224 lines of code) (raw):

/** * 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. */ function toValueJava(value) { var n = value.toString().replace('px','').replace('%',''); return n + (Number(n) == n && n % 1 !== 0 ? '' : ''); } function toMethodName(value) { if (value.indexOf('%') >= 0){ return 'Percent'; } else if(value.indexOf('AUTO') >= 0) { return 'Auto'; } return ''; } var JavaEmitter = function() { Emitter.call(this, 'java', ' '); }; function toJavaUpper(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; } JavaEmitter.prototype = Object.create(Emitter.prototype, { constructor:{value:JavaEmitter}, emitPrologue:{value:function() { this.push([ 'package com.facebook.yoga;', '', 'import static org.junit.Assert.assertEquals;', '', 'import org.junit.Test;', 'import org.junit.runner.RunWith;', 'import org.junit.runners.Parameterized;', '', '@RunWith(Parameterized.class)', 'public class YogaTest {', ]); this.pushIndent(); this.push([ '@Parameterized.Parameters(name = "{0}")', 'public static Iterable<TestParametrization.NodeFactory> nodeFactories() {', ]); this.pushIndent(); this.push('return TestParametrization.nodeFactories();'); this.popIndent(); this.push('}'); this.push([ '', '@Parameterized.Parameter public TestParametrization.NodeFactory mNodeFactory;', '', ]); }}, emitTestPrologue:{value:function(name, experiments) { this.push('@Test'); this.push('public void test_' + name + '() {'); this.pushIndent(); this.push("YogaConfig config = YogaConfigFactory.create();") for (var i in experiments) { this.push('config.setExperimentalFeatureEnabled(YogaExperimentalFeature.' + toJavaUpper(experiments[i]) +', true);'); } this.push(''); }}, emitTestTreePrologue:{value:function(nodeName) { this.push('final YogaNode ' + nodeName + ' = createNode(config);'); }}, emitTestEpilogue:{value:function(experiments) { this.popIndent(); this.push([ '}', '', ]); }}, emitEpilogue:{value:function(lines) { this.push('private YogaNode createNode(YogaConfig config) {'); this.pushIndent(); this.push('return mNodeFactory.create(config);'); this.popIndent(); this.push('}'); this.popIndent(); this.push([ '}', '', ]); }}, AssertEQ:{value:function(v0, v1) { this.push('assertEquals(' + v0 + 'f, ' + v1 + ', 0.0f);'); }}, YGAlignAuto:{value:'YogaAlign.AUTO'}, YGAlignCenter:{value:'YogaAlign.CENTER'}, YGAlignFlexEnd:{value:'YogaAlign.FLEX_END'}, YGAlignFlexStart:{value:'YogaAlign.FLEX_START'}, YGAlignStretch:{value:'YogaAlign.STRETCH'}, YGAlignSpaceBetween:{value:'YogaAlign.SPACE_BETWEEN'}, YGAlignSpaceAround:{value:'YogaAlign.SPACE_AROUND'}, YGAlignBaseline:{value:'YogaAlign.BASELINE'}, YGDirectionInherit:{value:'YogaDirection.INHERIT'}, YGDirectionLTR:{value:'YogaDirection.LTR'}, YGDirectionRTL:{value:'YogaDirection.RTL'}, YGEdgeBottom:{value:'YogaEdge.BOTTOM'}, YGEdgeEnd:{value:'YogaEdge.END'}, YGEdgeLeft:{value:'YogaEdge.LEFT'}, YGEdgeRight:{value:'YogaEdge.RIGHT'}, YGEdgeStart:{value:'YogaEdge.START'}, YGEdgeTop:{value:'YogaEdge.TOP'}, YGFlexDirectionColumn:{value:'YogaFlexDirection.COLUMN'}, YGFlexDirectionColumnReverse:{value:'YogaFlexDirection.COLUMN_REVERSE'}, YGFlexDirectionRow:{value:'YogaFlexDirection.ROW'}, YGFlexDirectionRowReverse:{value:'YogaFlexDirection.ROW_REVERSE'}, YGJustifyCenter:{value:'YogaJustify.CENTER'}, YGJustifyFlexEnd:{value:'YogaJustify.FLEX_END'}, YGJustifyFlexStart:{value:'YogaJustify.FLEX_START'}, YGJustifySpaceAround:{value:'YogaJustify.SPACE_AROUND'}, YGJustifySpaceBetween:{value:'YogaJustify.SPACE_BETWEEN'}, YGJustifySpaceEvenly:{value:'YogaJustify.SPACE_EVENLY'}, YGOverflowHidden:{value:'YogaOverflow.HIDDEN'}, YGOverflowVisible:{value:'YogaOverflow.VISIBLE'}, YGPositionTypeAbsolute:{value:'YogaPositionType.ABSOLUTE'}, YGPositionTypeRelative:{value:'YogaPositionType.RELATIVE'}, YGUndefined:{value:'YogaConstants.UNDEFINED'}, YGDisplayFlex:{value:'YogaDisplay.FLEX'}, YGDisplayNone:{value:'YogaDisplay.NONE'}, YGAuto:{value:'YogaConstants.AUTO'}, YGWrapNoWrap:{value:'YogaWrap.NO_WRAP'}, YGWrapWrap:{value:'YogaWrap.WRAP'}, YGWrapWrapReverse:{value: 'YogaWrap.WRAP_REVERSE'}, YGNodeCalculateLayout:{value:function(node, dir, experiments) { this.push(node + '.setDirection(' + dir + ');'); this.push(node + '.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);'); }}, YGNodeInsertChild:{value:function(parentName, nodeName, index) { this.push(parentName + '.addChildAt(' + nodeName + ', ' + index + ');'); }}, YGNodeLayoutGetLeft:{value:function(nodeName) { return nodeName + '.getLayoutX()'; }}, YGNodeLayoutGetTop:{value:function(nodeName) { return nodeName + '.getLayoutY()'; }}, YGNodeLayoutGetWidth:{value:function(nodeName) { return nodeName + '.getLayoutWidth()'; }}, YGNodeLayoutGetHeight:{value:function(nodeName) { return nodeName + '.getLayoutHeight()'; }}, YGNodeStyleSetAlignContent:{value:function(nodeName, value) { this.push(nodeName + '.setAlignContent(' + toValueJava(value) + ');'); }}, YGNodeStyleSetAlignItems:{value:function(nodeName, value) { this.push(nodeName + '.setAlignItems(' + toValueJava(value) + ');'); }}, YGNodeStyleSetAlignSelf:{value:function(nodeName, value) { this.push(nodeName + '.setAlignSelf(' + toValueJava(value) + ');'); }}, YGNodeStyleSetBorder:{value:function(nodeName, edge, value) { this.push(nodeName + '.setBorder(' + edge + ', ' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetDirection:{value:function(nodeName, value) { this.push(nodeName + '.setDirection(' + toValueJava(value) + ');'); }}, YGNodeStyleSetDisplay:{value:function(nodeName, value) { this.push(nodeName + '.setDisplay(' + toValueJava(value) + ');'); }}, YGNodeStyleSetFlexBasis:{value:function(nodeName, value) { this.push(nodeName + '.setFlexBasis' + toMethodName(value) + '(' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetFlexDirection:{value:function(nodeName, value) { this.push(nodeName + '.setFlexDirection(' + toValueJava(value) + ');'); }}, YGNodeStyleSetFlexGrow:{value:function(nodeName, value) { this.push(nodeName + '.setFlexGrow(' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetFlexShrink:{value:function(nodeName, value) { this.push(nodeName + '.setFlexShrink(' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetFlexWrap:{value:function(nodeName, value) { this.push(nodeName + '.setWrap(' + toValueJava(value) + ');'); }}, YGNodeStyleSetHeight:{value:function(nodeName, value) { this.push(nodeName + '.setHeight' + toMethodName(value) + '(' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetJustifyContent:{value:function(nodeName, value) { this.push(nodeName + '.setJustifyContent(' + toValueJava(value) + ');'); }}, YGNodeStyleSetMargin:{value:function(nodeName, edge, value) { var valueStr = toValueJava(value); if (valueStr != 'YogaConstants.AUTO') { valueStr = ', ' + valueStr + 'f'; } else { valueStr = ''; } this.push(nodeName + '.setMargin' + toMethodName(value) + '(' + edge + valueStr + ');'); }}, YGNodeStyleSetMaxHeight:{value:function(nodeName, value) { this.push(nodeName + '.setMaxHeight' + toMethodName(value) + '(' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetMaxWidth:{value:function(nodeName, value) { this.push(nodeName + '.setMaxWidth' + toMethodName(value) + '(' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetMinHeight:{value:function(nodeName, value) { this.push(nodeName + '.setMinHeight' + toMethodName(value) + '(' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetMinWidth:{value:function(nodeName, value) { this.push(nodeName + '.setMinWidth' + toMethodName(value) + '(' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetOverflow:{value:function(nodeName, value) { this.push(nodeName + '.setOverflow(' + toValueJava(value) + ');'); }}, YGNodeStyleSetPadding:{value:function(nodeName, edge, value) { this.push(nodeName + '.setPadding' + toMethodName(value) + '(' + edge + ', ' + toValueJava(value) + ');'); }}, YGNodeStyleSetPosition:{value:function(nodeName, edge, value) { this.push(nodeName + '.setPosition' + toMethodName(value) + '(' + edge + ', ' + toValueJava(value) + 'f);'); }}, YGNodeStyleSetPositionType:{value:function(nodeName, value) { this.push(nodeName + '.setPositionType(' + toValueJava(value) + ');'); }}, YGNodeStyleSetWidth:{value:function(nodeName, value) { this.push(nodeName + '.setWidth' + toMethodName(value) + '(' + toValueJava(value) + 'f);'); }}, });