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.
- data/.gitignore +15 -5
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +17 -0
- data/Rakefile +4 -52
- data/{LICENSE → VPIM-LICENSE.txt} +2 -2
- data/lib/vcard.rb +304 -28
- data/lib/vcard/attachment.rb +10 -12
- data/lib/vcard/bnf.rb +66 -0
- data/lib/vcard/dirinfo.rb +24 -26
- data/lib/vcard/enumerator.rb +5 -7
- data/lib/vcard/errors.rb +23 -0
- data/lib/vcard/field.rb +56 -58
- data/lib/vcard/vcard.rb +210 -240
- data/lib/vcard/version.rb +3 -0
- data/test/field_test.rb +55 -55
- data/test/fixtures/bday_decode.vcard +3 -0
- data/test/fixtures/bday_decode_2.vcard +6 -0
- data/test/fixtures/empty_tel.vcard +3 -0
- data/test/fixtures/ex1.vcard +7 -0
- data/test/fixtures/ex2.vcard +9 -0
- data/test/fixtures/ex3.vcard +30 -0
- data/test/fixtures/ex_21.vcard +16 -0
- data/test/fixtures/ex_21_case0.vcard +15 -0
- data/test/fixtures/ex_apple1.vcard +13 -0
- data/test/fixtures/ex_attach.vcard +16 -0
- data/test/fixtures/ex_bdays.vcard +8 -0
- data/test/fixtures/ex_encode_1.vcard +10 -0
- data/test/fixtures/ex_ical_1.vcal +47 -0
- data/test/fixtures/gmail.vcard +27 -0
- data/test/fixtures/highrise.vcard +41 -0
- data/test/fixtures/multiple_occurences_of_type.vcard +17 -0
- data/test/fixtures/nickname0.vcard +2 -0
- data/test/fixtures/nickname1.vcard +3 -0
- data/test/fixtures/nickname2.vcard +3 -0
- data/test/fixtures/nickname3.vcard +3 -0
- data/test/fixtures/nickname4.vcard +4 -0
- data/test/fixtures/nickname5.vcard +5 -0
- data/test/fixtures/slash_in_field_name.vcard +3 -0
- data/test/fixtures/tst1.vcard +9 -0
- data/test/fixtures/url_decode.vcard +4 -0
- data/test/test_helper.rb +34 -6
- data/test/vcard_test.rb +87 -577
- data/vcard.gemspec +19 -0
- metadata +88 -43
- data/.document +0 -5
- data/README.rdoc +0 -7
- data/VERSION +0 -1
- data/lib/vcard/rfc2425.rb +0 -367
data/test/field_test.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
require
|
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 =
|
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 =
|
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 =
|
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 =
|
28
|
+
line = "t;e=a,b:4"
|
29
29
|
part = Field.decode0(line)
|
30
30
|
assert_equal("4", part[ 3 ])
|
31
|
-
assert_equal( {
|
31
|
+
assert_equal( {"E" => [ "a","b" ] }, part[ 2 ])
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_field2
|
35
|
-
line =
|
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( {
|
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(
|
47
|
-
assert_equal({
|
48
|
-
assert_equal(
|
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(
|
70
|
-
assert_equal([ nil,
|
69
|
+
assert_equal("name:", line = Field.encode0(nil, "name"))
|
70
|
+
assert_equal([ nil, "NAME", {}, ""], Field.decode0(line))
|
71
71
|
|
72
|
-
assert_equal(
|
73
|
-
assert_equal([ nil,
|
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(
|
76
|
-
assert_equal([ nil,
|
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(
|
79
|
-
assert_equal([
|
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
|
-
|
85
|
-
|
84
|
+
"g.:",
|
85
|
+
":v",
|
86
86
|
].each do |line|
|
87
|
-
assert_raises(
|
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(
|
93
|
-
assert_equal("DTSTART:20040101\n", Field.create(
|
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(
|
97
|
+
f = Field.create("name")
|
98
98
|
|
99
|
-
assert_equal(
|
100
|
-
f.value =
|
101
|
-
assert_equal(
|
102
|
-
f.value =
|
103
|
-
assert_equal(
|
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 =
|
106
|
-
assert_equal(
|
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(
|
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(
|
118
|
+
assert_equal("Z.B", f.group)
|
119
119
|
|
120
|
-
f[
|
120
|
+
f["p0"] = "hi julie"
|
121
121
|
|
122
122
|
assert_equal("Z.B.NAME;P0=hi julie:z\n", f.encode)
|
123
|
-
assert_equal([
|
124
|
-
assert_equal([
|
125
|
-
assert_equal(
|
126
|
-
assert_equal(
|
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 =
|
128
|
+
# FAIL assert_raises(ArgumentError) { f.group = "z.b:" }
|
129
129
|
|
130
|
-
assert_equal(
|
130
|
+
assert_equal("Z.B", f.group)
|
131
131
|
|
132
|
-
f.value =
|
132
|
+
f.value = "some text"
|
133
133
|
|
134
|
-
assert_equal(
|
135
|
-
assert_equal(
|
134
|
+
assert_equal("some text", f.value)
|
135
|
+
assert_equal("some text", f.value_raw)
|
136
136
|
|
137
|
-
f[
|
137
|
+
f["encoding"] = :b64
|
138
138
|
|
139
|
-
assert_equal(
|
140
|
-
assert_equal([
|
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",
|
145
|
-
assert_equal("0:xx\n",
|
146
|
-
assert_equal("0:xx\n x\n",
|
147
|
-
assert_equal("0:xx\n xx\n",
|
148
|
-
assert_equal("0:xx\n xxxx\n",
|
149
|
-
assert_equal("0:xx\n xxxx\n x\n",
|
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,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,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
|