The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use warnings;
use strict;

use Test::More tests => 15;

use Text::xSV::Slurp;

my @tests =
   (

   {
   
   id => 'string, defaults',

   in => <<EOIN,
a,b,c
1,2,3
EOIN

   exp => 
      [{
      a => 1,
      b => 2,
      c => 3,
      }],
      
   opts =>
      {},

   },

   {
   
   id => 'header only, string, defaults',

   in => <<EOIN,
a,b,c
EOIN

   exp => 
      [],
      
   opts =>
      {},

   },

   {
   
   id => 'empty, string, defaults',

   in => '',

   exp => 
      [],
      
   opts =>
      {},

   },

   {
   
   id => 'string, aoh',

   in => <<EOIN,
a,b,c
1,2,3
EOIN

   exp => 
      [{
      a => 1,
      b => 2,
      c => 3,
      }],
      
   opts =>
      { shape => 'aoh' },

   },

   {
   
   id => 'header only, string, aoh',

   in => <<EOIN,
a,b,c
EOIN

   exp => 
      [],
      
   opts =>
      { shape => 'aoh' },

   },

   {
   
   id => 'empty, string, aoh',

   in => '',

   exp => 
      [],
      
   opts =>
      { shape => 'aoh' },

   },

   {
   
   id => 'string, aoa',

   in => <<EOIN,
a,b,c
1,2,3
EOIN

   exp => 
      [
         [ qw/ a b c / ],
         [ qw/ 1 2 3 / ],
      ],
      
   opts =>
      { shape => 'aoa' },

   },

   {
   
   id => 'header only, string, aoa',

   in => <<EOIN,
a,b,c
EOIN

   exp => 
      [
         [ qw/ a b c / ],
      ],
      
   opts =>
      { shape => 'aoa' },

   },

   {
   
   id => 'empty, string, aoa',

   in => '',

   exp => 
      [],
      
   opts =>
      { shape => 'aoa' },

   },

   {
   
   id => 'string, hoa',

   in => <<EOIN,
a,b,c
1,2,3
EOIN

   exp => 
      {
      a => [ 1 ],
      b => [ 2 ],
      c => [ 3 ],
      },
      
   opts =>
      { shape => 'hoa' },

   },

   {
   
   id => 'header only, string, hoa',

   in => <<EOIN,
a,b,c
EOIN

   exp => 
      {
      a => [ ],
      b => [ ],
      c => [ ],
      },
      
   opts =>
      { shape => 'hoa' },

   },

   {
   
   id => 'empty, string, hoa',

   in => '',

   exp => 
      {},
      
   opts =>
      { shape => 'hoa' },

   },

   {
   
   id => 'string, hoh',

   in => <<EOIN,
a,b,c
1,2,3
EOIN

   exp => 
      {
      1 => { 3 => { b => 2 } },
      },
      
   opts =>
      { shape => 'hoh', key => 'a,c' },

   },

   {
   
   id => 'header only, string, hoh',

   in => <<EOIN,
a,b,c
EOIN

   exp => 
      {
      },
      
   opts =>
      { shape => 'hoh', key => 'a,c' },

   },

   {
   
   id => 'empty, string, hoh',

   in => '',

   exp => 
      {},
      
   opts =>
      { shape => 'hoh', key => 'a,c' },

   },

   );

for my $test ( @tests )
   {
   my $got = xsv_slurp( string => $test->{'in'}, %{ $test->{'opts'} } );
   my $exp = $test->{'exp'};
   my $id  = $test->{'id'};
   is_deeply($got, $exp, $id);
   }