rewrite the integration tests into C
This commit is contained in:
parent
739c7ea462
commit
e45479ea96
7 changed files with 115 additions and 37 deletions
|
@ -24,7 +24,7 @@ OBJECTS = iast.o iast-czech.o transliteration.o transcription.o utf8.o \
|
||||||
velthuis.o
|
velthuis.o
|
||||||
|
|
||||||
TEST_OBJECTS = tests/main.o tests/translit.o tests/transcript.o \
|
TEST_OBJECTS = tests/main.o tests/translit.o tests/transcript.o \
|
||||||
tests/velthuis.o tests/utf8.o
|
tests/velthuis.o tests/utf8.o tests/integration.o
|
||||||
|
|
||||||
AUX_FILES = Makefile configure aclocal.m4 install-sh config.h* *.log \
|
AUX_FILES = Makefile configure aclocal.m4 install-sh config.h* *.log \
|
||||||
*.status *.cache
|
*.status *.cache
|
||||||
|
@ -36,7 +36,7 @@ include $(wildcard *.d tests/*.d)
|
||||||
$(PROGNAME): main.o $(OBJECTS)
|
$(PROGNAME): main.o $(OBJECTS)
|
||||||
$(QUIET_LD) $(CC) $^ -o $@ $(LFLAGS)
|
$(QUIET_LD) $(CC) $^ -o $@ $(LFLAGS)
|
||||||
|
|
||||||
test: tests/test
|
test: all
|
||||||
tests/test
|
tests/test
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
|
|
97
tests/integration.c
Normal file
97
tests/integration.c
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
#include "test.h"
|
||||||
|
#include "integration.h"
|
||||||
|
#include "../transliteration.h"
|
||||||
|
|
||||||
|
static char *exec_command(const char *command)
|
||||||
|
{
|
||||||
|
char buf[512], *ret = NULL;
|
||||||
|
FILE *proc;
|
||||||
|
int n, len = 0;
|
||||||
|
|
||||||
|
proc = popen(command, "r");
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
n = fread(buf, 1, sizeof(buf), proc);
|
||||||
|
if (n == 0 || n == -1)
|
||||||
|
break;
|
||||||
|
ret = realloc(ret, len + n + 1);
|
||||||
|
memcpy(ret + len, buf, n);
|
||||||
|
len += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
ret[len] = '\0';
|
||||||
|
|
||||||
|
pclose(proc);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *read_file(const char *filename)
|
||||||
|
{
|
||||||
|
unsigned char buf[512];
|
||||||
|
char *ret = NULL;
|
||||||
|
int fd, len = 0, n;
|
||||||
|
|
||||||
|
fd = open(filename, O_RDONLY);
|
||||||
|
while (1) {
|
||||||
|
n = read(fd, buf, sizeof(buf));
|
||||||
|
if (n == 0 || n == -1)
|
||||||
|
break;
|
||||||
|
ret = realloc(ret, len + n + 1);
|
||||||
|
memcpy(ret + len, buf, n);
|
||||||
|
len += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
ret[len] = '\0';
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_file_transliteration(const char *filename)
|
||||||
|
{
|
||||||
|
char cmd[512], *a, *b;
|
||||||
|
|
||||||
|
sprintf(cmd, "./iast -f %s | ./iast -r -f -", filename);
|
||||||
|
a = exec_command(cmd);
|
||||||
|
b = read_file(filename);
|
||||||
|
ck_assert_str_eq(a, b);
|
||||||
|
free(a);
|
||||||
|
free(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
START_TEST(test_integration)
|
||||||
|
{
|
||||||
|
test_file_transliteration("tests/texts/bhagavadgita-1.txt");
|
||||||
|
test_file_transliteration("tests/texts/mandukya-upanishad.txt");
|
||||||
|
test_file_transliteration("tests/texts/rg-01001.txt");
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_version)
|
||||||
|
{
|
||||||
|
char *out = exec_command("./iast -v");
|
||||||
|
ck_assert_str_eq("iast v2.0.0\n", out);
|
||||||
|
free(out);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(test_usage)
|
||||||
|
{
|
||||||
|
char *out;
|
||||||
|
out = exec_command("./iast");
|
||||||
|
out[44] = '\0'; /* the first line is enough here */
|
||||||
|
ck_assert_str_eq("iast, a helper for Sanskrit transliteration.", out);
|
||||||
|
free(out);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
void register_integration_tests(TCase *test_case)
|
||||||
|
{
|
||||||
|
tcase_add_test(test_case, test_integration);
|
||||||
|
tcase_add_test(test_case, test_version);
|
||||||
|
tcase_add_test(test_case, test_usage);
|
||||||
|
}
|
8
tests/integration.h
Normal file
8
tests/integration.h
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef __TEST_INTEGRATION_H
|
||||||
|
#define __TEST_INTEGRATION_H
|
||||||
|
|
||||||
|
#include <check.h>
|
||||||
|
|
||||||
|
void register_integration_tests(TCase *test_case);
|
||||||
|
|
||||||
|
#endif /* __TEST_INTEGRATION_H */
|
|
@ -1,29 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
usage=$(./iast -h)
|
|
||||||
test -n $(echo "$usage" | grep "iast [flags and text arguments in any order]")
|
|
||||||
|
|
||||||
version=$(./iast -v)
|
|
||||||
test "$version" = "iast v2.0.0"
|
|
||||||
|
|
||||||
./iast -f tests/texts/bhagavadgita-1.txt |
|
|
||||||
./iast -r -f - >/tmp/iast-bhagavadgita-1.txt.out
|
|
||||||
./iast -f tests/texts/mandukya-upanishad.txt |
|
|
||||||
./iast -r -f - >/tmp/iast-mandukya-upanishad.txt.out
|
|
||||||
./iast -f tests/texts/rg-01001.txt |
|
|
||||||
./iast -r -f - >/tmp/rg-01001.txt.out
|
|
||||||
|
|
||||||
expected=$(sha1sum tests/texts/bhagavadgita-1.txt | head -c40)
|
|
||||||
computed=$(sha1sum /tmp/iast-bhagavadgita-1.txt.out | head -c40)
|
|
||||||
test "$expected" = "$computed"
|
|
||||||
|
|
||||||
expected=$(sha1sum tests/texts/mandukya-upanishad.txt | head -c40)
|
|
||||||
computed=$(sha1sum /tmp/iast-mandukya-upanishad.txt.out | head -c40)
|
|
||||||
test "$expected" = "$computed"
|
|
||||||
|
|
||||||
expected=$(sha1sum tests/texts/rg-01001.txt | head -c40)
|
|
||||||
computed=$(sha1sum /tmp/rg-01001.txt.out | head -c40)
|
|
||||||
test "$expected" = "$computed"
|
|
||||||
|
|
||||||
printf "\033[32mpassed\033[0m\n"
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "transcript.h"
|
#include "transcript.h"
|
||||||
#include "velthuis.h"
|
#include "velthuis.h"
|
||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
|
#include "integration.h"
|
||||||
|
|
||||||
static Suite *create_test_suite()
|
static Suite *create_test_suite()
|
||||||
{
|
{
|
||||||
|
@ -17,6 +18,8 @@ static Suite *create_test_suite()
|
||||||
register_velthuis_encoder_tests(test_case);
|
register_velthuis_encoder_tests(test_case);
|
||||||
register_utf8_tests(test_case);
|
register_utf8_tests(test_case);
|
||||||
|
|
||||||
|
register_integration_tests(test_case);
|
||||||
|
|
||||||
suite_add_tcase(suite, test_case);
|
suite_add_tcase(suite, test_case);
|
||||||
|
|
||||||
return suite;
|
return suite;
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <check.h>
|
#include <check.h>
|
||||||
|
|
||||||
#endif /* __TEST_TEST_H */
|
#endif /* __TEST_TEST_H */
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
/* https://en.wikipedia.org/wiki/Velthuis */
|
/* https://en.wikipedia.org/wiki/Velthuis */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include "compat.h"
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "velthuis.h"
|
#include "velthuis.h"
|
||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
|
|
||||||
|
@ -61,9 +58,9 @@ int encode_velthuis_to_iast_punctation(const char *text, char **out)
|
||||||
const struct encoder_tuple *tuple;
|
const struct encoder_tuple *tuple;
|
||||||
char *buf, *dest;
|
char *buf, *dest;
|
||||||
|
|
||||||
buf = calloc(1, strlen(text) << 1);
|
buf = calloc(1, strlen(text) * 2); /* should be enough */
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
return NULL;
|
return ENOMEM;
|
||||||
|
|
||||||
dest = buf;
|
dest = buf;
|
||||||
while (str < end) {
|
while (str < end) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue