1 //===- unittest/Support/OptionMarshallingTest.cpp - OptParserEmitter tests ===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "gtest/gtest.h" 10 11 struct OptionWithMarshallingInfo { 12 const char *Name; 13 const char *KeyPath; 14 const char *DefaultValue; 15 }; 16 17 static const OptionWithMarshallingInfo MarshallingTable[] = { 18 #define OPTION_WITH_MARSHALLING_FLAG(PREFIX_TYPE, NAME, ID, KIND, GROUP, \ 19 ALIAS, ALIASARGS, FLAGS, PARAM, HELPTEXT, \ 20 METAVAR, VALUES, SPELLING, ALWAYS_EMIT, \ 21 KEYPATH, DEFAULT_VALUE, IS_POSITIVE) \ 22 { NAME, #KEYPATH, #DEFAULT_VALUE }, 23 #include "Opts.inc" 24 #undef OPTION_WITH_MARSHALLING_FLAG 25 }; 26 27 TEST(OptionMarshalling, EmittedOrderSameAsDefinitionOrder) { 28 ASSERT_STREQ(MarshallingTable[0].Name, "marshalled-flag-0"); 29 ASSERT_STREQ(MarshallingTable[1].Name, "marshalled-flag-1"); 30 ASSERT_STREQ(MarshallingTable[2].Name, "marshalled-flag-2"); 31 ASSERT_STREQ(MarshallingTable[3].Name, "marshalled-flag-3"); 32 } 33 34 TEST(OptionMarshalling, EmittedSpecifiedKeyPath) { 35 ASSERT_STREQ(MarshallingTable[0].KeyPath, "MarshalledFlag0"); 36 ASSERT_STREQ(MarshallingTable[1].KeyPath, "MarshalledFlag1"); 37 ASSERT_STREQ(MarshallingTable[2].KeyPath, "MarshalledFlag2"); 38 ASSERT_STREQ(MarshallingTable[3].KeyPath, "MarshalledFlag3"); 39 } 40 41 TEST(OptionMarshalling, DefaultAnyOfConstructedDisjunctionOfKeypaths) { 42 ASSERT_STREQ(MarshallingTable[0].DefaultValue, "false"); 43 ASSERT_STREQ(MarshallingTable[1].DefaultValue, "false || MarshalledFlag0"); 44 ASSERT_STREQ(MarshallingTable[2].DefaultValue, "false || MarshalledFlag0"); 45 ASSERT_STREQ(MarshallingTable[3].DefaultValue, 46 "false || MarshalledFlag1 || MarshalledFlag2"); 47 } 48