From a02176e2ec8dd8ee31d4f8160e75c50ab0940e85 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Wed, 14 Aug 2019 15:29:36 -0700 Subject: [PATCH] Add support for `Double` prop type Summary: Support a prop-type `Double`, in addition to `Float`, for flow typing and codegen of components. Reviewed By: TheSavior Differential Revision: D16812812 fbshipit-source-id: b5588b3218636283a4e9c5d17212dd0b92986eb9 --- .../react-native-codegen/src/CodegenSchema.js | 5 ++ .../src/generators/components/CppHelpers.js | 3 + .../generators/components/GeneratePropsH.js | 10 ++- .../components/GeneratePropsJavaDelegate.js | 10 +++ .../components/GeneratePropsJavaInterface.js | 4 ++ .../components/GenerateViewConfigJs.js | 1 + .../components/__test_fixtures__/fixtures.js | 70 +++++++++++++++++++ .../GenerateComponentDescriptorH-test.js.snap | 26 +++++++ .../GenerateComponentHObjCpp-test.js.snap | 23 ++++++ .../GenerateEventEmitterCpp-test.js.snap | 23 ++++++ .../GenerateEventEmitterH-test.js.snap | 24 +++++++ .../GeneratePropsCpp-test.js.snap | 34 +++++++++ .../__snapshots__/GeneratePropsH-test.js.snap | 37 ++++++++++ .../GeneratePropsJavaDelegate-test.js.snap | 45 ++++++++++++ .../GeneratePropsJavaInterface-test.js.snap | 19 +++++ .../GenerateShadowNodeCpp-test.js.snap | 23 ++++++ .../GenerateShadowNodeH-test.js.snap | 33 +++++++++ .../__snapshots__/GenerateTests-test.js.snap | 28 ++++++++ .../GenerateViewConfigJs-test.js.snap | 40 +++++++++++ .../generators/modules/GenerateModuleMm.js | 1 + 20 files changed, 457 insertions(+), 2 deletions(-) diff --git a/packages/react-native-codegen/src/CodegenSchema.js b/packages/react-native-codegen/src/CodegenSchema.js index bc7499f6764..b724556c91a 100644 --- a/packages/react-native-codegen/src/CodegenSchema.js +++ b/packages/react-native-codegen/src/CodegenSchema.js @@ -87,6 +87,10 @@ type PropTypeTypeAnnotation = type: 'StringTypeAnnotation', default: string | null, |}> + | $ReadOnly<{| + type: 'DoubleTypeAnnotation', + default: number, + |}> | $ReadOnly<{| type: 'FloatTypeAnnotation', default: number, @@ -148,6 +152,7 @@ export type PrimitiveTypeAnnotationType = | 'StringTypeAnnotation' | 'NumberTypeAnnotation' | 'Int32TypeAnnotation' + | 'DoubleTypeAnnotation' | 'FloatTypeAnnotation' | 'BooleanTypeAnnotation' | 'GenericObjectTypeAnnotation'; diff --git a/packages/react-native-codegen/src/generators/components/CppHelpers.js b/packages/react-native-codegen/src/generators/components/CppHelpers.js index 68151b18e52..95d9a70eb3f 100644 --- a/packages/react-native-codegen/src/generators/components/CppHelpers.js +++ b/packages/react-native-codegen/src/generators/components/CppHelpers.js @@ -27,6 +27,7 @@ function getCppTypeForAnnotation( | 'BooleanTypeAnnotation' | 'StringTypeAnnotation' | 'Int32TypeAnnotation' + | 'DoubleTypeAnnotation' | 'FloatTypeAnnotation', ): string { switch (type) { @@ -36,6 +37,8 @@ function getCppTypeForAnnotation( return 'std::string'; case 'Int32TypeAnnotation': return 'int'; + case 'DoubleTypeAnnotation': + return 'double'; case 'FloatTypeAnnotation': return 'Float'; default: diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsH.js b/packages/react-native-codegen/src/generators/components/GeneratePropsH.js index 0c81b68d7c7..1586646ff31 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsH.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsH.js @@ -143,6 +143,7 @@ function getNativeTypeFromAnnotation(componentName: string, prop): string { case 'BooleanTypeAnnotation': case 'StringTypeAnnotation': case 'Int32TypeAnnotation': + case 'DoubleTypeAnnotation': case 'FloatTypeAnnotation': return getCppTypeForAnnotation(typeAnnotation.type); case 'NativePrimitiveTypeAnnotation': @@ -200,9 +201,14 @@ function convertDefaultTypeToString(componentName: string, prop): string { return `"${typeAnnotation.default}"`; case 'Int32TypeAnnotation': return String(typeAnnotation.default); + case 'DoubleTypeAnnotation': + const defaultDoubleVal = typeAnnotation.default; + return parseInt(defaultDoubleVal, 10) === defaultDoubleVal + ? typeAnnotation.default.toFixed(1) + : String(typeAnnotation.default); case 'FloatTypeAnnotation': - const defaultVal = typeAnnotation.default; - return parseInt(defaultVal, 10) === defaultVal + const defaultFloatVal = typeAnnotation.default; + return parseInt(defaultFloatVal, 10) === defaultFloatVal ? typeAnnotation.default.toFixed(1) : String(typeAnnotation.default); case 'NativePrimitiveTypeAnnotation': diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js index 103db21f044..16eb1a4599e 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaDelegate.js @@ -66,6 +66,14 @@ function getJavaValueForProp( return `value == null ? ${ typeAnnotation.default } : ((Double) value).intValue()`; + case 'DoubleTypeAnnotation': + if (prop.optional) { + return `value == null ? ${ + typeAnnotation.default + }f : ((Double) value).doubleValue()`; + } else { + return 'value == null ? Double.NaN : ((Double) value).doubleValue()'; + } case 'FloatTypeAnnotation': if (prop.optional) { return `value == null ? ${ @@ -129,6 +137,8 @@ function getCommandArgJavaType(param) { switch (param.typeAnnotation.type) { case 'BooleanTypeAnnotation': return 'getBoolean'; + case 'DoubleTypeAnnotation': + return 'getDouble'; case 'FloatTypeAnnotation': return 'getFloat'; case 'Int32TypeAnnotation': diff --git a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js index 27810a54ad1..64360d7dc85 100644 --- a/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js +++ b/packages/react-native-codegen/src/generators/components/GeneratePropsJavaInterface.js @@ -46,6 +46,8 @@ function getJavaValueForProp(prop: PropTypeShape, imports): string { return '@Nullable String value'; case 'Int32TypeAnnotation': return 'int value'; + case 'DoubleTypeAnnotation': + return 'double value'; case 'FloatTypeAnnotation': return 'float value'; case 'NativePrimitiveTypeAnnotation': @@ -98,6 +100,8 @@ function getCommandArgJavaType(param) { switch (param.typeAnnotation.type) { case 'BooleanTypeAnnotation': return 'boolean'; + case 'DoubleTypeAnnotation': + return 'double'; case 'FloatTypeAnnotation': return 'float'; case 'Int32TypeAnnotation': diff --git a/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js b/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js index 236aa1cbcee..3377d07f552 100644 --- a/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js +++ b/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js @@ -43,6 +43,7 @@ function getReactDiffProcessValue(typeAnnotation) { case 'BooleanTypeAnnotation': case 'StringTypeAnnotation': case 'Int32TypeAnnotation': + case 'DoubleTypeAnnotation': case 'FloatTypeAnnotation': case 'ObjectTypeAnnotation': case 'StringEnumTypeAnnotation': diff --git a/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js b/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js index 159988cdbc7..53fed00dc25 100644 --- a/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js +++ b/packages/react-native-codegen/src/generators/components/__test_fixtures__/fixtures.js @@ -323,6 +323,75 @@ const FLOAT_PROPS: SchemaType = { }, }; +const DOUBLE_PROPS: SchemaType = { + modules: { + Switch: { + components: { + DoublePropNativeComponent: { + extendsProps: [ + { + type: 'ReactNativeBuiltInType', + knownTypeName: 'ReactNativeCoreViewProps', + }, + ], + events: [], + props: [ + { + name: 'blurRadius', + optional: false, + typeAnnotation: { + type: 'DoubleTypeAnnotation', + default: 0.0, + }, + }, + { + name: 'blurRadius2', + optional: true, + typeAnnotation: { + type: 'DoubleTypeAnnotation', + default: 0.001, + }, + }, + { + name: 'blurRadius3', + optional: true, + typeAnnotation: { + type: 'DoubleTypeAnnotation', + default: 2.1, + }, + }, + { + name: 'blurRadius4', + optional: true, + typeAnnotation: { + type: 'DoubleTypeAnnotation', + default: 0, + }, + }, + { + name: 'blurRadius5', + optional: true, + typeAnnotation: { + type: 'DoubleTypeAnnotation', + default: 1, + }, + }, + { + name: 'blurRadius6', + optional: true, + typeAnnotation: { + type: 'DoubleTypeAnnotation', + default: -0.0, + }, + }, + ], + commands: [], + }, + }, + }, + }, +}; + const COLOR_PROP: SchemaType = { modules: { Switch: { @@ -1153,6 +1222,7 @@ module.exports = { BOOLEAN_PROP, STRING_PROP, INTEGER_PROPS, + DOUBLE_PROPS, FLOAT_PROPS, COLOR_PROP, IMAGE_PROP, diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateComponentDescriptorH-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateComponentDescriptorH-test.js.snap index d7de3d32aa9..efbb916a117 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateComponentDescriptorH-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateComponentDescriptorH-test.js.snap @@ -130,6 +130,32 @@ using CommandNativeComponentComponentDescriptor = ConcreteComponentDescriptor " +/** + * 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. + */ + +#pragma once + +#include +#include + +namespace facebook { +namespace react { + +using DoublePropNativeComponentComponentDescriptor = ConcreteComponentDescriptor; + +} // namespace react +} // namespace facebook +", +} +`; + exports[`GenerateComponentDescriptorH can generate fixture ENUM_PROP 1`] = ` Map { "ComponentDescriptors.h" => " diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateComponentHObjCpp-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateComponentHObjCpp-test.js.snap index f3f69a5a8b8..7fcba04267b 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateComponentHObjCpp-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateComponentHObjCpp-test.js.snap @@ -222,6 +222,29 @@ NS_ASSUME_NONNULL_END", } `; +exports[`GenerateComponentHObjCpp can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "RCTComponentViewHelpers.h" => "/** +* 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. +*/ + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol RCTDoublePropNativeComponentViewProtocol + +@end + +NS_ASSUME_NONNULL_END", +} +`; + exports[`GenerateComponentHObjCpp can generate fixture ENUM_PROP 1`] = ` Map { "RCTComponentViewHelpers.h" => "/** diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterCpp-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterCpp-test.js.snap index 6bd660d7b5e..3ab1646e61f 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterCpp-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterCpp-test.js.snap @@ -109,6 +109,29 @@ namespace react { +} // namespace react +} // namespace facebook +", +} +`; + +exports[`GenerateEventEmitterCpp can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "EventEmitters.cpp" => " +/** + * 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. + */ + +#include + +namespace facebook { +namespace react { + + + } // namespace react } // namespace facebook ", diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterH-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterH-test.js.snap index 7f86c296539..f8f8f28e9b7 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterH-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateEventEmitterH-test.js.snap @@ -114,6 +114,30 @@ namespace react { +} // namespace react +} // namespace facebook +", +} +`; + +exports[`GenerateEventEmitterH can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "EventEmitters.h" => " +/** + * 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. + */ +#pragma once + +#include + +namespace facebook { +namespace react { + + + } // namespace react } // namespace facebook ", diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsCpp-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsCpp-test.js.snap index 8e6663af96f..02879a3b5bd 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsCpp-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsCpp-test.js.snap @@ -153,6 +153,40 @@ CommandNativeComponentProps::CommandNativeComponentProps( } `; +exports[`GeneratePropsCpp can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "Props.cpp" => " +/** + * 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. + */ + +#include +#include + +namespace facebook { +namespace react { + +DoublePropNativeComponentProps::DoublePropNativeComponentProps( + const DoublePropNativeComponentProps &sourceProps, + const RawProps &rawProps): ViewProps(sourceProps, rawProps), + + blurRadius(convertRawProp(rawProps, \\"blurRadius\\", sourceProps.blurRadius, blurRadius)), + blurRadius2(convertRawProp(rawProps, \\"blurRadius2\\", sourceProps.blurRadius2, blurRadius2)), + blurRadius3(convertRawProp(rawProps, \\"blurRadius3\\", sourceProps.blurRadius3, blurRadius3)), + blurRadius4(convertRawProp(rawProps, \\"blurRadius4\\", sourceProps.blurRadius4, blurRadius4)), + blurRadius5(convertRawProp(rawProps, \\"blurRadius5\\", sourceProps.blurRadius5, blurRadius5)), + blurRadius6(convertRawProp(rawProps, \\"blurRadius6\\", sourceProps.blurRadius6, blurRadius6)) + {} + +} // namespace react +} // namespace facebook +", +} +`; + exports[`GeneratePropsCpp can generate fixture ENUM_PROP 1`] = ` Map { "Props.cpp" => " diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsH-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsH-test.js.snap index 45c1d0ebdc0..859fdbb5c72 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsH-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsH-test.js.snap @@ -229,6 +229,43 @@ class CommandNativeComponentProps final : public ViewProps { } `; +exports[`GeneratePropsH can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "Props.h" => " +/** + * 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. + */ +#pragma once + +#include + +namespace facebook { +namespace react { + +class DoublePropNativeComponentProps final : public ViewProps { + public: + DoublePropNativeComponentProps() = default; + DoublePropNativeComponentProps(const DoublePropNativeComponentProps &sourceProps, const RawProps &rawProps); + +#pragma mark - Props + + const double blurRadius{0.0}; + const double blurRadius2{0.001}; + const double blurRadius3{2.1}; + const double blurRadius4{0.0}; + const double blurRadius5{1.0}; + const double blurRadius6{0.0}; +}; + +} // namespace react +} // namespace facebook +", +} +`; + exports[`GeneratePropsH can generate fixture ENUM_PROP 1`] = ` Map { "Props.h" => " diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap index 28f6c04fe84..5cc6abda46d 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaDelegate-test.js.snap @@ -183,6 +183,51 @@ public class CommandNativeComponentManagerDelegate " +package com.facebook.react.viewmanagers; + +import android.view.View; +import androidx.annotation.Nullable; +import com.facebook.react.uimanager.BaseViewManager; +import com.facebook.react.uimanager.BaseViewManagerDelegate; +import com.facebook.react.uimanager.LayoutShadowNode; + +public class DoublePropNativeComponentManagerDelegate & DoublePropNativeComponentManagerInterface> extends BaseViewManagerDelegate { + public DoublePropNativeComponentManagerDelegate(U viewManager) { + super(viewManager); + } + @Override + public void setProperty(T view, String propName, @Nullable Object value) { + switch (propName) { + case \\"blurRadius\\": + mViewManager.setBlurRadius(view, value == null ? Double.NaN : ((Double) value).doubleValue()); + break; + case \\"blurRadius2\\": + mViewManager.setBlurRadius2(view, value == null ? 0.001f : ((Double) value).doubleValue()); + break; + case \\"blurRadius3\\": + mViewManager.setBlurRadius3(view, value == null ? 2.1f : ((Double) value).doubleValue()); + break; + case \\"blurRadius4\\": + mViewManager.setBlurRadius4(view, value == null ? 0f : ((Double) value).doubleValue()); + break; + case \\"blurRadius5\\": + mViewManager.setBlurRadius5(view, value == null ? 1f : ((Double) value).doubleValue()); + break; + case \\"blurRadius6\\": + mViewManager.setBlurRadius6(view, value == null ? 0f : ((Double) value).doubleValue()); + break; + default: + super.setProperty(view, propName, value); + } + } +} +", +} +`; + exports[`GeneratePropsJavaDelegate can generate fixture ENUM_PROP 1`] = ` Map { "EnumPropsNativeComponentManagerDelegate.java" => " diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap index 61cb4d419f3..2c401fcd2d5 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GeneratePropsJavaInterface-test.js.snap @@ -84,6 +84,25 @@ public interface CommandNativeComponentManagerInterface { } `; +exports[`GeneratePropsJavaInterface can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "DoublePropNativeComponentManagerInterface.java" => " +package com.facebook.react.viewmanagers; + +import android.view.View; + +public interface DoublePropNativeComponentManagerInterface { + void setBlurRadius(T view, double value); + void setBlurRadius2(T view, double value); + void setBlurRadius3(T view, double value); + void setBlurRadius4(T view, double value); + void setBlurRadius5(T view, double value); + void setBlurRadius6(T view, double value); +} +", +} +`; + exports[`GeneratePropsJavaInterface can generate fixture ENUM_PROP 1`] = ` Map { "EnumPropsNativeComponentManagerInterface.java" => " diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateShadowNodeCpp-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateShadowNodeCpp-test.js.snap index 91de5725725..fc8a56a468a 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateShadowNodeCpp-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateShadowNodeCpp-test.js.snap @@ -115,6 +115,29 @@ extern const char CommandNativeComponentComponentName[] = \\"CommandNativeCompon } `; +exports[`GenerateShadowNodeCpp can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "ShadowNodes.cpp" => " +/** + * 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. + */ + +#include + +namespace facebook { +namespace react { + +extern const char DoublePropNativeComponentComponentName[] = \\"DoublePropNativeComponent\\"; + +} // namespace react +} // namespace facebook +", +} +`; + exports[`GenerateShadowNodeCpp can generate fixture ENUM_PROP 1`] = ` Map { "ShadowNodes.cpp" => " diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateShadowNodeH-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateShadowNodeH-test.js.snap index 739a29c5f88..97e18f65ea1 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateShadowNodeH-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateShadowNodeH-test.js.snap @@ -165,6 +165,39 @@ using CommandNativeComponentShadowNode = ConcreteViewShadowNode< } `; +exports[`GenerateShadowNodeH can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "ShadowNodes.h" => " +/** + * 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. + */ + +#pragma once + +#include +#include + +namespace facebook { +namespace react { + +extern const char DoublePropNativeComponentComponentName[]; + +/* + * \`ShadowNode\` for component. + */ +using DoublePropNativeComponentShadowNode = ConcreteViewShadowNode< + DoublePropNativeComponentComponentName, + DoublePropNativeComponentProps>; + +} // namespace react +} // namespace facebook +", +} +`; + exports[`GenerateShadowNodeH can generate fixture ENUM_PROP 1`] = ` Map { "ShadowNodes.h" => " diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateTests-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateTests-test.js.snap index a3d849530ca..13cb50e25f9 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateTests-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateTests-test.js.snap @@ -168,6 +168,34 @@ TEST(CommandNativeComponentProps_accessibilityHint, etc) { } `; +exports[`GenerateTests can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "Tests.cpp" => "/** + * 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. + */ + +#include +#include +#include +#include +#include + +using namespace facebook::react; + +TEST(DoublePropNativeComponentProps_DoesNotDie, etc) { + auto propParser = RawPropsParser(); + propParser.prepare(); + auto const &sourceProps = DoublePropNativeComponentProps(); + auto const &rawProps = RawProps(folly::dynamic::object(\\"xx_invalid_xx\\", \\"xx_invalid_xx\\")); + rawProps.parse(propParser); + DoublePropNativeComponentProps(sourceProps, rawProps); +}", +} +`; + exports[`GenerateTests can generate fixture ENUM_PROP 1`] = ` Map { "Tests.cpp" => "/** diff --git a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap index 354c16e2127..fa08f2b1502 100644 --- a/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap +++ b/packages/react-native-codegen/src/generators/components/__tests__/__snapshots__/GenerateViewConfigJs-test.js.snap @@ -197,6 +197,46 @@ export const Commands = { } `; +exports[`GenerateViewConfigJs can generate fixture DOUBLE_PROPS 1`] = ` +Map { + "DOUBLE_PROPSNativeViewConfig.js" => " +/** + * 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. + * + * @flow + */ + +'use strict'; + +const registerGeneratedViewConfig = require('registerGeneratedViewConfig'); + +const DoublePropNativeComponentViewConfig = { + uiViewClassName: 'DoublePropNativeComponent', + + validAttributes: { + blurRadius: true, + blurRadius2: true, + blurRadius3: true, + blurRadius4: true, + blurRadius5: true, + blurRadius6: true, + }, +}; + +let nativeComponentName = 'DoublePropNativeComponent'; + +registerGeneratedViewConfig(nativeComponentName, DoublePropNativeComponentViewConfig); + +export const __INTERNAL_VIEW_CONFIG = DoublePropNativeComponentViewConfig; + +export default nativeComponentName; +", +} +`; + exports[`GenerateViewConfigJs can generate fixture ENUM_PROP 1`] = ` Map { "ENUM_PROPNativeViewConfig.js" => " diff --git a/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js b/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js index 9af914ce3e2..be980028816 100644 --- a/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js +++ b/packages/react-native-codegen/src/generators/modules/GenerateModuleMm.js @@ -80,6 +80,7 @@ function translateReturnTypeToKind(type): string { case 'BooleanTypeAnnotation': return 'BooleanKind'; case 'NumberTypeAnnotation': + case 'DoubleTypeAnnotation': case 'FloatTypeAnnotation': case 'Int32TypeAnnotation': return 'NumberKind';