@@ -321,6 +321,8 @@ static void characterLiteral()
321321 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u8'\343\201\202 '" ), std::runtime_error, " code point too large" );
322322 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u8'\360\223\200\200 '" ), std::runtime_error, " code point too large" );
323323
324+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '\\ U11111111" ), std::runtime_error, " code point too large" );
325+
324326 ASSERT_EQUALS (' \x89 ' , simplecpp::characterLiteralToLL (" '\x89 '" ));
325327 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" U'\x89 '" ), std::runtime_error, " assumed UTF-8 encoded source, but sequence is invalid" );
326328
@@ -373,15 +375,32 @@ static void characterLiteral()
373375 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" U'\xed\xa0\x80 '" ), std::runtime_error, " assumed UTF-8 encoded source, but sequence is invalid" );
374376 ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" U'\xed\xbf\xbf '" ), std::runtime_error, " assumed UTF-8 encoded source, but sequence is invalid" );
375377
376- // TODO: throw std::runtime_error("expected a character literal");
377- // TODO: throw std::runtime_error("raw single quotes and newlines not allowed in character literals");
378- // TODO: throw std::runtime_error("multiple characters only supported in narrow character literals");
379- // TODO: throw std::runtime_error("unexpected end of character literal");
380- // TODO: throw std::runtime_error("surrogate code points not allowed in universal character names");
381- // TODO: throw std::runtime_error("assumed UTF-8 encoded source, but character literal ends unexpectedly");
382- // TODO: throw std::runtime_error("numeric escape sequence too large");
383- // TODO: throw std::runtime_error("missing closing quote in character literal");
384- // TODO: throw std::runtime_error("empty character literal");
378+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" " ), std::runtime_error, " expected a character literal" );
379+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" LU" ), std::runtime_error, " expected a character literal" );
380+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" ;\n " ), std::runtime_error, " expected a character literal" );
381+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u8U" ), std::runtime_error, " expected a character literal" );
382+
383+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '\n\n " ), std::runtime_error, " raw single quotes and newlines not allowed in character literals" );
384+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" ''&" ), std::runtime_error, " raw single quotes and newlines not allowed in character literals" );
385+
386+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" L'\f ff" ), std::runtime_error, " multiple characters only supported in narrow character literals" );
387+
388+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '\\\n " ), std::runtime_error, " unexpected end of character literal" );
389+
390+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '" ), std::runtime_error, " missing closing quote in character literal" );
391+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u'" ), std::runtime_error, " missing closing quote in character literal" );
392+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" L'" ), std::runtime_error, " missing closing quote in character literal" );
393+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" 'a" ), std::runtime_error, " missing closing quote in character literal" );
394+
395+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" ''" ), std::runtime_error, " empty character literal" );
396+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" L''" ), std::runtime_error, " empty character literal" );
397+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" U''" ), std::runtime_error, " empty character literal" );
398+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u''" ), std::runtime_error, " empty character literal" );
399+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u8''" ), std::runtime_error, " empty character literal" );
400+
401+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" '\\ 555" ), std::runtime_error, " numeric escape sequence too large" );
402+
403+ ASSERT_THROW_EQUALS (simplecpp::characterLiteralToLL (" u'Ó" ), std::runtime_error, " assumed UTF-8 encoded source, but character literal ends unexpectedly" );
385404}
386405
387406static void combineOperators_floatliteral ()
0 commit comments