1 /* 2 * conf-unittest.c - config parser unit tests 3 * Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "config.h" 9 10 #include <errno.h> 11 #include <stdio.h> 12 #include <stdlib.h> 13 #include <string.h> 14 15 #include "src/conf.h" 16 #include "src/test_harness.h" 17 18 #ifndef HAVE_FMEMOPEN 19 #include "src/common/fmemopen.h" 20 #endif 21 22 FILE *fopenstr (const char *str) 23 { 24 /* strlen(str) instead of strlen(str) + 1 because files shouldn't appear 25 * null-terminated. Cast away constness because we're in read mode, but the 26 * fmemopen prototype has no way to express that. */ 27 return fmemopen ( (char *) str, strlen (str), "r"); 28 } 29 30 TEST (parse_empty) 31 { 32 /* can't do a truly empty file - fmemopen() combusts */ 33 FILE *f = fopenstr ("\n"); 34 ASSERT_NE (NULL, f); 35 struct conf_entry *e = conf_parse (f); 36 EXPECT_NULL (e); 37 conf_free (e); 38 } 39 40 TEST (parse_basic) 41 { 42 FILE *f = fopenstr ("foo bar\nbaz quxx\n"); 43 ASSERT_NE (NULL, f); 44 struct conf_entry *e = conf_parse (f); 45 ASSERT_NE (NULL, e); 46 EXPECT_STREQ (e->key, "foo"); 47 EXPECT_STREQ (e->value, "bar"); 48 ASSERT_NE (NULL, e->next); 49 EXPECT_STREQ (e->next->key, "baz"); 50 EXPECT_STREQ (e->next->value, "quxx"); 51 ASSERT_NULL (e->next->next); 52 conf_free (e); 53 } 54 55 TEST (parse_novalue) 56 { 57 FILE *f = fopenstr ("abcdef\n"); 58 ASSERT_NE (NULL, f); 59 struct conf_entry *e = conf_parse (f); 60 ASSERT_NE (NULL, e); 61 EXPECT_STREQ (e->key, "abcdef"); 62 EXPECT_NULL (e->value); 63 EXPECT_NULL (e->next); 64 conf_free (e); 65 } 66 67 TEST (parse_whitespace) 68 { 69 FILE *f = fopenstr (" fribble grotz \n"); 70 ASSERT_NE (NULL, f); 71 struct conf_entry *e = conf_parse (f); 72 ASSERT_NE (NULL, e); 73 EXPECT_STREQ (e->key, "fribble"); 74 EXPECT_STREQ (e->value, "grotz "); 75 EXPECT_NULL (e->next); 76 conf_free (e); 77 } 78 79 TEST (parse_comment) 80 { 81 FILE *f = fopenstr ("#foo bar\nbaz quxx\n"); 82 ASSERT_NE (NULL, f); 83 struct conf_entry *e = conf_parse (f); 84 ASSERT_NE (NULL, e); 85 EXPECT_STREQ (e->key, "baz"); 86 EXPECT_STREQ (e->value, "quxx"); 87 EXPECT_NULL (e->next); 88 conf_free (e); 89 } 90 91 TEST_HARNESS_MAIN 92