/*

	9unit
	Copyright (C) Jonathan Lamothe <jonathan@jlamothe.net>

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU Lesser General Public License as
	published by the Free Software Foundation, either version 3 of the
	License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful, but
	WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	Lesser General Public License for more details.

	You should have received a copy of the GNU Lesser General Public
	License along with this program.  If not, see
	<http://www.gnu.org/licenses/>.

*/

#include <u.h>
#include <libc.h>

#include "../9unit.h"
#include "util.h"
#include "append-test-log.h"

// Local Prototypes

static void append_to_empty(TestState *);
static void append_to_existing(TestState *);

// Public Functions

void
test_append_test_log(TestState *s)
{
	print("append_test_log()\n");
	append_to_empty(s);
	append_to_existing(s);
}

// Local Functions

static void
append_to_empty(TestState *s)
{
	TestState test;
	print("\tappend to empty\n");
	mk_sample_state(&test);
	append_test_log(&test, "foo");

	// first_log shouldn't be null
	print("\t\tfirst_log\n");
	chk_ptr_ne(
		s,
		"ERROR: append_test_log(): append to empty: first_log:",
		test.first_log,
		0
	);

	// log should say "foo"
	print("\t\t\ttext\n");
	chk_str_eq(
		s,
		"ERROR: append_test_log(): append to empty: first_log: text:",
		test.first_log->text,
		"foo"
	);

	// last_log should match first_log
	print("\t\tlast_log\n");
	chk_ptr_eq(
		s,
		"ERROR: append_test_log(): append to empty: last_log:",
		test.last_log,
		test.first_log
	);
}

static void
append_to_existing(TestState *s)
{
	TestState test;
	TestLogEntry first, second;
	print("\tappend to existing\n");

	// build initial state/log
	mk_sample_state(&test);
	first.text = "foo";
	first.next = &second;
	second.text = "bar";
	second.next = 0;
	test.first_log = &first;
	test.last_log = &second;

	append_test_log(&test, "baz");

	// first shouldn't change
	print("\t\tfirst_log\n");
	chk_ptr_eq(
		s,
		"ERROR: append_test_log(): first_log:",
		test.first_log,
		&first
	);
}

//jl