nighthawk icon indicating copy to clipboard operation
nighthawk copied to clipboard

Investigate textproto parsing, absl::Status matchers, and similar unit test conveniences

Open eric846 opened this issue 5 years ago • 2 comments

eric846 avatar Sep 09 '20 22:09 eric846

Instead of:

  FakeMetricsPluginConfig metrics_plugin_config;
  FakeMetricsPluginConfig::FakeMetric* fake_metric =
      metrics_plugin_config.mutable_fake_metrics()->Add();
  fake_metric->set_name(kMetricName);
  fake_metric->mutable_error_status()->set_code(
      static_cast<int>(absl::StatusCode::kPermissionDenied));
  fake_metric->mutable_error_status()->set_message("expected status message");

we would like to have:

FakeMetricsPluginConfig metrics_plugin_config = MAGIC(R"proto(
fake_metrics {
  error_status {
    code: PERMISSION_DENIED
    message: "expected status message"
  }
}
)proto");

eric846 avatar Sep 09 '20 22:09 eric846

Instead of:

  ASSERT_TRUE(output_or.ok());
  EXPECT_EQ(output_or.value().myfield(), "field value");

  ASSERT_FALSE(output_or.ok());
  EXPECT_EQ(output_or.status().code(), absl::StatusCode::kDataLoss);
  EXPECT_EQ(output_or.status().message(), "artificial spec error");

we would like to have:

EXPECT_THAT(output_or, IsOkAndHolds(R"proto(
myfield: "field value"
)proto"));

EXPECT_THAT(output_or, StatusIs(absl::StatusCode::kDataLoss, "artificial spec error");

With one of the main features being that if the status is unexpectedly not ok, the details of the status are logged automatically.

eric846 avatar Sep 09 '20 23:09 eric846