// Copyright 2018 The Fuchsia 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 "src/developer/debug/zxdb/console/string_util.h"

#include <gtest/gtest.h>

namespace zxdb {

TEST(StringUtil, UnicodeCharWidth) {
  // Valid ASCII.
  EXPECT_EQ(0u, UnicodeCharWidth(std::string()));
  EXPECT_EQ(5u, UnicodeCharWidth("hello"));

  // Valid UTF-8.
  EXPECT_EQ(6u, UnicodeCharWidth("\xe2\x96\xb6hello"));

  // Embedded nulls count as one.
  std::string with_null;
  with_null.push_back('a');
  with_null.push_back(0);
  with_null.push_back('b');
  EXPECT_EQ(3u, UnicodeCharWidth(with_null));

  // Invalid UTF-8, each possible invalid sequence counts as one. (This is more
  // about defining specific behavior, we don't actually know what the console
  // will do with this input.)
  EXPECT_EQ(3u, UnicodeCharWidth("Hi\xe2\x96"));
  EXPECT_EQ(3u, UnicodeCharWidth("\xe2\x96hi"));
}

}  // namespace zxdb
