OpenMS
Loading...
Searching...
No Matches
TestFileValidation.h
Go to the documentation of this file.
1// Copyright (c) 2002-present, OpenMS Inc. -- EKU Tuebingen, ETH Zurich, and FU Berlin
2// SPDX-License-Identifier: BSD-3-Clause
3//
4// --------------------------------------------------------------------------
5// $Maintainer: Timo Sachsenberg $
6// $Authors: Marc Sturm, Clemens Groepl, Chris Bielow, Timo Sachsenberg $
7// --------------------------------------------------------------------------
8
9#pragma once
10
11// XML schema validation of the temporary files a test creates. Lives in the
12// class-test project, not the framework: validation needs the FORMAT layer, which
13// the framework must stay free of. Header-only -- a test includes it and calls
14// #VALIDATE_TMP_FILES before END_TEST; nothing to link or register.
15
17#include <OpenMS/CONCEPT/Types.h> // Size
18#include <OpenMS/DATASTRUCTURES/TypeAliases.h> // StringList
19
30#include <OpenMS/SYSTEM/File.h>
31
32#include <iostream>
33#include <string>
34#include <vector>
35
37{
48 inline bool validateTmpFiles(const std::vector<std::string>& file_names)
49 {
50 std::cout << "checking (created temporary files)...\n";
51 bool passed_all = true;
52 for (Size i = 0; i < file_names.size(); ++i)
53 {
54 if (!File::exists(file_names[i]))
55 {
56 continue;
57 }
58 FileTypes::Type type = FileHandler::getType(file_names[i]);
59 bool passed_single = true;
60 bool skipped = false;
61 switch (type)
62 {
63 case FileTypes::MZML:
64 {
65 if (!MzMLFile().isValid(file_names[i]))
66 {
67 std::cout << " - Error: mzML file does not validate against XML schema '" << file_names[i] << "'\n";
68 passed_single = false;
69 }
70 StringList errors, warnings;
71 if (!MzMLFile().isSemanticallyValid(file_names[i], errors, warnings))
72 {
73 std::cout << " - Error: mzML file semantically invalid '" << file_names[i] << "'\n";
74 for (Size j = 0; j < errors.size(); ++j)
75 {
76 std::cout << "Error - " << errors[j] << '\n';
77 }
78 passed_single = false;
79 }
80 }
81 break;
82
84 if (!MzDataFile().isValid(file_names[i], std::cerr))
85 {
86 std::cout << " - Error: Invalid mzData file '" << file_names[i] << "'\n";
87 passed_single = false;
88 }
89 break;
90
92 if (!MzXMLFile().isValid(file_names[i], std::cerr))
93 {
94 std::cout << " - Error: Invalid mzXML file '" << file_names[i] << "'\n";
95 passed_single = false;
96 }
97 break;
98
100 if (!FeatureXMLFile().isValid(file_names[i], std::cerr))
101 {
102 std::cout << " - Error: Invalid featureXML file '" << file_names[i] << "'\n";
103 passed_single = false;
104 }
105 break;
106
107 case FileTypes::IDXML:
108 if (!IdXMLFile().isValid(file_names[i], std::cerr))
109 {
110 std::cout << " - Error: Invalid idXML file '" << file_names[i] << "'\n";
111 passed_single = false;
112 }
113 break;
114
116 if (!ConsensusXMLFile().isValid(file_names[i], std::cerr))
117 {
118 std::cout << " - Error: Invalid consensusXML file '" << file_names[i] << "'\n";
119 passed_single = false;
120 }
121 break;
122
123 case FileTypes::INI:
124 if (!ParamXMLFile().isValid(file_names[i], std::cerr))
125 {
126 std::cout << " - Error: Invalid Param file '" << file_names[i] << "'\n";
127 passed_single = false;
128 }
129 break;
130
132 if (!TransformationXMLFile().isValid(file_names[i], std::cerr))
133 {
134 passed_single = false;
135 }
136 break;
137
138 default:
139 skipped = true;
140 break;
141 }
142
143 if (skipped)
144 {
145 std::cout << " + skipped file '" << file_names[i] << "' (type: " << FileTypes::typeToName(type) << ")\n";
146 }
147 else if (passed_single)
148 {
149 std::cout << " + valid file '" << file_names[i] << "' (type: " << FileTypes::typeToName(type) << ")\n";
150 }
151 else
152 {
153 passed_all = false;
154 std::cout << " - invalid file '" << file_names[i] << "' (type: " << FileTypes::typeToName(type) << ")\n";
155 }
156 }
157
158 std::cout << (passed_all ? ": passed" : ": failed") << std::endl << '\n';
159 return passed_all;
160 }
161} // namespace OpenMS::Internal::ClassTest
162
175#define VALIDATE_TMP_FILES \
176 { \
177 ++TEST::test_count; \
178 TEST::test_line = __LINE__; \
179 TEST::this_test = OpenMS::Internal::ClassTest::validateTmpFiles(TEST::tmp_file_list); \
180 TEST::test = TEST::test && TEST::this_test; \
181 TEST::all_tests = TEST::all_tests && TEST::this_test; \
182 if (!TEST::this_test) \
183 { \
184 stdcout << " - line " << TEST::test_line << ": VALIDATE_TMP_FILES\n"; \
185 TEST::failed_lines_list.push_back(TEST::test_line); \
186 } \
187 }
188
199#define VALIDATE_FILE(filename) \
200 { \
201 ++TEST::test_count; \
202 TEST::test_line = __LINE__; \
203 TEST::this_test = OpenMS::Internal::ClassTest::validateTmpFiles( \
204 std::vector<std::string> {(filename)}); \
205 TEST::test = TEST::test && TEST::this_test; \
206 TEST::all_tests = TEST::all_tests && TEST::this_test; \
207 if (!TEST::this_test) \
208 { \
209 stdcout << " - line " << TEST::test_line << ": VALIDATE_FILE(" # filename ")\n"; \
210 TEST::failed_lines_list.push_back(TEST::test_line); \
211 } \
212 }
This class provides Input functionality for ConsensusMaps and Output functionality for alignments and...
Definition ConsensusXMLFile.h:35
This class provides Input/Output functionality for feature maps.
Definition FeatureXMLFile.h:36
static FileTypes::Type getType(const std::string &filename)
Tries to determine the file type (by name or content)
static bool exists(const std::string &file)
Method used to test if a file exists.
Used to load and store idXML files.
Definition IdXMLFile.h:45
File adapter for MzData files.
Definition MzDataFile.h:30
File adapter for MzML files.
Definition MzMLFile.h:34
File adapter for MzXML 3.1 files.
Definition MzXMLFile.h:28
The file pendant of the Param class used to load and store the param datastructure as paramXML (i....
Definition ParamXMLFile.h:25
Used to load and store TransformationXML files.
Definition TransformationXMLFile.h:33
bool validateTmpFiles(const std::vector< std::string > &file_names)
Validates the given files against their XML schema (if one applies).
Definition TestFileValidation.h:48
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition Types.h:97
std::vector< std::string > StringList
Vector of String.
Definition TypeAliases.h:39
Namespace for class tests.
Definition ClassTest.h:41
Type
Actual file types enum.
Definition FileTypes.h:31
@ INI
OpenMS parameters file (.ini)
Definition FileTypes.h:41
@ CONSENSUSXML
OpenMS consensus map format (.consensusXML)
Definition FileTypes.h:39
@ FEATUREXML
OpenMS feature file (.featureXML)
Definition FileTypes.h:37
@ TRANSFORMATIONXML
Transformation description file (.trafoXML)
Definition FileTypes.h:43
@ IDXML
OpenMS identification format (.idXML)
Definition FileTypes.h:38
@ MZML
MzML file (.mzML)
Definition FileTypes.h:44
@ MZDATA
MzData file (.mzData)
Definition FileTypes.h:35
@ MZXML
MzXML file (.mzXML)
Definition FileTypes.h:36
static std::string typeToName(Type type)
Returns the name/preferred extension of the type.