Revision 43010559
Von Bernd Bleßmann vor etwa 11 Jahren hinzugefügt
t/helper/csv.t | ||
---|---|---|
1 |
use Test::More tests => 58;
|
|
1 |
use Test::More tests => 64;
|
|
2 | 2 |
|
3 | 3 |
use lib 't'; |
4 | 4 |
use utf8; |
... | ... | |
28 | 28 |
$::myconfig{dateformat} = 'dd.mm.yyyy'; |
29 | 29 |
|
30 | 30 |
$csv = SL::Helper::Csv->new( |
31 |
file => \"Kaffee;0.12;12,2;1,5234\n", |
|
31 |
file => \"Kaffee;0.12;12,2;1,5234\n", # " # make emacs happy
|
|
32 | 32 |
header => [[ 'description', 'sellprice', 'lastcost_as_number', 'listprice' ]], |
33 | 33 |
profile => [{profile => { listprice => 'listprice_as_number' }, |
34 | 34 |
class => 'SL::DB::Part',}], |
... | ... | |
106 | 106 |
Kaffee;;0.12;1,221.52 |
107 | 107 |
Beer;1123245;0.12;1.5234 |
108 | 108 |
EOL |
109 |
# " # make emacs happy |
|
109 | 110 |
numberformat => '1,000.00', |
110 | 111 |
profile => [{class => 'SL::DB::Part'}], |
111 | 112 |
); |
... | ... | |
119 | 120 |
"Kaf"fee";;0.12;1,221.52 |
120 | 121 |
Beer;1123245;0.12;1.5234 |
121 | 122 |
EOL |
123 |
# " # make emacs happy |
|
122 | 124 |
numberformat => '1,000.00', |
123 | 125 |
profile => [{class => 'SL::DB::Part'}], |
124 | 126 |
); |
... | ... | |
270 | 272 |
##### |
271 | 273 |
|
272 | 274 |
$csv = SL::Helper::Csv->new( |
273 |
file => \"Kaffee", |
|
275 |
file => \"Kaffee", # " # make emacs happy
|
|
274 | 276 |
header => [[ 'description' ]], |
275 | 277 |
profile => [{class => 'SL::DB::Part'}], |
276 | 278 |
); |
... | ... | |
280 | 282 |
##### |
281 | 283 |
|
282 | 284 |
$csv = SL::Helper::Csv->new( |
283 |
file => \"Description\nKaffee", |
|
285 |
file => \"Description\nKaffee", # " # make emacs happy
|
|
284 | 286 |
case_insensitive_header => 1, |
285 |
profile => [ {profile => { description => 'description' }, class => 'SL::DB::Part'} ], |
|
287 |
profile => [{ |
|
288 |
profile => { description => 'description' }, |
|
289 |
class => 'SL::DB::Part' |
|
290 |
}], |
|
286 | 291 |
); |
287 | 292 |
$csv->parse; |
288 | 293 |
is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'case insensitive header from csv works'; |
... | ... | |
290 | 295 |
##### |
291 | 296 |
|
292 | 297 |
$csv = SL::Helper::Csv->new( |
293 |
file => \"Kaffee", |
|
298 |
file => \"Kaffee", # " # make emacs happy
|
|
294 | 299 |
header => [[ 'Description' ]], |
295 |
profile => [{profile => { description => 'description' }, {class => 'SL::DB::Part'}], |
|
300 |
case_insensitive_header => 1, |
|
301 |
profile => [{ |
|
302 |
profile => { description => 'description' }, |
|
303 |
class => 'SL::DB::Part' |
|
304 |
}], |
|
296 | 305 |
); |
297 | 306 |
$csv->parse; |
298 | 307 |
is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'case insensitive header as param works'; |
... | ... | |
300 | 309 |
##### |
301 | 310 |
|
302 | 311 |
$csv = SL::Helper::Csv->new( |
303 |
file => \"\x{EF}\x{BB}\x{BF}description\nKaffee", |
|
312 |
file => \"\x{EF}\x{BB}\x{BF}description\nKaffee", # " # make emacs happy
|
|
304 | 313 |
profile => [{class => 'SL::DB::Part'}], |
305 | 314 |
encoding => 'utf8', |
306 | 315 |
); |
... | ... | |
310 | 319 |
##### |
311 | 320 |
|
312 | 321 |
$csv = SL::Helper::Csv->new( |
313 |
file => \"Kaffee", |
|
322 |
file => \"Kaffee", # " # make emacs happy
|
|
314 | 323 |
header => [[ 'Description' ]], |
315 | 324 |
profile => [{class => 'SL::DB::Part'}], |
316 | 325 |
); |
317 | 326 |
$csv->parse; |
318 | 327 |
is_deeply $csv->get_data, undef, 'case insensitive header without flag ignores'; |
319 | 328 |
|
329 |
##### |
|
330 |
|
|
331 |
$csv = SL::Helper::Csv->new( |
|
332 |
file => \"Kaffee", # " # make emacs happy |
|
333 |
header => [[ 'foo' ]], |
|
334 |
profile => [{ |
|
335 |
profile => { foo => '' }, |
|
336 |
class => 'SL::DB::Part', |
|
337 |
}], |
|
338 |
); |
|
339 |
$csv->parse; |
|
340 |
|
|
341 |
is_deeply $csv->get_data, [ { foo => 'Kaffee' } ], 'empty path still gets parsed into data'; |
|
342 |
ok $csv->get_objects->[0], 'empty path gets ignored in object creation'; |
|
343 |
|
|
344 |
##### |
|
345 |
|
|
346 |
$csv = SL::Helper::Csv->new( |
|
347 |
file => \"Kaffee", # " # make emacs happy |
|
348 |
header => [[ 'foo' ]], |
|
349 |
strict_profile => 1, |
|
350 |
profile => [{ |
|
351 |
profile => { foo => '' }, |
|
352 |
class => 'SL::DB::Part', |
|
353 |
}], |
|
354 |
); |
|
355 |
$csv->parse; |
|
356 |
|
|
357 |
is_deeply $csv->get_data, [ { foo => 'Kaffee' } ], 'empty path still gets parsed into data (strict profile)'; |
|
358 |
ok $csv->get_objects->[0], 'empty path gets ignored in object creation (strict profile)'; |
|
359 |
|
|
360 |
$csv = SL::Helper::Csv->new( |
|
361 |
file => \"Phil", # " # make emacs happy |
|
362 |
header => [[ 'CVAR_grOUnDHog' ]], |
|
363 |
strict_profile => 1, |
|
364 |
case_insensitive_header => 1, |
|
365 |
profile => [{ |
|
366 |
profile => { cvar_Groundhog => '' }, |
|
367 |
class => 'SL::DB::Part', |
|
368 |
}], |
|
369 |
|
|
370 |
); |
|
371 |
$csv->parse; |
|
372 |
|
|
373 |
is_deeply $csv->get_data, [ { cvar_Groundhog => 'Phil' } ], 'using empty path to get cvars working'; |
|
374 |
ok $csv->get_objects->[0], '...and not destorying the objects'; |
|
375 |
|
|
376 |
##### |
|
377 |
|
|
378 |
$csv = SL::Helper::Csv->new( |
|
379 |
file => \"description\nKaffee", # " # make emacs happy |
|
380 |
); |
|
381 |
$csv->parse; |
|
382 |
is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'without profile and class works'; |
|
383 |
|
|
320 | 384 |
##### |
321 | 385 |
$csv = SL::Helper::Csv->new( |
322 | 386 |
file => \"Kaffee;1,50\nSchoke;0,89\n", |
... | ... | |
347 | 411 |
row_ident => 'C' } |
348 | 412 |
], |
349 | 413 |
); |
350 |
$csv->parse; |
|
351 | 414 |
|
352 | 415 |
ok $csv->_check_multiplexed, 'multiplex check works on multiplexed data'; |
353 | 416 |
ok $csv->is_multiplexed, 'multiplexed data is recognized'; |
... | ... | |
367 | 430 |
], |
368 | 431 |
); |
369 | 432 |
|
370 |
ok !$csv->_check_multiplexed, 'multiplex check works on multiplexed data an detects missing row_ident'; |
|
433 |
ok !$csv->_check_multiplexed, 'multiplex check works on multiplexed data and detects missing row_ident';
|
|
371 | 434 |
|
372 | 435 |
##### |
373 | 436 |
$csv = SL::Helper::Csv->new( |
... | ... | |
383 | 446 |
row_ident => 'C' } |
384 | 447 |
], |
385 | 448 |
); |
386 |
$csv->parse; |
|
387 | 449 |
|
388 |
ok !$csv->_check_multiplexed, 'multiplex check works on multiplexed data an detects missing class'; |
|
450 |
ok !$csv->_check_multiplexed, 'multiplex check works on multiplexed data and detects missing class';
|
|
389 | 451 |
|
390 | 452 |
##### |
391 | 453 |
$csv = SL::Helper::Csv->new( |
... | ... | |
402 | 464 |
], |
403 | 465 |
); |
404 | 466 |
|
405 |
ok !$csv->_check_multiplexed, 'multiplex check works on multiplexed data an detects missing header'; |
|
467 |
ok !$csv->_check_multiplexed, 'multiplex check works on multiplexed data and detects missing header';
|
|
406 | 468 |
|
407 | 469 |
##### |
408 | 470 |
|
... | ... | |
421 | 483 |
], |
422 | 484 |
ignore_unknown_columns => 1, |
423 | 485 |
); |
486 |
|
|
424 | 487 |
$csv->parse; |
425 | 488 |
is_deeply $csv->get_data, |
426 | 489 |
[ { datatype => 'P', description => 'Kaffee', listprice => '1,50' }, { datatype => 'C', name => 'Meier' } ], |
... | ... | |
444 | 507 |
); |
445 | 508 |
|
446 | 509 |
$csv->parse; |
447 |
is_deeply $csv->get_data, [ { description => 'Kaffee' } ], 'without profile and class works'; |
|
510 |
is scalar @{ $csv->get_objects }, 2, 'multiplex: auto header works'; |
|
511 |
is $csv->get_objects->[0]->description, 'Kaffee', 'multiplex: auto header first object'; |
|
512 |
is $csv->get_objects->[1]->name, 'Meier', 'multiplex: auto header second object'; |
|
448 | 513 |
|
449 | 514 |
###### |
450 | 515 |
|
Auch abrufbar als: Unified diff
Anpassungen nach merge/rebase
Testanzahl angepasst, Schreibfehler, emacs happy