Upgrade jsoncpp to version 1.0.0 to match the copy used by Skia's testing tools.

This mirrors the contents of the upstream repository at...
https://github.com/open-source-parsers/jsoncpp/commit/7165f6ac4c482e68475c9e1dac086f9e12fff0d0

Bug: 17997234
Change-Id: I87a8312f9d030e5027f4ca5b1568f8374a856632
diff --git a/src/test_lib_json/jsontest.h b/src/test_lib_json/jsontest.h
index 207692b..5c56a40 100644
--- a/src/test_lib_json/jsontest.h
+++ b/src/test_lib_json/jsontest.h
@@ -4,15 +4,15 @@
 // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
 
 #ifndef JSONTEST_H_INCLUDED
-# define JSONTEST_H_INCLUDED
+#define JSONTEST_H_INCLUDED
 
-# include <json/config.h>
-# include <json/value.h>
-# include <json/writer.h>
-# include <stdio.h>
-# include <deque>
-# include <sstream>
-# include <string>
+#include <json/config.h>
+#include <json/value.h>
+#include <json/writer.h>
+#include <stdio.h>
+#include <deque>
+#include <sstream>
+#include <string>
 
 // //////////////////////////////////////////////////////////////////
 // //////////////////////////////////////////////////////////////////
@@ -20,8 +20,6 @@
 // //////////////////////////////////////////////////////////////////
 // //////////////////////////////////////////////////////////////////
 
