vcard 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.gitignore +15 -5
  2. data/Gemfile +3 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +17 -0
  5. data/Rakefile +4 -52
  6. data/{LICENSE → VPIM-LICENSE.txt} +2 -2
  7. data/lib/vcard.rb +304 -28
  8. data/lib/vcard/attachment.rb +10 -12
  9. data/lib/vcard/bnf.rb +66 -0
  10. data/lib/vcard/dirinfo.rb +24 -26
  11. data/lib/vcard/enumerator.rb +5 -7
  12. data/lib/vcard/errors.rb +23 -0
  13. data/lib/vcard/field.rb +56 -58
  14. data/lib/vcard/vcard.rb +210 -240
  15. data/lib/vcard/version.rb +3 -0
  16. data/test/field_test.rb +55 -55
  17. data/test/fixtures/bday_decode.vcard +3 -0
  18. data/test/fixtures/bday_decode_2.vcard +6 -0
  19. data/test/fixtures/empty_tel.vcard +3 -0
  20. data/test/fixtures/ex1.vcard +7 -0
  21. data/test/fixtures/ex2.vcard +9 -0
  22. data/test/fixtures/ex3.vcard +30 -0
  23. data/test/fixtures/ex_21.vcard +16 -0
  24. data/test/fixtures/ex_21_case0.vcard +15 -0
  25. data/test/fixtures/ex_apple1.vcard +13 -0
  26. data/test/fixtures/ex_attach.vcard +16 -0
  27. data/test/fixtures/ex_bdays.vcard +8 -0
  28. data/test/fixtures/ex_encode_1.vcard +10 -0
  29. data/test/fixtures/ex_ical_1.vcal +47 -0
  30. data/test/fixtures/gmail.vcard +27 -0
  31. data/test/fixtures/highrise.vcard +41 -0
  32. data/test/fixtures/multiple_occurences_of_type.vcard +17 -0
  33. data/test/fixtures/nickname0.vcard +2 -0
  34. data/test/fixtures/nickname1.vcard +3 -0
  35. data/test/fixtures/nickname2.vcard +3 -0
  36. data/test/fixtures/nickname3.vcard +3 -0
  37. data/test/fixtures/nickname4.vcard +4 -0
  38. data/test/fixtures/nickname5.vcard +5 -0
  39. data/test/fixtures/slash_in_field_name.vcard +3 -0
  40. data/test/fixtures/tst1.vcard +9 -0
  41. data/test/fixtures/url_decode.vcard +4 -0
  42. data/test/test_helper.rb +34 -6
  43. data/test/vcard_test.rb +87 -577
  44. data/vcard.gemspec +19 -0
  45. metadata +88 -43
  46. data/.document +0 -5
  47. data/README.rdoc +0 -7
  48. data/VERSION +0 -1
  49. data/lib/vcard/rfc2425.rb +0 -367
@@ -0,0 +1,3 @@
1
+ module Vcard
2
+ VERSION = "0.2.0"
3
+ end
@@ -1,15 +1,15 @@
1
- require 'test_helper'
2
-
3
- Field=Vpim::DirectoryInfo::Field
1
+ require "test_helper"
4
2
 
5
3
  class FieldTest < Test::Unit::TestCase
6
4
 
5
+ Field = Vcard::DirectoryInfo::Field
6
+
7
7
  def test_encode_decode_text()
8
8
  enc_in = "+\\\\+\\n+\\N+\\,+\\;+\\a+\\b+\\c+"
9
- dec = Vpim.decode_text(enc_in)
9
+ dec = Vcard.decode_text(enc_in)
10
10
  #puts("<#{enc_in}> => <#{dec}>")
11
11
  assert_equal("+\\+\n+\n+,+;+a+b+c+", dec)
12
- enc_out = Vpim.encode_text(dec)
12
+ enc_out = Vcard.encode_text(dec)
13
13
  should_be = "+\\\\+\\n+\\n+\\,+\\;+a+b+c+"
