Commit Diff


commit - 1bcb8303e1b913df31980ca332a5619424a72b01
commit + 23a912c214e3f9a8bbb2bf03e65c2d3a538f869f
blob - a53c81059b97b7a452859d64d8ffce6e0f1981a8
blob + 9a744fc86400601b285b64cbdfccbc8f5528169a
--- Makefile.am
+++ Makefile.am
@@ -1,3 +1,5 @@
+SUBDIRS = test
+
 bin_PROGRAMS =		telescope
 
 EXTRA_telescope_SOURCES = compat/ohash.h compat/queue.h compat/imsg.h contrib
blob - 11c79c8a7b393f4f85bdb0507fa4fa3dc3a52377
blob + 7e1ac8f057fb305ae46a35ce56d4d4b26741a7f7
--- configure.ac
+++ configure.ac
@@ -140,6 +140,7 @@ CC_ADD_CHECK_FLAGS([-Wno-unused-parameter])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_FILES([
 	Makefile
+	test/Makefile
 	pages/about_new.gmi
 	pages/about_crash.gmi
 ])
blob - /dev/null
blob + 499ab52d3c45d5c81ffcf4e765fc8c2012141ce9 (mode 644)
--- /dev/null
+++ test/Makefile.am
@@ -0,0 +1,10 @@
+check_PROGRAMS =	gmparser
+
+gmparser_SOURCES =	gmparser.c				\
+			$(top_srcdir)/compat.h			\
+			$(top_srcdir)/parser.c			\
+			$(top_srcdir)/parser.h			\
+			$(top_srcdir)/parser_gophermap.c	\
+			$(top_srcdir)/utils.c
+
+TESTS =	test-gmparser
blob - /dev/null
blob + 858ea04c280b7be51e7979430f769c5e76142687 (mode 644)
--- /dev/null
+++ test/gm-00
@@ -0,0 +1 @@
+i\o/		error.host	1
blob - /dev/null
blob + 8395c9322108a5a88073b4f01932b6d001338d72 (mode 644)
--- /dev/null
+++ test/gm-01
@@ -0,0 +1,6 @@
+i\o/		error.host	1
+i		error.host	1
+iServer uptime:		error.host	1
+i		error.host	1
+0gophermap~                            2022-Jan-19 23:31     0.1 KB	/gophermap~	localhost	70
+0greetings.txt                         2022-Jan-19 23:19     0.0 KB	/greetings.txt	localhost	70
blob - /dev/null
blob + dccf9cf766e339431a64cb72e3b617f60328af18 (mode 644)
--- /dev/null
+++ test/gmparser.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2022 Omar Polo <op@omarpolo.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "compat.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "parser.h"
+#include "telescope.h"
+
+void
+erase_buffer(struct buffer *buffer)
+{
+	return;
+}
+
+int
+main(void)
+{
+	struct tab	 tab;
+	struct hist	 hist;
+	struct evbuffer	*evb;
+	ssize_t		 r;
+	char		 buf[BUFSIZ];
+
+	memset(&tab, 0, sizeof(tab));
+	memset(&hist, 0, sizeof(hist));
+	tab.hist_cur = &hist;
+
+	parser_init(&tab, gophermap_initparser);
+	for (;;) {
+		if ((r = read(0, buf, sizeof(buf))) == -1)
+			err(1, "read");
+		if (r == 0)
+			break;
+		if (!parser_parse(&tab, buf, r))
+			err(1, "parser_parse");
+	}
+
+	if (!parser_free(&tab))
+		err(1, "parser_free");
+
+	if ((evb = evbuffer_new()) == NULL)
+		err(1, "evbuffer_new");
+
+	if (parser_serialize(&tab, evb) == -1)
+		err(1, "parser_serialize");
+
+	evbuffer_write(evb, 1);
+
+	evbuffer_free(evb);
+
+	return 0;
+}
blob - /dev/null
blob + 505d31a995ac800b5dc7e546c7dbb5efa2f87162 (mode 755)
--- /dev/null
+++ test/test-gmparser
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+
+for f in gm-*; do
+	./gmparser < "$f" > "$f.serialized"
+	diff -u "$f" "$f.serialized"
+done