/* * Copyright 2018 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "test/scenario/column_printer.h" namespace webrtc { namespace test { ColumnPrinter::ColumnPrinter(const ColumnPrinter&) = default; ColumnPrinter::~ColumnPrinter() = default; ColumnPrinter::ColumnPrinter( const char* headers, std::function printer, size_t max_length) : headers_(headers), printer_(printer), max_length_(max_length) {} ColumnPrinter ColumnPrinter::Fixed(const char* headers, std::string fields) { return ColumnPrinter( headers, [fields](rtc::SimpleStringBuilder& sb) { sb << fields; }, fields.size()); } ColumnPrinter ColumnPrinter::Lambda( const char* headers, std::function printer, size_t max_length) { return ColumnPrinter(headers, printer, max_length); } StatesPrinter::StatesPrinter(std::unique_ptr writer, std::vector printers) : writer_(std::move(writer)), printers_(printers) { RTC_CHECK(!printers_.empty()); for (auto& printer : printers_) buffer_size_ += printer.max_length_ + 1; buffer_.resize(buffer_size_); } StatesPrinter::~StatesPrinter() = default; void StatesPrinter::PrintHeaders() { if (!writer_) return; writer_->Write(printers_[0].headers_); for (size_t i = 1; i < printers_.size(); ++i) { writer_->Write(" "); writer_->Write(printers_[i].headers_); } writer_->Write("\n"); } void StatesPrinter::PrintRow() { // Note that this is run for null output to preserve side effects, this allows // setting break points etc. rtc::SimpleStringBuilder sb(buffer_); printers_[0].printer_(sb); for (size_t i = 1; i < printers_.size(); ++i) { sb << ' '; printers_[i].printer_(sb); } sb << "\n"; if (writer_) writer_->Write(std::string(sb.str(), sb.size())); } } // namespace test } // namespace webrtc