1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "error_support.h"
#include <string>
#include <vector>
#include "test_platform.h"
namespace crdtp {
TEST(ErrorSupportTest, Empty) {
ErrorSupport errors;
EXPECT_TRUE(errors.Errors().empty());
}
TEST(ErrorSupportTest, Nesting) {
ErrorSupport errors;
// Enter field foo, inter element at index 42, enter field bar, and encounter
// an error there ("something wrong").
errors.Push();
errors.SetName("foo");
errors.Push();
errors.SetIndex(42);
errors.Push();
errors.SetName("bar_sibling");
errors.SetName("bar");
errors.AddError("something wrong");
errors.Pop(); // bar
errors.Pop(); // 42
// The common case is actually that we'll enter some field, set the name
// or index, and leave without ever producing an error.
errors.Push();
errors.SetName("no_error_here");
errors.Pop(); // no_error_here
errors.Push();
errors.SetName("bang");
errors.AddError("one last error");
errors.Pop(); // bang
errors.Pop(); // foo
std::string out(errors.Errors().begin(), errors.Errors().end());
EXPECT_EQ("foo.42.bar: something wrong; foo.bang: one last error", out);
}
} // namespace crdtp
|