# -*- encoding : utf-8 -*- describe Card::Content::Chunk::URI, 'URI chunk tests' do it 'should test_non_matches' do no_match_uri 'There is no URI here' no_match_uri 'One gemstone is the garnet:reddish in colour, like ruby' end it 'works with simple uri' do # Simplest case match_http_uri 'http://www.example.com', host: 'www.example.com', path: '' end it 'works with trailing slash' do match_http_uri 'http://www.example.com/', host: 'www.example.com', path: '/' end it 'works with trailing slash inside html tags' do match_http_uri '

http://www.example.com/

', host: 'www.example.com', path: '/', link_text: 'http://www.example.com/' end it 'works with trailing period (no longer suppressed .. spec?)' do match_http_uri 'http://www.example.com/. ', host: 'www.example.com', path: '/', link_text: 'http://www.example.com/' end it 'works with trailing period inside html tags (dot change?)' do match_http_uri '

http://www.example.com/.

', host: 'www.example.com', path: '/', link_text: 'http://www.example.com/' end it 'works with trailing  ' do match_http_uri 'http://www.example.com/ ', host: 'www.example.com', path: '/', link_text: 'http://www.example.com/' end it 'works without http://' do match_http_uri 'www.example.com', host: 'www.example.com', text: 'www.example.com', link_text: 'http://www.example.com' match_http_uri 'example.com', host: 'example.com', text: 'example.com', link_text: 'http://example.com' end it 'should match "unusual" base domain (was a bug in an early version)' do match_http_uri 'http://example.com.au/', host: 'example.com.au' end it 'works with "unusual" base domain without http://' do match_http_uri 'example.com.au', host: 'example.com.au', text: 'example.com.au', link_text: 'http://example.com.au' end it 'works with another "unusual" base domain' do match_http_uri 'http://www.example.co.uk/', host: 'www.example.co.uk' match_http_uri 'example.co.uk', host: 'example.co.uk', text: 'example.co.uk', link_text: 'http://example.co.uk' end it 'works with some path at the end' do match_http_uri 'http://moinmoin.wikiwikiweb.de/HelpOnNavigation', host: 'moinmoin.wikiwikiweb.de', path: '/HelpOnNavigation' end it 'works with some path at the end, and without http:// prefix (@link_text has prefix added)' do match_http_uri 'moinmoin.wikiwikiweb.de/HelpOnNavigation', host: 'moinmoin.wikiwikiweb.de', path: '/HelpOnNavigation', text: 'moinmoin.wikiwikiweb.de/HelpOnNavigation', link_text: 'http://moinmoin.wikiwikiweb.de/HelpOnNavigation' end it 'works with a port number' do match_http_uri 'http://www.example.com:80', host: 'www.example.com', port: 80, path: '' end it 'works with a port number and a path' do match_http_uri 'http://www.example.com.tw:80/HelpOnNavigation', host: 'www.example.com.tw', port: 80, path: '/HelpOnNavigation' end it 'works with a query' do match_http_uri 'http://www.example.com.tw:80/HelpOnNavigation?arg=val', host: 'www.example.com.tw', port: 80, path: '/HelpOnNavigation', query: 'arg=val' end it 'works on Query with two arguments' do match_http_uri 'http://www.example.com.tw:80/HelpOnNavigation?arg=val&arg2=val2', host: 'www.example.com.tw', port: 80, path: '/HelpOnNavigation', query: 'arg=val&arg2=val2' end it 'works with IRC' do match_uri 'irc://irc.freenode.net#recentchangescamp', scheme: 'irc', host: 'irc.freenode.net', fragment: 'recentchangescamp', link_text: 'irc://irc.freenode.net#recentchangescamp' end it 'should see HTTPS' do match_uri 'https://www.example.com', scheme: 'https', host: 'www.example.com', port: 443, path: '', query: nil end it 'should see FTP' do match_uri 'ftp://www.example.com', scheme: 'ftp', host: 'www.example.com', port: 21, path: '', query: nil end it 'should handle mailto:' do match_uri 'mailto:jdoe123@example.com', scheme: 'mailto', host: nil, port: nil, path: nil, query: nil, to: 'jdoe123@example.com' end it 'should run more basic cases' do # from *css (with () around the URI) # so, now this doesn't even match because I fixed the suspiciou* stuff no_match_uri( "background: url('http://dl.dropbox.com/u/4657397/wikirate/" \ "wikirate_files/wr-bg-menu-line.gif') repeat-x;" ) # Soap opera (the most complex case imaginable... well, not really, there # should be more evil) match_http_uri( 'http://www.example.com.tw:80/~jdoe123/Help%20Me%20?arg=val&arg2=val2', host: 'www.example.com.tw', port: 80, path: '/~jdoe123/Help%20Me%20', query: 'arg=val&arg2=val2') # from 0.9 bug reports match_uri 'http://www2.pos.to/~tosh/ruby/rdtool/en/doc/rd-draft.html', scheme: 'http', host: 'www2.pos.to', path: '/~tosh/ruby/rdtool/en/doc/rd-draft.html' match_uri 'http://support.microsoft.com/default.aspx?scid=kb;en-us;234562', scheme: 'http', host: 'support.microsoft.com', path: '/default.aspx', query: 'scid=kb;en-us;234562' end it 'should test_email_uri' do match_uri 'mail@example.com', to: 'mail@example.com', host: nil, text: 'mail@example.com', link_text: 'mailto:mail@example.com' end it 'should test_non_email' do # The @ is part of the normal text, but 'example.com' is marked up. match_uri 'Not an email: @example.com', uri: 'http://example.com' end it 'should test_textile_image' do no_match_uri 'This !http://hobix.com/sample.jpg! is a Textile image link.' end it 'should test_textile_link' do no_match_uri( 'This "hobix (hobix)":http://hobix.com/sample.jpg is a Textile link.' ) # just to be sure ... match_uri 'This http://hobix.com/sample.jpg should match', link_text: 'http://hobix.com/sample.jpg' end it 'should test_inline_html' do no_match_uri "" no_match_uri '' end it 'should test_non_uri' do # "so" is a valid country code; "libproxy.so" is a valid url match_uri 'libproxy.so', host: 'libproxy.so', text: 'libproxy.so', link_text: 'http://libproxy.so' no_match_uri 'httpd.conf' # THIS ONE'S BUSTED.. Ethan fix?? # no_match_uri 'ld.so.conf' no_match_uri 'index.jpeg' no_match_uri 'index.jpg' no_match_uri 'file.txt' no_match_uri 'file.doc' no_match_uri 'file.pdf' no_match_uri 'file.png' no_match_uri 'file.ps' end it 'should test_uri_in_text' do match_uri 'Go to: http://www.example.com/', host: 'www.example.com', path: '/' match_uri 'http://www.example.com/ is a link.', host: 'www.example.com' match_uri 'Email david@loudthinking.com', scheme: 'mailto', to: 'david@loudthinking.com', host: nil # check that trailing punctuation is not included in the hostname match_uri 'Hey dude, http://fake.link.com.', scheme: 'http', host: 'fake.link.com' # this is a textile link, no match please. no_match_uri '"link":http://fake.link.com.' end it 'should test_uri_in_parentheses' do match_uri 'URI (http://brackets.com.de) in brackets', host: 'brackets.com.de' match_uri 'because (as shown at research.net) the results', host: 'research.net' match_uri 'A wiki (http://wiki.org/wiki.cgi?WhatIsWiki) card', scheme: 'http', host: 'wiki.org', path: '/wiki.cgi', query: 'WhatIsWiki' end it 'should test_uri_list_item' do match_chunk( Card::Content::Chunk::URI, '* http://www.btinternet.com/~mail2minh/SonyEricssonP80xPlatform.sis', path: '/~mail2minh/SonyEricssonP80xPlatform.sis' ) end it 'should test_interesting_uri_with__comma' do # Counter-intuitively, this URL matches, but the query part includes the # trailing comma. # It has no way to know that the query does not include the comma. # The trailing , addition breaks this test, but is this test actually valid? # It seems better to exclude the comma from the uri, YMMV match_uri( 'This text contains a URL http://someplace.org:8080/~person/stuff.cgi' \ "?arg=val, doesn't it?", scheme: 'http', host: 'someplace.org', port: 8080, path: '/~person/stuff.cgi', query: 'arg=val') end describe Card::Content::Chunk::URI, 'URI chunk tests' do it 'should test_local_urls' do # normal match_http_uri 'http://perforce:8001/toto.html', host: 'perforce', port: 8001 # in parentheses match_uri 'URI (http://localhost:2500) in brackets', host: 'localhost', port: 2500 match_uri 'because (as shown at http://perforce:8001) the results', host: 'perforce', port: 8001 match_uri 'A wiki (http://localhost:2500/wiki.cgi?WhatIsWiki) card', scheme: 'http', host: 'localhost', path: '/wiki.cgi', port: 2500, query: 'WhatIsWiki' end end private DUMMY_CARD = Card.new(name: 'dummy') # Asserts a number of tests for the given type and text. def no_match type, test_text expect(get_chunk(type, test_text)).to be_nil end def match_chunk type, test_text, expected chunk = get_chunk(type, test_text) expect(chunk).not_to be_nil expected.each_pair do |method_sym, value| # assert_respond_to(chunk, method_sym) cvalue = chunk.method(method_sym).call cvalue = cvalue.to_s if method_sym == :uri assert_equal(value, cvalue, "Checking value of '#{method_sym}'") end end def match_uri uri, opts match_chunk Card::Content::Chunk::URI, uri, opts end def no_match_uri text no_match Card::Content::Chunk::URI, text end def match_http_uri uri, opts match_uri uri, opts.reverse_merge(link_text: uri, scheme: 'http') end def get_chunk type, test_text cont = Card::Content.new(test_text, DUMMY_CARD) cont = [cont] unless cont.respond_to?(:each) cont.find { |ck| ck.is_a? type } end end