test/vcard_test.rb in vcard-0.1.1 vs test/vcard_test.rb in vcard-0.2.0

- old
+ new

@@ -1,56 +1,15 @@ -require 'test_helper' +require "test_helper" -include Vpim - -# Test equivalence where whitespace is compressed. -def assert_equal_nospace(expected, got) - expected = expected.gsub(/\s+/,'') - got = expected.gsub(/\s+/,'') - assert_equal(expected, got) -end - - -# Test cases: multiple occurrences of type -=begin -begin:VCARD -version:2.1 -v;x1=a;x2=,a;x3=a,;x4=a,,a;x5=,a,: -source:ldap://cn=bjorn%20Jensen, o=university%20of%20Michigan, c=US -fn:Bj=F8rn - Jensen -other.name:Jensen;Bj=F8rn -some.other.value:1.2.3 -some.other.value:some.other -some.other.value:some.other.value -v;p-1=;p-2=,,;p-3=a;p-4=a b,"v;p-1=;p-2=,,;p-3=a;p-4=a":v-value -email;type=internet: - bjorn@umich.edu -tel;type=work,voice,msg:+1 313 747-4454 -tel:+... -key;type=x509;encoding=B:dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUK -end:vcard -=end - class VcardTest < Test::Unit::TestCase # RFC2425 - 8.1. Example 1 # Note that this is NOT a valid vCard, it lacks BEGIN/END. - EX1 =<<'EOF' -cn: -cn:Babs Jensen -cn:Barbara J Jensen -sn:Jensen -email:babs@umich.edu -phone:+1 313 747-4454 -x-id:1234567890 -EOF def test_ex1 card = nil - ex1 = EX1 - assert_nothing_thrown { card = Vpim::DirectoryInfo.decode(ex1) } - assert_equal_nospace(EX1, card.to_s) + assert_nothing_thrown { card = Vcard::DirectoryInfo.decode(vcard(:ex1)) } + assert_equal_nospace(vcard(:ex1), card.to_s) assert_equal("Babs Jensen", card["cn"]) assert_equal("Jensen", card["sn"]) assert_equal("babs@umich.edu", card[ "email" ]) @@ -59,27 +18,14 @@ assert_equal("1234567890", card[ "x-id" ]) assert_equal([], card.groups) end # RFC2425 - 8.2. Example 2 - EX2 = <<-END -begin:VCARD -source:ldap://cn=bjorn%20Jensen, o=university%20of%20Michigan, c=US -name:Bjorn Jensen -fn:Bj=F8rn Jensen -n:Jensen;Bj=F8rn -email;type=internet:bjorn@umich.edu -tel;type=work,voice,msg:+1 313 747-4454 -key;type=x509;encoding=B:dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUK -end:VCARD - END - def test_ex2 card = nil - ex2 = EX2 - assert_nothing_thrown { card = Vpim::Vcard.decode(ex2).first } - assert_equal(EX2, card.encode(0)) + assert_nothing_thrown { card = Vcard::Vcard.decode(vcard(:ex2)).first } + assert_equal(vcard(:ex2), card.encode(0)) assert_raises(InvalidEncodingError) { card.version } assert_equal("Bj=F8rn Jensen", card.name.fullname) assert_equal("Jensen", card.name.family) assert_equal("Bj=F8rn", card.name.given) @@ -114,127 +60,23 @@ assert_equal("this could be \nmy certificate\n", card.enum_by_name("key").entries.first.value) card.lines end -=begin - EX3 = <<-END -begin:vcard -source:ldap://cn=Meister%20Berger,o=Universitaet%20Goerlitz,c=DE -name:Meister Berger -fn:Meister Berger -n:Berger;Meister -bday;value=date:1963-09-21 -o:Universit=E6t G=F6rlitz -title:Mayor -title;language=de;value=text:Burgermeister -note:The Mayor of the great city of - Goerlitz in the great country of Germany. -email;internet:mb@goerlitz.de -home.tel;type=fax,voice,msg:+49 3581 123456 -home.label:Hufenshlagel 1234\n - 02828 Goerlitz\n - Deutschland -key;type=X509;encoding=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQ - AwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zI - ENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0ZW1zMRwwGgYDVQQD - ExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNjE5NDc1OVoXDTk3MTIwMzE5NDc - 1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYDVQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW - 9ucyBDb3JwLjEYMBYGA1UEAxMPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBF - hJob3dlc0BuZXRzY2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqG - SIb3DQEBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2dXc - oX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MBEGCWCGSAGG+E - IBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau+hUMbsQukjANBgkqhkiG9 - w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIPmx93HGp0Kgyx1jIVMyNgsemeAwBM+M - SlhMfcpbTrONwNjZYW8vJDSoi//yrZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8V - UMk1U7jt8LYpo4YULU7UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ== -end:vcard - END - assert_equal( - ["other", "some.other"], - card.groups_all - ) - #a = [] - #card.enum_by_group("some.other").each { |field| a << field } - #assert_equal(card.fields.indexes(6, 7, 8), a) - #assert_equal(card.fields.indexes(6, 7, 8), card.fields_by_group("some.other")) -=end - # This is my vCard exported from OS X's AddressBook.app. - EX_APPLE1 =<<'EOF' -BEGIN:VCARD -VERSION:3.0 -N:Roberts;Sam;;; -FN:Roberts Sam -EMAIL;type=HOME;type=pref:sroberts@uniserve.com -TEL;type=WORK;type=pref:905-501-3781 -TEL;type=FAX:905-907-4230 -TEL;type=HOME:416 535 5341 -ADR;type=HOME;type=pref:;;376 Westmoreland Ave.;Toronto;ON;M6H 3 - A6;Canada -NOTE:CATEGORIES: Amis/Famille -BDAY;value=date:1970-07-14 -END:VCARD -EOF def test_ex_apple1 card = nil - assert_nothing_thrown { card = Vpim::Vcard.decode(EX_APPLE1).first } + assert_nothing_thrown { card = Vcard::Vcard.decode(vcard(:ex_apple1)).first } assert_equal("Roberts Sam", card.name.fullname) assert_equal("Roberts", card.name.family) assert_equal("Sam", card.name.given) assert_equal("", card.name.prefix) assert_equal("", card.name.suffix) - assert_equal(EX_APPLE1, card.to_s(64)) + assert_equal(vcard(:ex_apple1), card.to_s(64)) - check_ex_apple1(card) - end - -NICKNAME0=<<'EOF' -begin:vcard -end:vcard -EOF -NICKNAME1=<<'EOF' -begin:vcard -nickname: -end:vcard -EOF -NICKNAME2=<<'EOF' -begin:vcard -nickname: -end:vcard -EOF -NICKNAME3=<<'EOF' -begin:vcard -nickname: Big Joey -end:vcard -EOF -NICKNAME4=<<'EOF' -begin:vcard -nickname: -nickname: Big Joey -end:vcard -EOF -NICKNAME5=<<'EOF' -begin:vcard -nickname: -nickname: Big Joey -nickname:Bob -end:vcard -EOF - def test_nickname - assert_equal(nil, Vpim::Vcard.decode(NICKNAME0).first.nickname) - assert_equal(nil, Vpim::Vcard.decode(NICKNAME1).first.nickname) - assert_equal(nil, Vpim::Vcard.decode(NICKNAME2).first.nickname) - assert_equal('Big Joey', Vpim::Vcard.decode(NICKNAME3).first.nickname) - assert_equal('Big Joey', Vpim::Vcard.decode(NICKNAME4).first['nickname']) - assert_equal(['Big Joey', 'Bob'], Vpim::Vcard.decode(NICKNAME5).first.nicknames) - end - - - def check_ex_apple1(card) assert_equal("3.0", card[ "version" ]) assert_equal(30, card.version) assert_equal("sroberts@uniserve.com", card[ "email" ]) assert_equal(["HOME", "pref"], card.enum_by_name("email").entries.first.param("type")) @@ -252,12 +94,23 @@ assert_equal( 14, card.enum_by_name("bday").entries[0].to_time[0].day) assert_equal("CATEGORIES: Amis/Famille", card[ "note" ]) end - # Test data for Vpim.expand - EX_EXPAND =<<'EOF' + def test_nickname + assert_equal(nil, Vcard::Vcard.decode(vcard(:nickname0)).first.nickname) + assert_equal(nil, Vcard::Vcard.decode(vcard(:nickname1)).first.nickname) + assert_equal(nil, Vcard::Vcard.decode(vcard(:nickname2)).first.nickname) + assert_equal('Big Joey', Vcard::Vcard.decode(vcard(:nickname3)).first.nickname) + assert_equal('Big Joey', Vcard::Vcard.decode(vcard(:nickname4)).first['nickname']) + assert_equal(['Big Joey', 'Bob'], Vcard::Vcard.decode(vcard(:nickname5)).first.nicknames) + end + + + # Test data for Vcard.expand + def test_expand + ex_expand =<<'EOF' BEGIN:a a1: BEGIN:b BEGIN:c c1: @@ -267,106 +120,37 @@ V2: END:b a2: END:a EOF - def test_expand - src = Vpim.decode(EX_EXPAND) - dst = Vpim.expand(src) + src = Vcard.decode(ex_expand) + dst = Vcard.expand(src) assert_equal('a', dst[0][0].value) assert_equal('A1', dst[0][1].name) assert_equal('b', dst[0][2][0].value) assert_equal('c', dst[0][2][1][0].value) assert_equal('C1', dst[0][2][1][1].name) assert_equal('C2', dst[0][2][1][2].name) assert_equal('c', dst[0][2][1][3].value) - - cards = Vpim::Vcard.decode(EX_APPLE1) - - assert_equal(1, cards.length) - - check_ex_apple1(cards[0]) end - # An iCalendar for Vpim.expand - EX_ICAL_1 =<<'EOF' -BEGIN:VCALENDAR -CALSCALE:GREGORIAN -X-WR-TIMEZONE;VALUE=TEXT:Canada/Eastern -METHOD:PUBLISH -PRODID:-//Apple Computer\, Inc//iCal 1.0//EN -X-WR-RELCALID;VALUE=TEXT:18E75B8C-5722-11D7-AB0B-000393AD088C -X-WR-CALNAME;VALUE=TEXT:Events -VERSION:2.0 -BEGIN:VEVENT -SEQUENCE:14 -UID:18E74C28-5722-11D7-AB0B-000393AD088C -DTSTAMP:20030301T171521Z -SUMMARY:Bob Log III -DTSTART;TZID=Canada/Eastern:20030328T200000 -DTEND;TZID=Canada/Eastern:20030328T230000 -DESCRIPTION:Healey's\n\nLook up exact time.\n -BEGIN:VALARM -TRIGGER;VALUE=DURATION:-P2D -ACTION:DISPLAY -DESCRIPTION:Event reminder -END:VALARM -BEGIN:VALARM -ATTENDEE:mailto:sroberts@uniserve.com -TRIGGER;VALUE=DURATION:-P1D -ACTION:EMAIL -SUMMARY:Alarm notification -DESCRIPTION:This is an event reminder -END:VALARM -END:VEVENT -BEGIN:VEVENT -SEQUENCE:1 -DTSTAMP:20030312T043534Z -SUMMARY:Small Potatoes 10\nFriday\, March 14th\, 8:00 p.m.\n361 Danforth - Avenue (at Hampton -- Chester subway)\nInfo:_ (416) 480-2802 or (416) - 323-1715\n -UID:18E750A8-5722-11D7-AB0B-000393AD088C -DTSTART;TZID=Canada/Eastern:20030315T000000 -DURATION:PT1H -BEGIN:VALARM -ATTENDEE:mailto:sroberts@uniserve.com -TRIGGER;VALUE=DURATION:-P1D -ACTION:EMAIL -SUMMARY:Alarm notification -DESCRIPTION:This is an event reminder -END:VALARM -END:VEVENT -END:VCALENDAR -EOF + # An iCalendar for Vcard.expand def test_ical_1 src = nil dst = nil - assert_nothing_thrown { - src = Vpim.decode(EX_ICAL_1) - dst = Vpim.expand(src) - } - - #p dst + assert_nothing_thrown do + src = Vcard.decode(vcal(:ex_ical_1)) + dst = Vcard.expand(src) + end end # Constructed data. - TST1 =<<'EOF' -BEGIN:vCard -DESCRIPTION:Healey's\n\nLook up exact time.\n -email;type=work:work@example.com -email;type=internet,home;type=pref:home@example.com -fax;type=foo,pref;bar:fax -name:firstname -name:secondname -time;value=time: -END:vCARD -EOF def _test_cons # FIXME card = nil - assert_nothing_thrown { card = Vpim::Vcard.decode(TST1).first } - assert_equal(TST1, card.to_s) + assert_nothing_thrown { card = Vcard::Vcard.decode(vcard(:tst1)).first } + assert_equal(vcard(:tst1), card.to_s) assert_equal('Healey\'s\n\nLook up exact time.\n', card[ "description" ]) # Test the [] API assert_equal(nil, card[ "not-a-field" ]) @@ -377,250 +161,117 @@ assert_equal('home@example.com', card[ "email", "internet" ]) assert_equal('work@example.com', card[ "email", "work" ]) # Test the merging of vCard 2.1 type fields. - #p card - #p card.enum_by_name('fax').entries[0].each_param { |p,v| puts "#{p} = #{v}\n" } - assert_equal('fax', card[ "fax" ]) assert_equal('fax', card[ "fax", 'bar' ]) end -=begin def test_bad # FIXME: this should THROW, it's badly encoded! - assert_nothing_thrown { - Vpim::Vcard.decode( - "BEGIN:VCARD\nVERSION:3.0\nKEYencoding=b:this could be \nmy certificate\n\nEND:VCARD\n" - ) - } + assert_raises(InvalidEncodingError) do + Vcard::Vcard.decode("BEGIN:VCARD\nVERSION:3.0\nKEYencoding=b:this could be \nmy certificate\n\nEND:VCARD\n") + end end -=end def test_create - card = Vpim::Vcard.create + card = Vcard::Vcard.create - key = Vpim::DirectoryInfo.decode("key;type=x509;encoding=B:dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUK\n")['key'] + key = Vcard::DirectoryInfo.decode("key;type=x509;encoding=B:dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUK\n")['key'] - card << Vpim::DirectoryInfo::Field.create('key', key, 'encoding' => :b64) + card << Vcard::DirectoryInfo::Field.create('key', key, 'encoding' => :b64) assert_equal(key, card['key']) - - #p card.to_s end def test_values - # date - assert_equal([2002, 4, 22], Vpim.decode_date(" 20020422 ")) - assert_equal([2002, 4, 22], Vpim.decode_date(" 2002-04-22 ")) - assert_equal([2002, 4, 22], Vpim.decode_date(" 2002-04-22 \n")) + assert_equal [2002, 4, 22], Vcard.decode_date(" 20020422 ") + assert_equal [2002, 4, 22], Vcard.decode_date(" 2002-04-22 ") + assert_equal [2002, 4, 22], Vcard.decode_date(" 2002-04-22 \n") + assert_equal [[2002, 4, 22]], Vcard.decode_date_list(" 2002-04-22 ") + assert_equal [[2002, 4, 22],[2002, 4, 22]], Vcard.decode_date_list(" 2002-04-22, 2002-04-22,") + assert_equal [[2002, 4, 22],[2002, 4, 22]], Vcard.decode_date_list(" 2002-04-22,,, , ,2002-04-22, , \n") + assert_equal [], Vcard.decode_date_list(" , , ") - assert_equal([[2002, 4, 22]], - Vpim.decode_date_list(" 2002-04-22 ")) - - assert_equal([[2002, 4, 22],[2002, 4, 22]], - Vpim.decode_date_list(" 2002-04-22, 2002-04-22,")) - - assert_equal([[2002, 4, 22],[2002, 4, 22]], - Vpim.decode_date_list(" 2002-04-22,,, , ,2002-04-22, , \n")) - - assert_equal([], - Vpim.decode_date_list(" , , ")) - # time - assert_equal( - [4, 53, 22, 0, nil], - Vpim.decode_time(" 04:53:22 \n") - ) - assert_equal( - [4, 53, 22, 0.10, nil], - Vpim.decode_time(" 04:53:22.10 \n") - ) - assert_equal( - [4, 53, 22, 0.10, "Z"], - Vpim.decode_time(" 04:53:22.10Z \n") - ) - assert_equal( - [4, 53, 22, 0, "Z"], - Vpim.decode_time(" 045322Z \n") - ) - assert_equal( - [4, 53, 22, 0, "+0530"], - Vpim.decode_time(" 04:5322+0530 \n") - ) - assert_equal( - [4, 53, 22, 0.10, "Z"], - Vpim.decode_time(" 045322.10Z \n") - ) + assert_equal [4, 53, 22, 0, nil], Vcard.decode_time(" 04:53:22 \n") + assert_equal [4, 53, 22, 0.10, nil], Vcard.decode_time(" 04:53:22.10 \n") + assert_equal [4, 53, 22, 0.10, "Z"], Vcard.decode_time(" 04:53:22.10Z \n") + assert_equal [4, 53, 22, 0, "Z"], Vcard.decode_time(" 045322Z \n") + assert_equal [4, 53, 22, 0, "+0530"], Vcard.decode_time(" 04:5322+0530 \n") + assert_equal [4, 53, 22, 0.10, "Z"], Vcard.decode_time(" 045322.10Z \n") # date-time - assert_equal( - [2002, 4, 22, 4, 53, 22, 0, nil], - Vpim.decode_date_time("20020422T04:53:22 \n") - ) - assert_equal( - [2002, 4, 22, 4, 53, 22, 0.10, nil], - Vpim.decode_date_time(" 2002-04-22T04:53:22.10 \n") - ) - assert_equal( - [2002, 4, 22, 4, 53, 22, 0.10, "Z"], - Vpim.decode_date_time(" 20020422T04:53:22.10Z \n") - ) - assert_equal( - [2002, 4, 22, 4, 53, 22, 0, "Z"], - Vpim.decode_date_time(" 20020422T045322Z \n") - ) - assert_equal( - [2002, 4, 22, 4, 53, 22, 0, "+0530"], - Vpim.decode_date_time(" 20020422T04:5322+0530 \n") - ) - assert_equal( - [2002, 4, 22, 4, 53, 22, 0.10, "Z"], - Vpim.decode_date_time(" 20020422T045322.10Z \n") - ) - assert_equal( - [2003, 3, 25, 3, 20, 35, 0, "Z"], - Vpim.decode_date_time("20030325T032035Z") - ) + assert_equal [2002, 4, 22, 4, 53, 22, 0, nil], Vcard.decode_date_time("20020422T04:53:22 \n") + assert_equal [2002, 4, 22, 4, 53, 22, 0.10, nil], Vcard.decode_date_time(" 2002-04-22T04:53:22.10 \n") + assert_equal [2002, 4, 22, 4, 53, 22, 0.10, "Z"], Vcard.decode_date_time(" 20020422T04:53:22.10Z \n") + assert_equal [2002, 4, 22, 4, 53, 22, 0, "Z"], Vcard.decode_date_time(" 20020422T045322Z \n") + assert_equal [2002, 4, 22, 4, 53, 22, 0, "+0530"], Vcard.decode_date_time(" 20020422T04:5322+0530 \n") + assert_equal [2002, 4, 22, 4, 53, 22, 0.10, "Z"], Vcard.decode_date_time(" 20020422T045322.10Z \n") + assert_equal [2003, 3, 25, 3, 20, 35, 0, "Z"], Vcard.decode_date_time("20030325T032035Z") # text - assert_equal( - "aa,\n\n,\\,\\a;;b", - Vpim.decode_text('aa,\\n\\n,\\\\\,\\\\a\;\;b') - ) - assert_equal( - ['', "1\n2,3", "bbb", '', "zz", ''], - Vpim.decode_text_list(',1\\n2\\,3,bbb,,zz,') - ) + assert_equal "aa,\n\n,\\,\\a;;b", Vcard.decode_text('aa,\\n\\n,\\\\\,\\\\a\;\;b') + assert_equal ['', "1\n2,3", "bbb", '', "zz", ''], Vcard.decode_text_list(',1\\n2\\,3,bbb,,zz,') end -EX_ENCODE_1 =<<'EOF' -BEGIN:VCARD -VERSION:3.0 -N:Roberts;Sam;;; -FN:Roberts Sam -EMAIL;type=HOME;type=pref:sroberts@uniserve.com -TEL;type=HOME:416 535 5341 -ADR;type=HOME;type=pref:;;376 Westmoreland Ave.;Toronto;ON;M6H 3A6;Canada -NOTE:CATEGORIES: Amis/Famille -BDAY;value=date:1970-07-14 -END:VCARD -EOF - def test_create_1 - card = Vpim::Vcard.create + card = Vcard::Vcard.create card << DirectoryInfo::Field.create('n', 'Roberts;Sam;;;') card << DirectoryInfo::Field.create('fn', 'Roberts Sam') card << DirectoryInfo::Field.create('email', 'sroberts@uniserve.com', 'type' => ['home', 'pref']) card << DirectoryInfo::Field.create('tel', '416 535 5341', 'type' => 'home') # TODO - allow the value to be an array, in which case it will be # concatentated with ';' card << DirectoryInfo::Field.create('adr', ';;376 Westmoreland Ave.;Toronto;ON;M6H 3A6;Canada', 'type' => ['home', 'pref']) # TODO - allow the date to be a Date, and for value to be set correctly card << DirectoryInfo::Field.create('bday', Date.new(1970, 7, 14), 'value' => 'date') - - # puts card.to_s end -EX_BDAYS = <<'EOF' -BEGIN:VCARD -BDAY;value=date:206-12-15 -END:VCARD -BEGIN:VCARD -BDAY;value=date:2003-12-09 -END:VCARD -BEGIN:VCARD -END:VCARD -EOF - def test_birthday - cards = Vpim::Vcard.decode(EX_BDAYS) + cards = Vcard::Vcard.decode(vcard(:ex_bdays)) expected = [ Date.new(Time.now.year, 12, 15), Date.new(2003, 12, 9), nil ] - expected.each_with_index do | d, i| - #pp d - #pp i - #pp cards[i] - #pp cards[i].birthday.to_s - #pp cards[i].birthday.class - assert_equal(d, cards[i].birthday) - end - + expected.each_with_index { | d, i| assert_equal(d, cards[i].birthday) } end -EX_ATTACH=<<'---' -BEGIN:VCARD -VERSION:3.0 -N:Middle Family;Ny_full -PHOTO:val\nue -PHOTO;encoding=8bit:val\nue -PHOTO;encoding=8bit:val\nue -PHOTO;encoding=8bit;type=atype:val\nue -PHOTO;value=binary;encoding=8bit:val\nue -PHOTO;value=binary;encoding=8bit:val\nue -PHOTO;value=binary;encoding=8bit;type=atype:val\nue -PHOTO;value=text;encoding=8bit:val\nue -PHOTO;value=text;encoding=8bit:val\nue -PHOTO;value=text;encoding=8bit;type=atype:val\nue -PHOTO;value=uri:my:// -PHOTO;value=uri;type=atype:my:// -END:VCARD ---- def test_attach - card = Vpim::Vcard.decode(EX_ATTACH).first + card = Vcard::Vcard.decode(vcard(:ex_attach)).first card.lines # FIXME - assert values are as expected end -EX_21=<<'---' -BEGIN:VCARD -VERSION:2.1 -X-EVOLUTION-FILE-AS:AAA Our Fax -FN:AAA Our Fax -N:AAA Our Fax -ADR;WORK;PREF: -LABEL;WORK;PREF: -TEL;WORK;FAX:925 833-7660 -TEL;HOME;FAX:925 833-7660 -TEL;VOICE:1 -TEL;FAX:2 -EMAIL;INTERNET:e@c -TITLE: -NOTE: -UID:pas-id-3F93E22900000001 -END:VCARD ---- def test_v21_modification - card0 = Vpim::Vcard.decode(EX_21).first - card1 = Vpim::Vcard::Maker.make2(card0) do |maker| + card0 = Vcard::Vcard.decode(vcard(:ex_21)).first + card1 = Vcard::Vcard::Maker.make2(card0) do |maker| maker.nickname = 'nickname' end - card2 = Vpim::Vcard.decode(card1.encode).first + card2 = Vcard::Vcard.decode(card1.encode).first assert_equal(card0.version, card1.version) assert_equal(card0.version, card2.version) end def test_v21_versioned_copy - card0 = Vpim::Vcard.decode(EX_21).first - card1 = Vpim::Vcard::Maker.make2(Vpim::DirectoryInfo.create([], 'VCARD')) do |maker| + card0 = Vcard::Vcard.decode(vcard(:ex_21)).first + card1 = Vcard::Vcard::Maker.make2(Vcard::DirectoryInfo.create([], 'VCARD')) do |maker| maker.copy card0 end - card2 = Vpim::Vcard.decode(card1.encode).first + card2 = Vcard::Vcard.decode(card1.encode).first assert_equal(card0.version, card2.version) end def test_v21_strip_version - card0 = Vpim::Vcard.decode(EX_21).first + card0 = Vcard::Vcard.decode(vcard(:ex_21)).first card0.delete card0.field('VERSION') card0.delete card0.field('TEL') card0.delete card0.field('TEL') card0.delete card0.field('TEL') @@ -631,41 +282,22 @@ end assert_raises(ArgumentError) do card0.delete card0.field('BEGIN') end - card1 = Vpim::Vcard::Maker.make2(Vpim::DirectoryInfo.create([], 'VCARD')) do |maker| + card1 = Vcard::Vcard::Maker.make2(Vcard::DirectoryInfo.create([], 'VCARD')) do |maker| maker.copy card0 end - card2 = Vpim::Vcard.decode(card1.encode).first + card2 = Vcard::Vcard.decode(card1.encode).first assert_equal(30, card2.version) assert_equal(nil, card2.field('TEL')) end -EX_21_CASE0=<<'---' -BEGIN:VCARD -VERSION:2.1 -N:Middle Family;Ny_full -TEL;PREF;HOME;VOICE:0123456789 -TEL;FAX:0123456789 -TEL;CELL;VOICE:0123456789 -TEL;HOME;VOICE:0123456789 -TEL;WORK;VOICE:0123456789 -EMAIL:email@email.com -EMAIL:work@work.com -URL:www.email.com -URL:www.work.com -LABEL;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Box 1234=0AWorkv=E4gen = - 2=0AWorkv=E4gen 1=0AUme=E5=0AV=E4sterbotten=0A12345=0AS -END:VCARD ---- def test_v21_case0 - card = Vpim::Vcard.decode(EX_21_CASE0).first - # pp card.field('LABEL').value_raw - # pp card.field('LABEL').value + Vcard::Vcard.decode(vcard(:ex_21_case0)).first end def test_modify_name card = Vcard.decode("begin:vcard\nend:vcard\n").first @@ -713,110 +345,61 @@ end def test_add_note note = "hi\' \ \"\",,;; \n \n field" - card = Vpim::Vcard::Maker.make2 do |m| + card = Vcard::Vcard::Maker.make2 do |m| m.add_note(note) m.name {} end assert_equal(note, card.note) end def test_empty_tel - cin = <<___ -BEGIN:VCARD -TEL;HOME;FAX: -END:VCARD -___ - - card = Vpim::Vcard.decode(cin).first + card = Vcard::Vcard.decode(vcard(:empty_tel)).first assert_equal(card.telephone, nil) assert_equal(card.telephone('HOME'), nil) assert_equal([], card.telephones) - end def test_slash_in_field_name - cin = <<___ -BEGIN:VCARD -X-messaging/xmpp-All:some@jabber.id -END:VCARD -___ - - card = Vpim::Vcard.decode(cin).first + card = Vcard::Vcard.decode(vcard(:slash_in_field_name)).first assert_equal(card.value("X-messaging/xmpp-All"), "some@jabber.id") assert_equal(card["X-messaging/xmpp-All"], "some@jabber.id") end def test_url_decode - cin=<<'---' -BEGIN:VCARD -URL:www.email.com -URL:www.work.com -END:VCARD ---- - card = Vpim::Vcard.decode(cin).first - + card = Vcard::Vcard.decode(vcard(:url_decode)).first assert_equal("www.email.com", card.url.uri) assert_equal("www.email.com", card.url.uri.to_s) assert_equal("www.email.com", card.urls.first.uri) assert_equal("www.work.com", card.urls.last.uri) end def test_bday_decode - cin=<<'---' -BEGIN:VCARD -BDAY:1970-07-14 -END:VCARD ---- - card = Vpim::Vcard.decode(cin).first + card = Vcard::Vcard.decode(vcard(:bday_decode)).first card.birthday assert_equal(Date.new(1970, 7, 14), card.birthday) assert_equal(1, card.values("bday").size) # Nobody should have multiple bdays, I hope, but its allowed syntactically, # so test it, along with some variant forms of BDAY - cin=<<'---' -BEGIN:VCARD -BDAY:1970-07-14 -BDAY:70-7-14 -BDAY:1970-07-15T03:45:12 -BDAY:1970-07-15T03:45:12Z -END:VCARD ---- - card = Vpim::Vcard.decode(cin).first + end + def test_bday_decode_2 + card = Vcard::Vcard.decode(vcard(:bday_decode_2)).first assert_equal(Date.new(1970, 7, 14), card.birthday) assert_equal(4, card.values("bday").size) assert_equal(Date.new(1970, 7, 14), card.values("bday").first) assert_equal(Date.new(Time.now.year, 7, 14), card.values("bday")[1]) assert_equal(DateTime.new(1970, 7, 15, 3, 45, 12).to_s, card.values("bday")[2].to_s) assert_equal(DateTime.new(1970, 7, 15, 3, 45, 12).to_s, card.values("bday").last.to_s) end - def utf_name_test(c) - - begin - card = Vpim::Vcard.decode(c).first - assert_equal("name", card.name.family) - rescue - $!.message << " #{c.inspect}" - raise - end - end - - def be(s) - s.unpack('U*').pack('n*') - end - def le(s) - s.unpack('U*').pack('v*') - end - def test_utf_heuristics bom = "\xEF\xBB\xBF" dat = "BEGIN:VCARD\nN:name\nEND:VCARD\n" utf_name_test(bom+dat) utf_name_test(bom+dat.downcase) @@ -834,134 +417,61 @@ utf_name_test(le(dat.downcase)) end # Broken output from Highrise. Report to support@highrisehq.com def test_highrises_invalid_google_talk_field - c = <<'__' -BEGIN:VCARD -VERSION:3.0 -REV:20080409T095515Z -X-YAHOO;TYPE=HOME:yahoo.john -X-GOOGLE TALK;TYPE=WORK:gtalk.john -X-SAMETIME;TYPE=WORK:sametime.john -X-SKYPE;TYPE=WORK:skype.john -X-MSN;TYPE=WORK:msn.john -X-JABBER;TYPE=WORK:jabber.john -N:Doe;John;;; -ADR;TYPE=WORK:;;456 Grandview Building\, Wide Street;San Diego;CA;90204; - United States -ADR;TYPE=HOME:;;123 Sweet Home\, Narrow Street;New York;NY;91102;United - States -URL;TYPE=OTHER:http\://www.homepage.com -URL;TYPE=HOME:http\://www.home.com -URL;TYPE=WORK:http\://www.work.com -URL;TYPE=OTHER:http\://www.other.com -URL;TYPE=OTHER:http\://www.custom.com -ORG:John Doe & Partners Limited;; -TEL;TYPE=WORK:11111111 -TEL;TYPE=CELL:22222222 -TEL;TYPE=HOME:33333333 -TEL;TYPE=OTHER:44444444 -TEL;TYPE=FAX:55555555 -TEL;TYPE=FAX:66666666 -TEL;TYPE=PAGER:77777777 -TEL;TYPE=OTHER:88888888 -TEL;TYPE=OTHER:99999999 -UID:cc548e11-569e-3bf5-a9aa-722de4571f4a -X-ICQ;TYPE=HOME:icq.john -EMAIL;TYPE=WORK,INTERNET:john.doe@work.com -EMAIL;TYPE=HOME,INTERNET:john.doe@home.com -EMAIL;TYPE=OTHER,INTERNET:john.doe@other.com -EMAIL;TYPE=OTHER,INTERNET:john.doe@custom.com -TITLE:Sales Manager -X-OTHER;TYPE=WORK:other.john -X-AIM;TYPE=WORK:aim.john -X-QQ;TYPE=WORK:qq.john -FN:John Doe -END:VCARD -__ - - card = Vpim::Vcard.decode(c).first + c = vcard(:highrise) + card = Vcard::Vcard.decode(c).first assert_equal("Doe", card.name.family) assert_equal("456 Grandview Building, Wide Street", card.address('work').street) assert_equal("123 Sweet Home, Narrow Street", card.address('home').street) assert_equal("John Doe & Partners Limited", card.org.first) assert_equal("gtalk.john", card.value("x-google talk")) assert_equal("http\\://www.homepage.com", card.url.uri) - end def _test_gmail_vcard_export # GOOGLE BUG - Whitespace before the LABEL field values is a broken # line continuation. # GOOGLE BUG - vCards are being exported with embedded "=" in them, so # become unparseable. - c = <<'__' -BEGIN:VCARD -VERSION:3.0 -FN:Stepcase TestUser -N:TestUser;Stepcase;;; -EMAIL;TYPE=INTERNET:testuser@stepcase.com -X-GTALK:gtalk.step -X-AIM:aim.step -X-YAHOO:yahoo.step -X-MSN:msn.step -X-ICQ:icq.step -X-JABBER:jabber.step -TEL;TYPE=FAX:44444444 -TEL;TYPE=PAGER:66666666 -TEL;TYPE=HOME:22222222 -TEL;TYPE=CELL:11111111 -TEL;TYPE=FAX:55555555 -TEL;TYPE=WORK:33333333 -LABEL;TYPE=HOME;ENCODING=QUOTED-PRINTABLE:123 Home, Home Street=0D=0A= -Kowloon, N/A=0D=0A= -Hong Kong -LABEL;TYPE=HOME;ENCODING=QUOTED-PRINTABLE:321 Office, Work Road=0D=0A= -Tsuen Wan NT=0D=0A= -Hong Kong -TITLE:CTO -ORG:Stepcase.com -NOTE:Stepcase test user is a robot. -END:VCARD -__ - card = Vpim::Vcard.decode(c).first + c = vcard(:gmail) + card = Vcard::Vcard.decode(c).first assert_equal("123 Home, Home Street\r\n Kowloon, N/A\r\n Hong Kong", card.value("label")) end def test_title title = "She Who Must Be Obeyed" - card = Vpim::Vcard::Maker.make2 do |m| + card = Vcard::Vcard::Maker.make2 do |m| m.name do |n| n.given = "Hilda" n.family = "Rumpole" end m.title = title end assert_equal(title, card.title) - card = Vpim::Vcard.decode(card.encode).first + card = Vcard::Vcard.decode(card.encode).first assert_equal(title, card.title) end def _test_org(*org) - card = Vpim::Vcard::Maker.make2 do |m| + card = Vcard::Vcard::Maker.make2 do |m| m.name do |n| n.given = "Hilda" n.family = "Rumpole" end m.org = org end assert_equal(org, card.org) - card = Vpim::Vcard.decode(card.encode).first + card = Vcard::Vcard.decode(card.encode).first assert_equal(org, card.org) end def test_org_single _test_org("Megamix Corp.") end def test_org_multiple _test_org("Megamix Corp.", "Marketing") end - end