Changeset 97

Show
Ignore:
Timestamp:
03/26/08 22:20:27 (2 years ago)
Author:
tolsen
Message:

fix tests to pass with REXML in debian's ruby1.8-1.8.6.114-2
(switch to using Formatters and declare all namespaces)

major hacks done.

  • D: xml prefix can only be DAV:
  • prefixes may need to be declared within each property (as opposed to just once at the top of the propset)

tests may not pass on limedav.com if older REXML is not compatible

Location:
limeberry/trunk
Files:
18 modified

Legend:

Unmodified
Added
Removed
  • limeberry/trunk/app/models/property.rb

    r14 r97  
    5858    self.namespace = Namespace.find_or_create_by_name!(element.namespace) 
    5959    self.name = element.name 
    60     out = '' 
    61     element.write out 
    62     self.value = out 
     60    self.value = Utility.xml_print element 
    6361  end 
    6462 
  • limeberry/trunk/app/models/resource.rb

    r49 r97  
    432432 
    433433  def dav_displayname(xml) 
    434     xml.tag_with_unescaped_text! "D:displayname", self.displayname 
     434    xml.tag_with_unescaped_text!("D:displayname", 
     435                                 self.displayname, 
     436                                 'xmlns:D' => 'DAV:') 
    435437  end 
    436438 
     
    591593  end 
    592594 
    593    
    594595  def xml_wrap_liveprop(propkey, method, xml = nil, principal = nil) 
    595596    method = self.method(method) 
     
    704705      self.save! # should possibly be moved elsewhere 
    705706    else 
    706       value = '' 
    707       element.write value 
     707      value = Utility.xml_print element 
    708708      property = properties.find_or_build_by_propkey(pk) 
    709709      property.value = value unless value.nil? # is the nil check still needed? 
  • limeberry/trunk/app/views/webdav/copy.rxml

    r14 r97  
    2323# SOFTWARE. 
    2424 
    25 xml.tag!("D:multistatus", "xmlns:D" => "DAV:") do 
     25xml.D :multistatus do 
    2626  @error2urls.each do |e, urls| 
    2727    xml.D :response do 
  • limeberry/trunk/app/views/webdav/move.rxml

    r14 r97  
    2323# SOFTWARE. 
    2424 
    25 xml.tag!("D:multistatus", "xmlns:D" => "DAV:") do 
     25xml.D :multistatus do 
    2626  xml.D :response do 
    2727    xml.D(:href, File.join(BASE_WEBDAV_PATH, @error.url)) 
  • limeberry/trunk/app/views/webdav/propfind.rxml

    r14 r97  
    2525require 'set' 
    2626 
    27 xml.tag!("D:multistatus", "xmlns:D" => "DAV:") do 
     27xml.D :multistatus do 
    2828  resources_seen = Set.new if @depth.infinite? 
    2929 
  • limeberry/trunk/app/views/webdav/proppatch.rxml

    r14 r97  
    2323# SOFTWARE. 
    2424 
    25 xml.tag!("D:multistatus", "xmlns:D" => "DAV:") do 
     25xml.D :multistatus do 
    2626 
    2727  xml.D :response do 
  • limeberry/trunk/lib/dav_xml_builder.rb

    r14 r97  
    4949    end 
    5050 
     51    def dav_ns_declared! 
     52      @dav_ns_declared 
     53    end 
     54 
     55    def tag_dav_ns!(sym, *args, &block) 
     56      @dav_ns_declared = true 
     57      args.push 'xmlns:D' => 'DAV:' 
     58      tag!(sym, *args, &block) 
     59    ensure 
     60      @dav_ns_declared = false 
     61    end 
     62     
     63    def D(*args, &block) 
     64      if dav_ns_declared! 
     65        method_missing('D', *args, &block) 
     66      else 
     67        args.push 'xmlns:D' => 'DAV:' 
     68        begin 
     69          @dav_ns_declared = true 
     70          method_missing('D', *args, &block) 
     71        ensure 
     72          @dav_ns_declared = false 
     73        end 
     74      end 
     75    end 
     76 
    5177  end 
    5278   
  • limeberry/trunk/lib/prop_key.rb

    r14 r97  
    7575  end # End Class Methods 
    7676 
    77   def tag_args 
    78     dav? ? ["D:#{name}"] : ["R:#{name}", { "xmlns:R" => ns }] 
     77  def tag_args xml 
     78    if dav? 
     79      args = [:D, name.to_sym] 
     80      args.push "xmlns:D" => "DAV:" unless xml.dav_ns_declared! 
     81      return args 
     82    else 
     83      return ["R:#{name}", { "xmlns:R" => ns }] 
     84    end 
    7985  end 
    8086   
     
    8288  def xml(xml, &block) 
    8389    if block_given? 
    84       xml.tag!(*tag_args, &block) 
     90      xml.tag!(*tag_args(xml), &block) 
    8591    else 
    86       xml.tag!(*tag_args) 
     92      xml.tag!(*tag_args(xml)) 
    8793    end 
    8894  end 
    8995 
    9096  def xml_with_unescaped_text(xml, text) 
    91     targs = tag_args << text 
     97    targs = tag_args(xml) << text 
    9298    xml.tag_with_unescaped_text!(*targs) 
    9399  end 
  • limeberry/trunk/lib/utility.rb

    r14 r97  
    2323require 'constants' 
    2424require 'digest/sha1' 
     25require 'rexml/document' 
    2526 
    2627 
     
    141142        locktoken_to_uuid locktoken 
    142143      end 
    143     end     
     144    end 
    144145 
     146 
     147    XML_FORMATTER = REXML::Formatters::Default.new unless defined? XML_FORMATTER 
     148     
     149    # node: REXML node 
     150    def xml_print node 
     151      output = '' 
     152      XML_FORMATTER.write node, output 
     153      return output 
     154    end 
     155     
    145156  end 
    146157 
  • limeberry/trunk/test/functional/webdav_controller_test.rb

    r52 r97  
    111111    <D:propstat>  
    112112      <D:prop> 
    113         <D:displayname>Root Collection</D:displayname> 
     113        <D:displayname xmlns:D='DAV:'>Root Collection</D:displayname> 
    114114      </D:prop>  
    115115      <D:status>HTTP/1.1 200 OK</D:status>  
     
    281281    <D:propstat>  
    282282      <D:prop> 
    283         <D:displayname>Foo Bar</D:displayname> 
     283        <D:displayname xmlns:D='DAV:'>Foo Bar</D:displayname> 
    284284      </D:prop>  
    285285      <D:status>HTTP/1.1 200 OK</D:status>  
     
    304304    <D:propstat>  
    305305      <D:prop> 
    306         <D:displayname>#{n}</D:displayname> 
     306        <D:displayname xmlns:D='DAV:'>#{n}</D:displayname> 
    307307      </D:prop>  
    308308      <D:status>HTTP/1.1 200 OK</D:status>  
     
    481481 
    482482  def test_proppatch_dead_set 
     483 
     484    # MAJOR HACK AND BREAKAGE! 
     485    # there should be no need to declare Z: twice! 
     486 
    483487    @request.body = <<EOS 
    484488<?xml version="1.0" encoding="utf-8" ?> 
     
    486490  <D:set> 
    487491    <D:prop> 
    488       <Z:authors> 
     492      <Z:authors xmlns:Z="http://www.w3.com/standards/z39.50/"> 
    489493        <Z:Author>Jim Whitehead</Z:Author> 
    490494        <Z:Author>Roy Fielding</Z:Author> 
     
    514518    pk_authors = PropKey.get('http://www.w3.com/standards/z39.50/', 'authors') 
    515519    expected = <<EOS 
    516 <Z:authors> 
     520<Z:authors xmlns:Z="http://www.w3.com/standards/z39.50/"> 
    517521  <Z:Author>Jim Whitehead</Z:Author> 
    518522  <Z:Author>Roy Fielding</Z:Author> 
     
    529533  <D:set> 
    530534    <D:prop> 
    531       <D:displayname>new name for foo</D:displayname> 
     535      <D:displayname xmlns:D='DAV:'>new name for foo</D:displayname> 
    532536    </D:prop> 
    533537  </D:set> 
     
    562566    <D:prop> 
    563567      <dc:title xmlns:dc="http://purl.org/dc/elements/1.1/">Title for Dublin Core</dc:title> 
    564       <D:displayname>Display name for Dav</D:displayname> 
     568      <D:displayname xmlns:D='DAV:'>Display name for Dav</D:displayname> 
    565569    </D:prop> 
    566570  </D:set> 
     
    635639    <D:prop> 
    636640      <dc:title xmlns:dc="http://purl.org/dc/elements/1.1/">Title for Dublin Core</dc:title> 
    637       <D:displayname>Display name for Dav</D:displayname> 
     641      <D:displayname xmlns:D='DAV:'>Display name for Dav</D:displayname> 
    638642    </D:prop> 
    639643  </D:set> 
     
    889893      <dc:title xmlns:dc="http://purl.org/dc/elements/1.1/">Title for Dublin Core</dc:title> 
    890894      <N:randomname1 xmlns:N="randomns1">newvalue</N:randomname1> 
    891       <D:displayname>my new displayname</D:displayname> 
     895      <D:displayname xmlns:D='DAV:'>my new displayname</D:displayname> 
    892896      <D:getetag>"iwishicouldchangemyetag"</D:getetag> 
    893897    </D:prop> 
     
    14731477      </D:supportedlock> 
    14741478      <D:source/> 
    1475       <D:displayname>#{resource.displayname}</D:displayname> 
     1479      <D:displayname xmlns:D='DAV:'>#{resource.displayname}</D:displayname> 
    14761480      <D:lockdiscovery> 
    14771481      </D:lockdiscovery> 
  • limeberry/trunk/test/unit/ace_test.rb

    r45 r97  
    6262 
    6363  def test_regenerate_principal_property_liveprop 
    64     @resource.displayname = "<D:href>/users/ren</D:href>" 
     64    @resource.displayname = "<D:href xmlns:D='DAV:'>/users/ren</D:href>" 
    6565    @resource.save! 
    6666    ace = @resource.aces.create!(:grantdeny => Ace::GRANT, 
     
    6969    assert_equal @ren, ace.principal 
    7070 
    71     @resource.displayname = "<D:href>/users/joe</D:href>" 
     71    @resource.displayname = "<D:href xmlns:D='DAV:'>/users/joe</D:href>" 
    7272    @resource.save! 
    7373    ace.reload.save! 
  • limeberry/trunk/test/unit/collection_test.rb

    r48 r97  
    650650    @root.liveprops[PropKey.get('DAV:', 'resourcetype'), xml] 
    651651     
    652     expected_out = "<D:resourcetype><D:collection/></D:resourcetype>" 
     652    expected_out = "<D:resourcetype xmlns:D='DAV:'><D:collection/></D:resourcetype>" 
    653653    assert_rexml_equal(expected_out, out) 
    654654  end 
     
    699699  def test_supported_privilege_set 
    700700    expected = <<EOS 
    701 <D:supported-privilege-set> 
     701<D:supported-privilege-set xmlns:D='DAV:'> 
    702702  <D:supported-privilege> 
    703703    <D:privilege><D:all/></D:privilege> 
  • limeberry/trunk/test/unit/group_test.rb

    r45 r97  
    6666    @alpha.principal_url(xml) 
    6767 
    68     assert_equal("<D:href>#{Group::GROUPS_COLLECTION_PATH}/alpha</D:href>", out) 
     68    assert_equal("<D:href xmlns:D=\"DAV:\">#{Group::GROUPS_COLLECTION_PATH}/alpha</D:href>", out) 
    6969  end 
    7070 
     
    7575 
    7676    [ @joe, sharad, shubham].each { |m| @alpha.add_member(m)  
    77       expected << "<D:href>#{User.users_collection_path}/#{m.name}</D:href>"     
     77      expected << "<D:href xmlns:D=\"DAV:\">#{User.users_collection_path}/#{m.name}</D:href>" 
    7878    } 
    7979    out = "" 
     
    9191  def test_group_member_set_set 
    9292    expected, xml, out = setup_group_member_set 
    93     expected.sub!("<D:href>#{User.users_collection_path}/joe</D:href>", "") 
     93    expected.sub!("<D:href xmlns:D=\"DAV:\">#{User.users_collection_path}/joe</D:href>", "") 
    9494    prop_value="<D:group-member-set xmlns:D='DAV:'>" 
    9595    prop_value << expected 
  • limeberry/trunk/test/unit/lock_null_resource_test.rb

    r48 r97  
    6060    setup_xml 
    6161    @locknull.resourcetype(@xml) 
    62     assert_rexml_equal('<D:resourcetype><D:locknullresource/></D:resourcetype>', @xml_out) 
     62    assert_rexml_equal("<D:resourcetype xmlns:D='DAV:'><D:locknullresource/></D:resourcetype>", @xml_out) 
    6363  end 
    6464 
     
    7373    setup_xml 
    7474 
    75     @xml.dummyroot{ @locknull.propfind(@xml, @limeberry, false, *propkeys) } 
     75    @xml.tag_dav_ns! :dummyroot do 
     76      @locknull.propfind(@xml, @limeberry, false, *propkeys) 
     77    end 
    7678 
    7779    expected_out = <<EOS 
    78 <dummyroot> 
     80<dummyroot xmlns:D='DAV:'> 
    7981  <D:propstat> 
    8082    <D:prop> 
  • limeberry/trunk/test/unit/principal_test.rb

    r45 r97  
    9898    @principal.principal_url(xml) 
    9999 
    100     assert_equal("<D:href>#{Principal::PRINCIPALS_COLLECTION_PATH}/principal</D:href>", out) 
     100    assert_equal("<D:href xmlns:D=\"DAV:\">#{Principal::PRINCIPALS_COLLECTION_PATH}/principal</D:href>", out) 
    101101  end 
    102102 
     
    104104    setup_xml 
    105105    @limeberry.resourcetype(@xml) 
    106     assert_rexml_equal('<D:resourcetype><D:principal/></D:resourcetype>', 
     106    assert_rexml_equal("<D:resourcetype xmlns:D='DAV:'><D:principal/></D:resourcetype>", 
    107107                       @xml_out) 
    108108  end 
     
    137137  def test_supported_privilege_set 
    138138    expected = <<EOS 
    139 <D:supported-privilege-set> 
     139<D:supported-privilege-set xmlns:D='DAV:'> 
    140140  <D:supported-privilege> 
    141141    <D:privilege><D:all/></D:privilege> 
  • limeberry/trunk/test/unit/privilege_test.rb

    r45 r97  
    121121      out = "" 
    122122      Privilege.send('priv_' + priv).elem(Builder::XmlMarkup.new(:target => out)) 
    123       exp_out = "<D:privilege><D:"+priv+"/></D:privilege>" 
     123      exp_out = "<D:privilege xmlns:D='DAV:'><D:"+priv+"/></D:privilege>" 
    124124      assert_rexml_equal exp_out, out 
    125125    end 
     
    244244 
    245245    expected = <<EOS 
    246 <D:supported-privilege> 
     246<D:supported-privilege xmlns:D='DAV:'> 
    247247  <D:privilege><D:all/></D:privilege> 
    248248  <D:description xml:lang="en">#{Privilege.priv_all.description}</D:description> 
  • limeberry/trunk/test/unit/resource_test.rb

    r49 r97  
    191191    setup_xml 
    192192    @resource.getcontentlength(@xml) 
    193     assert_rexml_equal("<D:getcontentlength>#{@src_content.size}</D:getcontentlength>", @xml_out) 
     193    assert_rexml_equal("<D:getcontentlength xmlns:D='DAV:'>#{@src_content.size}</D:getcontentlength>", @xml_out) 
    194194  end 
    195195 
     
    530530     
    531531    setup_xml 
    532     @xml.dummyroot do 
     532    @xml.tag_dav_ns! :dummyroot do 
    533533      @resource.propfind(@xml, @joe, false, @pk1, @pk2, 
    534534                         acl_pk, displayname_pk) 
     
    536536 
    537537    expected_out = <<EOS 
    538 <dummyroot> 
     538<dummyroot xmlns:D='DAV:'> 
    539539  <D:propstat> 
    540540    <D:prop> 
     
    547547      <N:randomname1 xmlns:N="randomns1">randomvalue1</N:randomname1> 
    548548      <N:randomname2 xmlns:N="randomns2">randomvalue2</N:randomname2> 
    549       <D:displayname>this is my displayname</D:displayname> 
     549      <D:displayname xmlns:D='DAV:'>this is my displayname</D:displayname> 
    550550    </D:prop> 
    551551    <D:status>HTTP/1.1 200 OK</D:status> 
     
    576576    setup_xml 
    577577 
    578     @xml.dummyroot do 
     578    @xml.tag_dav_ns! :dummyroot do 
    579579      @resource.send(:propfind_propname, @xml) 
    580580    end 
    581581 
    582582    expected_out = <<EOS 
    583 <dummyroot> 
     583<dummyroot xmlns:D='DAV:'> 
    584584  <D:creationdate/> 
    585585  <D:displayname/> 
     
    615615    @resource.dav_resource_id(@xml) 
    616616    expected_urn = Utility.uuid_to_urn(@resource.uuid) 
    617     expected_out = "<D:resource-id><D:href>#{expected_urn}</D:href></D:resource-id>" 
     617    expected_out = "<D:resource-id xmlns:D='DAV:'><D:href>#{expected_urn}</D:href></D:resource-id>" 
    618618    assert_rexml_equal(expected_out, @xml_out) 
    619619  end 
     
    710710    setup_xml 
    711711    @resource.resourcetype(@xml) 
    712     assert_rexml_equal('<D:resourcetype/>', @xml_out) 
     712    assert_rexml_equal("<D:resourcetype xmlns:D='DAV:'/>", @xml_out) 
    713713  end 
    714714 
     
    790790      klass.new.supported_live_property_set(@xml) 
    791791 
    792       expected_out = "<D:supported-live-property-set>" 
     792      expected_out = "<D:supported-live-property-set xmlns:D='DAV:'>" 
    793793      klass.liveprops.each do |propkey, live_prop_info| 
    794794        expected_out << "<D:supported-live-property><D:prop>" 
     
    873873    setup_xml 
    874874    @resource.group @xml 
    875     assert_rexml_equal "<D:group/>", @xml_out 
     875    assert_rexml_equal "<D:group xmlns:D='DAV:'/>", @xml_out 
    876876  end 
    877877 
     
    887887  def test_supported_privilege_set 
    888888    expected = <<EOS 
    889 <D:supported-privilege-set> 
     889<D:supported-privilege-set xmlns:D='DAV:'> 
    890890  <D:supported-privilege> 
    891891    <D:privilege><D:all/></D:privilege> 
  • limeberry/trunk/test/unit/user_test.rb

    r45 r97  
    8484    xml = Builder::XmlMarkup.new(:target => out) 
    8585    @joe.principal_url(xml) 
    86     assert_equal("<D:href>#{User::USERS_COLLECTION_PATH}/joe</D:href>", out) 
     86    assert_equal("<D:href xmlns:D=\"DAV:\">#{User::USERS_COLLECTION_PATH}/joe</D:href>", out) 
    8787  end 
    8888