14
14
  # Note a, b, and c are allowed to be escaped, but shouldn't be and
15
15
  # aren't in output
@@ -19,23 +19,23 @@ class FieldTest < Test::Unit::TestCase
19
19
  end
20
20
 
21
21
  def test_field4
22
- line = 't;e=a,b: 4 '
22
+ line = "t;e=a,b: 4 "
23
23
  part = Field.decode0(line)
24
24
  assert_equal("4", part[ 3 ])
25
25
  end
26
26
 
27
27
  def test_field3
28
- line = 't;e=a,b:4'
28
+ line = "t;e=a,b:4"
29
29
  part = Field.decode0(line)
30
30
  assert_equal("4", part[ 3 ])
31
- assert_equal( {'E' => [ 'a','b' ] }, part[ 2 ])
31
+ assert_equal( {"E" => [ "a","b" ] }, part[ 2 ])
32
32
  end
33
33
 
34
34
  def test_field2
35
- line = 'tel;type=work,voice,msg:+1 313 747-4454'
35
+ line = "tel;type=work,voice,msg:+1 313 747-4454"
36
36
  part = Field.decode0(line)
37
37
  assert_equal("+1 313 747-4454", part[ 3 ])
38
- assert_equal( {'TYPE' => [ 'work','voice','msg' ] }, part[ 2 ])
38
+ assert_equal( {"TYPE" => [ "work","voice","msg" ] }, part[ 2 ])
39
39
  end
40
40
 
41
41
  def test_field1
@@ -43,9 +43,9 @@ class FieldTest < Test::Unit::TestCase
43
43
  parts = Field.decode0(line)
44
44
 
45
45
  assert_equal(nil, parts[0])
46
- assert_equal('ORGANIZER', parts[1])
47
- assert_equal({ 'CN' => [ "xxxx, xxxx [SC100:370:EXCH]" ] }, parts[2])
48
- assert_equal('MAILTO:xxxx@americasm01.nt.com', parts[3])
46
+ assert_equal("ORGANIZER", parts[1])
47
+ assert_equal({ "CN" => [ "xxxx, xxxx [SC100:370:EXCH]" ] }, parts[2])
48
+ assert_equal("MAILTO:xxxx@americasm01.nt.com", parts[3])
49
49
  end
50
50
 
