[前][次][番号順一覧][スレッド一覧]

ruby-changes:22884

From: tenderlove <ko1@a...>
Date: Wed, 7 Mar 2012 07:40:50 +0900 (JST)
Subject: [ruby-changes:22884] tenderlove:r34933 (trunk): * test/xmlrpc/test_client.rb: adding a test for performing an XMLRPC

tenderlove	2012-03-07 07:40:38 +0900 (Wed, 07 Mar 2012)

  New Revision: 34933

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34933

  Log:
    * test/xmlrpc/test_client.rb: adding a test for performing an XMLRPC
      call.
    * test/xmlrpc/data/blog.xml: supporting XML document for the response.

  Added files:
    trunk/test/xmlrpc/data/blog.xml
  Modified files:
    trunk/ChangeLog
    trunk/test/xmlrpc/test_client.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34932)
+++ ChangeLog	(revision 34933)
@@ -1,3 +1,9 @@
+Wed Mar  7 07:39:28 2012  Aaron Patterson <aaron@t...>
+
+	* test/xmlrpc/test_client.rb: adding a test for performing an XMLRPC
+	  call.
+	* test/xmlrpc/data/blog.xml: supporting XML document for the response.
+
 Tue Mar  6 16:24:01 2012  Nobuyoshi Nakada  <nobu@r...>
 
 	* parse.y (parser_tokadd_string): escape simple regexp meta
Index: test/xmlrpc/test_client.rb
===================================================================
--- test/xmlrpc/test_client.rb	(revision 34932)
+++ test/xmlrpc/test_client.rb	(revision 34933)
@@ -1,19 +1,63 @@
 require 'minitest/autorun'
 require 'xmlrpc/client'
+require 'net/http'
 
 module XMLRPC
   class ClientTest < MiniTest::Unit::TestCase
-    class FakeClient < XMLRPC::Client
-      attr_reader :args
+    module Fake
+      class HTTP
+        attr_accessor :read_timeout, :open_timeout, :use_ssl
 
-      def initialize(*args)
-        @args = args
-        super
+        def initialize responses = {}
+          @started = false
+          @responses = responses
+        end
+
+        def started?
+          @started
+        end
+        def start; @started = true; end
+
+        def request_post path, request, headers
+          @responses[path].shift
+        end
       end
+
+      class Client < XMLRPC::Client
+        attr_reader :args, :http
+
+        def initialize(*args)
+          @args = args
+          super
+        end
+
+        private
+        def net_http host, port, proxy_host, proxy_port
+          HTTP.new
+        end
+      end
+
+      class Response
+        def self.new body, fields = [], status = '200'
+          klass = Class.new(Net::HTTPResponse::CODE_TO_OBJ[status]) {
+            def initialize(*args)
+              super
+              @read = true
+            end
+          }
+
+          resp = klass.new '1.1', status, 'OK'
+          resp.body = body
+          fields.each do |k,v|
+            resp.add_field k, v
+          end
+          resp
+        end
+      end
     end
 
     def test_new2_host_path_port
-      client = FakeClient.new2 'http://example.org/foo'
+      client = Fake::Client.new2 'http://example.org/foo'
       host, path, port, *rest = client.args
 
       assert_equal 'example.org', host
@@ -24,7 +68,7 @@
     end
 
     def test_new2_custom_port
-      client = FakeClient.new2 'http://example.org:1234/foo'
+      client = Fake::Client.new2 'http://example.org:1234/foo'
       host, path, port, *rest = client.args
 
       assert_equal 'example.org', host
@@ -35,7 +79,7 @@
     end
 
     def test_new2_ssl
-      client = FakeClient.new2 'https://example.org/foo'
+      client = Fake::Client.new2 'https://example.org/foo'
       host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
 
       assert_equal 'example.org', host
@@ -51,7 +95,7 @@
     end
 
     def test_new2_ssl_custom_port
-      client = FakeClient.new2 'https://example.org:1234/foo'
+      client = Fake::Client.new2 'https://example.org:1234/foo'
       host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
 
       assert_equal 'example.org', host
