1// Copyright 2009 Google Inc. All Rights Reserved.
2// Author: sanjay@google.com (Sanjay Ghemawat)
3
4#include "raw_printer.h"
5#include <stdio.h>
6#include <string>
7#include "base/logging.h"
8
9using std::string;
10
11#define TEST(a, b)  void TEST_##a##_##b()
12#define RUN_TEST(a, b)  TEST_##a##_##b()
13
14TEST(RawPrinter, Empty) {
15  char buffer[1];
16  base::RawPrinter printer(buffer, arraysize(buffer));
17  CHECK_EQ(0, printer.length());
18  CHECK_EQ(string(""), buffer);
19  CHECK_EQ(0, printer.space_left());
20  printer.Printf("foo");
21  CHECK_EQ(string(""), string(buffer));
22  CHECK_EQ(0, printer.length());
23  CHECK_EQ(0, printer.space_left());
24}
25
26TEST(RawPrinter, PartiallyFilled) {
27  char buffer[100];
28  base::RawPrinter printer(buffer, arraysize(buffer));
29  printer.Printf("%s %s", "hello", "world");
30  CHECK_EQ(string("hello world"), string(buffer));
31  CHECK_EQ(11, printer.length());
32  CHECK_LT(0, printer.space_left());
33}
34
35TEST(RawPrinter, Truncated) {
36  char buffer[3];
37  base::RawPrinter printer(buffer, arraysize(buffer));
38  printer.Printf("%d", 12345678);
39  CHECK_EQ(string("12"), string(buffer));
40  CHECK_EQ(2, printer.length());
41  CHECK_EQ(0, printer.space_left());
42}
43
44TEST(RawPrinter, ExactlyFilled) {
45  char buffer[12];
46  base::RawPrinter printer(buffer, arraysize(buffer));
47  printer.Printf("%s %s", "hello", "world");
48  CHECK_EQ(string("hello world"), string(buffer));
49  CHECK_EQ(11, printer.length());
50  CHECK_EQ(0, printer.space_left());
51}
52
53int main(int argc, char **argv) {
54  RUN_TEST(RawPrinter, Empty);
55  RUN_TEST(RawPrinter, PartiallyFilled);
56  RUN_TEST(RawPrinter, Truncated);
57  RUN_TEST(RawPrinter, ExactlyFilled);
58  printf("PASS\n");
59  return 0;   // 0 means success
60}
61