87 SECTION(
"on extension") {
88 std::string_view buffer =
"content doesn't matter";
97 SECTION(
".sym extension") {
109 auto dummyParser = [](std::span<std::string_view> tokens) -> std::optional<Symbol> {
110 if (tokens.size() == 1)
return Symbol{std::string(tokens[0]), 123};
114 SECTION(
"empty file") {
115 std::string_view buffer;
117 CHECK(file.filename ==
"file.sym");
118 CHECK(file.type == SymbolFile::Type::GENERIC);
119 CHECK(file.symbols.empty());
121 SECTION(
"comment + symbol") {
122 std::string_view buffer =
123 "; This is a comment\n"
126 "bar ; comment on same line\n";
128 CHECK(file.filename ==
"file2.sym");
129 CHECK(file.type == SymbolFile::Type::NOICE);
130 REQUIRE(file.symbols.size() == 2);
131 CHECK(file.symbols[0].name ==
"bla");
132 CHECK(file.symbols[0].value == 123);
133 CHECK(file.symbols[1].name ==
"bar");
134 CHECK(file.symbols[1].value == 123);
140 std::string_view buffer =
143 "qux: equ 3 ; comment\n"
146 "error equ 123 extra stuff\n";
148 CHECK(file.filename ==
"myfile.sym");
149 CHECK(file.type == SymbolFile::Type::GENERIC);
150 REQUIRE(file.symbols.size() == 3);
151 CHECK(file.symbols[0].name ==
"foo");
152 CHECK(file.symbols[0].value == 1);
153 CHECK(file.symbols[1].name ==
"bar");
154 CHECK(file.symbols[1].value == 2);
155 CHECK(file.symbols[2].name ==
"qux");
156 CHECK(file.symbols[2].value == 3);
161 std::string_view buffer =
163 "def bar 234h ; comment\n"
165 "def error 99 extra stuff\n";
167 CHECK(file.filename ==
"noice.sym");
168 CHECK(file.type == SymbolFile::Type::NOICE);
169 REQUIRE(file.symbols.size() == 2);
170 CHECK(file.symbols[0].name ==
"foo");
171 CHECK(file.symbols[0].value == 1);
172 CHECK(file.symbols[1].name ==
"bar");
173 CHECK(file.symbols[1].value == 0x234);
179 std::string_view buffer =
183 CHECK(file.filename ==
"htc.sym");
184 CHECK(file.type == SymbolFile::Type::HTC);
185 REQUIRE(file.symbols.size() == 1);
186 CHECK(file.symbols[0].name ==
"foo");
187 CHECK(file.symbols[0].value == 0x1234);
192 std::string_view buffer =
194 "Symbols by value:\n"
198 CHECK(file.filename ==
"vasm.sym");
199 CHECK(file.type == SymbolFile::Type::VASM);
200 REQUIRE(file.symbols.size() == 1);
201 CHECK(file.symbols[0].name ==
"label");
202 CHECK(file.symbols[0].value == 0x12ab);
207 std::string_view buffer =
209 "12h:3456h ignore2\n"
210 "; global and local\n"
214 CHECK(file.filename ==
"asmsx.sym");
215 CHECK(file.type == SymbolFile::Type::ASMSX);
216 REQUIRE(file.symbols.size() == 2);
217 CHECK(file.symbols[0].name ==
"l1");
218 CHECK(file.symbols[0].value == 0x1234);
219 CHECK(file.symbols[1].name ==
"l2");
220 CHECK(file.symbols[1].value == 0xabcd);
225 std::string_view buffer =
226 "ignore1 text 2CE7 ignore2 0AEE\n"
227 "ignore3 2E58 ignore3 text 2E4C\n"
229 "asllmod text 2CE7 asllsub 0AEE\n"
230 "cret 2E58 csv text 2E4C\n"
234 CHECK(file.filename ==
"link.map");
235 CHECK(file.type == SymbolFile::Type::LINKMAP);
236 REQUIRE(file.symbols.size() == 6);
237 CHECK(file.symbols[0].name ==
"asllmod");
238 CHECK(file.symbols[0].value == 0x2ce7);
239 CHECK(file.symbols[1].name ==
"asllsub");
240 CHECK(file.symbols[1].value == 0x0aee);
241 CHECK(file.symbols[2].name ==
"cret");
242 CHECK(file.symbols[2].value == 0x2e58);
243 CHECK(file.symbols[3].name ==
"csv");
244 CHECK(file.symbols[3].value == 0x2e4c);
245 CHECK(file.symbols[4].name ==
"single");
246 CHECK(file.symbols[4].value == 0x9876);
247 CHECK(file.symbols[5].name ==
"last");
248 CHECK(file.symbols[5].value == 0x8765);
TEST_CASE("SymbolManager: isHexDigit")
static std::optional< unsigned > isHexDigit(char c)
static SymbolFile loadLines(std::string_view filename, std::string_view buffer, SymbolFile::Type type, function_ref< std::optional< Symbol >(std::span< std::string_view >)> lineParser)
static SymbolFile::Type detectType(std::string_view filename, std::string_view buffer)
static SymbolFile loadNoICE(std::string_view filename, std::string_view buffer)
static SymbolFile loadHTC(std::string_view filename, std::string_view buffer)
static SymbolFile loadGeneric(std::string_view filename, std::string_view buffer)
static SymbolFile loadVASM(std::string_view filename, std::string_view buffer)
static std::optional< uint16_t > is4DigitHex(std::string_view s)
static std::optional< Symbol > checkLabel(std::string_view label, uint16_t value)
static SymbolFile loadASMSX(std::string_view filename, std::string_view buffer)
static std::optional< uint16_t > parseValue(std::string_view str)
static SymbolFile loadLinkMap(std::string_view filename, std::string_view buffer)
static std::optional< Symbol > checkLabelAndValue(std::string_view label, std::string_view value)
This file implemented 3 utility functions: