jira.codehaus.org

  • Log In Access more options
    • Online Help
    • Keyboard Shortcuts
    • About JIRA
    • JIRA Credits
    • What?s New
  • Dashboards Access more options (Alt+d)
  • Projects Access more options (Alt+p)
  • Issues Access more options (Alt+i)
  • JRuby
  • JRUBY-2603

Couple of new rubyspec failures for URI library

  • Log In
  • Views
    • XML
    • Word
    • Printable

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: JRuby 1.1.2
  • Fix Version/s: JRuby 1.2
  • Component/s: Core Classes/Modules
  • Labels:
    None
  • Environment:
    Latest JRuby 1.1.2 from trunk on Linux.

Description

New rubyspecs for URI library were recently added. We currently fail just two of them (out of 371).

mspec -t j spec/ruby/1.8/library/uri/
...........F.............................F.......

1)
URI.extract allows the user to specify a list of acceptable protocols of URIs to scan for FAILED
Expected []
to equal ["ftp://ftp.is.co.za/rfc/rfc1808.txt",
 "http://www.math.uio.no/faq/compression-faq/part1.html",
 "mailto:mduerst@ifi.unizh.ch"]

/opt/work/mspec.git/lib/mspec/expectations/expectations.rb:10:in `fail_with'
/opt/work/mspec.git/lib/mspec/matchers/base.rb:9:in `=='
/opt/work/./spec/ruby/1.8/library/uri/extract_spec.rb:84:in `/opt/work/./spec/ruby/1.8/library/uri/extract_spec.rb'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:121:in `instance_eval'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:121:in `protect'
/opt/work/mspec.git/lib/mspec/runner/state.rb:46:in `each'
/opt/work/mspec.git/lib/mspec/runner/state.rb:46:in `protect'
/opt/work/mspec.git/lib/mspec/runner/state.rb:60:in `process'
/opt/work/mspec.git/lib/mspec/runner/state.rb:56:in `each'
/opt/work/mspec.git/lib/mspec/runner/state.rb:56:in `process'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:28:in `describe'
/opt/work/mspec.git/lib/mspec/runner/object.rb:11:in `describe'
/opt/work/./spec/ruby/1.8/library/uri/extract_spec.rb:4:in `/opt/work/./spec/ruby/1.8/library/uri/extract_spec.rb'
/opt/work/./spec/ruby/1.8/library/uri/extract_spec.rb:46:in `load'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:46:in `files'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:121:in `instance_eval'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:121:in `protect'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:46:in `files'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:43:in `each'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:43:in `files'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:35:in `process'
/opt/work/mspec.git/lib/mspec/commands/mspec-run.rb:76:in `run'
/opt/work/mspec.git/lib/mspec/utils/script.rb:75:in `main'
/opt/work/mspec.git/bin/mspec-run:8

2)
URI.regexp behaves according to the MatzRuby tests FAILED
Expected nil
 to equal "http://"

/opt/work/mspec.git/lib/mspec/expectations/expectations.rb:10:in `fail_with'
/opt/work/mspec.git/lib/mspec/matchers/base.rb:9:in `=='
/opt/work/./spec/ruby/1.8/library/uri/regexp_spec.rb:10:in `/opt/work/./spec/ruby/1.8/library/uri/regexp_spec.rb'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:121:in `instance_eval'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:121:in `protect'
/opt/work/mspec.git/lib/mspec/runner/state.rb:46:in `each'
/opt/work/mspec.git/lib/mspec/runner/state.rb:46:in `protect'
/opt/work/mspec.git/lib/mspec/runner/state.rb:60:in `process'
/opt/work/mspec.git/lib/mspec/runner/state.rb:56:in `each'
/opt/work/mspec.git/lib/mspec/runner/state.rb:56:in `process'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:28:in `describe'
/opt/work/mspec.git/lib/mspec/runner/object.rb:11:in `describe'
/opt/work/./spec/ruby/1.8/library/uri/regexp_spec.rb:6:in `/opt/work/./spec/ruby/1.8/library/uri/regexp_spec.rb'
/opt/work/./spec/ruby/1.8/library/uri/regexp_spec.rb:46:in `load'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:46:in `files'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:121:in `instance_eval'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:121:in `protect'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:46:in `files'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:43:in `each'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:43:in `files'
/opt/work/mspec.git/lib/mspec/runner/mspec.rb:35:in `process'
/opt/work/mspec.git/lib/mspec/commands/mspec-run.rb:76:in `run'
/opt/work/mspec.git/lib/mspec/utils/script.rb:75:in `main'
/opt/work/mspec.git/bin/mspec-run:8

Finished in 0.752000 seconds

12 files, 49 examples, 371 expectations, 2 failures, 0 errors

Activity

Ascending order - Click to sort in descending order
  • All
  • Comments
  • Work Log
  • History
  • Activity
Hide
Permalink
Charles Oliver Nutter added a comment - 05/Feb/09 12:57 AM

This is still an issue, but I've narrowed it down to a regexp problem. It's a hell of a regexp though:

