mirror of
https://github.com/depp/syncfiles.git
synced 2024-06-08 18:29:30 +00:00
Test line break conversions
This commit is contained in:
parent
798d5eca5c
commit
7e7a6a9da2
|
@ -145,23 +145,24 @@ static void PrintQuotedString(const UInt8 *buf, int len)
|
||||||
fputc('"', stderr);
|
fputc('"', stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Check(int len0, int len1, int len2)
|
static void Check(const void *exbuf, int exlen, const void *inbuf, int inlen,
|
||||||
|
const void *outbuf, int outlen)
|
||||||
{
|
{
|
||||||
int i, n, col, diffcol, c1, c2;
|
int i, n, col, diffcol, c1, c2;
|
||||||
|
|
||||||
if (len0 == len2 && memcmp(gBuffer[0], gBuffer[2], len2) == 0) {
|
if (exlen == outlen && memcmp(exbuf, outbuf, outlen) == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Failf("incorrect output");
|
Failf("incorrect output");
|
||||||
n = len0;
|
n = exlen;
|
||||||
if (n > len2) {
|
if (n > outlen) {
|
||||||
n = len2;
|
n = outlen;
|
||||||
}
|
}
|
||||||
diffcol = -1;
|
diffcol = -1;
|
||||||
col = 0;
|
col = 0;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
c1 = gBuffer[0][i];
|
c1 = ((const UInt8 *)exbuf)[i];
|
||||||
c2 = gBuffer[2][i];
|
c2 = ((const UInt8 *)outbuf)[i];
|
||||||
if (c1 != c2) {
|
if (c1 != c2) {
|
||||||
diffcol = col;
|
diffcol = col;
|
||||||
break;
|
break;
|
||||||
|
@ -176,13 +177,13 @@ static void Check(int len0, int len1, int len2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fputs("Input: ", stderr);
|
fputs("Input: ", stderr);
|
||||||
PrintQuotedString(gBuffer[1], len1);
|
PrintQuotedString(inbuf, inlen);
|
||||||
fputc('\n', stderr);
|
fputc('\n', stderr);
|
||||||
fputs("Expect: ", stderr);
|
fputs("Expect: ", stderr);
|
||||||
PrintQuotedString(gBuffer[0], len0);
|
PrintQuotedString(exbuf, exlen);
|
||||||
fputc('\n', stderr);
|
fputc('\n', stderr);
|
||||||
fputs("Output: ", stderr);
|
fputs("Output: ", stderr);
|
||||||
PrintQuotedString(gBuffer[2], len2);
|
PrintQuotedString(outbuf, outlen);
|
||||||
fputc('\n', stderr);
|
fputc('\n', stderr);
|
||||||
if (diffcol >= 0) {
|
if (diffcol >= 0) {
|
||||||
for (i = 0; i < diffcol + 9; i++) {
|
for (i = 0; i < diffcol + 9; i++) {
|
||||||
|
@ -193,19 +194,29 @@ static void Check(int len0, int len1, int len2)
|
||||||
fputc('\n', stderr);
|
fputc('\n', stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *const kLineBreakData[4] = {
|
||||||
|
"Line Break\nA\n\nB\rC\r\rD\r\nE\r\n\r\n",
|
||||||
|
"Line Break\nA\n\nB\nC\n\nD\nE\n\n",
|
||||||
|
"Line Break\rA\r\rB\rC\r\rD\rE\r\r",
|
||||||
|
"Line Break\r\nA\r\n\r\nB\r\nC\r\n\r\nD\r\nE\r\n\r\n",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *const kLineBreakName[4] = {"keep", "LF", "CR", "CRLF"};
|
||||||
|
|
||||||
static void TestConverter(const char *filename)
|
static void TestConverter(const char *filename)
|
||||||
{
|
{
|
||||||
void *data;
|
void *data;
|
||||||
size_t datasz;
|
size_t datasz;
|
||||||
Ptr datap;
|
Ptr datap;
|
||||||
Handle datah;
|
Handle datah;
|
||||||
struct Converter cf, cr;
|
struct Converter cf, cr, cc;
|
||||||
struct ConverterState st;
|
struct ConverterState st;
|
||||||
int r, i, j, jmax, len0, len1, len2;
|
int r, i, j, k, jmax, len0, len1, len2;
|
||||||
OSErr err;
|
OSErr err;
|
||||||
UInt8 *ptr;
|
UInt8 *ptr;
|
||||||
const UInt8 *iptr, *iend;
|
const UInt8 *iptr, *iend, *istart;
|
||||||
UInt8 *optr, *oend;
|
UInt8 *optr, *oend;
|
||||||
|
int lblen[4];
|
||||||
|
|
||||||
data = NULL;
|
data = NULL;
|
||||||
cf.data = NULL;
|
cf.data = NULL;
|
||||||
|
@ -271,10 +282,43 @@ static void TestConverter(const char *filename)
|
||||||
cr.run(*cr.data, kLineBreakKeep, &st, &optr, oend, &iptr, iend);
|
cr.run(*cr.data, kLineBreakKeep, &st, &optr, oend, &iptr, iend);
|
||||||
if (iptr != iend) {
|
if (iptr != iend) {
|
||||||
Failf("some data failed to convert");
|
Failf("some data failed to convert");
|
||||||
continue;
|
} else {
|
||||||
|
len2 = optr - gBuffer[2];
|
||||||
|
Check(gBuffer[0], len0, gBuffer[1], len1, gBuffer[2], len2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
lblen[i] = strlen(kLineBreakData[i]) + 1;
|
||||||
|
}
|
||||||
|
istart = (const UInt8 *)kLineBreakData[0];
|
||||||
|
for (k = 0; k < 2; k++) {
|
||||||
|
cc = k == 0 ? cf : cr;
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
len1 = lblen[0]; /* Input data */
|
||||||
|
len0 = lblen[i]; /* Expected output */
|
||||||
|
for (j = 1; j < len1; j++) {
|
||||||
|
StringPrintf(gTestName, sizeof(gTestName),
|
||||||
|
"%s %s linebreak %s split=%d", filename,
|
||||||
|
k == 0 ? "forward" : "backward", kLineBreakName[i],
|
||||||
|
j);
|
||||||
|
st.data = 0;
|
||||||
|
iptr = istart;
|
||||||
|
optr = gBuffer[0];
|
||||||
|
oend = optr + kConvertBufferSize;
|
||||||
|
iend = istart + j;
|
||||||
|
cc.run(*cc.data, i, &st, &optr, oend, &iptr, iend);
|
||||||
|
iend = istart + len1;
|
||||||
|
cc.run(*cc.data, i, &st, &optr, oend, &iptr, iend);
|
||||||
|
if (iptr != iend) {
|
||||||
|
Failf("some data failed to convert");
|
||||||
|
} else {
|
||||||
|
len2 = optr - gBuffer[0];
|
||||||
|
Check(kLineBreakData[i], len0, kLineBreakData[0], len1,
|
||||||
|
gBuffer[0], len2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
len2 = optr - gBuffer[2];
|
|
||||||
Check(len0, len1, len2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user