// Copyright 2014 PDFium 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 "fx_string_testhelpers.h"

#include <ios>
#include <iomanip>

namespace {

template <typename T>
std::ostream& output_string(std::ostream& out, const T& str) {
  out << std::hex << std::setfill('0') << '"';
  for (size_t i = 0; i < str.GetLength(); ++i) {
    unsigned int c = str.GetAt(i);
    if (c >= 0x20 && c < 0x7F) {
      out << static_cast<char>(c);
    } else if (sizeof(typename T::value_type) == 1) {
      out << "\\x" << std::setw(2) << c << std::setw(0);
    } else if (c < 0x10000) {
      out << "\\u" << std::setw(4) << c << std::setw(0);
    } else {
      out << "<invalid>";
    }
  }
  out << '"' << std::dec << std::setfill(' ');
  return out;
}

}  // namespace

std::ostream& operator<<(std::ostream& out, const CFX_ByteStringC& str) {
  return output_string(out, str);
}

std::ostream& operator<<(std::ostream& out, const CFX_ByteString& str) {
  return output_string(out, str);
}

std::ostream& operator<<(std::ostream& out, const CFX_WideStringC& str) {
  return output_string(out, str);
}

std::ostream& operator<<(std::ostream& out, const CFX_WideString& str) {
  return output_string(out, str);
}
