03-spec-coverage.t 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!perl
  2. use strict;
  3. use warnings;
  4. use LWP::UserAgent;
  5. use Selenium::Remote::Commands;
  6. use Test::More;
  7. unless($ENV{RELEASE_TESTING}) {
  8. plan(skip_all=>"Author tests not required for installation.");
  9. }
  10. my $uri = "http://selenium.googlecode.com/svn/wiki/JsonWireProtocol.wiki";
  11. my $ua = LWP::UserAgent->new;
  12. my $data = $ua->get($uri)->content;
  13. plan skip_all => "need internet connection to run spec test" if !$data;
  14. my $todo_list = {
  15. 'GET session/:sessionId/orientation' => 1,
  16. 'POST session/:sessionId/orientation' => 1,
  17. 'POST session/:sessionId/ime/deactivate' => 1,
  18. 'GET session/:sessionId/ime/activated' => 1,
  19. 'POST session/:sessionId/ime/activate' => 1,
  20. 'GET session/:sessionId/ime/active_engine' => 1,
  21. 'GET session/:sessionId/ime/available_engines' => 1,
  22. 'POST session/:sessionId/touch/click' => 1,
  23. 'POST session/:sessionId/touch/down' => 1,
  24. 'POST session/:sessionId/touch/up' => 1,
  25. 'GET sessions' => 1,
  26. 'POST session/:sessionId/window/:windowHandle/size' => 1,
  27. 'GET session/:sessionId/window/:windowHandle/size' => 1,
  28. 'POST session/:sessionId/window/:windowHandle/position' => 1,
  29. 'GET session/:sessionId/window/:windowHandle/position' => 1,
  30. 'POST session/:sessionId/keys' => 1,
  31. 'GET session/:sessionId/location' => 1,
  32. 'POST session/:sessionId/location' => 1,
  33. 'POST session/:sessionId/window/:windowHandle/maximize' => 1,
  34. 'GET session/:sessionId/local_storage' => 1,
  35. 'POST session/:sessionId/local_storage' => 1,
  36. 'DELETE session/:sessionId/local_storage' => 1,
  37. 'GET session/:sessionId/local_storage/key/:key' => 1,
  38. 'DELETE session/:sessionId/local_storage/key/:key' => 1,
  39. 'GET session/:sessionId/local_storage/size' => 1,
  40. 'GET session/:sessionId/session_storage' => 1,
  41. 'POST session/:sessionId/session_storage' => 1,
  42. 'DELETE session/:sessionId/session_storage' => 1,
  43. 'GET session/:sessionId/session_storage/key/:key' => 1,
  44. 'DELETE session/:sessionId/session_storage/key/:key' => 1,
  45. 'GET session/:sessionId/session_storage/size' => 1,
  46. };
  47. my @lines = split(/\n/, $data);
  48. my @methods;
  49. for my $line (@lines) {
  50. if ($line =~
  51. /\|\|\s*(GET|POST|DELETE)\s*\|\|\s*\[\S*\s+\/([^\]]*)\]\s*\|\|\s*([^\|]*?)\s*\|\|/
  52. ) {
  53. my $method = {method => $1, path => $2, desc => $3};
  54. push @methods, $method;
  55. }
  56. }
  57. my $commands = Selenium::Remote::Commands->new->get_cmds;
  58. SOURCE_COMMAND: for my $method_source (@methods) {
  59. my $command = "$method_source->{method} $method_source->{path}";
  60. my $msg = "Looking for '$command'";
  61. for my $method_local (values %{$commands}) {
  62. if ( $method_local->{url} eq $method_source->{path}
  63. and $method_local->{method} eq $method_source->{method}) {
  64. pass($msg);
  65. next SOURCE_COMMAND;
  66. }
  67. }
  68. TODO: {
  69. local $TODO = "need to create command" if $todo_list->{$command};
  70. fail($msg);
  71. diag("Add this to lib/Selenium/Remote/Commands.pm:
  72. # '$method_source->{path}' => {
  73. # 'method' => '$method_source->{method}',
  74. # 'url' => '$method_source->{path}'
  75. # },
  76. or add this to t/03-spec-coverage.t, to the hash %todo_list:
  77. # '$command' => 1,
  78. \n");
  79. }
  80. }
  81. LOCAL_COMMAND: for my $method_local (values %{$commands}) {
  82. my $msg = "extra command $method_local->{method} $method_local->{url}";
  83. for my $method_source (@methods) {
  84. if ( $method_local->{url} eq $method_source->{path}
  85. and $method_local->{method} eq $method_source->{method}) {
  86. next LOCAL_COMMAND;
  87. }
  88. }
  89. TODO: {
  90. local $TODO = "Investigate extra methods";
  91. fail($msg);
  92. }
  93. }
  94. done_testing;