Advertisement
Guest User

Untitled

a guest
Aug 10th, 2016
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 9.54 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2. #
  3. # Interface To Java, XML files
  4. #
  5. #### IMPORTS ##################################################################
  6.  
  7. use strict;
  8.  
  9. {
  10. package TestFileHandler;
  11.  
  12. use strict;
  13. use warnings;
  14.  
  15. use Data::Dumper;
  16. use XML::Simple;
  17.  
  18. #### INITIALIZATION ############################################################
  19.  
  20. #### SUB DEFINITIONS ###########################################################
  21.  
  22. sub getTestsFromJavaFiles {
  23.     my ($class, $docroot) = @_;
  24.            
  25.     my $directory = "$docroot/tests";
  26.     opendir (DIR, $directory);
  27.     my @classes;
  28.     while (my $file = readdir(DIR))
  29.     {
  30.         my $path="$docroot/tests/".$file;
  31.         my @shit=split(/\./, $file);
  32.         if (($file ne ".") && ($file ne ".."))
  33.         {
  34.         push @classes, $path;
  35.         }
  36.     }
  37.    
  38.     closedir(DIR);
  39.    
  40.     my @tests;
  41.     foreach my $file(@classes)
  42.     {
  43.         my $test = {};
  44.         open(my $fh, '<:encoding(UTF-8)', $file);
  45.         my @filename = split('/', $file);
  46.         my $lastsplitidx = @filename - 1;
  47.        
  48.         my @filenameWithoutExtension = split('\.', $filename[$lastsplitidx]);
  49.         $test->{'name'} = $filenameWithoutExtension[0];
  50.         #warn $test->{'name'};
  51.         my @testMethods = ();
  52.         while (my $row = <$fh>)
  53.         {
  54.           chomp $row;
  55.           if ($row=~ /public void (test[0-9A-z]+)\s*\(([0-9A-z, ]+)?\)/)
  56.           {
  57.                 my $testMethod = {};
  58.                 $testMethod->{'name'} = $1;
  59.                 my @parameters = ();
  60.                 if ($2)
  61.                 {
  62.                     my @params=split(/,\s*/, $2);
  63.                     foreach my $para (@params)
  64.                     {
  65.                         my ($type, $parameter) = split(/\s+/, $para);
  66.                         push ( @parameters, $parameter);
  67.                     }
  68.                 }
  69.                 $testMethod->{'parameters'} = \@parameters;
  70.                 push(@testMethods, $testMethod);
  71.           }
  72.         }
  73.         $test->{'testMethods'} = \@testMethods;
  74.         push (@tests, $test);
  75.     }
  76.    
  77.     #warn Data::Dumper::Dumper(\@tests);
  78.    
  79.     return \@tests;
  80.    
  81. }
  82.  
  83. sub inputDataFromXMLs {
  84.    
  85.     my ($class, $docroot, $tests) = @_;
  86.    
  87.     my @users = ();
  88.     my $expectedResults = {};
  89.    
  90.     my $directory = "$docroot/xmls";
  91.     opendir (DIR, $directory);
  92.     my @xmls;
  93.     while (my $file = readdir(DIR))
  94.     {
  95.         my $path="$docroot/xmls/".$file;
  96.         my @shit=split(/\./, $file);
  97.         if (($file ne "testng.xml") && ($file ne ".") && ($file ne ".."))
  98.         {
  99.         push @xmls, $path;
  100.         }
  101.     }
  102.     closedir(DIR);
  103.  
  104.     foreach my $file(@xmls)
  105.     {
  106.         my $configg = XMLin($file, KeyAttr => {test => 'name', parameter => 'name'}, ForceArray => {'parameter'});
  107.        
  108.  
  109.         my ($as, $namesplit) = split('_', $configg -> {name});
  110.         my $name = $namesplit;
  111.         my $email = $configg -> {parameter} -> {email} -> {value};
  112.         my $pass = $configg -> {parameter} -> {password} -> {value};       
  113.        
  114.         my $user={
  115.          'name' => $name,
  116.          'emails' => $email,
  117.          'password' => $pass,
  118.         };
  119.    
  120.         push @users, $user;
  121.  
  122.         foreach my $test (@{$tests})
  123.             {      
  124.                        
  125.                 foreach my $testMethod (@{$test->{'testMethods'}})
  126.                 {          
  127.                     my $run = $configg -> {test} -> {"$testMethod->{'name'}"};
  128.                     if($run)
  129.                     {              
  130.                         $expectedResults->{$test->{'name'}}->{'run'}->{$user->{'name'}} = 1;                   
  131.                            
  132.                         my $tf = $configg -> {test} -> {"$testMethod->{'name'}"} -> {parameter} -> {shouldSucceed} -> {value};
  133.                         my $in;
  134.                        
  135.                         if($tf eq 'true'){
  136.                             $in = 1;
  137.                         }else{
  138.                             $in = 0;
  139.                         }                          
  140.                         $expectedResults->{$test->{'name'}}->{$testMethod->{'name'}}->{'shouldSucceed'}->{$user->{'name'}} = $in;#(defined($paramValue) && $paramValue eq 'on') ? 1 : 0;
  141.                    
  142.                         foreach my $parameter (@{$testMethod->{'parameters'}})
  143.                         {
  144.                             my $tf = $configg -> {test} -> {"$testMethod->{'name'}"} -> {parameter} -> {$parameter} -> {value};
  145.                             my $in;
  146.                            
  147.                             if($tf eq 'true'){
  148.                                 $in = 1;
  149.                             }else{
  150.                                 $in=0;
  151.                             }                                              
  152.                             $expectedResults->{$test->{'name'}}->{$testMethod->{'name'}}->{$parameter}->{$user->{'name'}} = $in;#(defined($paramValue) && $paramValue eq 'on') ? 1 : 0;
  153.                         }
  154.                     }
  155.                 }
  156.             }  
  157.  
  158.             warn Dumper($configg);
  159.     }
  160.  
  161.     return (\@users, $expectedResults);
  162. }
  163.  
  164. sub generateXMLs
  165. {
  166.     my ($class, $docroot, $host, $tests, $users, $expectedResults) = @_;
  167.    
  168.     foreach my $user (@{$users})
  169.     {
  170.         my $filename = "$docroot/xmls/example.".$user->{'name'}.".xml";
  171.         open(my $fh, '>', $filename);
  172.         chmod 0777, $fh;
  173.  
  174.  
  175.         my $xmlContent = {};
  176.         my @xmlTests = ();
  177.        
  178.         my @loginParameters = ();
  179.         my $loginParameter = {
  180.             'name' => "logintype",
  181.             'value' => "custom"
  182.         };
  183.         my $emailParameter = {
  184.             'name' => "email",
  185.             'value' => $user->{'emails'}
  186.         };
  187.         my $passParameter = {
  188.             'name' => "password",
  189.             'value' => $user->{'password'}
  190.         };
  191.         push(@loginParameters, $loginParameter);
  192.         push(@loginParameters, $emailParameter);
  193.         push(@loginParameters, $passParameter);
  194.         $xmlContent->{'parameter'} = \@loginParameters;
  195.        
  196.        
  197.         foreach my $test (@{$tests})
  198.         {
  199.             my $run = $expectedResults->{$test->{'name'}}->{'run'}->{$user->{'name'}};
  200.            
  201.             if($run == 1)
  202.             {
  203.            
  204.             my $xmlTest = {};
  205.             my @xmlParameters;
  206.             foreach my $testMethod (@{$test->{'testMethods'}})
  207.             {              
  208.                 $xmlTest->{'name'} = $testMethod->{'name'};
  209.                 #begin classes
  210.                 my $classname = "com.cae.learningspace.acceptancetests.suites.".$test->{'name'};
  211.                 my @classes = ();      
  212.                 my $class = {};
  213.                 $class->{'name'} = $classname;
  214.                 push @classes, $class;        
  215.                 my $classrow->{'class'} = \@classes;      
  216.                 $xmlTest->{'classes'} = $classrow;
  217.                 #end classes
  218.                 foreach my $parameter (@{$testMethod->{'parameters'}})
  219.                 {
  220.                     my $condition = $expectedResults->{$test->{'name'}}->{$testMethod->{'name'}}->{$parameter}->{$user->{'name'}};
  221.                     my $value;
  222.                     if ($condition == 1)
  223.                     {
  224.                         $value = 'true';
  225.                     }
  226.                     else
  227.                     {
  228.                         $value = 'false';
  229.                     }
  230.                     my $xmlParameter = {
  231.                         'name' => $parameter,
  232.                         'value' => $value
  233.                     };
  234.                     push(@xmlParameters, $xmlParameter);
  235.                 }
  236.                
  237.                 my $condition = $expectedResults->{$test->{'name'}}->{$testMethod->{'name'}}->{'shouldSucceed'}->{$user->{'name'}};
  238.                 my $value;
  239.                 if ($condition == 1)
  240.                 {
  241.                     $value = 'true';
  242.                 }
  243.                 else
  244.                 {
  245.                     $value = 'false';
  246.                 }
  247.                 my $shouldParameter = {
  248.                     'name' => 'shouldSucceed',
  249.                     'value' => $value
  250.                 };
  251.                 push(@xmlParameters, $shouldParameter);
  252.             }
  253.             $xmlTest->{'parameter'} = \@xmlParameters;
  254.             push(@xmlTests, $xmlTest)
  255.            
  256.             }      
  257.         }
  258.         $xmlContent->{'name'} = "as_".$user->{'name'};
  259.         $xmlContent->{'test'} = \@xmlTests;
  260.         $xmlContent->{'configfailurepolicy'} = "continue";
  261.        
  262.         warn XMLout($xmlContent, RootName => "suite");
  263.         print $fh XMLout($xmlContent, RootName => "suite" );
  264.         close($fh);
  265.     }
  266.    
  267.     #begin testng.xml generate
  268.     my $testngfilename = "$docroot/xmls/testng.xml";
  269.     open (my $testngFile, '>', $testngfilename);
  270.     chmod 0777, $testngFile;
  271.    
  272.     my $testngContent = {};
  273.     my @suitesParameters = ();
  274.    
  275.     my $browserParameter = {
  276.         'name' => "browser",
  277.         'value' => "firefox"
  278.     };
  279.     my $websiteParameter = {
  280.         'name' => "website",
  281.         'value' => ($host) ? $host : "http://ls-test"
  282.     };
  283.     push (@suitesParameters, $browserParameter);
  284.     push (@suitesParameters, $websiteParameter);
  285.    
  286.     my $directory = "$docroot/xmls/";
  287.     opendir (DIR, $directory);
  288.     my @suiteFiles = ();
  289.     while (my $file = readdir(DIR))
  290.     {
  291.         if (($file ne "testng.xml") && ($file ne ".") && ($file ne ".."))
  292.         {
  293.             my $suiteFile->{'path'} = $file;
  294.             push (@suiteFiles, $suiteFile);      
  295.         }
  296.     }
  297.     my $suiteRow->{'suite-file'} = \@suiteFiles;
  298.    
  299.     $testngContent->{'suite-files'} = $suiteRow;
  300.     $testngContent->{'parameter'} = \@suitesParameters;
  301.     $testngContent->{'name'} = "allSuites";
  302.     $testngContent->{'configfailurepolicy'} = "continue";
  303.     print $testngFile XMLout($testngContent, RootName => "suite");
  304.    
  305.     close $testngFile;
  306.     #end testng.xml generate
  307.    
  308. }
  309.  
  310.  
  311.  
  312. ###### NAMESPACE ##############################################################
  313.  
  314. }
  315.  
  316.  
  317. ###### SUCCESS ################################################################
  318.  
  319. 1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement