vcard 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|