/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
/* vi: set expandtab shiftwidth=4 tabstop=4: */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "modp_bjavascript.h"
#include "minunit.h"
/**
* Tests input where no escaping happens
*/
static char* testNoEscape()
{
char buf[100];
const char* s1 = "this is a string";
const int len1 = strlen(s1);
int d = modp_bjavascript_encode(buf, s1, len1);
mu_assert_int_equals(len1, d);
mu_assert_str_equals(buf, s1);
int sz = modp_bjavascript_encode_strlen(s1, len1);
mu_assert_int_equals(sz, len1);
return 0;
}
static char* testSimpleEscape()
{
char buf[100];
const char* s1 = "\\this\nis a string\n";
const char* s2 = "\\\\this\\nis a string\\n";
const int len1 = strlen(s1);
const int len2 = strlen(s2);
int d = modp_bjavascript_encode(buf, s1, len1);
mu_assert_int_equals(len2, d);
mu_assert_str_equals(buf, s2);
int sz = modp_bjavascript_encode_strlen(s1, len1);
mu_assert_int_equals(sz, len2);
/*
* Test the Raw escape '\' --> '\\'
*/
char ibuf[] = {'\\', '\0'};
memset(buf, 0, sizeof(buf));
d = modp_bjavascript_encode(buf,ibuf, 1);
mu_assert_int_equals(buf[0], '\\');
mu_assert_int_equals(buf[1], '\\');
mu_assert_int_equals(buf[2], 0);
return 0;
}
static char* testSQuoteEscape()
{
char buf[100];
const char* s1 = "this is a 'string'\n";
const char* s2 = "this is a \\'string\\'\\n";
const int len1 = strlen(s1);
const int len2 = strlen(s2);
int d = modp_bjavascript_encode(buf, s1, len1);
mu_assert_int_equals(len2, d);
mu_assert_str_equals(buf, s2);
int sz = modp_bjavascript_encode_strlen(s1, len1);
mu_assert_int_equals(sz, len2);
char ibuf[] = {'\'', '\0'};
memset(buf, 0, sizeof(buf));
d = modp_bjavascript_encode(buf, ibuf, 1);
mu_assert_int_equals(buf[0], '\\');
mu_assert_int_equals(buf[1], '\'');
mu_assert_int_equals(buf[2], '\0');
return 0;
}
static char* testDQuoteEscape()
{
char buf[100];
const char* s1 = "this is a \"string\"\n";
const char* s2 = "this is a \\\"string\\\"\\n";
const int len1 = strlen(s1);
const int len2 = strlen(s2);
int d = modp_bjavascript_encode(buf, s1, len1);
mu_assert_int_equals(len2, d);
mu_assert_str_equals(buf, s2);
int sz = modp_bjavascript_encode_strlen(s1, len1);
mu_assert_int_equals(sz, len2);
char ibuf[] = {'\"', '\0'};
memset(buf, 0, sizeof(buf));
d = modp_bjavascript_encode(buf, ibuf, 1);
mu_assert_int_equals(buf[0], '\\');
mu_assert_int_equals(buf[1], '\"');
mu_assert_int_equals(buf[2], '\0');
return 0;
}
static char* testBinaryEscape()
{
char buf[100];
const char s1[] = {1,2,3,4,0};
const char* s2 = "\\x01\\x02\\x03\\x04";
const int len1 = strlen(s1);
const int len2 = strlen(s2);
int d = modp_bjavascript_encode(buf, s1, len1);
mu_assert_int_equals(len2, d);
mu_assert_str_equals(buf, s2);
int sz = modp_bjavascript_encode_strlen(s1, len1);
mu_assert_int_equals(sz, len2);
return 0;
}
static char* all_tests()
{
mu_run_test(testNoEscape);
mu_run_test(testSimpleEscape);
mu_run_test(testBinaryEscape);
mu_run_test(testSQuoteEscape);
mu_run_test(testDQuoteEscape);
return 0;
}
UNITTESTS
syntax highlighted by Code2HTML, v. 0.9.1