regexp = /(?=(?-mix:http):)
        ([a-zA-Z][-+.a-zA-Z\d]*):                     (?# 1: scheme)
        (?:
           ((?:[-_.!~*'()a-zA-Z\d;?:@&=+$,]|%[a-fA-F\d]{2})(?:[-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*)              (?# 2: opaque)
        |
           (?:(?:
             \/\/(?:
                 (?:(?:((?:[-_.!~*'()a-zA-Z\d;:&=+$,]|%[a-fA-F\d]{2})*)@)?  (?# 3: userinfo)
                   (?:((?:(?:(?:[a-zA-Z\d](?:[-a-zA-Z\d]*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:[-a-zA-Z\d]*[a-zA-Z\d])?)\.?|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[(?:(?:[a-fA-F\d]{1,4}:)*(?:[a-fA-F\d]{1,4}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|(?:(?:[a-fA-F\d]{1,4}:)*[a-fA-F\d]{1,4})?::(?:(?:[a-fA-F\d]{1,4}:)*(?:[a-fA-F\d]{1,4}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))?)\]))(?::(\d*))?))?(?# 4: host, 5: port)
               |
                 ((?:[-_.!~*'()a-zA-Z\d$,;+@&=+]|%[a-fA-F\d]{2})+)           (?# 6: registry)
               )
             |
             (?!\/\/))                              (?# XXX: '\/\/' is the mark for hostport)
             (\/(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*(?:;(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*)*(?:\/(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*(?:;(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*)*)*)?              (?# 7: path)
           )(?:\?((?:[-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*))?           (?# 8: query)
        )
        (?:\#((?:[-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*))?            (?# 9: fragment)
      /xn
str = "http://www.cnn.com"

p str.scan(regexp)

This should output [["http", nil, nil, "www.cnn.com", nil, nil, nil, nil, nil]] as on MRI, but instead it outputs [].

It's possible that the regular expressions used in uri/common.rb have been updated in 1.9 for Oniguruma...we may need to pull those regexp instead if this is a simple regexp compat issue.

Show
Charles Oliver Nutter added a comment - 05/Feb/09 12:57 AM This is still an issue, but I've narrowed it down to a regexp problem. It's a hell of a regexp though:
regexp = /(?=(?-mix:http):)
        ([a-zA-Z][-+.a-zA-Z\d]*):                     (?# 1: scheme)
        (?:
           ((?:[-_.!~*'()a-zA-Z\d;?:@&=+$,]|%[a-fA-F\d]{2})(?:[-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*)              (?# 2: opaque)
        |
           (?:(?:
             \/\/(?:
                 (?:(?:((?:[-_.!~*'()a-zA-Z\d;:&=+$,]|%[a-fA-F\d]{2})*)@)?  (?# 3: userinfo)
                   (?:((?:(?:(?:[a-zA-Z\d](?:[-a-zA-Z\d]*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:[-a-zA-Z\d]*[a-zA-Z\d])?)\.?|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[(?:(?:[a-fA-F\d]{1,4}:)*(?:[a-fA-F\d]{1,4}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|(?:(?:[a-fA-F\d]{1,4}:)*[a-fA-F\d]{1,4})?::(?:(?:[a-fA-F\d]{1,4}:)*(?:[a-fA-F\d]{1,4}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))?)\]))(?::(\d*))?))?(?# 4: host, 5: port)
               |
                 ((?:[-_.!~*'()a-zA-Z\d$,;+@&=+]|%[a-fA-F\d]{2})+)           (?# 6: registry)
               )
             |
             (?!\/\/))                              (?# XXX: '\/\/' is the mark for hostport)
             (\/(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*(?:;(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*)*(?:\/(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*(?:;(?:[-_.!~*'()a-zA-Z\d:@&=+$,]|%[a-fA-F\d]{2})*)*)*)?              (?# 7: path)
           )(?:\?((?:[-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*))?           (?# 8: query)
        )
        (?:\#((?:[-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]|%[a-fA-F\d]{2})*))?            (?# 9: fragment)
      /xn
str = "http://www.cnn.com"

p str.scan(regexp)
This should output [["http", nil, nil, "www.cnn.com", nil, nil, nil, nil, nil]] as on MRI, but instead it outputs []. It's possible that the regular expressions used in uri/common.rb have been updated in 1.9 for Oniguruma...we may need to pull those regexp instead if this is a simple regexp compat issue.
Hide
Permalink
Marcin Mielzynski added a comment - 05/Feb/09 7:03 AM - edited

Joni bug (something wrong with look-ahead and backtracking), reduced case:

regexp = /(?=:).*:/
str = ":"
p str.scan(regexp)

1.8 and 1.9 both match successfully.

Show
Marcin Mielzynski added a comment - 05/Feb/09 7:03 AM - edited Joni bug (something wrong with look-ahead and backtracking), reduced case:
regexp = /(?=:).*:/
str = ":"
p str.scan(regexp)
1.8 and 1.9 both match successfully.
Hide
Permalink
Marcin Mielzynski added a comment - 05/Feb/09 1:03 PM

Fixed in r9022, Uri specs clean.

Show
Marcin Mielzynski added a comment - 05/Feb/09 1:03 PM Fixed in r9022, Uri specs clean.

People

  • Assignee:
    Marcin Mielzynski
    Reporter:
    Vladimir Sizikov
Vote (0)
Watch (1)

Dates

  • Created:
    02/Jun/08 8:42 AM
    Updated:
    21/Mar/09 1:14 PM
    Resolved:
    05/Feb/09 1:03 PM
  • Atlassian JIRA (v5.0.4#731-sha1:3aa7374)
  • Report a problem
  • Powered by a free Atlassian JIRA open source license for Codehaus. Try JIRA - bug tracking software for your team.