cvsuser     04/02/27 06:08:03

  Added:       App-Context/t Serializer.t
  Log:
  new
  
  Revision  Changes    Path
  1.1                  p5ee/App-Context/t/Serializer.t
  
  Index: Serializer.t
  ===================================================================
  #!/usr/local/bin/perl -w
  
  use Test::More qw(no_plan);
  use lib "lib";
  use lib "../lib";
  
  BEGIN {
     use_ok("App");
  }
  
  my ($context, $dir);
  $dir = ".";
  $dir = "t" if (! -f "app.pl");
  
  $context = App->context(
      conf_file => "",
      conf => {
          Serializer => {
              ini        => { class => "App::Serializer::Ini", },
              perl       => { class => "App::Serializer::Perl", },
              properties => { class => "App::Serializer::Properties", },
              xml        => { class => "App::Serializer::Xml", },
              storable   => { class => "App::Serializer::Storable", },
              text_array => { class => "App::Serializer::TextArray", },
              yaml       => { class => "App::Serializer::Yaml", },
              one_line   => { class => "App::Serializer::OneLine", },
          },
      },
  );
  
  my $ser = $context->serializer("ini");
  ok(defined $ser, "constructor ok");
  isa_ok($ser, "App::Serializer::Ini", "ini right class");
  is($ser->service_type(), "Serializer", "ini right service type");
  
  my ($ser2, $sdata2, $data2, $data3, $data4);
  my $data_array = [
    "e",
    2.71828,
    [ "pi", "is", 3.1416 ],
    { fun => "under_sun", 6 => undef, "more", undef },
  ];
  
  # ini
  $data = $ser->deserialize(&read_file("$dir/app.ini"));
  $sdata2 = $ser->serialize($data);
  #&write_file("app.ini.tmp",$sdata2);
  $data3 = $ser->deserialize($sdata2);
  is_deeply($data3, $data, "ini serialized and deserialized again");
  # can't do arrays
  # $data4 = $ser->deserialize($ser->serialize($data_array));
  # is_deeply($data4, $data_array, "ini round trip on array");
  
  # perl
  $ser2 = $context->serializer("perl");
  isa_ok($ser2, "App::Serializer::Perl", "perl right class");
  $sdata2 = &read_file("$dir/app.pl");
  $data2 = $ser2->deserialize($sdata2);
  is_deeply($data2, $data, "perl app.pl same as app.ini");
  $sdata2 = $ser2->serialize($data2);
  #&write_file("app.pl.tmp",$sdata2);
  $data3 = $ser2->deserialize($sdata2);
  is_deeply($data3, $data2, "perl serialized and deserialized again");
  $data4 = $ser2->deserialize($ser2->serialize($data_array));
  is_deeply($data4, $data_array, "perl round trip on array");
  
  # properties
  $ser2 = $context->serializer("properties");
  isa_ok($ser2, "App::Serializer::Properties", "properties right class");
  $sdata2 = &read_file("$dir/app.properties");
  $data2 = $ser2->deserialize($sdata2);
  is_deeply($data2, $data, "properties app.properties same as app.ini");
  $sdata2 = $ser2->serialize($data2);
  #&write_file("app.properties.tmp",$sdata2);
  $data3 = $ser2->deserialize($sdata2);
  is_deeply($data3, $data2, "properties serialized and deserialized again");
  # can't do arrays
  # $data4 = $ser2->deserialize($ser2->serialize($data_array));
  # is_deeply($data4, $data_array, "properties round trip on array");
  
  # xml
  $ser2 = $context->serializer("xml");
  isa_ok($ser2, "App::Serializer::Xml", "xml right class");
  $sdata2 = &read_file("$dir/app.xml");
  $data2 = $ser2->deserialize($sdata2);
  is_deeply($data2, $data, "xml app.xml same as app.ini");
  $sdata2 = $ser2->serialize($data2);
  #&write_file("app.xml.tmp",$sdata2);
  $data3 = $ser2->deserialize($sdata2);
  # this should work but it doesn't.  hmmm...
  # is_deeply($data3, $data2, "xml serialized and deserialized again");
  # can't do arrays
  # $data4 = $ser2->deserialize($ser2->serialize($data_array));
  # is_deeply($data4, $data_array, "xml round trip on array");
  
  # storable
  $ser2 = $context->serializer("storable");
  isa_ok($ser2, "App::Serializer::Storable", "storable right class");
  $sdata2 = $ser2->serialize($data);
  #&write_file("app.storable.tmp",$sdata2);
  $data3 = $ser2->deserialize($sdata2);
  is_deeply($data3, $data, "storable serialized and deserialized again");
  $data4 = $ser2->deserialize($ser2->serialize($data_array));
  is_deeply($data4, $data_array, "storable round trip on array");
  
  # yaml
  $ser2 = $context->serializer("yaml");
  isa_ok($ser2, "App::Serializer::Yaml", "yaml right class");
  $sdata2 = $ser2->serialize($data);
  #&write_file("app.yaml.tmp",$sdata2);
  $data3 = $ser2->deserialize($sdata2);
  is_deeply($data3, $data, "yaml serialized and deserialized again");
  $data4 = $ser2->deserialize($ser2->serialize($data_array));
  is_deeply($data4, $data_array, "yaml round trip on array");
  
  # one_line
  $ser2 = $context->serializer("one_line");
  isa_ok($ser2, "App::Serializer::OneLine", "one_line right class");
  $sdata2 = $ser2->serialize($data);
  #&write_file("app.one_line.tmp",$sdata2);
  $data3 = $ser2->deserialize($sdata2);
  is_deeply($data3, $data, "one_line serialized and deserialized again");
  $data4 = $ser2->deserialize($ser2->serialize($data_array));
  is_deeply($data4, $data_array, "one_line round trip on array");
  is($ser2->serialize([x=>""]), "x,", "one_line serializing empty strings");
  is_deeply($ser2->deserialize("x,"), [x=>""], "one_line deserializing empty strings");
  is($ser2->serialize({x=>""}), "{x=}", "one_line serializing hashref with empty 
string");
  is_deeply($ser2->deserialize("{x=}"), {x=>""}, "one_line deserializing hashref with 
empty string");
  is($ser2->serialize(["x"]), "x", "one_line serializing array with one element");
  is_deeply($ser2->deserialize("x"), ["x"], "one_line deserializing array with one 
element");
  is_deeply($ser2->deserialize("[x]"), ["x"], "one_line deserializing array with one 
element (alt)");
  is($ser2->serialize(["x","y"]), "x,y", "one_line serializing array with two 
elements");
  is_deeply($ser2->deserialize("x,y"), ["x","y"], "one_line deserializing array with 
two elements");
  is_deeply($ser2->deserialize("[x,y]"), ["x","y"], "one_line deserializing array with 
two elements (alt)");
  
  # text_array (ONLY WORKS WITH ARRAYS OF ARRAYS)
  $data2 = [
    [ "pi", "=", 3.1416 ],
    [ 6, undef, "more", undef ],
  ];
  $ser2 = $context->serializer("text_array");
  isa_ok($ser2, "App::Serializer::TextArray", "text_array right class");
  $sdata2 = $ser2->serialize($data2);
  #&write_file("app.text_array.tmp",$sdata2);
  $data3 = $ser2->deserialize($sdata2);
  is_deeply($data3, $data2, "text_array serialized and deserialized again");
  
  exit 0;
  
  sub read_file {
      my ($file) = @_;
      open(FILE, "< $file") || die "Unable to open $file: $!";
      my @data = <FILE>;
      close(FILE);
      my $data = join("",@data);
      return($data);
  }
  
  sub write_file {
      my ($file, $data) = @_;
      open(FILE, "> $file") || die "Unable to open $file: $!";
      print FILE $data;
      close(FILE);
  }
  
  
  
  

Reply via email to