-
-
 /** \brief Unit testing framework.
  * \warning: all assertions are non-aborting, test case execution will continue
  *           even if an assertion namespace.
@@ -30,244 +28,253 @@
  */
 namespace JsonTest {
 
+class Failure {
+public:
+  const char* file_;
+  unsigned int line_;
+  std::string expr_;
+  std::string message_;
+  unsigned int nestingLevel_;
+};
 
-   class Failure
-   {
-   public:
-      const char *file_;
-      unsigned int line_;
-      std::string expr_;
-      std::string message_;
-      unsigned int nestingLevel_;
-   };
+/// Context used to create the assertion callstack on failure.
+/// Must be a POD to allow inline initialisation without stepping
+/// into the debugger.
+struct PredicateContext {
+  typedef unsigned int Id;
+  Id id_;
+  const char* file_;
+  unsigned int line_;
+  const char* expr_;
+  PredicateContext* next_;
+  /// Related Failure, set when the PredicateContext is converted
+  /// into a Failure.
+  Failure* failure_;
+};
 
+class TestResult {
+public:
+  TestResult();
 
-   /// Context used to create the assertion callstack on failure.
-   /// Must be a POD to allow inline initialisation without stepping 
-   /// into the debugger.
-   struct PredicateContext
-   {
-      typedef unsigned int Id;
-      Id id_;
-      const char *file_;
-      unsigned int line_;
-      const char *expr_;
-      PredicateContext *next_;
-      /// Related Failure, set when the PredicateContext is converted
-      /// into a Failure.
-      Failure *failure_;
-   };
+  /// \internal Implementation detail for assertion macros
+  /// Not encapsulated to prevent step into when debugging failed assertions
+  /// Incremented by one on assertion predicate entry, decreased by one
+  /// by addPredicateContext().
+  PredicateContext::Id predicateId_;
 
-   class TestResult
-   {
-   public:
-      TestResult();
+  /// \internal Implementation detail for predicate macros
+  PredicateContext* predicateStackTail_;
 
-      /// \internal Implementation detail for assertion macros
-      /// Not encapsulated to prevent step into when debugging failed assertions
-      /// Incremented by one on assertion predicate entry, decreased by one
-      /// by addPredicateContext().
-      PredicateContext::Id predicateId_;
+  void setTestName(const std::string& name);
 
-      /// \internal Implementation detail for predicate macros
-      PredicateContext *predicateStackTail_;
+  /// Adds an assertion failure.
+  TestResult&
+  addFailure(const char* file, unsigned int line, const char* expr = 0);
 
-      void setTestName( const std::string &name );
+  /// Removes the last PredicateContext added to the predicate stack
+  /// chained list.
+  /// Next messages will be targed at the PredicateContext that was removed.
+  TestResult& popPredicateContext();
 
-      /// Adds an assertion failure.
-      TestResult &addFailure( const char *file, unsigned int line,
-                              const char *expr = 0 );
+  bool failed() const;
 
-      /// Removes the last PredicateContext added to the predicate stack
-      /// chained list.
-      /// Next messages will be targed at the PredicateContext that was removed.
-      TestResult &popPredicateContext();
+  void printFailure(bool printTestName) const;
 
-      bool failed() const;
+  // Generic operator that will work with anything ostream can deal with.
+  template <typename T> TestResult& operator<<(const T& value) {
+    std::ostringstream oss;
+    oss.precision(16);
+    oss.setf(std::ios_base::floatfield);
+    oss << value;
+    return addToLastFailure(oss.str());
+  }
 
-      void printFailure( bool printTestName ) const;
+  // Specialized versions.
+  TestResult& operator<<(bool value);
+  // std:ostream does not support 64bits integers on all STL implementation
+  TestResult& operator<<(Json::Int64 value);
+  TestResult& operator<<(Json::UInt64 value);
 
-      // Generic operator that will work with anything ostream can deal with.
-      template <typename T>
-      TestResult &operator << ( const T& value ) {
-         std::ostringstream oss;
-         oss.precision( 16 );
-         oss.setf( std::ios_base::floatfield );
-         oss << value;
-         return addToLastFailure(oss.str());
-      }
+private:
+  TestResult& addToLastFailure(const std::string& message);
+  unsigned int getAssertionNestingLevel() const;
+  /// Adds a failure or a predicate context
+  void addFailureInfo(const char* file,
+                      unsigned int line,
+                      const char* expr,
+                      unsigned int nestingLevel);
+  static std::string indentText(const std::string& text,
+                                const std::string& indent);
 
-      // Specialized versions.
-      TestResult &operator << ( bool value );
-      // std:ostream does not support 64bits integers on all STL implementation
-      TestResult &operator << ( Json::Int64 value );
-      TestResult &operator << ( Json::UInt64 value );
+  typedef std::deque<Failure> Failures;
+  Failures failures_;
+  std::string name_;
+  PredicateContext rootPredicateNode_;
+  PredicateContext::Id lastUsedPredicateId_;
+  /// Failure which is the target of the messages added using operator <<
+  Failure* messageTarget_;
+};
 
-   private:
-      TestResult &addToLastFailure( const std::string &message );
-      unsigned int getAssertionNestingLevel() const;
-      /// Adds a failure or a predicate context
-      void addFailureInfo( const char *file, unsigned int line,
-                           const char *expr, unsigned int nestingLevel  );
-      static std::string indentText( const std::string &text, 
-                                     const std::string &indent );
+class TestCase {
+public:
+  TestCase();
 
-      typedef std::deque<Failure> Failures;
-      Failures failures_;
-      std::string name_;
-      PredicateContext rootPredicateNode_;
-      PredicateContext::Id lastUsedPredicateId_;
-      /// Failure which is the target of the messages added using operator <<
-      Failure *messageTarget_;
-   };
+  virtual ~TestCase();
 
+  void run(TestResult& result);
 
-   class TestCase
-   {
-   public:
-      TestCase();
+  virtual const char* testName() const = 0;
 
-      virtual ~TestCase();
+protected:
+  TestResult* result_;
 
-      void run( TestResult &result );
+private:
+  virtual void runTestCase() = 0;
+};
 
-      virtual const char *testName() const = 0;
+/// Function pointer type for TestCase factory
+typedef TestCase* (*TestCaseFactory)();
 
-   protected:
-      TestResult *result_;
+class Runner {
+public:
+  Runner();
 
-   private:
-      virtual void runTestCase() = 0;
-   };
+  /// Adds a test to the suite
+  Runner& add(TestCaseFactory factory);
 
-   /// Function pointer type for TestCase factory
-   typedef TestCase *(*TestCaseFactory)();
+  /// Runs test as specified on the command-line
+  /// If no command-line arguments are provided, run all tests.
+  /// If --list-tests is provided, then print the list of all test cases
+  /// If --test <testname> is provided, then run test testname.
+  int runCommandLine(int argc, const char* argv[]) const;
 
-   class Runner
-   {
-   public:
-      Runner();
+  /// Runs all the test cases
+  bool runAllTest(bool printSummary) const;
 
-      /// Adds a test to the suite
-      Runner &add( TestCaseFactory factory );
+  /// Returns the number of test case in the suite
+  unsigned int testCount() const;
 
-      /// Runs test as specified on the command-line
-      /// If no command-line arguments are provided, run all tests.
-      /// If --list-tests is provided, then print the list of all test cases
-      /// If --test <testname> is provided, then run test testname.
-      int runCommandLine( int argc, const char *argv[] ) const;
+  /// Returns the name of the test case at the specified index
+  std::string testNameAt(unsigned int index) const;
 
-      /// Runs all the test cases
-      bool runAllTest( bool printSummary ) const;
+  /// Runs the test case at the specified index using the specified TestResult
+  void runTestAt(unsigned int index, TestResult& result) const;
 
-      /// Returns the number of test case in the suite
-      unsigned int testCount() const;
+  static void printUsage(const char* appName);
 
-      /// Returns the name of the test case at the specified index
-      std::string testNameAt( unsigned int index ) const;
+private: // prevents copy construction and assignment
+  Runner(const Runner& other);
+  Runner& operator=(const Runner& other);
 
-      /// Runs the test case at the specified index using the specified TestResult
-      void runTestAt( unsigned int index, TestResult &result ) const;
+private:
+  void listTests() const;
+  bool testIndex(const std::string& testName, unsigned int& index) const;
+  static void preventDialogOnCrash();
 
-      static void printUsage( const char *appName );
+private:
+  typedef std::deque<TestCaseFactory> Factories;
+  Factories tests_;
+};
 
-   private: // prevents copy construction and assignment
-      Runner( const Runner &other );
-      Runner &operator =( const Runner &other );
+template <typename T, typename U>
+TestResult& checkEqual(TestResult& result,
+                       const T& expected,
+                       const U& actual,
+                       const char* file,
+                       unsigned int line,
+                       const char* expr) {
+  if (static_cast<U>(expected) != actual) {
+    result.addFailure(file, line, expr);
+    result << "Expected: " << static_cast<U>(expected) << "\n";
+    result << "Actual  : " << actual;
+  }
+  return result;
+}
 
-   private:
-      void listTests() const;
-      bool testIndex( const std::string &testName, unsigned int &index ) const;
-      static void preventDialogOnCrash();
-
-   private:
-      typedef std::deque<TestCaseFactory> Factories;
-      Factories tests_;
-   };
-
-   template<typename T, typename U>
-   TestResult &
-   checkEqual( TestResult &result, const T &expected, const U &actual, 
-               const char *file, unsigned int line, const char *expr )
-   {
-      if ( expected != actual )
-      {
-         result.addFailure( file, line, expr );
-         result << "Expected: " << expected << "\n";
-         result << "Actual  : " << actual;
-      }
-      return result;
-   }
-
-
-   TestResult &
-   checkStringEqual( TestResult &result, 
-                     const std::string &expected, const std::string &actual,
-                     const char *file, unsigned int line, const char *expr );
+TestResult& checkStringEqual(TestResult& result,
+                             const std::string& expected,
+                             const std::string& actual,
+                             const char* file,
+                             unsigned int line,
+                             const char* expr);
 
 } // namespace JsonTest
 
