diff --git a/tests/YGLoggerTest.cpp b/tests/YGLoggerTest.cpp index 1b84ee6b..fd620cc9 100644 --- a/tests/YGLoggerTest.cpp +++ b/tests/YGLoggerTest.cpp @@ -1,10 +1,10 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. +/* + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. * - * 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 @@ -23,6 +23,46 @@ int _unmanagedLogger(const YGConfigRef config, } } +TEST(YogaTest, config_print_tree_enabled) { + writeBuffer[0] = '\0'; + const YGConfigRef config = YGConfigNew(); + YGConfigSetPrintTreeFlag(config, true); + YGConfigSetLogger(config, _unmanagedLogger); + const YGNodeRef root = YGNodeNewWithConfig(config); + const YGNodeRef child0 = YGNodeNewWithConfig(config); + const YGNodeRef child1 = YGNodeNewWithConfig(config); + YGNodeInsertChild(root, child0, 0); + YGNodeInsertChild(root, child1, 1); + YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); + YGConfigSetLogger(config, NULL); + YGNodeFreeRecursive(root); + + const char* expected = + "
\n " + "
\n
\n
"; + ASSERT_STREQ(expected, writeBuffer); +} + +TEST(YogaTest, config_print_tree_disabled) { + writeBuffer[0] = '\0'; + const YGConfigRef config = YGConfigNew(); + YGConfigSetPrintTreeFlag(config, false); + YGConfigSetLogger(config, _unmanagedLogger); + const YGNodeRef root = YGNodeNewWithConfig(config); + const YGNodeRef child0 = YGNodeNewWithConfig(config); + const YGNodeRef child1 = YGNodeNewWithConfig(config); + YGNodeInsertChild(root, child0, 0); + YGNodeInsertChild(root, child1, 1); + YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); + YGConfigSetLogger(config, NULL); + YGNodeFreeRecursive(root); + + const char* expected = ""; + ASSERT_STREQ(expected, writeBuffer); +} + TEST(YogaTest, logger_default_node_should_print_no_style_info) { writeBuffer[0] = '\0'; const YGConfigRef config = YGConfigNew(); diff --git a/yoga/YGConfig.cpp b/yoga/YGConfig.cpp index 5cee5278..a52f93c2 100644 --- a/yoga/YGConfig.cpp +++ b/yoga/YGConfig.cpp @@ -1,10 +1,10 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. +/* + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. */ - #include "YGConfig.h" const std::array @@ -15,5 +15,8 @@ YGConfig::YGConfig(YGLogger logger) useWebDefaults(false), useLegacyStretchBehaviour(false), shouldDiffLayoutWithoutLegacyStretchBehaviour(false), - pointScaleFactor(1.0f), logger(logger), cloneNodeCallback(nullptr), - context(nullptr) {} + pointScaleFactor(1.0f), + logger(logger), + cloneNodeCallback(nullptr), + context(nullptr), + printTree(false) {} diff --git a/yoga/YGConfig.h b/yoga/YGConfig.h index 0f655d1b..98d7a217 100644 --- a/yoga/YGConfig.h +++ b/yoga/YGConfig.h @@ -1,10 +1,10 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. +/* + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. * - * 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 "Yoga-internal.h" #include "Yoga.h" @@ -18,6 +18,7 @@ struct YGConfig { YGLogger logger; YGCloneNodeFunc cloneNodeCallback; void* context; + bool printTree; YGConfig(YGLogger logger); }; diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index c6d38bb4..a4bd3f1a 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -198,6 +198,10 @@ bool YGNodeGetHasNewLayout(YGNodeRef node) { return node->getHasNewLayout(); } +void YGConfigSetPrintTreeFlag(YGConfigRef config, bool enabled) { + config->printTree = enabled; +} + void YGNodeSetHasNewLayout(YGNodeRef node, bool hasNewLayout) { node->setHasNewLayout(hasNewLayout); } @@ -3535,7 +3539,6 @@ static void YGNodelayoutImpl( } uint32_t gDepth = 0; -bool gPrintTree = false; bool gPrintChanges = false; bool gPrintSkips = false; @@ -4111,7 +4114,7 @@ void YGNodeCalculateLayout( node->getLayout().direction, ownerWidth, ownerHeight, ownerWidth); YGRoundToPixelGrid(node, node->getConfig()->pointScaleFactor, 0.0f, 0.0f); - if (gPrintTree) { + if (node->getConfig()->printTree) { YGNodePrint( node, (YGPrintOptions)( @@ -4163,7 +4166,7 @@ void YGNodeCalculateLayout( node->setLayoutDoesLegacyFlagAffectsLayout( !originalNode->isLayoutTreeEqualToNode(*node)); - if (gPrintTree) { + if (originalNode->getConfig()->printTree) { YGNodePrint( originalNode, (YGPrintOptions)( diff --git a/yoga/Yoga.h b/yoga/Yoga.h index 5bcbe2ab..bd537a3c 100644 --- a/yoga/Yoga.h +++ b/yoga/Yoga.h @@ -155,6 +155,7 @@ WIN_EXPORT void YGNodeCopyStyle( void* YGNodeGetContext(YGNodeRef node); void YGNodeSetContext(YGNodeRef node, void* context); +void YGConfigSetPrintTreeFlag(YGConfigRef config, bool enabled); YGMeasureFunc YGNodeGetMeasureFunc(YGNodeRef node); void YGNodeSetMeasureFunc(YGNodeRef node, YGMeasureFunc measureFunc); YGBaselineFunc YGNodeGetBaselineFunc(YGNodeRef node);