File: test_validation_with_fields.cpp

package info (click to toggle)
reflect-cpp 0.21.0%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,128 kB
  • sloc: cpp: 50,336; python: 139; makefile: 30; sh: 3
file content (52 lines) | stat: -rw-r--r-- 1,808 bytes parent folder | download
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
#include <cassert>
#include <rfl.hpp>
#include <rfl/json.hpp>
#include <string>

#include "write_and_read.hpp"

namespace test_validation_with_fields {

using SimpleNameValidator = rfl::Validator<
    std::string,
    rfl::AllOf<rfl::PatternValidator<R"(^[A-Za-z1-9_]+$)", "TagName">>,
    rfl::Size<rfl::Minimum<3>>, rfl::Size<rfl::Maximum<50>>>;

struct TagConfig {
  SimpleNameValidator Name;
  int32_t Length;
  bool WriteEnabled;
};

struct ThreadConfig {
  rfl::Field<"type", SimpleNameValidator> Type;
  rfl::Field<"Name", SimpleNameValidator> Name;
  rfl::Field<"ReadTags", std::vector<TagConfig>> ReadTags;
  rfl::Field<"WriteTags", std::vector<TagConfig>> WriteTags;
  rfl::Field<"ThreadPriority", int32_t> ThreadPriority;
  rfl::Field<"DecimationFactor", int32_t> DecimationFactor;
  rfl::Field<"TimingOffset", int32_t> TimingOffset;
};

TEST(json, test_validation_with_fields) {
  const auto read_tag1 =
      TagConfig{.Name = "READ_TAG_1", .Length = 5, .WriteEnabled = false};

  const auto write_tag1 =
      TagConfig{.Name = "WRITE_TAG_1", .Length = 10, .WriteEnabled = true};

  const auto test_thread_config =
      ThreadConfig{.Type = "BasicThread",
                   .Name = "TEST_1",
                   .ReadTags = std::vector<TagConfig>({read_tag1}),
                   .WriteTags = std::vector<TagConfig>({write_tag1}),
                   .ThreadPriority = -1,
                   .DecimationFactor = 10,
                   .TimingOffset = 0};

  write_and_read(
      test_thread_config,
      R"({"type":"BasicThread","Name":"TEST_1","ReadTags":[{"Name":"READ_TAG_1","Length":5,"WriteEnabled":false}],"WriteTags":[{"Name":"WRITE_TAG_1","Length":10,"WriteEnabled":true}],"ThreadPriority":-1,"DecimationFactor":10,"TimingOffset":0})");
}

}  // namespace test_validation_with_fields