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( \ 19 PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ 20 HELPTEXT, METAVAR, VALUES, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \ 21 TYPE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ 22 {NAME, #KEYPATH, #DEFAULT_VALUE}, 23 #include "Opts.inc" 24 #undef OPTION_WITH_MARSHALLING 25 }; 26 27 TEST(OptionMarshalling, EmittedOrderSameAsDefinitionOrder) { 28 ASSERT_STREQ(MarshallingTable[0].Name, "marshalled-flag-d"); 29 ASSERT_STREQ(MarshallingTable[1].Name, "marshalled-flag-c"); 30 ASSERT_STREQ(MarshallingTable[2].Name, "marshalled-flag-b"); 31 ASSERT_STREQ(MarshallingTable[3].Name, "marshalled-flag-a"); 32 } 33 34 TEST(OptionMarshalling, EmittedSpecifiedKeyPath) { 35 ASSERT_STREQ(MarshallingTable[0].KeyPath, "MarshalledFlagD"); 36 ASSERT_STREQ(MarshallingTable[1].KeyPath, "MarshalledFlagC"); 37 ASSERT_STREQ(MarshallingTable[2].KeyPath, "MarshalledFlagB"); 38 ASSERT_STREQ(MarshallingTable[3].KeyPath, "MarshalledFlagA"); 39 } 40 41 TEST(OptionMarshalling, DefaultAnyOfConstructedDisjunctionOfKeypaths) { 42 ASSERT_STREQ(MarshallingTable[0].DefaultValue, "false"); 43 ASSERT_STREQ(MarshallingTable[1].DefaultValue, "false || MarshalledFlagD"); 44 ASSERT_STREQ(MarshallingTable[2].DefaultValue, "false || MarshalledFlagD"); 45 ASSERT_STREQ(MarshallingTable[3].DefaultValue, 46 "false || MarshalledFlagC || MarshalledFlagB"); 47 } 48