API
 
Loading...
Searching...
No Matches
stdFileName_test.cpp
Go to the documentation of this file.
1/** \file stdFileName_test.hpp
2 * \brief Tests for the stdFileName class
3 * \ingroup file_files
4 */
5
6#include "../../../tests/testXWC.hpp"
7
8#include <filesystem>
9
10#include "../stdFileName.hpp"
11
12#undef file_stdFileName_hpp
13#define XWCTEST_NAMESPACE XWCTEST_STDFILENAME_FULLNAME_BAD_ALLOC_ns
14#define XWCTEST_STDFILENAME_FULLNAME_BAD_ALLOC
15#include "../stdFileName.hpp"
16#undef XWCTEST_NAMESPACE
17#undef XWCTEST_STDFILENAME_FULLNAME_BAD_ALLOC
18
19#undef file_stdFileName_hpp
20#define XWCTEST_NAMESPACE XWCTEST_STDFILENAME_FULLNAME_EXCEPTION_ns
21#define XWCTEST_STDFILENAME_FULLNAME_EXCEPTION
22#include "../stdFileName.hpp"
23#undef XWCTEST_NAMESPACE
24#undef XWCTEST_STDFILENAME_FULLNAME_EXCEPTION
25
26#undef file_stdFileName_hpp
27#define XWCTEST_NAMESPACE XWCTEST_STDFILENAME_FULLNAME_FS_BAD_ALLOC_ns
28#define XWCTEST_STDFILENAME_FULLNAME_FS_BAD_ALLOC
29#include "../stdFileName.hpp"
30#undef XWCTEST_NAMESPACE
31#undef XWCTEST_STDFILENAME_FULLNAME_FS_BAD_ALLOC
32
33#undef file_stdFileName_hpp
34#define XWCTEST_NAMESPACE XWCTEST_STDFILENAME_FULLNAME_FS_FILESYSTEM_ERROR_ns
35#define XWCTEST_STDFILENAME_FULLNAME_FS_FILESYSTEM_ERROR
36#include "../stdFileName.hpp"
37#undef XWCTEST_NAMESPACE
38#undef XWCTEST_STDFILENAME_FULLNAME_FS_FILESYSTEM_ERROR
39
40#undef file_stdFileName_hpp
41#define XWCTEST_NAMESPACE XWCTEST_STDFILENAME_FULLNAME_FS_EXCEPTION_ns
42#define XWCTEST_STDFILENAME_FULLNAME_FS_EXCEPTION
43#include "../stdFileName.hpp"
44#undef XWCTEST_NAMESPACE
45#undef XWCTEST_STDFILENAME_FULLNAME_FS_EXCEPTION
46
47#undef file_fileTimes_hpp
48#undef file_stdFileName_hpp
49#define XWCTEST_NAMESPACE XWCTEST_PARSEFILEPATH_THROW_BAD_ALLOC_ns
50#define XWCTEST_PARSEFILEPATH_THROW_BAD_ALLOC
51#include "../fileTimes.hpp"
52#include "../stdFileName.hpp"
53#undef XWCTEST_NAMESPACE
54#undef XWCTEST_PARSEFILEPATH_THROW_BAD_ALLOC
55
56#undef file_fileTimes_hpp
57#undef file_stdFileName_hpp
58#define XWCTEST_NAMESPACE XWCTEST_PARSEFILEPATH_THROW_OUT_OF_RANGE_ns
59#define XWCTEST_PARSEFILEPATH_THROW_OUT_OF_RANGE
60#include "../fileTimes.hpp"
61#include "../stdFileName.hpp"
62#undef XWCTEST_NAMESPACE
63#undef XWCTEST_PARSEFILEPATH_THROW_OUT_OF_RANGE
64
65#undef file_stdSubDir_hpp
66#undef file_stdFileName_hpp
67#define XWCTEST_NAMESPACE XWCTEST_STDSUBDIR_YMD_BAD_ALLOC_ns
68#define XWCTEST_STDSUBDIR_YMD_BAD_ALLOC
69#include "../stdSubDir.hpp"
70#include "../stdFileName.hpp"
71#undef XWCTEST_NAMESPACE
72#undef XWCTEST_STDSUBDIR_YMD_BAD_ALLOC
73
74#undef file_stdSubDir_hpp
75#undef file_stdFileName_hpp
76#define XWCTEST_NAMESPACE XWCTEST_STDSUBDIR_YMD_EXCEPTION_ns
77#define XWCTEST_STDSUBDIR_YMD_EXCEPTION
78#include "../stdSubDir.hpp"
79#include "../stdFileName.hpp"
80#undef XWCTEST_NAMESPACE
81#undef XWCTEST_STDSUBDIR_YMD_EXCEPTION
82
83#undef file_stdFileName_hpp
84#define XWCTEST_NAMESPACE XWCTEST_STDFILENAME_FULLNAME_TIMEGM_ns
85#define XWCTEST_STDFILENAME_FULLNAME_TIMEGM
86#include "../stdFileName.hpp"
87#undef XWCTEST_NAMESPACE
88#undef XWCTEST_STDFILENAME_FULLNAME_TIMEGM
89
90#undef file_stdFileName_hpp
91#define XWCTEST_NAMESPACE XWCTEST_STDFILENAME_FULLNAME_TIMEGM_OTHER_ns
92#define XWCTEST_STDFILENAME_FULLNAME_TIMEGM_OTHER
93#include "../stdFileName.hpp"
94#undef XWCTEST_NAMESPACE
95#undef XWCTEST_STDFILENAME_FULLNAME_TIMEGM_OTHER
96
97namespace libXWCTest
98{
99namespace fileTest
100{
101
102/** \defgroup stdFileName_unit_test stdFileName Unit Tests
103 * \ingroup file_unit_test
104 */
105
106/// Namespace for XWC::file::stdFileName tests
107/** \ingroup stdFileName_unit_test
108 *
109 */
110namespace stdFileNameTest
111{
112
113/// Constructing and Initializing stdFileName
114/**
115 * \ingroup stdFileName_unit_test
116 */
117TEST_CASE( "Construction and Initializing stdFileName", "[libMagAOX::file::stdFileName]" )
118{
119 SECTION( "default construction and parsing and member access" )
120 {
121 std::string fullName = "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog";
122
124
125 sfn.fullName( fullName );
126
127 REQUIRE( sfn.fullName() == fullName );
128 REQUIRE( sfn.baseName() == "bamm_20241121063321000000001.binlog" );
129 REQUIRE( sfn.appName() == "bamm" );
130 REQUIRE( sfn.extension() == ".binlog" );
131 REQUIRE( sfn.subDir().path() == "2024_11_21" );
132 REQUIRE( sfn.year() == 2024 );
133 REQUIRE( sfn.month() == 11 );
134 REQUIRE( sfn.day() == 21 );
135 REQUIRE( sfn.hour() == 6 );
136 REQUIRE( sfn.minute() == 33 );
137 REQUIRE( sfn.second() == 21 );
138 REQUIRE( sfn.nsec() == 1 );
139
141
142 REQUIRE( ts.time_s == 1732170801 );
143 REQUIRE( ts.time_ns == 1 );
144
145 REQUIRE( sfn.valid() );
146 }
147
148 SECTION( "default construction, assignment and member access" )
149 {
150 std::string fullName = "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog";
151
153
154 sfn = fullName;
155
156 REQUIRE( sfn.fullName() == fullName );
157 REQUIRE( sfn.baseName() == "bamm_20241121063321000000001.binlog" );
158 REQUIRE( sfn.appName() == "bamm" );
159 REQUIRE( sfn.extension() == ".binlog" );
160 REQUIRE( sfn.subDir().path() == "2024_11_21" );
161 REQUIRE( sfn.year() == 2024 );
162 REQUIRE( sfn.month() == 11 );
163 REQUIRE( sfn.day() == 21 );
164 REQUIRE( sfn.hour() == 6 );
165 REQUIRE( sfn.minute() == 33 );
166 REQUIRE( sfn.second() == 21 );
167 REQUIRE( sfn.nsec() == 1 );
168
170
171 REQUIRE( ts.time_s == 1732170801 );
172 REQUIRE( ts.time_ns == 1 );
173
174 REQUIRE( sfn.valid() );
175 }
176
177 SECTION( "construction by parsing and member access" )
178 {
179 std::string fullName = "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog";
180
181 MagAOX::file::stdFileName sfn( fullName );
182
183 mx::error_t errc = mx::error_t::error;
184 REQUIRE( sfn.fullName( &errc ) == fullName );
185 REQUIRE( errc == mx::error_t::noerror );
186
187 errc = mx::error_t::error;
188 REQUIRE( sfn.baseName( &errc ) == "bamm_20241121063321000000001.binlog" );
189 REQUIRE( errc == mx::error_t::noerror );
190
191 errc = mx::error_t::error;
192 REQUIRE( sfn.appName( &errc ) == "bamm" );
193 REQUIRE( errc == mx::error_t::noerror );
194
195 errc = mx::error_t::error;
196 REQUIRE( sfn.extension( &errc ) == ".binlog" );
197 REQUIRE( errc == mx::error_t::noerror );
198
199 errc = mx::error_t::error;
200 mx::error_t errc2 = mx::error_t::error;
201 REQUIRE( sfn.subDir( &errc ).path( &errc2 ) == "2024_11_21" );
202 REQUIRE( errc == mx::error_t::noerror );
203 REQUIRE( errc2 == mx::error_t::noerror );
204
205 errc = mx::error_t::error;
206 REQUIRE( sfn.year( &errc ) == 2024 );
207 REQUIRE( errc == mx::error_t::noerror );
208
209 errc = mx::error_t::error;
210 REQUIRE( sfn.month( &errc ) == 11 );
211 REQUIRE( errc == mx::error_t::noerror );
212
213 errc = mx::error_t::error;
214 REQUIRE( sfn.day( &errc ) == 21 );
215 REQUIRE( errc == mx::error_t::noerror );
216
217 errc = mx::error_t::error;
218 REQUIRE( sfn.hour( &errc ) == 6 );
219 REQUIRE( errc == mx::error_t::noerror );
220
221 errc = mx::error_t::error;
222 REQUIRE( sfn.minute( &errc ) == 33 );
223 REQUIRE( errc == mx::error_t::noerror );
224
225 errc = mx::error_t::error;
226 REQUIRE( sfn.second( &errc ) == 21 );
227 REQUIRE( errc == mx::error_t::noerror );
228
229 errc = mx::error_t::error;
230 REQUIRE( sfn.nsec( &errc ) == 1 );
231 REQUIRE( errc == mx::error_t::noerror );
232
233 errc = mx::error_t::error;
234 flatlogs::timespecX ts = sfn.timestamp( &errc );
235 REQUIRE( ts.time_s == 1732170801 );
236 REQUIRE( ts.time_ns == 1 );
237 REQUIRE( errc == mx::error_t::noerror );
238
239 REQUIRE( sfn.valid() );
240 }
241}
242
243/// Member Access Errors
244/**
245 * \ingroup stdFileName_unit_test
246 */
247TEST_CASE( "Member Access Errors", "[libMagAOX::file::stdFileName]" )
248{
249 SECTION( "default construction, access while invalid" )
250 {
252
253 mx::error_t errc = mx::error_t::noerror;
254 REQUIRE( sfn.fullName( &errc ) == "" );
255 REQUIRE( errc == mx::error_t::invalidconfig );
256
257 errc = mx::error_t::noerror;
258 REQUIRE( sfn.baseName( &errc ) == "" );
259 REQUIRE( errc == mx::error_t::invalidconfig );
260
261 errc = mx::error_t::noerror;
262 REQUIRE( sfn.appName( &errc ) == "" );
263 REQUIRE( errc == mx::error_t::invalidconfig );
264
265 errc = mx::error_t::noerror;
266 REQUIRE( sfn.extension( &errc ) == "" );
267 REQUIRE( errc == mx::error_t::invalidconfig );
268
269 errc = mx::error_t::noerror;
270 mx::error_t errc2 = mx::error_t::noerror;
271 REQUIRE( sfn.subDir( &errc ).path( &errc2 ) == "" );
272 REQUIRE( errc == mx::error_t::invalidconfig );
273 REQUIRE( errc2 == mx::error_t::invalidconfig );
274
275 errc = mx::error_t::noerror;
276 REQUIRE( sfn.year( &errc ) == std::numeric_limits<int>::max() );
277 REQUIRE( errc == mx::error_t::invalidconfig );
278
279 errc = mx::error_t::noerror;
280 REQUIRE( sfn.month( &errc ) == std::numeric_limits<unsigned int>::max() );
281 REQUIRE( errc == mx::error_t::invalidconfig );
282
283 errc = mx::error_t::noerror;
284 REQUIRE( sfn.day( &errc ) == std::numeric_limits<unsigned int>::max() );
285 REQUIRE( errc == mx::error_t::invalidconfig );
286
287 errc = mx::error_t::noerror;
288 REQUIRE( sfn.hour( &errc ) == std::numeric_limits<int>::max() );
289 REQUIRE( errc == mx::error_t::invalidconfig );
290
291 errc = mx::error_t::noerror;
292 REQUIRE( sfn.minute( &errc ) == std::numeric_limits<int>::max() );
293 REQUIRE( errc == mx::error_t::invalidconfig );
294
295 errc = mx::error_t::noerror;
296 REQUIRE( sfn.second( &errc ) == std::numeric_limits<int>::max() );
297 REQUIRE( errc == mx::error_t::invalidconfig );
298
299 errc = mx::error_t::noerror;
300 REQUIRE( sfn.nsec( &errc ) == std::numeric_limits<int>::max() );
301 REQUIRE( errc == mx::error_t::invalidconfig );
302
303 errc = mx::error_t::noerror;
304 flatlogs::timespecX ts = sfn.timestamp( &errc );
305 REQUIRE( ts.time_s == 0 );
306 REQUIRE( ts.time_ns == 0 );
307 REQUIRE( errc == mx::error_t::invalidconfig );
308
309 REQUIRE( !sfn.valid() );
310 }
311}
312/// Setting fullName errors
313/**
314 * \ingroup stdFileName_unit_test
315 */
316TEST_CASE( "Setting fullName Errors", "[libMagAOX::file::stdFileName]" )
317{
318 SECTION( "Construction with fullname throws bad_alloc" )
319 {
320 bool caught = false;
321
322 try
323 {
324 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_BAD_ALLOC_ns::stdFileName sfn(
325 "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
326
328 "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" ) );
329 }
330 catch( const MagAOX::xwcException &e )
331 {
332 caught = true;
333 }
334
335 REQUIRE( caught == true );
336 }
337
338 SECTION( "Construction with fullname throws exception" )
339 {
340
341 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_EXCEPTION_ns::stdFileName sfn(
342 "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
343
344 REQUIRE( !sfn.valid() );
345
347 MagAOX::file::stdFileName sfn( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
348 sfn.valid() );
349 }
350
351 SECTION( "Default Construction, setting fullname throws exception" )
352 {
353
354 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_EXCEPTION_ns::stdFileName sfn;
355
356 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
357
358 REQUIRE( !sfn.valid() );
359 REQUIRE( errc == mx::error_t::std_exception );
360
362 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" ) );
363 }
364
365 SECTION( "Construction with fullname throws bad_alloc from fs" )
366 {
367 bool caught = false;
368
369 try
370 {
371 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_FS_BAD_ALLOC_ns::stdFileName sfn(
372 "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
373 }
374 catch( const MagAOX::xwcException &e )
375 {
376 caught = true;
377 }
378
379 REQUIRE( caught == true );
380
382 MagAOX::file::stdFileName sfn( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" ) );
383 }
384
385 SECTION( "Construction with fullname throws filesystem_error from fs" )
386 {
387
388 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_FS_FILESYSTEM_ERROR_ns::stdFileName sfn(
389 "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
390
391 REQUIRE( !sfn.valid() );
392
394 MagAOX::file::stdFileName sfn( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
395 sfn.valid() );
396 }
397
398 SECTION( "Construction with fullname throws exception from fs" )
399 {
400
401 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_FS_EXCEPTION_ns::stdFileName sfn(
402 "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
403
404 REQUIRE( !sfn.valid() );
405
407 MagAOX::file::stdFileName sfn( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
408 sfn.valid() );
409 }
410
411 SECTION( "Default Construction, setting fullname throws filesystem_error from fs" )
412 {
413
414 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_FS_FILESYSTEM_ERROR_ns::stdFileName sfn;
415
416 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
417
418 REQUIRE( !sfn.valid() );
419 REQUIRE( errc == mx::error_t::std_filesystem_error );
420
422 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
423 sfn.valid() );
424 }
425
426 SECTION( "Default Construction, setting fullname throws exception from fs" )
427 {
428
429 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_FS_EXCEPTION_ns::stdFileName sfn;
430
431 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
432
433 REQUIRE( !sfn.valid() );
434 REQUIRE( errc == mx::error_t::std_exception );
435
437 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
438 sfn.valid() );
439 }
440
441 SECTION( "Default Construction, setting fullname without extension" )
442 {
443
445
446 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001" );
447
448 REQUIRE( !sfn.valid() );
449 REQUIRE( errc == mx::error_t::invalidarg );
450
452 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001" );
453 sfn.valid() );
454 }
455
456 SECTION( "Default Construction, setting fullname throws exception from parseFilePath" )
457 {
458
459 MagAOX::file::XWCTEST_PARSEFILEPATH_THROW_BAD_ALLOC_ns::stdFileName sfn;
460
461 bool caught = false;
462
463 try
464 {
465 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
466 }
467 catch( const mx::exception<XWC_DEFAULT_VERBOSITY> &e )
468 {
469 caught = true;
470 }
471 REQUIRE( caught == true );
472
474 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" ) );
475 }
476
477 SECTION( "Default Construction, setting fullname causes error from parseFilePath" )
478 {
479
480 MagAOX::file::XWCTEST_PARSEFILEPATH_THROW_OUT_OF_RANGE_ns::stdFileName sfn;
481
482 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
483
484 REQUIRE( !sfn.valid() );
485 REQUIRE( errc == mx::error_t::std_out_of_range );
486
488 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
489 sfn.valid() );
490 }
491
492 SECTION( "Default Construction, setting fullname error in year" )
493 {
494
496
497 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_X0241121063321000000001.binlog" );
498
499 REQUIRE( !sfn.valid() );
500 REQUIRE( errc == mx::error_t::invalidarg );
501 }
502
503 SECTION( "Default Construction, setting fullname error in month" )
504 {
505
507
508 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_2024X121063321000000001.binlog" );
509
510 REQUIRE( !sfn.valid() );
511 REQUIRE( errc == mx::error_t::invalidarg );
512 }
513
514 SECTION( "Default Construction, setting fullname error in day" )
515 {
516
518
519 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_202411X1063321000000001.binlog" );
520
521 REQUIRE( !sfn.valid() );
522 REQUIRE( errc == mx::error_t::invalidarg );
523 }
524
525 SECTION( "Default Construction, setting fullname error in day" )
526 {
527
529
530 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_202411X1063321000000001.binlog" );
531
532 REQUIRE( !sfn.valid() );
533 REQUIRE( errc == mx::error_t::invalidarg );
534 }
535
536 SECTION( "Default Construction, setting fullname error in hour" )
537 {
538
540
541 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121H63321000000001.binlog" );
542
543 REQUIRE( !sfn.valid() );
544 REQUIRE( errc == mx::error_t::invalidarg );
545 }
546
547 SECTION( "Default Construction, setting fullname error in minute" )
548 {
549
551
552 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_2024112106M321000000001.binlog" );
553
554 REQUIRE( !sfn.valid() );
555 REQUIRE( errc == mx::error_t::invalidarg );
556 }
557
558 SECTION( "Default Construction, setting fullname error in second" )
559 {
560
562
563 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_202411210633S1000000001.binlog" );
564
565 REQUIRE( !sfn.valid() );
566 REQUIRE( errc == mx::error_t::invalidarg );
567 }
568
569 SECTION( "Default Construction, setting fullname error in nanosecond" )
570 {
571
573
574 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321N00000001.binlog" );
575
576 REQUIRE( !sfn.valid() );
577 REQUIRE( errc == mx::error_t::invalidarg );
578 }
579
580 SECTION( "Default Construction, setting fullname throws exception from stdSubDir.ymd" )
581 {
582 MagAOX::file::XWCTEST_STDSUBDIR_YMD_BAD_ALLOC_ns::stdFileName sfn;
583
584 bool caught = false;
585
586 try
587 {
588 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
589 }
590 catch( const MagAOX::xwcException &e )
591 {
592 caught = true;
593 }
594 REQUIRE( caught == true );
595
597 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" ); );
598 }
599
600 SECTION( "Default Construction, setting fullname causes error from stdSubDir.ymd" )
601 {
602
603 MagAOX::file::XWCTEST_STDSUBDIR_YMD_EXCEPTION_ns::stdFileName sfn;
604
605 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
606
607 REQUIRE( !sfn.valid() );
608 REQUIRE( errc == mx::error_t::std_exception );
609
611 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
612 sfn.valid() );
613 }
614
615 SECTION( "Default Construction, setting fullname causes error with errno from timegm" )
616 {
617
618 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_TIMEGM_ns::stdFileName sfn;
619
620 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
621
622 REQUIRE( !sfn.valid() );
623 REQUIRE( errc == mx::error_t::eoverflow );
624
626 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
627 sfn.valid() );
628 }
629
630 SECTION( "Default Construction, setting fullname causes other error from timegm" )
631 {
632 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_TIMEGM_OTHER_ns::stdFileName sfn;
633
634 mx::error_t errc = sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
635
636 REQUIRE( !sfn.valid() );
637 REQUIRE( errc == mx::error_t::error );
638
640 sfn.fullName( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
641 sfn.valid() );
642 }
643
644 SECTION( "Default Construction, setting fullname via = throws exception from fs" )
645 {
646 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_FS_EXCEPTION_ns::stdFileName sfn;
647
648 sfn = "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog";
649
650 REQUIRE( !sfn.valid() );
651
653 sfn = "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog";
654 sfn.valid() );
655 }
656
657 SECTION( "Default Construction, setting fullname via = throws bad_alloc from fs" )
658 {
659 bool caught = false;
660
661 MagAOX::file::XWCTEST_STDFILENAME_FULLNAME_FS_BAD_ALLOC_ns::stdFileName sfn;
662
663 try
664 {
665 sfn = "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog";
666 }
667 catch( const MagAOX::xwcException &e )
668 {
669 caught = true;
670 }
671
672 REQUIRE( caught == true );
673 REQUIRE( !sfn.valid() );
674
676 sfn = "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog";
677 sfn.valid(); );
678 }
679}
680
681/// Comparing stdFileNames
682/**
683 * \ingroup stdFileName_unit_test
684 */
685TEST_CASE( "Comparing stdFileNames", "[libMagAOX::file::stdFileName]" )
686{
687 SECTION( "filenames to compare" )
688 {
689 MagAOX::file::stdFileName sfn1( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20241121063321000000001.binlog" );
690 MagAOX::file::stdFileName sfn2( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20251121063321000000001.binlog" );
691 MagAOX::file::stdFileName sfn3( "/opt/MagAOX/stds/bamm/2024_11_21/bamm_20251121063321000000001.binlog" );
692
694
695 REQUIRE( csfn( sfn1, sfn2 ) == true ); // less-than
696 REQUIRE( csfn( sfn2, sfn1 ) == false ); // greater-than
697 REQUIRE( csfn( sfn2, sfn3 ) == false ); // equal
698 }
699}
700
701} // namespace stdFileNameTest
702} // namespace fileTest
703} // namespace libXWCTest
Organize and analyze the name of a standard file name.
unsigned day(mx::error_t *errc=nullptr) const
Get the day.
const stdSubDir< verboseT > & subDir(mx::error_t *errc=nullptr) const
Get the current value of m_subDir.
int second(mx::error_t *errc=nullptr) const
Get the current value of m_second.
const std::string & appName(mx::error_t *errc=nullptr) const
Get the current value of m_appName.
mx::error_t fullName(const std::string &fullName)
Sets the full name.
flatlogs::timespecX timestamp(mx::error_t *errc=nullptr) const
Get the current value of m_valid.
const std::string & extension(mx::error_t *errc=nullptr) const
Get the current value of.
int hour(mx::error_t *errc=nullptr) const
Get the current value of m_hour.
int year(mx::error_t *errc=nullptr) const
Get the year.
const std::string & baseName(mx::error_t *errc=nullptr) const
Get the current value of m_baseName.
unsigned month(mx::error_t *errc=nullptr) const
Get the month.
int nsec(mx::error_t *errc=nullptr) const
Get the current value of m_nsec.
bool valid() const
Get the current value of.
int minute(mx::error_t *errc=nullptr) const
Get the current value of m_minute.
Augments an exception with the source file and line.
TEST_CASE("Construction and Initializing stdFileName", "[libMagAOX::file::stdFileName]")
Constructing and Initializing stdFileName.
#define XWCTEST_DOXYGEN_REF(fxn)
This inserts an unused call to a function signature to make doxygen make the link.
Definition testXWC.hpp:18
Namespace for all libXWC tests.
Definition MagAOXApp.hpp:49
Sort predicate for stdFileNames.
A fixed-width timespec structure.
Definition timespecX.hpp:35
nanosecT time_ns
Nanoseconds.
Definition timespecX.hpp:37
secT time_s
Time since the Unix epoch.
Definition timespecX.hpp:36