1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
// unit-test-command-line-args.cpp
#include "../../source/compiler-core/slang-command-line-args.h"
#include "unit-test/slang-unit-test.h"
using namespace Slang;
SLANG_UNIT_TEST(commandLineArgs)
{
RefPtr<CommandLineContext> context = new CommandLineContext;
// Simple scoped version
{
CommandLineArgs args(context);
DownstreamArgs downstreamArgs(context);
DiagnosticSink sink(context->getSourceManager(), nullptr);
const char* inArgs[] = {
"-Xa...",
"-blah",
"10",
"-X.",
};
args.setArgs(inArgs, SLANG_COUNT_OF(inArgs));
SLANG_CHECK(SLANG_SUCCEEDED(
downstreamArgs.stripDownstreamArgs(args, DownstreamArgs::Flag::AllowNewNames, &sink)));
const char* aArgs[] = {"-blah", "10"};
SLANG_CHECK(downstreamArgs.getArgsByName("a").hasArgs(aArgs, SLANG_COUNT_OF(aArgs)));
SLANG_CHECK(args.getArgCount() == 0 && sink.getErrorCount() == 0);
}
// Leaving off terminating -X. is ok
{
CommandLineArgs args(context);
DownstreamArgs downstreamArgs(context);
DiagnosticSink sink(context->getSourceManager(), nullptr);
const char* inArgs[] = {
"-Xa...",
"-blah",
"10",
};
args.setArgs(inArgs, SLANG_COUNT_OF(inArgs));
SLANG_CHECK(SLANG_SUCCEEDED(
downstreamArgs.stripDownstreamArgs(args, DownstreamArgs::Flag::AllowNewNames, &sink)));
const char* aArgs[] = {"-blah", "10"};
SLANG_CHECK(downstreamArgs.getArgsByName("a").hasArgs(aArgs, SLANG_COUNT_OF(aArgs)));
SLANG_CHECK(args.getArgCount() == 0 && sink.getErrorCount() == 0);
}
// Having a nesting
{
CommandLineArgs args(context);
DownstreamArgs downstreamArgs(context);
DiagnosticSink sink(context->getSourceManager(), nullptr);
const char* inArgs[] = {
"-something",
"andAnother",
"-Xa...",
"-blah",
"-Xb...",
"-hey",
"-X.",
"10",
"-X.",
"-Xc",
"somethingForC",
};
args.setArgs(inArgs, SLANG_COUNT_OF(inArgs));
SLANG_CHECK(SLANG_SUCCEEDED(
downstreamArgs.stripDownstreamArgs(args, DownstreamArgs::Flag::AllowNewNames, &sink)));
const char* aArgs[] = {"-blah", "-Xb...", "-hey", "-X.", "10"};
const char* cArgs[] = {
"somethingForC",
};
const char* mainArgs[] = {
"-something",
"andAnother",
};
SLANG_CHECK(downstreamArgs.getArgsByName("a").hasArgs(aArgs, SLANG_COUNT_OF(aArgs)));
SLANG_CHECK(downstreamArgs.getArgsByName("c").hasArgs(cArgs, SLANG_COUNT_OF(cArgs)));
SLANG_CHECK(args.hasArgs(mainArgs, SLANG_COUNT_OF(mainArgs)) && sink.getErrorCount() == 0);
}
}
|