/* * conf-unittest.c - config parser unit tests * Copyright (c) 2012 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "config.h" #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "src/conf.h" #include "src/test_harness.h" #ifndef HAVE_FMEMOPEN #include "src/common/fmemopen.h" #endif FILE *fopenstr (const char *str) { /* strlen(str) instead of strlen(str) + 1 because files shouldn't appear * null-terminated. Cast away constness because we're in read mode, but the * fmemopen prototype has no way to express that. */ return fmemopen ( (char *) str, strlen (str), "r"); } TEST (parse_empty) { /* can't do a truly empty file - fmemopen() combusts */ FILE *f = fopenstr ("\n"); ASSERT_NE (NULL, f); struct conf_entry *e = conf_parse (f); EXPECT_NULL (e); conf_free (e); } TEST (parse_basic) { FILE *f = fopenstr ("foo bar\nbaz quxx\n"); ASSERT_NE (NULL, f); struct conf_entry *e = conf_parse (f); ASSERT_NE (NULL, e); EXPECT_STREQ (e->key, "foo"); EXPECT_STREQ (e->value, "bar"); ASSERT_NE (NULL, e->next); EXPECT_STREQ (e->next->key, "baz"); EXPECT_STREQ (e->next->value, "quxx"); ASSERT_NULL (e->next->next); conf_free (e); } TEST (parse_novalue) { FILE *f = fopenstr ("abcdef\n"); ASSERT_NE (NULL, f); struct conf_entry *e = conf_parse (f); ASSERT_NE (NULL, e); EXPECT_STREQ (e->key, "abcdef"); EXPECT_NULL (e->value); EXPECT_NULL (e->next); conf_free (e); } TEST (parse_whitespace) { FILE *f = fopenstr (" fribble grotz \n"); ASSERT_NE (NULL, f); struct conf_entry *e = conf_parse (f); ASSERT_NE (NULL, e); EXPECT_STREQ (e->key, "fribble"); EXPECT_STREQ (e->value, "grotz "); EXPECT_NULL (e->next); conf_free (e); } TEST (parse_comment) { FILE *f = fopenstr ("#foo bar\nbaz quxx\n"); ASSERT_NE (NULL, f); struct conf_entry *e = conf_parse (f); ASSERT_NE (NULL, e); EXPECT_STREQ (e->key, "baz"); EXPECT_STREQ (e->value, "quxx"); EXPECT_NULL (e->next); conf_free (e); } TEST_HARNESS_MAIN