mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
introduce RCTMockDef
Summary: here's a way we can mock C apis - however i am not sure if the flag i'm using is correct used in D31949237 Changelog: [General][Added] - add macros to be able to stub C functions in tests Reviewed By: RSNara Differential Revision: D31949238 fbshipit-source-id: 0f18a65f810f1b855dbc844f11f5a304c1e5ecea
This commit is contained in:
committed by
Facebook GitHub Bot
parent
9c5e177a79
commit
749a9207b6
@@ -253,6 +253,7 @@ REACT_PUBLIC_HEADERS = {
|
||||
"React/RCTLayoutAnimationGroup.h": RCTMODULES_PATH + "RCTLayoutAnimationGroup.h",
|
||||
"React/RCTLog.h": RCTBASE_PATH + "RCTLog.h",
|
||||
"React/RCTManagedPointer.h": RCTBASE_PATH + "RCTManagedPointer.h",
|
||||
"React/RCTMockDef.h": RCTBASE_PATH + "RCTMockDef.h",
|
||||
"React/RCTModalHostViewController.h": RCTVIEWS_PATH + "RCTModalHostViewController.h",
|
||||
"React/RCTModalHostViewManager.h": RCTVIEWS_PATH + "RCTModalHostViewManager.h",
|
||||
"React/RCTModalManager.h": RCTVIEWS_PATH + "RCTModalManager.h",
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* 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 <React/RCTDefines.h>
|
||||
|
||||
/* These macros are used to stub C functions. Here's an example:
|
||||
*
|
||||
* Helpers.h
|
||||
* ------
|
||||
* boolean ReturnsTrueOrFalse(void);
|
||||
*
|
||||
* FileToBeTested.h
|
||||
* ------
|
||||
* RCT_MOCK_DEF(Testing, ReturnsTrueOrFalse);
|
||||
* #define ReturnsTrueOrFalse RCT_MOCK_USE(Testing, ReturnsTrueOrFalse)
|
||||
*
|
||||
* int FunctionToBeTested(int input) {
|
||||
* return ReturnsTrueOrFalse() ? input + 1 : input - 1;
|
||||
* }
|
||||
*
|
||||
* Test.h
|
||||
* -----
|
||||
* RCT_MOCK_GET(Testing, ReturnsTrueOrFalse);
|
||||
*
|
||||
* boolean _ReturnsTrue(void) { return true; }
|
||||
* boolean _ReturnsFalse(void) { return false; }
|
||||
*
|
||||
* void TestFunctionTrue(void) {
|
||||
* RCT_MOCK_SET(Testing, ReturnsTrueOrFalse, _ReturnsTrue);
|
||||
* assert(FunctionToBeTested(5) == 6);
|
||||
* RCT_MOCK_RESET(Testing, ReturnsTrueOrFalse);
|
||||
* }
|
||||
*
|
||||
* void TestFunctionFalse(void) {
|
||||
* RCT_MOCK_SET(Testing, ReturnsTrueOrFalse, _ReturnsFalse);
|
||||
* assert(FunctionToBeTested(5) == 4);
|
||||
* RCT_MOCK_RESET(Testing, ReturnsTrueOrFalse);
|
||||
* }
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef RCT_DEV
|
||||
#define RCT_MOCK_DEF(context, api) __typeof(__typeof(api) *) mockptr_ ## context ## _ ## api = &api;
|
||||
#define RCT_MOCK_REF(context, api) extern __typeof(__typeof(api) *) mockptr_ ## context ## _ ## api;
|
||||
#define RCT_MOCK_SET(context, api, mockapi) (mockptr_ ## context ## _ ## api = &mockapi)
|
||||
#define RCT_MOCK_RESET(context, api) (mockptr_ ## context ## _ ## api = &api)
|
||||
#define RCT_MOCK_USE(context, api) (*mockptr_ ## context ## _ ## api)
|
||||
#else
|
||||
#define RCT_MOCK_DEF(context, api)
|
||||
#define RCT_MOCK_REF(context, api)
|
||||
#define RCT_MOCK_SET(context, api, mockapi)
|
||||
#define RCT_MOCK_RESET(context, api)
|
||||
#define RCT_MOCK_USE(context, api) api
|
||||
#endif
|
||||
Reference in New Issue
Block a user