15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2009 Google Inc. All Rights Reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Author: sanjay@google.com (Sanjay Ghemawat)
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "raw_printer.h"
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using std::string;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST(a, b)  void TEST_##a##_##b()
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RUN_TEST(a, b)  TEST_##a##_##b()
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RawPrinter, Empty) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char buffer[1];
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RawPrinter printer(buffer, arraysize(buffer));
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(0, printer.length());
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(string(""), buffer);
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(0, printer.space_left());
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printer.Printf("foo");
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(string(""), string(buffer));
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(0, printer.length());
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(0, printer.space_left());
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RawPrinter, PartiallyFilled) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char buffer[100];
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RawPrinter printer(buffer, arraysize(buffer));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printer.Printf("%s %s", "hello", "world");
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(string("hello world"), string(buffer));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(11, printer.length());
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_LT(0, printer.space_left());
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RawPrinter, Truncated) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char buffer[3];
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RawPrinter printer(buffer, arraysize(buffer));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printer.Printf("%d", 12345678);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(string("12"), string(buffer));
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(2, printer.length());
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(0, printer.space_left());
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(RawPrinter, ExactlyFilled) {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char buffer[12];
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RawPrinter printer(buffer, arraysize(buffer));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printer.Printf("%s %s", "hello", "world");
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(string("hello world"), string(buffer));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(11, printer.length());
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK_EQ(0, printer.space_left());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main(int argc, char **argv) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RUN_TEST(RawPrinter, Empty);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RUN_TEST(RawPrinter, PartiallyFilled);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RUN_TEST(RawPrinter, Truncated);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RUN_TEST(RawPrinter, ExactlyFilled);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printf("PASS\n");
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;   // 0 means success
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
61