@@ -66,7 +110,7 @@
     end
 
     def test_new2_user_password
-      client = FakeClient.new2 'http://aaron:tenderlove@e.../foo'
+      client = Fake::Client.new2 'http://aaron:tenderlove@e.../foo'
       host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
 
       [ host, path, port ].each { |x| assert x }
@@ -77,7 +121,7 @@
     end
 
     def test_new2_proxy_host
-      client = FakeClient.new2 'http://example.org/foo', 'example.com'
+      client = Fake::Client.new2 'http://example.org/foo', 'example.com'
       host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
 
       [ host, path, port ].each { |x| assert x }
@@ -88,7 +132,7 @@
     end
 
     def test_new2_proxy_port
-      client = FakeClient.new2 'http://example.org/foo', 'example.com:1234'
+      client = Fake::Client.new2 'http://example.org/foo', 'example.com:1234'
       host, path, port, proxy_host, proxy_port, user, password, use_ssl, timeout = client.args
 
       [ host, path, port ].each { |x| assert x }
@@ -100,7 +144,7 @@
     end
 
     def test_new2_no_path
-      client = FakeClient.new2 'http://example.org'
+      client = Fake::Client.new2 'http://example.org'
       host, path, port, *rest = client.args
 
       assert_equal 'example.org', host
@@ -111,7 +155,7 @@
     end
 
     def test_new2_slash_path
-      client = FakeClient.new2 'http://example.org/'
+      client = Fake::Client.new2 'http://example.org/'
       host, path, port, *rest = client.args
 
       assert_equal 'example.org', host
@@ -134,7 +178,7 @@
     end
 
     def test_new2_path_with_query
-      client = FakeClient.new2 'http://example.org/foo?bar=baz'
+      client = Fake::Client.new2 'http://example.org/foo?bar=baz'
       host, path, port, *rest = client.args
 
       assert_equal 'example.org', host
@@ -143,5 +187,38 @@
 
       rest.each { |x| refute x }
     end
+
+    def test_bad_content_type
+      fh = read 'blog.xml'
+
+      responses = {
+        '/foo' => [ Fake::Response.new(fh, [['Content-Type', 'text/xml']]) ]
+      }
+
+      client = fake_client(responses).new2 'http://example.org/foo'
+
+      resp = client.call('wp.getUsersBlogs', 'tlo', 'omg')
+
+      expected = [{
+        "isAdmin"  => true,
+        "url"      => "http://tenderlovemaking.com/",
+        "blogid"   => "1",
+        "blogName" => "Tender Lovemaking",
+        "xmlrpc"   => "http://tenderlovemaking.com/xmlrpc.php"
+      }]
+
+      assert_equal expected, resp
+    end
+
+    private
+    def read filename
+      File.read File.expand_path(File.join(__FILE__, '..', 'data', filename))
+    end
+
+    def fake_client responses
+      Class.new(Fake::Client) {
+        define_method(:net_http) { |*_| Fake::HTTP.new(responses) }
+      }
+    end
   end
 end
Index: test/xmlrpc/data/blog.xml
===================================================================
--- test/xmlrpc/data/blog.xml	(revision 0)
+++ test/xmlrpc/data/blog.xml	(revision 34933)
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<methodResponse>
+  <params>
+    <param>
+      <value>
+      <array><data>
+  <value><struct>
+  <member><name>isAdmin</name><value><boolean>1</boolean></value></member>
+  <member><name>url</name><value><string>http://tenderlovemaking.com/</string></value></member>
+  <member><name>blogid</name><value><string>1</string></value></member>
+  <member><name>blogName</name><value><string>Tender Lovemaking</string></value></member>
+  <member><name>xmlrpc</name><value><string>http://tenderlovemaking.com/xmlrpc.php</string></value></member>
+</struct></value>
+</data></array>
+      </value>
+    </param>
+  </params>
+</methodResponse>

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]