File: test_poly_constraint.cpp

package info (click to toggle)
valijson 1.0%2Brepack-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 2,716 kB
  • sloc: cpp: 19,366; sh: 134; makefile: 24
file content (97 lines) | stat: -rw-r--r-- 2,363 bytes parent folder | download | duplicates (3)
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <gtest/gtest.h>

#include <iostream>

#include <valijson/adapters/rapidjson_adapter.hpp>
#include <valijson/schema.hpp>
#include <valijson/validation_results.hpp>
#include <valijson/validator.hpp>

namespace {

using valijson::adapters::Adapter;
using valijson::Schema;
using valijson::Validator;
using valijson::ValidationResults;
using valijson::adapters::RapidJsonAdapter;

class StubPolyConstraint : public valijson::constraints::PolyConstraint
{
    bool m_shouldValidate;

public:
    explicit StubPolyConstraint(bool shouldValidate)
      : m_shouldValidate(shouldValidate) { }

    Constraint * cloneInto(void *ptr) const override
    {
        return new (ptr) StubPolyConstraint(m_shouldValidate);
    }

    size_t sizeOf() const override
    {
        return sizeof(StubPolyConstraint);
    }

    bool validate(
            const Adapter &,
            const std::vector<std::string> &context,
            ValidationResults *results) const override
    {
        if (m_shouldValidate) {
            return true;
        }

        if (results) {
            results->pushError(context,
                    "StubPolyConstraint intentionally failed validation");
        }

        return false;
    }
};

}  // end anonymous namespace

class TestPolyConstraint : public testing::Test
{

};

TEST_F(TestPolyConstraint, ValidationCanPass)
{
    StubPolyConstraint stubPolyConstraint(true);

    Schema schema;
    schema.addConstraintToSubschema(stubPolyConstraint, schema.root());

    rapidjson::Document document;
    RapidJsonAdapter adapter(document);

    ValidationResults results;

    Validator validator;
    EXPECT_TRUE(validator.validate(schema, adapter, &results));
    EXPECT_EQ(size_t(0), results.numErrors());
}

TEST_F(TestPolyConstraint, ValidationCanFail)
{
    StubPolyConstraint stubPolyConstraint(false);

    Schema schema;
    schema.addConstraintToSubschema(stubPolyConstraint, schema.root());

    rapidjson::Document document;
    RapidJsonAdapter adapter(document);

    ValidationResults results;

    Validator validator;
    EXPECT_FALSE(validator.validate(schema, adapter, &results));
    EXPECT_EQ(size_t(1), results.numErrors());

    ValidationResults::Error error;
    EXPECT_TRUE(results.popError(error));
    EXPECT_STREQ("StubPolyConstraint intentionally failed validation", error.description.c_str());
}