-
 /// \brief Asserts that the given expression is true.
 /// JSONTEST_ASSERT( x == y ) << "x=" << x << ", y=" << y;
 /// JSONTEST_ASSERT( x == y );
-#define JSONTEST_ASSERT( expr )                                               \
-   if ( expr )                                                                \
-   {                                                                          \
-   }                                                                          \
-   else                                                                       \
-      result_->addFailure( __FILE__, __LINE__, #expr )
+#define JSONTEST_ASSERT(expr)                                                  \
+  if (expr) {                                                                  \
+  } else                                                                       \
+  result_->addFailure(__FILE__, __LINE__, #expr)
 
 /// \brief Asserts that the given predicate is true.
-/// The predicate may do other assertions and be a member function of the fixture.
-#define JSONTEST_ASSERT_PRED( expr )                                    \
-   {                                                                    \
-      JsonTest::PredicateContext _minitest_Context = {                  \
-         result_->predicateId_, __FILE__, __LINE__, #expr };            \
-      result_->predicateStackTail_->next_ = &_minitest_Context;         \
-      result_->predicateId_ += 1;                                       \
-      result_->predicateStackTail_ = &_minitest_Context;                \
-      (expr);                                                           \
-      result_->popPredicateContext();                                   \
-   }                                                                    \
-   *result_
+/// The predicate may do other assertions and be a member function of the
+/// fixture.
+#define JSONTEST_ASSERT_PRED(expr)                                             \
+  {                                                                            \
+    JsonTest::PredicateContext _minitest_Context = {                           \
+      result_->predicateId_, __FILE__, __LINE__, #expr                         \
+    };                                                                         \
+    result_->predicateStackTail_->next_ = &_minitest_Context;                  \
+    result_->predicateId_ += 1;                                                \
+    result_->predicateStackTail_ = &_minitest_Context;                         \
+    (expr);                                                                    \
+    result_->popPredicateContext();                                            \
+  }
 
 /// \brief Asserts that two values are equals.
-#define JSONTEST_ASSERT_EQUAL( expected, actual )          \
-   JsonTest::checkEqual( *result_, expected, actual,       \
-                         __FILE__, __LINE__,               \
-                         #expected " == " #actual )
+#define JSONTEST_ASSERT_EQUAL(expected, actual)                                \
+  JsonTest::checkEqual(*result_,                                               \
+                       expected,                                               \
+                       actual,                                                 \
+                       __FILE__,                                               \
+                       __LINE__,                                               \
+                       #expected " == " #actual)
 
 /// \brief Asserts that two values are equals.
-#define JSONTEST_ASSERT_STRING_EQUAL( expected, actual ) \
-   JsonTest::checkStringEqual( *result_,                 \
-      std::string(expected), std::string(actual),        \
-      __FILE__, __LINE__,                                \
-      #expected " == " #actual )
+#define JSONTEST_ASSERT_STRING_EQUAL(expected, actual)                         \
+  JsonTest::checkStringEqual(*result_,                                         \
+                             std::string(expected),                            \
+                             std::string(actual),                              \
+                             __FILE__,                                         \
+                             __LINE__,                                         \
+                             #expected " == " #actual)
+
+/// \brief Asserts that a given expression throws an exception
+#define JSONTEST_ASSERT_THROWS(expr)                                           \
+  {                                                                            \
+    bool _threw = false;                                                       \
+    try {                                                                      \
+      expr;                                                                    \
+    }                                                                          \
+    catch (...) {                                                              \
+      _threw = true;                                                           \
+    }                                                                          \
+    if (!_threw)                                                               \
+      result_->addFailure(                                                     \
+          __FILE__, __LINE__, "expected exception thrown: " #expr);            \
+  }
 
 /// \brief Begin a fixture test case.
-#define JSONTEST_FIXTURE( FixtureType, name )                  \
-   class Test##FixtureType##name : public FixtureType          \
-   {                                                           \
-   public:                                                     \
-      static JsonTest::TestCase *factory()                     \
-      {                                                        \
-         return new Test##FixtureType##name();                 \
-      }                                                        \
-   public: /* overidden from TestCase */                       \
-      virtual const char *testName() const                     \
-      {                                                        \
-         return #FixtureType "/" #name;                        \
-      }                                                        \
-      virtual void runTestCase();                              \
-   };                                                          \
-                                                               \
-   void Test##FixtureType##name::runTestCase()
+#define JSONTEST_FIXTURE(FixtureType, name)                                    \
+  class Test##FixtureType##name : public FixtureType {                         \
+  public:                                                                      \
+    static JsonTest::TestCase* factory() {                                     \
+      return new Test##FixtureType##name();                                    \
+    }                                                                          \
+                                                                               \
+  public: /* overidden from TestCase */                                        \
+    virtual const char* testName() const { return #FixtureType "/" #name; }    \
+    virtual void runTestCase();                                                \
+  };                                                                           \
+                                                                               \
+  void Test##FixtureType##name::runTestCase()
 
-#define JSONTEST_FIXTURE_FACTORY( FixtureType, name ) \
-   &Test##FixtureType##name::factory
+#define JSONTEST_FIXTURE_FACTORY(FixtureType, name)                            \
+  &Test##FixtureType##name::factory
 
-#define JSONTEST_REGISTER_FIXTURE( runner, FixtureType, name ) \
-   (runner).add( JSONTEST_FIXTURE_FACTORY( FixtureType, name ) )
+#define JSONTEST_REGISTER_FIXTURE(runner, FixtureType, name)                   \
+  (runner).add(JSONTEST_FIXTURE_FACTORY(FixtureType, name))
 
 #endif // ifndef JSONTEST_H_INCLUDED