vcard 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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