51
51
  =begin this can not be done :-(
@@ -66,87 +66,87 @@ class FieldTest < Test::Unit::TestCase
66
66
  =end
67
67
 
68
68
  def test_field0
69
- assert_equal('name:', line = Field.encode0(nil, 'name'))
70
- assert_equal([ nil, 'NAME', {}, ''], Field.decode0(line))
69
+ assert_equal("name:", line = Field.encode0(nil, "name"))
70
+ assert_equal([ nil, "NAME", {}, ""], Field.decode0(line))
71
71
 
72
- assert_equal('name:value', line = Field.encode0(nil, 'name', {}, 'value'))
73
- assert_equal([ nil, 'NAME', {}, 'value'], Field.decode0(line))
72
+ assert_equal("name:value", line = Field.encode0(nil, "name", {}, "value"))
73
+ assert_equal([ nil, "NAME", {}, "value"], Field.decode0(line))
74
74
 
75
- assert_equal('name;encoding=B:dmFsdWU=', line = Field.encode0(nil, 'name', { 'encoding'=>:b64 }, 'value'))
76
- assert_equal([ nil, 'NAME', { 'ENCODING'=>['B']}, ['value'].pack('m').chomp ], Field.decode0(line))
75
+ assert_equal("name;encoding=B:dmFsdWU=", line = Field.encode0(nil, "name", { "encoding"=>:b64 }, "value"))
76
+ assert_equal([ nil, "NAME", { "ENCODING"=>["B"]}, ["value"].pack("m").chomp ], Field.decode0(line))
77
77
 
78
- assert_equal('group.name:value', line = Field.encode0('group', 'name', {}, 'value'))
79
- assert_equal([ 'GROUP', 'NAME', {}, 'value'], Field.decode0(line))
78
+ assert_equal("group.name:value", line = Field.encode0("group", "name", {}, "value"))
79
+ assert_equal([ "GROUP", "NAME", {}, "value"], Field.decode0(line))
80
80
  end
81
81
 
82
82
  def tEst_invalid_fields
83
83
  [
84
- 'g.:',
85
- ':v',
84
+ "g.:",
85
+ ":v",
86
86
  ].each do |line|
87
- assert_raises(Vpim::InvalidEncodingError) { Field.decode0(line) }
87
+ assert_raises(Vcard::InvalidEncodingError) { Field.decode0(line) }
88
88
  end
89
89
  end
90
90
 
91
91
  def test_date_encode
92
- assert_equal("DTSTART:20040101\n", Field.create('DTSTART', Date.new(2004, 1, 1) ).to_s)
93
- assert_equal("DTSTART:20040101\n", Field.create('DTSTART', [Date.new(2004, 1, 1)]).to_s)
92
+ assert_equal("DTSTART:20040101\n", Field.create("DTSTART", Date.new(2004, 1, 1) ).to_s)
93
+ assert_equal("DTSTART:20040101\n", Field.create("DTSTART", [Date.new(2004, 1, 1)]).to_s)
94
94
  end
95
95
 
96
96
  def test_field_modify
97
- f = Field.create('name')
97
+ f = Field.create("name")
98
98
 
99
- assert_equal('', f.value)
100
- f.value = ''
101
- assert_equal('', f.value)
102
- f.value = 'z'
103
- assert_equal('z', f.value)
99
+ assert_equal("", f.value)
100
+ f.value = ""
101
+ assert_equal("", f.value)
102
+ f.value = "z"
103
+ assert_equal("z", f.value)
104
104
 
105
- f.group = 'z.b'
106
- assert_equal('Z.B', f.group)
105
+ f.group = "z.b"
106
+ assert_equal("Z.B", f.group)
107
107
  assert_equal("z.b.NAME:z\n", f.encode)
108
108
 
109
109
  assert_raises(TypeError) { f.value = :group }
110
110
 
111
- assert_equal('Z.B', f.group)
111
+ assert_equal("Z.B", f.group)
112
112
 
113
113
  assert_equal("z.b.NAME:z\n", f.encode)
114
114
 
115
115
  assert_raises(TypeError) { f.group = :group }
116
116
 
117
117
  assert_equal("z.b.NAME:z\n", f.encode)
118
- assert_equal('Z.B', f.group)
118
+ assert_equal("Z.B", f.group)
119
119
 
120
- f['p0'] = "hi julie"
120
+ f["p0"] = "hi julie"
121
121
 
122
122
  assert_equal("Z.B.NAME;P0=hi julie:z\n", f.encode)
123
- assert_equal(['hi julie'], f.param('p0'))
124
- assert_equal(['hi julie'], f['p0'])
125
- assert_equal('NAME', f.name)
126
- assert_equal('Z.B', f.group)
123
+ assert_equal(["hi julie"], f.param("p0"))
124
+ assert_equal(["hi julie"], f["p0"])
125
+ assert_equal("NAME", f.name)
126
+ assert_equal("Z.B", f.group)
127
127
 
128
- # FAIL assert_raises(ArgumentError) { f.group = 'z.b:' }
128
+ # FAIL assert_raises(ArgumentError) { f.group = "z.b:" }
129
129
 
130
- assert_equal('Z.B', f.group)
130
+ assert_equal("Z.B", f.group)
131
131
 
132
- f.value = 'some text'
132
+ f.value = "some text"
133
133
 
134
- assert_equal('some text', f.value)
135
- assert_equal('some text', f.value_raw)
134
+ assert_equal("some text", f.value)
135
+ assert_equal("some text", f.value_raw)
136
136
 
137
- f['encoding'] = :b64
137
+ f["encoding"] = :b64
138
138
 
139
- assert_equal('some text', f.value)
140
- assert_equal([ 'some text' ].pack('m*').chomp, f.value_raw)
139
+ assert_equal("some text", f.value)
140
+ assert_equal([ "some text" ].pack("m*").chomp, f.value_raw)
141
141
  end
142
142
 
143
143
  def test_field_wrapping
144
- assert_equal("0:x\n", Vpim::DirectoryInfo::Field.create('0', 'x' * 1).encode(4))
145
- assert_equal("0:xx\n", Vpim::DirectoryInfo::Field.create('0', 'x' * 2).encode(4))
146
- assert_equal("0:xx\n x\n", Vpim::DirectoryInfo::Field.create('0', 'x' * 3).encode(4))
147
- assert_equal("0:xx\n xx\n", Vpim::DirectoryInfo::Field.create('0', 'x' * 4).encode(4))
148
- assert_equal("0:xx\n xxxx\n", Vpim::DirectoryInfo::Field.create('0', 'x' * 6).encode(4))
149
- assert_equal("0:xx\n xxxx\n x\n", Vpim::DirectoryInfo::Field.create('0', 'x' * 7).encode(4))
144
+ assert_equal("0:x\n", Vcard::DirectoryInfo::Field.create("0", "x" * 1).encode(4))
145
+ assert_equal("0:xx\n", Vcard::DirectoryInfo::Field.create("0", "x" * 2).encode(4))
146
+ assert_equal("0:xx\n x\n", Vcard::DirectoryInfo::Field.create("0", "x" * 3).encode(4))
147
+ assert_equal("0:xx\n xx\n", Vcard::DirectoryInfo::Field.create("0", "x" * 4).encode(4))
148
+ assert_equal("0:xx\n xxxx\n", Vcard::DirectoryInfo::Field.create("0", "x" * 6).encode(4))
149
+ assert_equal("0:xx\n xxxx\n x\n", Vcard::DirectoryInfo::Field.create("0", "x" * 7).encode(4))
150
150
  end
151
151
  end
152
152
 
@@ -0,0 +1,3 @@
1
+ BEGIN:VCARD
2
+ BDAY:1970-07-14
3
+ END:VCARD
@@ -0,0 +1,6 @@
1
+ BEGIN:VCARD
2
+ BDAY:1970-07-14
3
+ BDAY:70-7-14
4
+ BDAY:1970-07-15T03:45:12
5
+ BDAY:1970-07-15T03:45:12Z
6
+ END:VCARD
@@ -0,0 +1,3 @@
1
+ BEGIN:VCARD
2
+ TEL;HOME;FAX:
3
+ END:VCARD
@@ -0,0 +1,7 @@
1
+ cn:
2
+ cn:Babs Jensen
3
+ cn:Barbara J Jensen
4
+ sn:Jensen
5
+ email:babs@umich.edu
6
+ phone:+1 313 747-4454
7
+ x-id:1234567890
@@ -0,0 +1,9 @@
1
+ begin:VCARD
2
+ source:ldap://cn=bjorn%20Jensen, o=university%20of%20Michigan, c=US
3
+ name:Bjorn Jensen
4
+ fn:Bj=F8rn Jensen
5
+ n:Jensen;Bj=F8rn
6
+ email;type=internet:bjorn@umich.edu
7
+ tel;type=work,voice,msg:+1 313 747-4454
8
+ key;type=x509;encoding=B:dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUK
9
+ end:VCARD
@@ -0,0 +1,30 @@
1
+ begin:vcard
2
+ source:ldap://cn=Meister%20Berger,o=Universitaet%20Goerlitz,c=DE
3
+ name:Meister Berger
4
+ fn:Meister Berger
5
+ n:Berger;Meister
6
+ bday;value=date:1963-09-21
7
+ o:Universit=E6t G=F6rlitz
8
+ title:Mayor
9
+ title;language=de;value=text:Burgermeister
10
+ note:The Mayor of the great city of
11
+ Goerlitz in the great country of Germany.
12
+ email;internet:mb@goerlitz.de
13
+ home.tel;type=fax,voice,msg:+49 3581 123456
14
+ home.label:Hufenshlagel 1234\n
15
+ 02828 Goerlitz\n
16
+ Deutschland
17
+ key;type=X509;encoding=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQ
18
+ AwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zI
19
+ ENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0ZW1zMRwwGgYDVQQD
20
+ ExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNjE5NDc1OVoXDTk3MTIwMzE5NDc
21
+ 1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYDVQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW
22
+ 9ucyBDb3JwLjEYMBYGA1UEAxMPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBF
23
+ hJob3dlc0BuZXRzY2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqG
24
+ SIb3DQEBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2dXc
25
+ oX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MBEGCWCGSAGG+E
26
+ IBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau+hUMbsQukjANBgkqhkiG9
27
+ w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIPmx93HGp0Kgyx1jIVMyNgsemeAwBM+M
28
+ SlhMfcpbTrONwNjZYW8vJDSoi//yrZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8V
29
+ UMk1U7jt8LYpo4YULU7UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ==
30
+ end:vcard
@@ -0,0 +1,16 @@
1
+ BEGIN:VCARD
2
+ VERSION:2.1
3
+ X-EVOLUTION-FILE-AS:AAA Our Fax
4
+ FN:AAA Our Fax
5
+ N:AAA Our Fax
6
+ ADR;WORK;PREF:
7
+ LABEL;WORK;PREF:
8
+ TEL;WORK;FAX:925 833-7660
9
+ TEL;HOME;FAX:925 833-7660
10
+ TEL;VOICE:1
11
+ TEL;FAX:2
12
+ EMAIL;INTERNET:e@c
13
+ TITLE:
14
+ NOTE:
15
+ UID:pas-id-3F93E22900000001
16
+ END:VCARD
@@ -0,0 +1,15 @@
1
+ BEGIN:VCARD
2
+ VERSION:2.1
3
+ N:Middle Family;Ny_full
4
+ TEL;PREF;HOME;VOICE:0123456789
5
+ TEL;FAX:0123456789
6
+ TEL;CELL;VOICE:0123456789
7
+ TEL;HOME;VOICE:0123456789
8
+ TEL;WORK;VOICE:0123456789
9
+ EMAIL:email@email.com
10
+ EMAIL:work@work.com
11
+ URL:www.email.com
12
+ URL:www.work.com
13
+ LABEL;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Box 1234=0AWorkv=E4gen =
14
+ 2=0AWorkv=E4gen 1=0AUme=E5=0AV=E4sterbotten=0A12345=0AS
15
+ END:VCARD
@@ -0,0 +1,13 @@
1
+ BEGIN:VCARD
2
+ VERSION:3.0
3
+ N:Roberts;Sam;;;
4
+ FN:Roberts Sam
5
+ EMAIL;type=HOME;type=pref:sroberts@uniserve.com
6
+ TEL;type=WORK;type=pref:905-501-3781
7
+ TEL;type=FAX:905-907-4230
8
+ TEL;type=HOME:416 535 5341
9
+ ADR;type=HOME;type=pref:;;376 Westmoreland Ave.;Toronto;ON;M6H 3
10
+ A6;Canada
11
+ NOTE:CATEGORIES: Amis/Famille
12
+ BDAY;value=date:1970-07-14
13
+ END:VCARD
@@ -0,0 +1,16 @@
1
+ BEGIN:VCARD
2
+ VERSION:3.0
3
+ N:Middle Family;Ny_full
4
+ PHOTO:val\nue
5
+ PHOTO;encoding=8bit:val\nue
6
+ PHOTO;encoding=8bit:val\nue
7
+ PHOTO;encoding=8bit;type=atype:val\nue
8
+ PHOTO;value=binary;encoding=8bit:val\nue
9
+ PHOTO;value=binary;encoding=8bit:val\nue
10
+ PHOTO;value=binary;encoding=8bit;type=atype:val\nue
11
+ PHOTO;value=text;encoding=8bit:val\nue
12
+ PHOTO;value=text;encoding=8bit:val\nue
13
+ PHOTO;value=text;encoding=8bit;type=atype:val\nue
14
+ PHOTO;value=uri:my://
15
+ PHOTO;value=uri;type=atype:my://
16
+ END:VCARD
@@ -0,0 +1,8 @@
1
+ BEGIN:VCARD
2
+ BDAY;value=date:206-12-15
3
+ END:VCARD
4
+ BEGIN:VCARD
5
+ BDAY;value=date:2003-12-09
6
+ END:VCARD
7
+ BEGIN:VCARD
8
+ END:VCARD
@@ -0,0 +1,10 @@
1
+ BEGIN:VCARD
2
+ VERSION:3.0
3
+ N:Roberts;Sam;;;
4
+ FN:Roberts Sam
5
+ EMAIL;type=HOME;type=pref:sroberts@uniserve.com
6
+ TEL;type=HOME:416 535 5341
7
+ ADR;type=HOME;type=pref:;;376 Westmoreland Ave.;Toronto;ON;M6H 3A6;Canada
8
+ NOTE:CATEGORIES: Amis/Famille
9
+ BDAY;value=date:1970-07-14
10
+ END:VCARD
@@ -0,0 +1,47 @@
1
+ BEGIN:VCALENDAR
2
+ CALSCALE:GREGORIAN
3
+ X-WR-TIMEZONE;VALUE=TEXT:Canada/Eastern
4
+ METHOD:PUBLISH
5
+ PRODID:-//Apple Computer\, Inc//iCal 1.0//EN
6
+ X-WR-RELCALID;VALUE=TEXT:18E75B8C-5722-11D7-AB0B-000393AD088C
7
+ X-WR-CALNAME;VALUE=TEXT:Events
8
+ VERSION:2.0
9
+ BEGIN:VEVENT
10
+ SEQUENCE:14
11
+ UID:18E74C28-5722-11D7-AB0B-000393AD088C
12
+ DTSTAMP:20030301T171521Z
13
+ SUMMARY:Bob Log III
14
+ DTSTART;TZID=Canada/Eastern:20030328T200000
15
+ DTEND;TZID=Canada/Eastern:20030328T230000
16
+ DESCRIPTION:Healey's\n\nLook up exact time.\n
17
+ BEGIN:VALARM
18
+ TRIGGER;VALUE=DURATION:-P2D
19
+ ACTION:DISPLAY
20
+ DESCRIPTION:Event reminder
21
+ END:VALARM
22
+ BEGIN:VALARM
23
+ ATTENDEE:mailto:sroberts@uniserve.com
24
+ TRIGGER;VALUE=DURATION:-P1D
25
+ ACTION:EMAIL
26
+ SUMMARY:Alarm notification
27
+ DESCRIPTION:This is an event reminder
28
+ END:VALARM
29
+ END:VEVENT
30
+ BEGIN:VEVENT
31
+ SEQUENCE:1
32
+ DTSTAMP:20030312T043534Z
33
+ SUMMARY:Small Potatoes 10\nFriday\, March 14th\, 8:00 p.m.\n361 Danforth
34
+ Avenue (at Hampton -- Chester subway)\nInfo:_ (416) 480-2802 or (416)
35
+ 323-1715\n
36
+ UID:18E750A8-5722-11D7-AB0B-000393AD088C
37
+ DTSTART;TZID=Canada/Eastern:20030315T000000
38
+ DURATION:PT1H
39
+ BEGIN:VALARM
40
+ ATTENDEE:mailto:sroberts@uniserve.com
41
+ TRIGGER;VALUE=DURATION:-P1D
42
+ ACTION:EMAIL
43
+ SUMMARY:Alarm notification
44
+ DESCRIPTION:This is an event reminder
45
+ END:VALARM
46
+ END:VEVENT
47
+ END:VCALENDAR
@@ -0,0 +1,27 @@
1
+ BEGIN:VCARD
2
+ VERSION:3.0
3
+ FN:Stepcase TestUser
4
+ N:TestUser;Stepcase;;;
5
+ EMAIL;TYPE=INTERNET:testuser@stepcase.com
6
+ X-GTALK:gtalk.step
7
+ X-AIM:aim.step
8
+ X-YAHOO:yahoo.step
9
+ X-MSN:msn.step
10
+ X-ICQ:icq.step
11
+ X-JABBER:jabber.step
12
+ TEL;TYPE=FAX:44444444
13
+ TEL;TYPE=PAGER:66666666
14
+ TEL;TYPE=HOME:22222222
15
+ TEL;TYPE=CELL:11111111
16
+ TEL;TYPE=FAX:55555555
17
+ TEL;TYPE=WORK:33333333
18
+ LABEL;TYPE=HOME;ENCODING=QUOTED-PRINTABLE:123 Home, Home Street=0D=0A=
19
+ Kowloon, N/A=0D=0A=
20
+ Hong Kong
21
+ LABEL;TYPE=HOME;ENCODING=QUOTED-PRINTABLE:321 Office, Work Road=0D=0A=
22
+ Tsuen Wan NT=0D=0A=
23
+ Hong Kong
24
+ TITLE:CTO
25
+ ORG:Stepcase.com
26
+ NOTE:Stepcase test user is a robot.
27
+ END:VCARD
@@ -0,0 +1,41 @@
1
+ BEGIN:VCARD
2
+ VERSION:3.0
3
+ REV:20080409T095515Z
4
+ X-YAHOO;TYPE=HOME:yahoo.john
5
+ X-GOOGLE TALK;TYPE=WORK:gtalk.john
6
+ X-SAMETIME;TYPE=WORK:sametime.john
7
+ X-SKYPE;TYPE=WORK:skype.john
8
+ X-MSN;TYPE=WORK:msn.john
9
+ X-JABBER;TYPE=WORK:jabber.john
10
+ N:Doe;John;;;
11
+ ADR;TYPE=WORK:;;456 Grandview Building\, Wide Street;San Diego;CA;90204;
12
+ United States
13
+ ADR;TYPE=HOME:;;123 Sweet Home\, Narrow Street;New York;NY;91102;United
14
+ States
15
+ URL;TYPE=OTHER:http\://www.homepage.com
16
+ URL;TYPE=HOME:http\://www.home.com
17
+ URL;TYPE=WORK:http\://www.work.com
18
+ URL;TYPE=OTHER:http\://www.other.com
19
+ URL;TYPE=OTHER:http\://www.custom.com
20
+ ORG:John Doe & Partners Limited;;
21
+ TEL;TYPE=WORK:11111111
22
+ TEL;TYPE=CELL:22222222
23
+ TEL;TYPE=HOME:33333333
24
+ TEL;TYPE=OTHER:44444444
25
+ TEL;TYPE=FAX:55555555
26
+ TEL;TYPE=FAX:66666666
27
+ TEL;TYPE=PAGER:77777777
28
+ TEL;TYPE=OTHER:88888888
29
+ TEL;TYPE=OTHER:99999999
30
+ UID:cc548e11-569e-3bf5-a9aa-722de4571f4a
31
+ X-ICQ;TYPE=HOME:icq.john
32
+ EMAIL;TYPE=WORK,INTERNET:john.doe@work.com
33
+ EMAIL;TYPE=HOME,INTERNET:john.doe@home.com
34
+ EMAIL;TYPE=OTHER,INTERNET:john.doe@other.com
35
+ EMAIL;TYPE=OTHER,INTERNET:john.doe@custom.com
36
+ TITLE:Sales Manager
37
+ X-OTHER;TYPE=WORK:other.john
38
+ X-AIM;TYPE=WORK:aim.john
39
+ X-QQ;TYPE=WORK:qq.john
40
+ FN:John Doe
41
+ END:VCARD