Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1840

Show
Ignore:
Timestamp:
06/08/07 15:15:58 (1 year ago)
Author:
nahi
Message:
  • re-implemented token and language type support. closes #252.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/baseData.rb

    r1839 r1840  
    238238  extend SOAPModuleUtils 
    239239  SOAPENCType = QName.new(EncodingNamespace, StringLiteral) 
     240end 
     241 
     242class SOAPNormalizedString < XSD::XSDNormalizedString 
     243  include SOAPBasetype 
     244  extend SOAPModuleUtils 
     245  SOAPENCType = QName.new(EncodingNamespace, NormalizedStringLiteral) 
     246end 
     247 
     248class SOAPToken < XSD::XSDToken 
     249  include SOAPBasetype 
     250  extend SOAPModuleUtils 
     251  SOAPENCType = QName.new(EncodingNamespace, TokenLiteral) 
     252end 
     253 
     254class SOAPLanguage < XSD::XSDLanguage 
     255  include SOAPBasetype 
     256  extend SOAPModuleUtils 
     257  SOAPENCType = QName.new(EncodingNamespace, LanguageLiteral) 
    240258end 
    241259 
  • trunk/lib/soap/mapping/typeMap.rb

    r1839 r1840  
    1414 
    1515  XSD::XSDString::Type => SOAPString, 
     16  XSD::XSDNormalizedString::Type => SOAPNormalizedString, 
     17  XSD::XSDToken::Type => SOAPToken, 
     18  XSD::XSDLanguage::Type => SOAPLanguage, 
    1619  XSD::XSDBoolean::Type => SOAPBoolean, 
    1720  XSD::XSDDecimal::Type => SOAPDecimal, 
     
    4750  # soap4r does not use soapenc types actively but it should be accepted. 
    4851  SOAP::SOAPString::SOAPENCType => SOAPString, 
     52  SOAP::SOAPNormalizedString::Type => SOAPNormalizedString, 
     53  SOAP::SOAPToken::Type => SOAPToken, 
     54  SOAP::SOAPLanguage::Type => SOAPLanguage, 
    4955  SOAP::SOAPBoolean::SOAPENCType => SOAPBoolean, 
    5056  SOAP::SOAPDecimal::SOAPENCType => SOAPDecimal, 
  • trunk/lib/xsd/datatypes.rb

    r1839 r1840  
    4747 
    4848NormalizedStringLiteral = 'normalizedString' 
    49 #3.3.2 token 
    50 ##3.3.3 language 
     49TokenLiteral = 'token' 
     50LanguageLiteral = 'language' 
    5151#3.3.4 NMTOKEN 
    5252#3.3.5 NMTOKENS 
     
    10081008 
    10091009  def screen_data(value) 
     1010    super 
    10101011    if /[\t\r\n]/ =~ value 
    10111012      raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.") 
    10121013    end 
     1014    value 
     1015  end 
     1016end 
     1017 
     1018class XSDToken < XSDNormalizedString 
     1019  Type = QName.new(Namespace, TokenLiteral) 
     1020 
     1021  def initialize(value = nil) 
     1022    init(Type, value) 
     1023  end 
     1024 
     1025private 
     1026 
     1027  def screen_data(value) 
    10131028    super 
     1029    if /\A / =~ value or / \Z/ =~ value or value.index('  ') 
     1030      raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.") 
     1031    end 
     1032    value 
     1033  end 
     1034end 
     1035 
     1036class XSDLanguage < XSDToken 
     1037  Type = QName.new(Namespace, LanguageLiteral) 
     1038 
     1039  def initialize(value = nil) 
     1040    init(Type, value) 
     1041  end 
     1042 
     1043private 
     1044 
     1045  def screen_data(value) 
     1046    super 
     1047    # RFC 3066 syntax check 
     1048    if /\A[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})?\z/ !~ value 
     1049      raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.") 
     1050    end 
     1051    value 
    10141052  end 
    10151053end 
  • trunk/test/soap/test_basetype.rb

    r1726 r1840  
    6161      XSD::XSDString.strict_ces_validation = back 
    6262    end 
     63  end 
     64 
     65  def test_SOAPNormalizedString 
     66    XSD::Charset.module_eval { @encoding_backup = @internal_encoding; @internal_encoding = "NONE" } 
     67    begin 
     68      o = SOAP::SOAPNormalizedString.new 
     69      assert_equal(XSD::Namespace, o.type.namespace) 
     70      assert_equal(XSD::NormalizedStringLiteral, o.type.name) 
     71      assert_equal(nil, o.data) 
     72      assert_equal(true, o.is_nil) 
     73 
     74      str = "abc" 
     75      assert_equal(str, SOAP::SOAPNormalizedString.new(str).data) 
     76      assert_equal(str, SOAP::SOAPNormalizedString.new(str).to_s) 
     77      back = SOAP::SOAPString.strict_ces_validation 
     78      SOAP::SOAPString.strict_ces_validation = true 
     79      begin 
     80        assert_raises(XSD::ValueSpaceError) do 
     81          SOAP::SOAPNormalizedString.new("\0") 
     82        end 
     83        assert_raises(XSD::ValueSpaceError) do 
     84          SOAP::SOAPNormalizedString.new("\xC0\xC0").to_s 
     85        end 
     86        assert_raises(XSD::ValueSpaceError) do 
     87          SOAP::SOAPNormalizedString.new("a\tb").to_s 
     88        end 
     89        assert_raises(XSD::ValueSpaceError) do 
     90          SOAP::SOAPNormalizedString.new("a\r").to_s 
     91        end 
     92        assert_raises(XSD::ValueSpaceError) do 
     93          SOAP::SOAPNormalizedString.new("\nb").to_s 
     94        end 
     95      ensure 
     96        SOAP::SOAPString.strict_ces_validation = back 
     97      end 
     98    ensure 
     99      XSD::Charset.module_eval { @internal_encoding = @encoding_backup } 
     100    end 
     101  end 
     102 
     103  def test_SOAPToken 
     104    XSD::Charset.module_eval { @encoding_backup = @internal_encoding; @internal_encoding = "NONE" } 
     105    begin 
     106      o = SOAP::SOAPToken.new 
     107      assert_equal(XSD::Namespace, o.type.namespace) 
     108      assert_equal(XSD::TokenLiteral, o.type.name) 
     109      assert_equal(nil, o.data) 
     110      assert_equal(true, o.is_nil) 
     111 
     112      str = "abc" 
     113      assert_equal(str, SOAP::SOAPToken.new(str).data) 
     114      assert_equal(str, SOAP::SOAPToken.new(str).to_s) 
     115      back = XSD::XSDString.strict_ces_validation 
     116      XSD::XSDString.strict_ces_validation = true 
     117      begin 
     118        assert_raises(XSD::ValueSpaceError) do 
     119          SOAP::SOAPToken.new("\0") 
     120        end 
     121        assert_raises(XSD::ValueSpaceError) do 
     122          SOAP::SOAPToken.new("\xC0\xC0").to_s 
     123        end 
     124        assert_raises(XSD::ValueSpaceError) do 
     125          SOAP::SOAPToken.new("a\tb").to_s 
     126        end 
     127        assert_raises(XSD::ValueSpaceError) do 
     128          SOAP::SOAPToken.new("a\r").to_s 
     129        end 
     130        assert_raises(XSD::ValueSpaceError) do 
     131          SOAP::SOAPToken.new("\nb").to_s 
     132        end 
     133        assert_raises(XSD::ValueSpaceError) do 
     134          SOAP::SOAPToken.new(" a").to_s 
     135        end 
     136        assert_raises(XSD::ValueSpaceError) do 
     137          SOAP::SOAPToken.new("b ").to_s 
     138        end 
     139        assert_raises(XSD::ValueSpaceError) do 
     140          SOAP::SOAPToken.new("a  b").to_s 
     141        end 
     142        assert_equal("a b", SOAP::SOAPToken.new("a b").data) 
     143      ensure 
     144        XSD::XSDString.strict_ces_validation = back 
     145      end 
     146    ensure 
     147      XSD::Charset.module_eval { @internal_encoding = @encoding_backup } 
     148    end 
     149  end 
     150 
     151  def test_SOAPLanguage 
     152    o = SOAP::SOAPLanguage.new 
     153    assert_equal(XSD::Namespace, o.type.namespace) 
     154    assert_equal(XSD::LanguageLiteral, o.type.name) 
     155    assert_equal(nil, o.data) 
     156    assert_equal(true, o.is_nil) 
     157 
     158    str = "ja" 
     159    assert_equal(str, SOAP::SOAPLanguage.new(str).data) 
     160    assert_equal(str, SOAP::SOAPLanguage.new(str).to_s) 
     161    str = "ja-jp" 
     162    assert_equal(str, SOAP::SOAPLanguage.new(str).data) 
     163    assert_equal(str, SOAP::SOAPLanguage.new(str).to_s) 
     164    assert_raises(XSD::ValueSpaceError) do 
     165      SOAP::SOAPLanguage.new("ja-jp-") 
     166    end 
     167    assert_raises(XSD::ValueSpaceError) do 
     168      SOAP::SOAPLanguage.new("-ja-") 
     169    end 
     170    assert_raises(XSD::ValueSpaceError) do 
     171      SOAP::SOAPLanguage.new("ja-") 
     172    end 
     173    assert_raises(XSD::ValueSpaceError) do 
     174      SOAP::SOAPLanguage.new("a1-01") 
     175    end 
     176    assert_equal("aA-01", SOAP::SOAPLanguage.new("aA-01").to_s) 
    63177  end 
    64178 
  • trunk/test/xsd/test_xsd.rb

    r1839 r1840  
    102102  end 
    103103 
    104 =begin not implemented for now 
    105104  def test_XSDNormalizedString 
    106105    XSD::Charset.module_eval { @encoding_backup = @internal_encoding; @internal_encoding = "NONE" } 
     
    187186      XSD::Charset.module_eval { @internal_encoding = @encoding_backup } 
    188187    end 
    189  
    190     def test_XSDLanguage 
    191       o = XSD::XSDLanguage.new 
    192       assert_equal(XSD::Namespace, o.type.namespace) 
    193       assert_equal(XSD::LanguageLiteral, o.type.name) 
    194       assert_equal(nil, o.data) 
    195       assert_equal(true, o.is_nil) 
    196  
    197       str = "ja" 
    198       assert_equal(str, XSD::XSDLanguage.new(str).data) 
    199       assert_equal(str, XSD::XSDLanguage.new(str).to_s) 
    200       assert_raises(XSD::ValueSpaceError) do 
    201         XSD::XSDLanguage.new("jb") 
    202       end 
    203     end 
    204   end 
    205 =end 
     188  end 
     189 
     190  def test_XSDLanguage 
     191    o = XSD::XSDLanguage.new 
     192    assert_equal(XSD::Namespace, o.type.namespace) 
     193    assert_equal(XSD::LanguageLiteral, o.type.name) 
     194    assert_equal(nil, o.data) 
     195    assert_equal(true, o.is_nil) 
     196 
     197    str = "ja" 
     198    assert_equal(str, XSD::XSDLanguage.new(str).data) 
     199    assert_equal(str, XSD::XSDLanguage.new(str).to_s) 
     200    str = "ja-jp" 
     201    assert_equal(str, XSD::XSDLanguage.new(str).data) 
     202    assert_equal(str, XSD::XSDLanguage.new(str).to_s) 
     203    assert_raises(XSD::ValueSpaceError) do 
     204      XSD::XSDLanguage.new("ja-jp-") 
     205    end 
     206    assert_raises(XSD::ValueSpaceError) do 
     207      XSD::XSDLanguage.new("-ja-") 
     208    end 
     209    assert_raises(XSD::ValueSpaceError) do 
     210      XSD::XSDLanguage.new("ja-") 
     211    end 
     212    assert_raises(XSD::ValueSpaceError) do 
     213      XSD::XSDLanguage.new("a1-01") 
     214    end 
     215    assert_equal("aA-01", XSD::XSDLanguage.new("aA-01").to_s) 
     216  end 
    206217 
    207218  def test_XSDBoolean