1#include <dballe/core/tests.h>
2#include <dballe/message.h>
3#include <dballe/importer.h>
4#include <dballe/exporter.h>
5#include <dballe/msg/msg.h>
16impl::Messages read_msgs(
const char* filename, Encoding type,
const std::string& opts);
17impl::Messages read_msgs_csv(
const char* filename);
28std::unique_ptr<wreport::Bulletin> export_msgs(Encoding enctype,
const impl::Messages& in,
const std::string& tag,
const dballe::ExporterOptions& opts=dballe::ExporterOptions::defaults);
29#define test_export_msgs(...) wcallchecked(export_msgs(__VA_ARGS__))
31void track_different_msgs(
const Message& msg1,
const Message& msg2,
const std::string& prefix);
32void track_different_msgs(
const impl::Messages& msgs1,
const impl::Messages& msgs2,
const std::string& prefix);
34extern const char* bufr_files[];
35extern const char* crex_files[];
43void dump(
const std::string& tag,
const Message& msg,
const std::string& desc=
"message");
44void dump(
const std::string& tag,
const impl::Messages& msgs,
const std::string& desc=
"message");
45void dump(
const std::string& tag,
const wreport::Bulletin& bul,
const std::string& desc=
"message");
46void dump(
const std::string& tag,
const BinaryMessage& msg,
const std::string& desc=
"message");
47void dump(
const std::string& tag,
const std::string& str,
const std::string& desc=
"message");
52 virtual void tweak(impl::Messages&) {}
53 virtual std::string desc()
const = 0;
58 std::vector<MessageTweaker*> tweaks;
63 void apply(impl::Messages& msgs);
71 std::vector<wreport::Varcode> codes;
73 void tweak(impl::Messages& msgs);
74 virtual std::string desc()
const {
return "StripAttrs"; }
81 virtual std::string desc()
const {
return "StripQCAttrs"; }
87 void tweak(impl::Messages& msgs);
88 virtual std::string desc()
const {
return "StripSubstituteAttrs"; }
95 virtual std::string desc()
const {
return "StripContextAttrs"; }
101 std::vector<wreport::Varcode> codes;
104 StripVars(std::initializer_list<wreport::Varcode> codes) : codes(codes) {}
105 void tweak(impl::Messages& msgs);
106 virtual std::string desc()
const {
return "StripVars"; }
114 void tweak(impl::Messages& msgs);
115 virtual std::string desc()
const {
return "RoundLegacyVars"; }
121 void tweak(impl::Messages& msgs);
122 virtual std::string desc()
const {
return "RemoveSynopWMOOnlyVars"; }
128 void tweak(impl::Messages& msgs);
129 virtual std::string desc()
const {
return "RemoveTempWMOOnlyVars"; }
137 virtual std::string desc()
const {
return "RemoveOddTempTemplateOnlyVars"; }
144 void tweak(impl::Messages& msgs);
145 virtual std::string desc()
const {
return "RemoveSynopWMOOddprec"; }
151 void tweak(impl::Messages& msgs);
152 virtual std::string desc()
const {
return "TruncStName"; }
160 void tweak(impl::Messages& msgs);
161 virtual std::string desc()
const {
return "RoundGeopotential"; }
169 void tweak(impl::Messages& msgs);
170 virtual std::string desc()
const {
return "HeightToGeopotential"; }
176 void tweak(impl::Messages& msgs);
177 virtual std::string desc()
const {
return "RoundVSS"; }
186 void tweak(impl::Messages& msgs);
187 virtual std::string desc()
const {
return "RemoveContext"; }
200 TestMessage(Encoding type,
const std::string& name);
203 void read_from_file(
const std::string& fname,
const ImporterOptions& input_opts);
205 void read_from_msgs(
const impl::Messages& msgs,
const ExporterOptions& export_opts);
213 bool verbose =
false;
216 std::string expected_template;
217 int expected_subsets = 1;
218 int expected_min_vars = 1;
219 int expected_data_category = MISSING_INT;
220 int expected_data_subcategory = MISSING_INT;
221 int expected_data_subcategory_local = MISSING_INT;
229 TestCodec(
const std::string& fname, Encoding type=Encoding::BUFR);
231 void configure_ecmwf_to_wmo_tweaks();
237 void run_convert(
const std::string& tplname);
245class msg_generator :
public generator
248 dba_err fill_message(dba_msg msg,
bool mobile);
254class msg_vector :
public dba_raw_consumer,
public std::vector<dba_msgs>
257 virtual ~msg_vector()
259 for (iterator i = begin(); i != end(); i++)
263 virtual dba_err consume(dba_rawmsg raw)
267 DBA_RUN_OR_RETURN(dba_marshal_decode(raw, &msgs));
270 return dba_error_ok();
275void my_ensure_msg_equals(
const char* file,
int line, dba_msg msg,
int id,
const char* idname,
const T& value)
277 dba_var var = my_want_var(file, line, msg,
id, idname);
278 inner_ensure_var_equals(var, value);
280#define gen_ensure_msg_equals(msg, id, value) my_ensure_msg_equals(__FILE__, __LINE__, (msg), (id), #id, (value))
281#define inner_ensure_msg_equals(msg, id, value) my_ensure_msg_equals(file, line, (msg), (id), #id, (value))
Binary message.
Definition: file.h:131
Options to control message export.
Definition: exporter.h:25
Options to control message import.
Definition: importer.h:25
static const ImporterOptions defaults
Default importer options.
Definition: importer.h:54
A bulletin that has been decoded and physically interpreted.
Definition: message.h:29
Vertical level or layer.
Definition: types.h:625
Information on how a value has been sampled or computed with regards to time.
Definition: types.h:687
ExporterOptions with default constructor usable.
Definition: msg.h:39
ImporterOptions with default constructor usable.
Definition: msg.h:26
Definition: shortcuts.h:12
Definition: msg/tests.h:20
Definition: msg/tests.h:50
Definition: msg/tests.h:57
Definition: msg/tests.h:210
Definition: msg/tests.h:193
Definition: msg/tests.h:166
Definition: msg/tests.h:182
Definition: msg/tests.h:135
Definition: msg/tests.h:143
Definition: msg/tests.h:120
Definition: msg/tests.h:127
Definition: msg/tests.h:157
Definition: msg/tests.h:111
Definition: msg/tests.h:175
Definition: msg/tests.h:70
Definition: msg/tests.h:93
Definition: msg/tests.h:79
Definition: msg/tests.h:86
Definition: msg/tests.h:100
Definition: msg/tests.h:150