all repos — mgba @ 34529398bb1da3cc1e0277d05d9e4902bdb39249

mGBA Game Boy Advance Emulator

src/util/test/string-parser.c (view raw)

  1/* Copyright (c) 2013-2019 Jeffrey Pfau
  2 *
  3 * This Source Code Form is subject to the terms of the Mozilla Public
  4 * License, v. 2.0. If a copy of the MPL was not distributed with this
  5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  6#include "util/test/suite.h"
  7
  8#include <mgba-util/string.h>
  9
 10M_TEST_DEFINE(nullString) {
 11	const char* unparsed = "";
 12	char parsed[2];
 13	assert_int_equal(parseQuotedString(unparsed, 1, parsed, sizeof(parsed)), -1);
 14}
 15
 16M_TEST_DEFINE(emptyString2) {
 17	const char* unparsed = "\"\"";
 18	char parsed[2];
 19	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), 0);
 20}
 21
 22M_TEST_DEFINE(emptyString) {
 23	const char* unparsed = "''";
 24	char parsed[2];
 25	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), 0);
 26}
 27
 28M_TEST_DEFINE(plainString) {
 29	const char* unparsed = "\"plain\"";
 30	char parsed[32];
 31	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), strlen("plain"));
 32	assert_string_equal(parsed, "plain");
 33}
 34
 35M_TEST_DEFINE(plainString2) {
 36	const char* unparsed = "\"plain\"";
 37	char parsed[32];
 38	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed), parsed, sizeof(parsed)), strlen("plain"));
 39	assert_string_equal(parsed, "plain");
 40}
 41
 42M_TEST_DEFINE(trailingString) {
 43	const char* unparsed = "\"trailing\"T";
 44	char parsed[32];
 45	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), strlen("trailing"));
 46	assert_string_equal(parsed, "trailing");
 47}
 48
 49M_TEST_DEFINE(leadingString) {
 50	const char* unparsed = "L\"leading\"";
 51	char parsed[32];
 52	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), -1);
 53}
 54
 55M_TEST_DEFINE(backslashString) {
 56	const char* unparsed = "\"back\\\\slash\"";
 57	char parsed[32];
 58	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), strlen("back\\slash"));
 59	assert_string_equal(parsed, "back\\slash");
 60}
 61
 62M_TEST_DEFINE(doubleBackslashString) {
 63	const char* unparsed = "\"back\\\\\\\\slash\"";
 64	char parsed[32];
 65	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), strlen("back\\\\slash"));
 66	assert_string_equal(parsed, "back\\\\slash");
 67}
 68
 69M_TEST_DEFINE(escapeCharsString) {
 70	const char* unparsed = "\"\\\"\\'\\n\\r\\\\\"";
 71	char parsed[32];
 72	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), strlen("\"'\n\r\\"));
 73	assert_string_equal(parsed, "\"'\n\r\\");
 74}
 75
 76M_TEST_DEFINE(invalidEscapeCharString) {
 77	const char* unparsed = "\"\\z\"";
 78	char parsed[32];
 79	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), -1);
 80}
 81
 82M_TEST_DEFINE(overflowString) {
 83	const char* unparsed = "\"longstring\"";
 84	char parsed[4];
 85	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), -1);
 86}
 87
 88M_TEST_DEFINE(unclosedString) {
 89	const char* unparsed = "\"forever";
 90	char parsed[32];
 91	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), -1);
 92}
 93
 94M_TEST_DEFINE(unclosedString2) {
 95	const char* unparsed = "\"forever";
 96	char parsed[32];
 97	assert_int_equal(parseQuotedString(unparsed, 4, parsed, sizeof(parsed)), -1);
 98}
 99
100M_TEST_DEFINE(unclosedBackslashString) {
101	const char* unparsed = "\"backslash\\";
102	char parsed[32];
103	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed), parsed, sizeof(parsed)), -1);
104}
105
106M_TEST_DEFINE(unclosedBackslashString2) {
107	const char* unparsed = "\"backslash\\";
108	char parsed[32];
109	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), -1);
110}
111
112M_TEST_DEFINE(highCharacterString) {
113	const char* unparsed = "\"\200\"";
114	char parsed[32];
115	assert_int_equal(parseQuotedString(unparsed, strlen(unparsed) + 1, parsed, sizeof(parsed)), 1);
116	assert_string_equal(parsed, "\200");
117}
118
119M_TEST_SUITE_DEFINE(StringParser,
120	cmocka_unit_test(nullString),
121	cmocka_unit_test(emptyString),
122	cmocka_unit_test(emptyString2),
123	cmocka_unit_test(plainString),
124	cmocka_unit_test(plainString2),
125	cmocka_unit_test(leadingString),
126	cmocka_unit_test(trailingString),
127	cmocka_unit_test(backslashString),
128	cmocka_unit_test(doubleBackslashString),
129	cmocka_unit_test(escapeCharsString),
130	cmocka_unit_test(invalidEscapeCharString),
131	cmocka_unit_test(overflowString),
132	cmocka_unit_test(unclosedString),
133	cmocka_unit_test(unclosedString2),
134	cmocka_unit_test(unclosedBackslashString),
135	cmocka_unit_test(unclosedBackslashString2),
136	cmocka_unit_test(highCharacterString))