/*

	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 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
	General Public License for more details.

	You should have received a copy of the GNU 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 "initial-state.h"

// Internal Prototypes

static void tests(TestState *);
decl_test(initial_test_count);
decl_test(initial_pass_count);
decl_test(initial_fail_count);
decl_test(initial_pend_count);
decl_test(initial_first_log);
decl_test(initial_last_log);
decl_test(initial_ptr);

// Public Functions

void
test_initial_state(TestState *s)
{
	print("initial state\n");
	run_test(s, initial_test_count);
	run_test(s, initial_pass_count);
	run_test(s, initial_fail_count);
	run_test(s, initial_pend_count);
	run_test(s, initial_first_log);
	run_test(s, initial_last_log);
	run_test(s, initial_ptr);
}

// Internal Functions

def_test(initial_test_count, s)
{
	TestState *scpy = s->ptr;
	print("\trun\n");
	if (scpy->run == 0) return test_success;
	append_test_log(s, "initial run was nonzero");
	return test_failure;
}

def_test(initial_pass_count, s)
{
	TestState *scpy = s->ptr;
	print("\tpassed\n");
	if (scpy->passed == 0) return test_success;
	append_test_log(s, "initial passed was nonzero");
	return test_failure;
}

def_test(initial_fail_count, s)
{
	TestState *scpy = s->ptr;
	print("\tfailed\n");
	if (scpy->failed == 0) return test_success;
	append_test_log(s, "initial failed was nonzero");
	return test_failure;
}

def_test(initial_pend_count, s)
{
	TestState *scpy = s->ptr;
	print("\tpending\n");
	if (scpy->pending == 0) return test_success;
	append_test_log(s, "initial pending was nonzero");
	return test_failure;
}

def_test(initial_first_log, s)
{
	TestState *scpy = s->ptr;
	print("\tfirst_log\n");
	if (scpy->first_log == 0) return test_success;
	append_test_log(s, "initial first_log was not null");
	return test_failure;
}

def_test(initial_last_log, s)
{
	TestState *scpy = s->ptr;
	print("\tlast_log\n");
	if (scpy->last_log == 0) return test_success;
	append_test_log(s, "initial last_log was not null");
	return test_failure;
}

def_test(initial_ptr, s)
{
	TestState *scpy = s->ptr;
	print("\tptr\n");
	if (scpy->ptr == 0) return test_success;
	append_test_log(s, "initial ptr was not null");
	return test_failure;
}

//jl