testing: simulate remote item manipulation
Traditionally, SyncEvolution only modified remote data via syncing. This is not enough because it does not cover data on the remote side that SyncEvolution cannot sync. The new tests solve this by using the command line's import/update operations which modify data more or less directly. Now we can test: - downloading data created remotely - uploading data via sync, export directly, compare - simulate conflicts with changes made remotely The download and upload test include full round-trips, i.e. the initial transfer plus a change that needs to be synced back. Because this is highly dependent on the exact data stored by the peer, all these tests depend on per-peer test data and scripts for modifying that data. The tests only get enabled if the test data is found. The initial test data covers Apple Calendar server, EDS<->EDS and Google Contacts.
This commit is contained in:
parent
9c0916bee8
commit
ae84edf417
19
src/src.am
19
src/src.am
|
@ -259,24 +259,15 @@ nodist_src_client_test_SOURCES = test/test.cpp
|
|||
# -O2, because CXXFLAGS comes later in the final compile command.
|
||||
@ifGNUmake@ $(foreach e, $(foreach i, $(src_client_test_SOURCES), $(dir $(i))src_client_test-$(basename $(notdir $i))), $(e).o $(e).lo $(e).obj) : CXXFLAGS = -g
|
||||
|
||||
# list of test file base files
|
||||
# List of test files which get copied verbatim from
|
||||
# $(top_srcdir)/test/testcases/ to src/testcases below. test/test.am
|
||||
# has the list for inclusion in "make dist" with the original
|
||||
# "test/" directory. We need to replace that here.
|
||||
#
|
||||
# Generated files (testcases/eds_event.ics.funambol.tem) are derived from
|
||||
# the original base file ($(srcdir)/test/testcases/eds_event.ics) by
|
||||
# applying a patch ($(srcdir)/test/testcases/eds_event.ics.funambol.tem.patch).
|
||||
CLIENT_LIB_TEST_FILES = \
|
||||
src/testcases/lcs/file1.txt \
|
||||
src/testcases/lcs/file2.txt \
|
||||
src/testcases/local.png \
|
||||
src/testcases/templates/clients/SyncEvolution.ini \
|
||||
src/testcases/templates/clients/phone/nokia/S40/7210c.ini \
|
||||
src/testcases/google_event.ics \
|
||||
src/testcases/yahoo_contact.vcf \
|
||||
src/testcases/eds_contact.vcf \
|
||||
src/testcases/eds_event.ics \
|
||||
src/testcases/eds_event.ics.local \
|
||||
src/testcases/eds_memo.ics \
|
||||
src/testcases/eds_task.ics
|
||||
CLIENT_LIB_TEST_FILES = $(subst test/,src/,$(test_testcases))
|
||||
|
||||
# all patch files
|
||||
TEST_FILES_PATCHES = $(wildcard $(top_srcdir)/test/testcases/*.patch)
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include <syncevo/util.h>
|
||||
#include <syncevo/SyncContext.h>
|
||||
#include <VolatileConfigNode.h>
|
||||
#include <syncevo/Cmdline.h>
|
||||
|
||||
#include <synthesis/dataconversion.h>
|
||||
|
||||
|
@ -50,6 +51,7 @@
|
|||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <sys/socket.h>
|
||||
|
@ -128,6 +130,44 @@ void assertEquals(const A& expected,
|
|||
|
||||
SE_BEGIN_CXX
|
||||
|
||||
/**
|
||||
* A command line using keyring as configured, but no interactive
|
||||
* password lookup. The base Cmdline class uses a generic SyncContext
|
||||
* which uses a SimpleUserInterface without keyring support.
|
||||
*/
|
||||
class TestCmdline : public Cmdline
|
||||
{
|
||||
public:
|
||||
// If we could inherit the Cmdline constructor, life would be a lot
|
||||
// easier... because we can't, we have to copy-and-paste the code
|
||||
// and rely on protected inheritance of Cmdline members.
|
||||
TestCmdline(const char *arg, ...) :
|
||||
Cmdline(std::vector<std::string>())
|
||||
{
|
||||
va_list argList;
|
||||
va_start(argList, arg);
|
||||
for (const char *curr = arg;
|
||||
curr;
|
||||
curr = va_arg(argList, const char *)) {
|
||||
m_args.push_back(curr);
|
||||
}
|
||||
va_end(argList);
|
||||
m_argc = m_args.size();
|
||||
m_argvArray.reset(new const char *[m_args.size()]);
|
||||
for (int i = 0; i < m_argc; i++) {
|
||||
m_argvArray[i] = m_args[i].c_str();
|
||||
}
|
||||
m_argv = m_argvArray.get();
|
||||
}
|
||||
|
||||
virtual SyncContext *createSyncClient() {
|
||||
std::auto_ptr<SyncContext> context(new SyncContext(m_server, true));
|
||||
boost::shared_ptr<SimpleUserInterface> ui(new SimpleUserInterface(context->getKeyring()));
|
||||
context->setUserInterface(ui);
|
||||
return context.release();
|
||||
}
|
||||
};
|
||||
|
||||
static set<ClientTest::Cleanup_t> cleanupSet;
|
||||
|
||||
/**
|
||||
|
@ -152,6 +192,74 @@ std::string currentServer()
|
|||
return tmp ? tmp : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* This function checks whether the data on the server is accessible
|
||||
* directly. This is the case for tests where the server side is
|
||||
* syncevo-http-server or the sync is local. In both cases, this
|
||||
* method checks the config of <server>_1 (the first client's sync config)
|
||||
* to find the peer and the uri of the given local source. The peer
|
||||
* is expected to a source under that name (no alias!).
|
||||
*
|
||||
* CLIENT_TEST_SERVER must be set. <server>_1 must exist and (if
|
||||
* syncing via HTTP) have a deviceId that matches a remoteDeviceId in
|
||||
* the config used by syncevo-http-server.
|
||||
*
|
||||
* @return pair of <peer sync config> + <peer source name>; sync config name empty if not found
|
||||
*/
|
||||
std::pair<std::string, std::string> getPeerConfig(const std::string &source)
|
||||
{
|
||||
static const char LOCAL_SYNC[] = "local://";
|
||||
SyncConfig local(currentServer() + "_1");
|
||||
std::vector<std::string> syncURLs = local.getSyncURL();
|
||||
boost::shared_ptr<PersistentSyncSourceConfig> sourceConfig(local.getSyncSourceConfig(source));
|
||||
std::string uri = sourceConfig->getURI();
|
||||
if (uri.empty()) {
|
||||
uri = source;
|
||||
}
|
||||
std::string peerConfig;
|
||||
if (syncURLs.size() == 1) {
|
||||
const std::string &syncURL = syncURLs.front();
|
||||
if (boost::starts_with(syncURL, LOCAL_SYNC)) {
|
||||
// Local sync. "target-config" is implied and may be relevant
|
||||
// later when using the peer source.
|
||||
peerConfig = syncURL.substr(strlen(LOCAL_SYNC));
|
||||
if (boost::starts_with(peerConfig, "@")) {
|
||||
peerConfig = "target-config" + peerConfig;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (peerConfig.empty()) {
|
||||
// Check for local HTTP server.
|
||||
std::string deviceId = local.getDevID();
|
||||
BOOST_FOREACH (const StringPair &peer, SyncConfig::getConfigs()) {
|
||||
SyncConfig remote(peer.first);
|
||||
if (remote.getRemoteDevID() == deviceId) {
|
||||
peerConfig = peer.first;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return std::make_pair(peerConfig, uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests involving a specific peer use testcases/synctests/<server
|
||||
* name>/<source name>/<test name>/<aspect>, where <aspect> is test
|
||||
* specific. The resulting string typically references a directory
|
||||
* with individual items. <aspect> can be empty.
|
||||
*/
|
||||
std::string getPeerTestdata(const std::string &source, const std::string &test, const std::string &aspect)
|
||||
{
|
||||
std::string path = StringPrintf("testcases/synctests/%s/%s/%s/%s",
|
||||
currentServer().c_str(),
|
||||
source.c_str(),
|
||||
test.c_str(),
|
||||
aspect.c_str());
|
||||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* CLIENT_TEST_NUM_ITEMS env variable or 100
|
||||
*/
|
||||
|
@ -750,8 +858,13 @@ bool LocalTests::compareDatabases(const char *refFile, TestingSyncSource ©,
|
|||
simplifyFilename(copyFile);
|
||||
SOURCE_ASSERT_EQUAL(©, 0, config.m_dump(client, copy, copyFile));
|
||||
|
||||
return compareDatabases(sourceFile, copyFile);
|
||||
}
|
||||
|
||||
bool LocalTests::compareDatabases(const std::string &refFile, const std::string &actualFile, bool raiseAssert)
|
||||
{
|
||||
bool equal = false;
|
||||
CT_ASSERT_NO_THROW(equal = config.m_compare(client, sourceFile, copyFile));
|
||||
CT_ASSERT_NO_THROW(equal = config.m_compare(client, refFile.c_str(), actualFile.c_str()));
|
||||
CT_ASSERT(!raiseAssert || equal);
|
||||
|
||||
return equal;
|
||||
|
@ -1455,12 +1568,12 @@ void LocalTests::testLinkedSources()
|
|||
}
|
||||
|
||||
// clean database, import file, then export again and compare
|
||||
void LocalTests::testImport() {
|
||||
void LocalTests::doImport(const std::string &testcases) {
|
||||
// check additional requirements
|
||||
CT_ASSERT(config.m_import);
|
||||
CT_ASSERT(config.m_dump);
|
||||
CT_ASSERT(config.m_compare);
|
||||
CT_ASSERT(!config.m_testcases.empty());
|
||||
CT_ASSERT(!testcases.empty());
|
||||
CT_ASSERT(config.m_createSourceA);
|
||||
|
||||
CT_ASSERT_NO_THROW(deleteAll(createSourceA));
|
||||
|
@ -1469,19 +1582,19 @@ void LocalTests::testImport() {
|
|||
TestingSyncSourcePtr source;
|
||||
SOURCE_ASSERT_NO_FAILURE(source.get(), source.reset(createSourceA()));
|
||||
restoreStorage(config, client);
|
||||
std::string testcases;
|
||||
std::string importFailures = config.m_import(client, *source.get(), config, config.m_testcases, testcases, NULL);
|
||||
std::string actualData;
|
||||
std::string importFailures = config.m_import(client, *source.get(), config, testcases, actualData, NULL);
|
||||
backupStorage(config, client);
|
||||
CT_ASSERT_NO_THROW(source.reset());
|
||||
|
||||
// export again and compare against original file,
|
||||
// without relying on change tracking (because
|
||||
// Google ActiveSync has problems with Fetch,
|
||||
// which would be needed for a data dump when
|
||||
// which would be needed for a data dump whenr
|
||||
// using the incremental approach)
|
||||
TestingSyncSourcePtr copy;
|
||||
SOURCE_ASSERT_NO_FAILURE(copy.get(), copy.reset(createSourceA(), TestingSyncSourcePtr::SLOW));
|
||||
bool equal = compareDatabases(testcases.c_str(), *copy.get(), false);
|
||||
bool equal = compareDatabases(actualData.c_str(), *copy.get(), false);
|
||||
CT_ASSERT_NO_THROW(source.reset());
|
||||
|
||||
if (importFailures.empty()) {
|
||||
|
@ -1491,6 +1604,10 @@ void LocalTests::testImport() {
|
|||
}
|
||||
}
|
||||
|
||||
void LocalTests::testImport() {
|
||||
doImport(config.m_testcases);
|
||||
}
|
||||
|
||||
// same as testImport() with immediate delete
|
||||
void LocalTests::testImportDelete() {
|
||||
CT_ASSERT_NO_THROW(testImport());
|
||||
|
@ -2840,6 +2957,22 @@ void SyncTests::addTests(bool isFirstSource) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Tests which depend on item manipulation in the peer.
|
||||
// These tests get enabled if their testdata is found in
|
||||
// testcases/synctests/<server name> and if we are
|
||||
// currently testing only a single source. The tests will
|
||||
// fail if SyncEvolution was not configured correctly for
|
||||
// them (see getPeerConfig()).
|
||||
if (sources.size() == 1) {
|
||||
const std::string sourceName = config.m_sourceName;
|
||||
#define ADD_PEER_TEST(_x) if (isDir(getPeerTestdata(sourceName, #_x, ""))) { ADD_TEST(SyncTests, _x); }
|
||||
|
||||
ADD_PEER_TEST(testDownload);
|
||||
ADD_PEER_TEST(testUpload);
|
||||
ADD_PEER_TEST(testUpdateLocalWins);
|
||||
ADD_PEER_TEST(testUpdateRemoteWins);
|
||||
}
|
||||
}
|
||||
|
||||
if (config.m_retrySync &&
|
||||
|
@ -5909,6 +6042,396 @@ void SyncTests::testTimeout()
|
|||
}
|
||||
}
|
||||
|
||||
static void UpdateLocal(const std::string &config, const std::string &source,
|
||||
const std::string &actualLocalData,
|
||||
const std::string &localModified,
|
||||
const std::string &modifyLocal)
|
||||
{
|
||||
// The local side also uses the Cmdline class because then we only
|
||||
// need to implement one way of updating items. But first we need to
|
||||
// get the actual data.
|
||||
std::auto_ptr<Cmdline> cmdline;
|
||||
|
||||
rm_r(actualLocalData);
|
||||
mkdir_p(actualLocalData);
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--export",
|
||||
actualLocalData.c_str(),
|
||||
config.c_str(),
|
||||
source.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE("export " + currentServer() + "_1 " + source, cmdline->run());
|
||||
|
||||
CT_ASSERT(!system(StringPrintf("%s %s %s",
|
||||
modifyLocal.c_str(),
|
||||
actualLocalData.c_str(),
|
||||
localModified.c_str()).c_str()));
|
||||
CT_ASSERT(isDir(localModified));
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--update",
|
||||
localModified.c_str(),
|
||||
config.c_str(),
|
||||
source.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE("update " + config + " " + source, cmdline->run());
|
||||
}
|
||||
|
||||
void SyncTests::testUpload()
|
||||
{
|
||||
const std::string testname = "testUpload";
|
||||
|
||||
CT_ASSERT_EQUAL(sources.size(), 1);
|
||||
const ClientTest::Config &config(sources[0].second->config);
|
||||
StringPair peerConfig = getPeerConfig(config.m_sourceName);
|
||||
const std::string &peer = peerConfig.first;
|
||||
const std::string &peerSource = peerConfig.second;
|
||||
CT_ASSERT(!peer.empty());
|
||||
CT_ASSERT(!peerSource.empty());
|
||||
|
||||
std::string localTestdata = getPeerTestdata(config.m_sourceName, testname, "local");
|
||||
CT_ASSERT_MESSAGE(localTestdata, !access(localTestdata.c_str(), R_OK));
|
||||
std::string remoteTestdata = getPeerTestdata(config.m_sourceName, testname, "remote");
|
||||
CT_ASSERT_MESSAGE(remoteTestdata, !access(remoteTestdata.c_str(), R_OK));
|
||||
std::string modifyRemote = getPeerTestdata(config.m_sourceName, testname, "modify-remote");
|
||||
CT_ASSERT_MESSAGE(modifyRemote, !access(modifyRemote.c_str(), R_OK|X_OK));
|
||||
std::string localSyncedTestdata = getPeerTestdata(config.m_sourceName, testname, "local-synced");
|
||||
CT_ASSERT_MESSAGE(localSyncedTestdata, !access(localSyncedTestdata.c_str(), R_OK));
|
||||
|
||||
std::auto_ptr<Cmdline> cmdline;
|
||||
|
||||
// Import locally into empty database.
|
||||
sources[0].second->deleteAll(sources[0].second->createSourceA);
|
||||
sources[0].second->doImport(localTestdata);
|
||||
|
||||
// Sync to remote.
|
||||
doSync(__FILE__, __LINE__,
|
||||
"upload",
|
||||
SyncOptions(RefreshFromLocalMode(),
|
||||
CheckSyncReport(0,0,0, -1,0,0, true, SYNC_REFRESH_FROM_LOCAL)));
|
||||
|
||||
// Export from remote directly.
|
||||
std::string actualData = getCurrentTest() + ".remote.test.dat";
|
||||
simplifyFilename(actualData);
|
||||
mkdir_p(actualData);
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--export",
|
||||
actualData.c_str(),
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE(peer + " " + peerSource, cmdline->run());
|
||||
|
||||
// Compare against expected result. We use the compare operation
|
||||
// of the local source and apply it to data from the remote one.
|
||||
// This typically works if the data has the same format.
|
||||
{
|
||||
ScopedEnvChange fullSyncCompare("CLIENT_TEST_SERVER", "none");
|
||||
CT_ASSERT(sources[0].second->compareDatabases(remoteTestdata, actualData));
|
||||
}
|
||||
|
||||
// Modify remotely.
|
||||
std::string remoteModified = getCurrentTest() + ".remote.modified.test.dat";
|
||||
simplifyFilename(remoteModified);
|
||||
CT_ASSERT(!system(StringPrintf("%s %s %s",
|
||||
modifyRemote.c_str(),
|
||||
actualData.c_str(),
|
||||
remoteModified.c_str()).c_str()));
|
||||
CT_ASSERT(isDir(remoteModified));
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--update",
|
||||
remoteModified.c_str(),
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE("update " + peer + " " + peerSource, cmdline->run());
|
||||
|
||||
// Sync between both sides to update the local data.
|
||||
doSync(__FILE__, __LINE__,
|
||||
"two-way",
|
||||
SyncOptions(SYNC_TWO_WAY,
|
||||
CheckSyncReport(0,-1,0, 0,0,0, true, SYNC_TWO_WAY)));
|
||||
|
||||
// Compare against expected result.
|
||||
TestingSyncSourcePtr copy;
|
||||
SOURCE_ASSERT_NO_FAILURE(copy.get(), copy.reset(sources[0].second->createSourceA(), TestingSyncSourcePtr::SLOW));
|
||||
{
|
||||
ScopedEnvChange fullSyncCompare("CLIENT_TEST_SERVER", "none");
|
||||
CT_ASSERT(sources[0].second->compareDatabases(localSyncedTestdata.c_str(), *copy));
|
||||
}
|
||||
}
|
||||
|
||||
void SyncTests::testDownload()
|
||||
{
|
||||
const std::string testname = "testDownload";
|
||||
|
||||
CT_ASSERT_EQUAL(sources.size(), 1);
|
||||
const ClientTest::Config &config(sources[0].second->config);
|
||||
StringPair peerConfig = getPeerConfig(config.m_sourceName);
|
||||
const std::string &peer = peerConfig.first;
|
||||
const std::string &peerSource = peerConfig.second;
|
||||
CT_ASSERT(!peer.empty());
|
||||
CT_ASSERT(!peerSource.empty());
|
||||
|
||||
std::string localTestdata = getPeerTestdata(config.m_sourceName, testname, "local");
|
||||
CT_ASSERT_MESSAGE(localTestdata, !access(localTestdata.c_str(), R_OK));
|
||||
std::string remoteTestdata = getPeerTestdata(config.m_sourceName, testname, "remote");
|
||||
CT_ASSERT_MESSAGE(remoteTestdata, !access(remoteTestdata.c_str(), R_OK));
|
||||
std::string modifyLocal = getPeerTestdata(config.m_sourceName, testname, "modify-local");
|
||||
CT_ASSERT_MESSAGE(modifyLocal, !access(modifyLocal.c_str(), R_OK|X_OK));
|
||||
std::string remoteSyncedTestdata = getPeerTestdata(config.m_sourceName, testname, "remote-synced");
|
||||
CT_ASSERT_MESSAGE(remoteSyncedTestdata, !access(remoteSyncedTestdata.c_str(), R_OK));
|
||||
|
||||
std::auto_ptr<Cmdline> cmdline;
|
||||
|
||||
// Wipe remote directly, then import.
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--delete-items",
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
"*",
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE(peer + " " + peerSource, cmdline->run());
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--import",
|
||||
remoteTestdata.c_str(),
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE(peer + " " + peerSource, cmdline->run());
|
||||
|
||||
// Sync into local database.
|
||||
doSync(__FILE__, __LINE__,
|
||||
"download",
|
||||
SyncOptions(SYNC_REFRESH_FROM_REMOTE,
|
||||
CheckSyncReport(-1,0,-1, 0,0,0, true, SYNC_REFRESH_FROM_REMOTE)));
|
||||
|
||||
// Compare against expected result.
|
||||
TestingSyncSourcePtr copy;
|
||||
SOURCE_ASSERT_NO_FAILURE(copy.get(), copy.reset(sources[0].second->createSourceA(), TestingSyncSourcePtr::SLOW));
|
||||
{
|
||||
ScopedEnvChange fullSyncCompare("CLIENT_TEST_SERVER", "none");
|
||||
CT_ASSERT(sources[0].second->compareDatabases(localTestdata.c_str(), *copy));
|
||||
}
|
||||
|
||||
// Modify locally.
|
||||
std::string actualLocalData = getCurrentTest() + ".local.test.dat";
|
||||
simplifyFilename(actualLocalData);
|
||||
std::string localModified = getCurrentTest() + ".local.modified.test.dat";
|
||||
simplifyFilename(localModified);
|
||||
CT_ASSERT_NO_THROW(UpdateLocal(currentServer() + "_1", config.m_sourceName,
|
||||
actualLocalData, localModified,
|
||||
modifyLocal));
|
||||
|
||||
// Sync between both sides to update the remote.
|
||||
doSync(__FILE__, __LINE__,
|
||||
"two-way",
|
||||
SyncOptions(SYNC_TWO_WAY,
|
||||
CheckSyncReport(0,0,0, 0,-1,0, true, SYNC_TWO_WAY)));
|
||||
|
||||
// Check remote.
|
||||
std::string syncedRemoteData = getCurrentTest() + ".remote.test.dat";
|
||||
simplifyFilename(syncedRemoteData);
|
||||
rm_r(syncedRemoteData);
|
||||
mkdir_p(syncedRemoteData);
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--export",
|
||||
syncedRemoteData.c_str(),
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE("export " + peer + " " + peerSource, cmdline->run());
|
||||
|
||||
// Compare against expected result. We use the compare operation
|
||||
// of the local source and apply it to data from the remote one.
|
||||
// This typically works if the data has the same format.
|
||||
{
|
||||
ScopedEnvChange fullSyncCompare("CLIENT_TEST_SERVER", "none");
|
||||
CT_ASSERT(sources[0].second->compareDatabases(remoteSyncedTestdata, syncedRemoteData));
|
||||
}
|
||||
}
|
||||
|
||||
void SyncTests::doUpdateConflict(const std::string &testname, bool localWins)
|
||||
{
|
||||
CT_ASSERT_EQUAL(sources.size(), 1);
|
||||
const ClientTest::Config &config(sources[0].second->config);
|
||||
StringPair peerConfig = getPeerConfig(config.m_sourceName);
|
||||
const std::string &peer = peerConfig.first;
|
||||
const std::string &peerSource = peerConfig.second;
|
||||
CT_ASSERT(!peer.empty());
|
||||
CT_ASSERT(!peerSource.empty());
|
||||
|
||||
std::string localTestdata = getPeerTestdata(config.m_sourceName, testname, "local");
|
||||
CT_ASSERT_MESSAGE(localTestdata, !access(localTestdata.c_str(), R_OK));
|
||||
std::string localSyncedTestdata = getPeerTestdata(config.m_sourceName, testname, "local-synced");
|
||||
CT_ASSERT_MESSAGE(localSyncedTestdata, !access(localSyncedTestdata.c_str(), R_OK));
|
||||
std::string remoteSyncedTestdata = getPeerTestdata(config.m_sourceName, testname, "remote-synced");
|
||||
CT_ASSERT_MESSAGE(remoteSyncedTestdata, !access(remoteSyncedTestdata.c_str(), R_OK));
|
||||
std::string modifyLocal = getPeerTestdata(config.m_sourceName, testname, "modify-local");
|
||||
CT_ASSERT_MESSAGE(modifyLocal, !access(modifyLocal.c_str(), R_OK|X_OK));
|
||||
std::string modifyRemote = getPeerTestdata(config.m_sourceName, testname, "modify-remote");
|
||||
CT_ASSERT_MESSAGE(modifyRemote, !access(modifyRemote.c_str(), R_OK|X_OK));
|
||||
|
||||
// Import locally into empty database.
|
||||
sources[0].second->deleteAll(sources[0].second->createSourceA);
|
||||
sources[0].second->doImport(localTestdata);
|
||||
|
||||
// Sync to remote.
|
||||
doSync(__FILE__, __LINE__,
|
||||
"upload",
|
||||
SyncOptions(RefreshFromLocalMode(),
|
||||
CheckSyncReport(0,0,0, -1,0,0, true, SYNC_REFRESH_FROM_LOCAL)));
|
||||
|
||||
// Export from remote directly.
|
||||
std::string actualRemoteData = getCurrentTest() + ".remote.test.dat";
|
||||
simplifyFilename(actualRemoteData);
|
||||
std::auto_ptr<Cmdline> cmdline;
|
||||
rm_r(actualRemoteData);
|
||||
mkdir_p(actualRemoteData);
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--export",
|
||||
actualRemoteData.c_str(),
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE("export " + peer + " " + peerSource, cmdline->run());
|
||||
|
||||
// Modify all items on both sides. In both cases the modification
|
||||
// is done with a shell script which must make a copy of the data.
|
||||
// The shell scripts can be used to cause one or the other side
|
||||
// to have a modified version of an item or both at the same time,
|
||||
// which will trigger merging in the engine. The shell script
|
||||
// needs to create an entry for each item which is meant to be
|
||||
// updated, using the same file name (= luid) as in the input
|
||||
// directory.
|
||||
//
|
||||
// The order and timing of updating matters for the test because
|
||||
// the engine will look at time stamps (REV resp. LAST-MODIFIED)
|
||||
// to determine which side has the more recent change.
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (localWins ? i == 0 : i == 1) {
|
||||
// The remote side can use the data downloaded earlier.
|
||||
std::string remoteModified = getCurrentTest() + ".remote.modified.test.dat";
|
||||
simplifyFilename(remoteModified);
|
||||
CT_ASSERT(!system(StringPrintf("%s %s %s",
|
||||
modifyRemote.c_str(),
|
||||
actualRemoteData.c_str(),
|
||||
remoteModified.c_str()).c_str()));
|
||||
CT_ASSERT(isDir(remoteModified));
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--update",
|
||||
remoteModified.c_str(),
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE("update " + peer + " " + peerSource, cmdline->run());
|
||||
|
||||
// Check remote after update.
|
||||
std::string remoteActualModified = getCurrentTest() + ".remote.actual.test.dat";
|
||||
simplifyFilename(remoteActualModified);
|
||||
rm_r(remoteActualModified);
|
||||
mkdir_p(remoteActualModified);
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--export",
|
||||
remoteActualModified.c_str(),
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE("export " + peer + " " + peerSource, cmdline->run());
|
||||
|
||||
// Copy all unmodified items before the comparison.
|
||||
ReadDir dir(remoteModified);
|
||||
std::set<std::string> modified(dir.begin(), dir.end());
|
||||
BOOST_FOREACH(const std::string &luid, ReadDir(actualRemoteData)) {
|
||||
if (modified.find(luid) == modified.end()) {
|
||||
std::string content;
|
||||
CT_ASSERT(ReadFile(actualRemoteData + "/" + luid, content));
|
||||
std::ofstream((remoteModified + "/" + luid).c_str()).write(content.c_str(), content.size());
|
||||
}
|
||||
}
|
||||
|
||||
// Compare against expected result. We use the compare operation
|
||||
// of the local source and apply it to data from the remote one.
|
||||
// This typically works if the data has the same format.
|
||||
{
|
||||
ScopedEnvChange fullSyncCompare("CLIENT_TEST_SERVER", "none");
|
||||
CT_ASSERT(sources[0].second->compareDatabases(remoteModified, remoteActualModified));
|
||||
}
|
||||
} else {
|
||||
std::string actualLocalData = getCurrentTest() + ".local.test.dat";
|
||||
simplifyFilename(actualLocalData);
|
||||
std::string localModified = getCurrentTest() + ".local.modified.test.dat";
|
||||
simplifyFilename(localModified);
|
||||
CT_ASSERT_NO_THROW(UpdateLocal(currentServer() + "_1", config.m_sourceName,
|
||||
actualLocalData, localModified,
|
||||
modifyLocal));
|
||||
}
|
||||
|
||||
// System time must be synchronized with the remote side for the
|
||||
// test to pass reliably. Wait here and/or check that
|
||||
// loosing side's time is in the past (TODO).
|
||||
sleep(5);
|
||||
}
|
||||
|
||||
// Sync between both sides.
|
||||
doSync(__FILE__, __LINE__,
|
||||
"two-way",
|
||||
SyncOptions(SYNC_TWO_WAY,
|
||||
CheckSyncReport(0,-1,-1, 0,-1,0, true, SYNC_TWO_WAY)));
|
||||
|
||||
// Check remote.
|
||||
std::string syncedRemoteData = getCurrentTest() + ".remote.test.dat";
|
||||
simplifyFilename(syncedRemoteData);
|
||||
rm_r(syncedRemoteData);
|
||||
mkdir_p(syncedRemoteData);
|
||||
cmdline.reset(new TestCmdline("--daemon=no",
|
||||
"--export",
|
||||
syncedRemoteData.c_str(),
|
||||
peer.c_str(),
|
||||
peerSource.c_str(),
|
||||
(const char *)NULL));
|
||||
CT_ASSERT(cmdline->parse());
|
||||
CT_ASSERT_MESSAGE("export " + peer + " " + peerSource, cmdline->run());
|
||||
|
||||
// Compare against expected result. We use the compare operation
|
||||
// of the local source and apply it to data from the remote one.
|
||||
// This typically works if the data has the same format.
|
||||
{
|
||||
ScopedEnvChange fullSyncCompare("CLIENT_TEST_SERVER", "none");
|
||||
CT_ASSERT(sources[0].second->compareDatabases(remoteSyncedTestdata, syncedRemoteData));
|
||||
}
|
||||
|
||||
// Check local.
|
||||
TestingSyncSourcePtr copy;
|
||||
SOURCE_ASSERT_NO_FAILURE(copy.get(), copy.reset(sources[0].second->createSourceA(), TestingSyncSourcePtr::SLOW));
|
||||
{
|
||||
ScopedEnvChange fullSyncCompare("CLIENT_TEST_SERVER", "none");
|
||||
CT_ASSERT(sources[0].second->compareDatabases(localSyncedTestdata.c_str(), *copy));
|
||||
}
|
||||
}
|
||||
|
||||
void SyncTests::testUpdateRemoteWins()
|
||||
{
|
||||
// Local side gets updated first, then remote -> remote wins during merge conflict.
|
||||
doUpdateConflict("testUpdateRemoteWins", false);
|
||||
}
|
||||
|
||||
void SyncTests::testUpdateLocalWins()
|
||||
{
|
||||
// Remote side gets updated first, then local -> local wins during merge conflict.
|
||||
doUpdateConflict("testUpdateLocalWins", true);
|
||||
}
|
||||
|
||||
void SyncTests::doSync(const SyncOptions &options)
|
||||
{
|
||||
int res = 0;
|
||||
|
|
|
@ -551,6 +551,16 @@ public:
|
|||
*/
|
||||
virtual bool compareDatabases(const char *refFile, TestingSyncSource ©, bool raiseAssert = true);
|
||||
|
||||
/**
|
||||
* compares data using synccompare
|
||||
*
|
||||
* @param refFile existing file with source reference items
|
||||
* @param actualFile existing file with actual items which are expected to match
|
||||
* @param raiseAssert raise assertion if comparison yields differences (defaults to true)
|
||||
* @return true if the two databases are equal
|
||||
*/
|
||||
bool compareDatabases(const std::string &refFile, const std::string &actualFile, bool raiseAssert = true);
|
||||
|
||||
/**
|
||||
* compare data in source with set of items
|
||||
*/
|
||||
|
@ -632,6 +642,7 @@ public:
|
|||
virtual void testChanges();
|
||||
virtual void testChangesMultiCycles();
|
||||
virtual void testLinkedSources();
|
||||
void doImport(const std::string &testcases);
|
||||
virtual void testImport();
|
||||
virtual void testImportDelete();
|
||||
virtual void testRemoveProperties();
|
||||
|
@ -872,6 +883,13 @@ protected:
|
|||
|
||||
virtual void testTimeout();
|
||||
|
||||
virtual void testUpload();
|
||||
virtual void testDownload();
|
||||
|
||||
void doUpdateConflict(const std::string &testname, bool localWins);
|
||||
virtual void testUpdateLocalWins();
|
||||
virtual void testUpdateRemoteWins();
|
||||
|
||||
/**
|
||||
* implements testMaxMsg(), testLargeObject(), testLargeObjectEncoded()
|
||||
* using a sequence of items with varying sizes
|
||||
|
|
40
test/test.am
40
test/test.am
|
@ -15,11 +15,7 @@ dist_noinst_SCRIPTS += \
|
|||
test/log2html.py \
|
||||
test/run_src_client_test.sh
|
||||
|
||||
dist_noinst_DATA += \
|
||||
test/COPYING \
|
||||
test/Algorithm/Artistic \
|
||||
test/Algorithm/COPYING \
|
||||
test/Algorithm/README \
|
||||
test_testcases = \
|
||||
test/testcases/eds_event.ics \
|
||||
test/testcases/eds_event.ics.local \
|
||||
test/testcases/eds_task.ics \
|
||||
|
@ -34,6 +30,40 @@ dist_noinst_DATA += \
|
|||
test/testcases/local.png \
|
||||
test/testcases/templates/clients/phone/nokia/S40/7210c.ini \
|
||||
test/testcases/templates/clients/SyncEvolution.ini \
|
||||
test/testcases/synctests/apple/eds_contact/testUpload/local-synced \
|
||||
test/testcases/synctests/apple/eds_contact/testUpload/local \
|
||||
test/testcases/synctests/apple/eds_contact/testUpload/modify-remote \
|
||||
test/testcases/synctests/apple/eds_contact/testUpload/remote \
|
||||
test/testcases/synctests/apple/eds_contact/testDownload/modify-local \
|
||||
test/testcases/synctests/apple/eds_contact/testDownload/local \
|
||||
test/testcases/synctests/apple/eds_contact/testDownload/remote \
|
||||
test/testcases/synctests/apple/eds_contact/testDownload/remote-synced \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpload/local-synced \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpload/local \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpload/modify-remote \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpload/remote \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testDownload/modify-local \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testDownload/local \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testDownload/remote \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testDownload/remote-synced \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateRemoteWins/modify-local \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateRemoteWins/local-synced \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateRemoteWins/local \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateRemoteWins/modify-remote \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateRemoteWins/remote-synced \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateLocalWins/modify-local \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateLocalWins/local-synced \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateLocalWins/local \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateLocalWins/modify-remote \
|
||||
test/testcases/synctests/googlecontacts/eds_contact/testUpdateLocalWins/remote-synced \
|
||||
$(NOP)
|
||||
|
||||
dist_noinst_DATA += \
|
||||
$(test_testcases) \
|
||||
test/COPYING \
|
||||
test/Algorithm/Artistic \
|
||||
test/Algorithm/COPYING \
|
||||
test/Algorithm/README \
|
||||
test/syncevo-http-server-logging.conf \
|
||||
$(wildcard test/testcases/*.patch)
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN:simple contact
|
||||
N:contact;simple;;;
|
||||
UID:foo-bar-1234
|
||||
X-EVOLUTION-FILE-AS:contact\, simple
|
||||
END:VCARD
|
|
@ -0,0 +1,20 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
IN=$1
|
||||
OUT=$2
|
||||
|
||||
rm -rf $OUT
|
||||
mkdir $OUT
|
||||
[ -d $IN ] || (echo >&2 "$IN not a directory"; false)
|
||||
|
||||
for i in $IN/*; do
|
||||
perl -e '$_ = join("", <>); if (1) {' \
|
||||
-e 's/END:VCARD/EMAIL:new local email\r\nEND:VCARD/;' \
|
||||
-e 'print;' \
|
||||
-e '}' \
|
||||
<$i >$OUT/$(basename $i)
|
||||
done
|
||||
|
||||
find $OUT -size 0 -delete
|
|
@ -0,0 +1,6 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN:simple contact
|
||||
N:contact;simple;;;
|
||||
UID:foo-bar-1234
|
||||
END:VCARD
|
|
@ -0,0 +1,8 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN:simple contact
|
||||
N:contact;simple;;;
|
||||
UID:foo-bar-1234
|
||||
EMAIL:new local email
|
||||
X-EVOLUTION-FILE-AS:contact\, simple
|
||||
END:VCARD
|
|
@ -0,0 +1,7 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN:simple contact
|
||||
N:contact;simple;;;
|
||||
UID:foo-bar-1234
|
||||
X-EVOLUTION-FILE-AS:contact\, simple
|
||||
END:VCARD
|
|
@ -0,0 +1,8 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN:simple contact
|
||||
N:contact;simple;;;
|
||||
UID:foo-bar-1234
|
||||
EMAIL:new remote email
|
||||
X-EVOLUTION-FILE-AS:contact\, simple
|
||||
END:VCARD
|
|
@ -0,0 +1,20 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
IN=$1
|
||||
OUT=$2
|
||||
|
||||
rm -rf $OUT
|
||||
mkdir $OUT
|
||||
[ -d $IN ] || (echo >&2 "$IN not a directory"; false)
|
||||
|
||||
for i in $IN/*; do
|
||||
perl -e '$_ = join("", <>); if (1) {' \
|
||||
-e 's/END:VCARD/EMAIL:new remote email\r\nEND:VCARD/;' \
|
||||
-e 'print;' \
|
||||
-e '}' \
|
||||
<$i >$OUT/$(basename $i)
|
||||
done
|
||||
|
||||
find $OUT -size 0 -delete
|
|
@ -0,0 +1,7 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN:simple contact
|
||||
N:contact;simple;;;
|
||||
UID:foo-bar-1234
|
||||
X-EVOLUTION-FILE-AS:contact\, simple
|
||||
END:VCARD
|
|
@ -0,0 +1 @@
|
|||
../../../../eds_contact.vcf
|
|
@ -0,0 +1 @@
|
|||
../../../../eds_contact.vcf
|
|
@ -0,0 +1 @@
|
|||
../../../../eds_event.ics
|
|
@ -0,0 +1 @@
|
|||
../../../../eds_event.ics
|
|
@ -0,0 +1,16 @@
|
|||
The test data was adapted to cope with some bugs:
|
||||
|
||||
- An X-ABLabel for an ADR gets generated by Google CardDAV,
|
||||
but when sending it back, the connection to ADR gets ignored
|
||||
and the X-ABLabel becomes a stand-alone property.
|
||||
Reported to Google, bug gets tracked.
|
||||
|
||||
- The double \\ at the end of the custom-label6 property gets
|
||||
encoded as a single backslash by the Google encoder, in
|
||||
contrast to the backslash in the middle of the custom-label5.
|
||||
This is a minor bug, not reported.
|
||||
|
||||
The libsynthesis parser then discards the backslash and
|
||||
finally the Google parser strips the trailing white space.
|
||||
|
||||
- Google swallows one space before the \n in custom-label5.
|
|
@ -0,0 +1,73 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
UID:pas-id-5363657E0000002F
|
||||
PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.4.0.47//EN
|
||||
REV:20140502T092918Z
|
||||
N:Doe;John;1;Mr.;Sr.
|
||||
FN:Mr. John 1 Doe Sr.
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
NICKNAME:Johnny
|
||||
TITLE:tester
|
||||
ORG:at company;;;
|
||||
TEL;TYPE=WORK,VOICE:business 1
|
||||
TEL;TYPE=CELL:mobile
|
||||
TEL;TYPE=HOME,VOICE:home
|
||||
TEL:main
|
||||
TEL;TYPE=WORK,FAX:work fax
|
||||
TEL;TYPE=HOME,FAX:home fax
|
||||
TEL;TYPE=PAGER:pager
|
||||
TEL;X-ABLabel="Google Voice":google voice
|
||||
TEL;X-ABLabel="custom-label4":custom
|
||||
EMAIL;TYPE=HOME:john.doe@home.com
|
||||
EMAIL;TYPE=WORK:doe@work.com
|
||||
EMAIL;X-ABLabel="custom-label2":john@custom.com
|
||||
URL;X-ABLabel=Profile:http://profile.com
|
||||
URL;X-ABLabel=Blog:http://blog.com
|
||||
URL;X-ABLabel=HomePage:http://homepage.com
|
||||
URL;X-ABLabel=Work:http://company.com
|
||||
URL;X-ABLabel="Custom-label6 Backslash ":http://custom.com
|
||||
X-EVOLUTION-MANAGER:manager
|
||||
X-EVOLUTION-ASSISTANT:assistant
|
||||
X-ABRELATEDNAMES;X-ABLabel=Child:child
|
||||
X-ABRELATEDNAMES;X-ABLabel=Mother:mother
|
||||
X-ABRELATEDNAMES;X-ABLabel=Father:father
|
||||
X-ABRELATEDNAMES;X-ABLabel=Parent:parent
|
||||
X-ABRELATEDNAMES;X-ABLabel=Brother:brother
|
||||
X-ABRELATEDNAMES;X-ABLabel=Sister:sister
|
||||
X-ABRELATEDNAMES;X-ABLabel=Friend:friend
|
||||
X-ABRELATEDNAMES;X-ABLabel=relative:relative
|
||||
X-ABRELATEDNAMES;X-ABLabel="referred-by-label":referred-by
|
||||
X-ABRELATEDNAMES;X-ABLabel=Partner:partner
|
||||
X-ABRELATEDNAMES;X-ABLabel="domestic-partner-label":domestic partner
|
||||
X-ABRELATEDNAMES;X-ABLabel="custom-label5 Umlaut ä Semicolon ; Backslash \ newline tab end of label":custom relationship
|
||||
X-EVOLUTION-SPOUSE:spouse
|
||||
X-EVOLUTION-ANNIVERSARY:19710101
|
||||
X-ABDATE;X-ABLabel="custom-label3":20000201
|
||||
IMPP;X-SERVICE-TYPE=GoogleTalk:xmpp:google%20talk
|
||||
IMPP;X-SERVICE-TYPE=QQ:x-apple:QQ
|
||||
IMPP;X-SERVICE-TYPE="Chat-label":x-apple:custom%20chat
|
||||
X-AIM:aim
|
||||
X-ICQ:ICQ
|
||||
X-YAHOO:yahoo
|
||||
X-SKYPE:skype
|
||||
X-MSN:MSN
|
||||
X-JABBER:Jabber
|
||||
X-MOZILLA-HTML:FALSE
|
||||
ADR;TYPE=HOME:PO;neighborhood;home address\n;City;State;ZIP;Country
|
||||
ADR;TYPE=WORK:;;work address;;;;
|
||||
ADR:;;custom address;;;;
|
||||
BDAY:19701230
|
||||
NOTE:A test contact.
|
||||
PHOTO;TYPE=png;ENCODING=b:iVBORw0KGgoAAAANSUhEUgAAACQAAAAXCAYAAABj7u2bAAAAB
|
||||
mJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gEICjgdiWkBOQA
|
||||
AAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAABaElEQVRIx+3Wu0tcU
|
||||
RAG8F98gRKTYGORRqwksJV/QOqFFIFgKgsRYbHV1larDQQCKQxpUscyhUmXJuCSNpYWPsAU6wP
|
||||
xHW6aWbgsu+ve3RUs7geHc+fON3O+M4c5HHLkyHG/eISkg5heIGmUr++hVWigyY6THlejbWSt0
|
||||
Bv8QBXX2MF7jKU4IyjjJ45xg31sYKZuw7Xv9Gh6vvXO9QbBtbGNJ8Ert+AlTURkFjQX9g5e4yk
|
||||
GUcBm+FaDexx2MUQOYhIL2Lpj09oV9CvsQgPuePj+hP037BL6M6yRSdDZHWVOcBHcEv7FvyN8x
|
||||
xqmeynovA1Baf4UVvANhyn/Uq8E/Q57ssNufhvx1QZrDHfS9p9i3sQsnscdNowXWEQlOBXMYyI
|
||||
4j3EavqFUzpOYl4OTqUJ9+NzmkbXyb6Ryfumm7Wso4it2cYXL6K6PeBmcV8E5iEvxPDjv8CyVa
|
||||
xQfsIfbqGIlf17k6Bb/Ae0cnahfg6KuAAAAAElFTkSuQmCC
|
||||
X-PHONETIC-FIRST-NAME:John
|
||||
X-PHONETIC-LAST-NAME:Doe
|
||||
END:VCARD
|
|
@ -0,0 +1,20 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
IN=$1
|
||||
OUT=$2
|
||||
|
||||
rm -rf $OUT
|
||||
mkdir $OUT
|
||||
[ -d $IN ] || (echo >&2 "$IN not a directory"; false)
|
||||
|
||||
for i in $IN/*; do
|
||||
perl -e '$_ = join("", <>); if (1) {' \
|
||||
-e 's/END:VCARD/EMAIL:new local email\r\nEND:VCARD/;' \
|
||||
-e 'print;' \
|
||||
-e '}' \
|
||||
<$i >$OUT/$(basename $i)
|
||||
done
|
||||
|
||||
find $OUT -size 0 -delete
|
|
@ -0,0 +1,106 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;1;Mr.;Sr.
|
||||
FN:Mr. John 1 Doe Sr.
|
||||
NICKNAME:Johnny
|
||||
TITLE:tester
|
||||
ORG:at company
|
||||
REV:2014-04-11T08:43:42Z
|
||||
UID:6f354d698b7ccd22
|
||||
BDAY;VALUE=DATE:1970-12-30
|
||||
ADR;TYPE=HOME:PO;neighborhood;home address\n;City;State;ZIP;Country
|
||||
ADR;TYPE=WORK:;;work address;;;;
|
||||
ADR:;;custom address;;;;
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=CELL:mobile
|
||||
TEL;TYPE=HOME:home
|
||||
TEL:main
|
||||
TEL;TYPE=FAX,WORK:work fax
|
||||
TEL;TYPE=FAX,HOME:home fax
|
||||
item14.TEL:google voice
|
||||
TEL;TYPE=PAGER:pager
|
||||
item15.TEL:custom
|
||||
EMAIL;TYPE=HOME,PREF:john.doe@home.com
|
||||
EMAIL;TYPE=WORK:doe@work.com
|
||||
item2.EMAIL:john@custom.com
|
||||
NOTE:A test contact.
|
||||
PHOTO;ENCODING=b;TYPE=PNG:iVBORw0KGgoAAAANSUhEUgAAACQAAAAXCAYAAABj7u2bAAAAB
|
||||
mJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gEICjgdiWkBO
|
||||
QAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAABaElEQVRIx+3Wu
|
||||
0tcURAG8F98gRKTYGORRqwksJV/QOqFFIFgKgsRYbHV1larDQQCKQxpUscyhUmXJuCSNpYWP
|
||||
sAU6wPxHW6aWbgsu+ve3RUs7geHc+fON3O+M4c5HHLkyHG/eISkg5heIGmUr++hVWigyY6TH
|
||||
lejbWSt0Bv8QBXX2MF7jKU4IyjjJ45xg31sYKZuw7Xv9Gh6vvXO9QbBtbGNJ8Ert+AlTURkF
|
||||
jQX9g5e4ykGUcBm+FaDexx2MUQOYhIL2Lpj09oV9CvsQgPuePj+hP037BL6M6yRSdDZHWVOc
|
||||
BHcEv7FvyN8xxqmeynovA1Baf4UVvANhyn/Uq8E/Q57ssNufhvx1QZrDHfS9p9i3sQsnscdN
|
||||
owXWEQlOBXMYyI4j3EavqFUzpOYl4OTqUJ9+NzmkbXyb6Ryfumm7Wso4it2cYXL6K6PeBmcV
|
||||
8E5iEvxPDjv8CyVaxQfsIfbqGIlf17k6Bb/Ae0cnahfg6KuAAAAAElFTkSuQmCC
|
||||
item5.IMPP;X-SERVICE-TYPE=GoogleTalk:xmpp:google%20talk
|
||||
item6.IMPP;X-SERVICE-TYPE=AIM:aim:aim
|
||||
item7.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:yahoo
|
||||
item8.IMPP;X-SERVICE-TYPE=Skype:skype:skype
|
||||
item9.IMPP;X-SERVICE-TYPE=QQ:x-apple:QQ
|
||||
item10.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN
|
||||
item11.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ
|
||||
item12.IMPP;X-SERVICE-TYPE=Jabber:xmpp:Jabber
|
||||
item13.IMPP;X-SERVICE-TYPE=chat-label:x-apple:custom%20chat
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-MOZILLA-HTML:FALSE
|
||||
X-PHONETIC-FIRST-NAME:John
|
||||
X-PHONETIC-LAST-NAME:Doe
|
||||
item2.X-ABLabel:custom-label2
|
||||
item3.X-ABDATE:1971-01-01
|
||||
item3.X-ABLabel:Anniversary
|
||||
item4.X-ABDATE:2000-02-01
|
||||
item4.X-ABLabel:custom-label3
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABLabel:Other
|
||||
item12.X-ABLabel:Other
|
||||
item13.X-ABLabel:Other
|
||||
item14.X-ABLabel:Google Voice
|
||||
item15.X-ABLabel:custom-label4
|
||||
item16.X-ABRELATEDNAMES:spouse
|
||||
item16.X-ABLabel:Spouse
|
||||
item17.X-ABRELATEDNAMES:child
|
||||
item17.X-ABLabel:Child
|
||||
item18.X-ABRELATEDNAMES:mother
|
||||
item18.X-ABLabel:Mother
|
||||
item19.X-ABRELATEDNAMES:father
|
||||
item19.X-ABLabel:Father
|
||||
item20.X-ABRELATEDNAMES:parent
|
||||
item20.X-ABLabel:Parent
|
||||
item21.X-ABRELATEDNAMES:brother
|
||||
item21.X-ABLabel:Brother
|
||||
item22.X-ABRELATEDNAMES:sister
|
||||
item22.X-ABLabel:Sister
|
||||
item23.X-ABRELATEDNAMES:friend
|
||||
item23.X-ABLabel:Friend
|
||||
item24.X-ABRELATEDNAMES:relative
|
||||
item24.X-ABLabel:relative
|
||||
item25.X-ABRELATEDNAMES:manager
|
||||
item25.X-ABLabel:Manager
|
||||
item26.X-ABRELATEDNAMES:assistant
|
||||
item26.X-ABLabel:Assistant
|
||||
item27.X-ABRELATEDNAMES:referred-by
|
||||
item27.X-ABLabel:referred-by-label
|
||||
item28.X-ABRELATEDNAMES:partner
|
||||
item28.X-ABLabel:Partner
|
||||
item29.X-ABRELATEDNAMES:domestic partner
|
||||
item29.X-ABLabel:domestic-partner-label
|
||||
item30.X-ABRELATEDNAMES:custom relationship
|
||||
item30.X-ABLabel:custom-label5\nUmlaut ä\nSemicolon \; Backslash \\ newline \n tab end of label
|
||||
item31.URL:http\://profile.com
|
||||
item31.X-ABLabel:Profile
|
||||
item32.URL:http\://blog.com
|
||||
item32.X-ABLabel:Blog
|
||||
item33.URL:http\://homepage.com
|
||||
item33.X-ABLabel:HomePage
|
||||
item34.URL:http\://company.com
|
||||
item34.X-ABLabel:Work
|
||||
item35.URL:http\://custom.com
|
||||
item35.X-ABLabel:Custom-label6 Backslash \\
|
||||
END:VCARD
|
|
@ -0,0 +1,107 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;1;Mr.;Sr.
|
||||
FN:Mr. John 1 Doe Sr.
|
||||
NICKNAME:Johnny
|
||||
TITLE:tester
|
||||
ORG:at company
|
||||
REV:2014-04-11T08:43:42Z
|
||||
UID:6f354d698b7ccd22
|
||||
BDAY;VALUE=DATE:19701230
|
||||
ADR;TYPE=HOME:PO;neighborhood;home address\n;City;State;ZIP;Country
|
||||
ADR;TYPE=WORK:;;work address;;;;
|
||||
ADR:;;custom address;;;;
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=CELL:mobile
|
||||
TEL;TYPE=HOME:home
|
||||
TEL:main
|
||||
TEL;TYPE=FAX,WORK:work fax
|
||||
TEL;TYPE=FAX,HOME:home fax
|
||||
item14.TEL:google voice
|
||||
TEL;TYPE=PAGER:pager
|
||||
item15.TEL:custom
|
||||
EMAIL;TYPE=HOME,PREF:john.doe@home.com
|
||||
EMAIL;TYPE=WORK:doe@work.com
|
||||
item2.EMAIL:john@custom.com
|
||||
EMAIL:new local email
|
||||
NOTE:A test contact.
|
||||
PHOTO;ENCODING=b;TYPE=PNG:iVBORw0KGgoAAAANSUhEUgAAACQAAAAXCAYAAABj7u2bAAAAB
|
||||
mJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gEICjgdiWkBO
|
||||
QAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAABaElEQVRIx+3Wu
|
||||
0tcURAG8F98gRKTYGORRqwksJV/QOqFFIFgKgsRYbHV1larDQQCKQxpUscyhUmXJuCSNpYWP
|
||||
sAU6wPxHW6aWbgsu+ve3RUs7geHc+fON3O+M4c5HHLkyHG/eISkg5heIGmUr++hVWigyY6TH
|
||||
lejbWSt0Bv8QBXX2MF7jKU4IyjjJ45xg31sYKZuw7Xv9Gh6vvXO9QbBtbGNJ8Ert+AlTURkF
|
||||
jQX9g5e4ykGUcBm+FaDexx2MUQOYhIL2Lpj09oV9CvsQgPuePj+hP037BL6M6yRSdDZHWVOc
|
||||
BHcEv7FvyN8xxqmeynovA1Baf4UVvANhyn/Uq8E/Q57ssNufhvx1QZrDHfS9p9i3sQsnscdN
|
||||
owXWEQlOBXMYyI4j3EavqFUzpOYl4OTqUJ9+NzmkbXyb6Ryfumm7Wso4it2cYXL6K6PeBmcV
|
||||
8E5iEvxPDjv8CyVaxQfsIfbqGIlf17k6Bb/Ae0cnahfg6KuAAAAAElFTkSuQmCC
|
||||
item5.IMPP;X-SERVICE-TYPE=GoogleTalk:xmpp:google%20talk
|
||||
item6.IMPP;X-SERVICE-TYPE=AIM:aim:aim
|
||||
item7.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:yahoo
|
||||
item8.IMPP;X-SERVICE-TYPE=Skype:skype:skype
|
||||
item9.IMPP;X-SERVICE-TYPE=QQ:x-apple:QQ
|
||||
item10.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN
|
||||
item11.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ
|
||||
item12.IMPP;X-SERVICE-TYPE=Jabber:xmpp:Jabber
|
||||
item13.IMPP;X-SERVICE-TYPE=Chat-label:x-apple:custom%20chat
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-MOZILLA-HTML:FALSE
|
||||
X-PHONETIC-FIRST-NAME:John
|
||||
X-PHONETIC-LAST-NAME:Doe
|
||||
item2.X-ABLabel:custom-label2
|
||||
item3.X-ABDATE:1971-01-01
|
||||
item3.X-ABLabel:Anniversary
|
||||
item4.X-ABDATE:20000201
|
||||
item4.X-ABLabel:custom-label3
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABLabel:Other
|
||||
item12.X-ABLabel:Other
|
||||
item13.X-ABLabel:Other
|
||||
item14.X-ABLabel:Google Voice
|
||||
item15.X-ABLabel:custom-label4
|
||||
item16.X-ABRELATEDNAMES:spouse
|
||||
item16.X-ABLabel:Spouse
|
||||
item17.X-ABRELATEDNAMES:child
|
||||
item17.X-ABLabel:Child
|
||||
item18.X-ABRELATEDNAMES:mother
|
||||
item18.X-ABLabel:Mother
|
||||
item19.X-ABRELATEDNAMES:father
|
||||
item19.X-ABLabel:Father
|
||||
item20.X-ABRELATEDNAMES:parent
|
||||
item20.X-ABLabel:Parent
|
||||
item21.X-ABRELATEDNAMES:brother
|
||||
item21.X-ABLabel:Brother
|
||||
item22.X-ABRELATEDNAMES:sister
|
||||
item22.X-ABLabel:Sister
|
||||
item23.X-ABRELATEDNAMES:friend
|
||||
item23.X-ABLabel:Friend
|
||||
item24.X-ABRELATEDNAMES:relative
|
||||
item24.X-ABLabel:relative
|
||||
item25.X-ABRELATEDNAMES:manager
|
||||
item25.X-ABLabel:Manager
|
||||
item26.X-ABRELATEDNAMES:assistant
|
||||
item26.X-ABLabel:Assistant
|
||||
item27.X-ABRELATEDNAMES:referred-by
|
||||
item27.X-ABLabel:referred-by-label
|
||||
item28.X-ABRELATEDNAMES:partner
|
||||
item28.X-ABLabel:Partner
|
||||
item29.X-ABRELATEDNAMES:domestic partner
|
||||
item29.X-ABLabel:domestic-partner-label
|
||||
item30.X-ABRELATEDNAMES:custom relationship
|
||||
item30.X-ABLabel:custom-label5 Umlaut ä Semicolon \; Backslash \\ newline tab end of label
|
||||
item31.URL:http\://profile.com
|
||||
item31.X-ABLabel:Profile
|
||||
item32.URL:http\://blog.com
|
||||
item32.X-ABLabel:Blog
|
||||
item33.URL:http\://homepage.com
|
||||
item33.X-ABLabel:HomePage
|
||||
item34.URL:http\://company.com
|
||||
item34.X-ABLabel:Work
|
||||
item35.URL:http\://custom.com
|
||||
item35.X-ABLabel:Custom-label6 Backslash
|
||||
END:VCARD
|
|
@ -0,0 +1,201 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 1 Doe
|
||||
N:Doe;John;1;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000001
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 8
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 2 Doe
|
||||
N:Doe;John;2;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000002
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 8
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 3 Doe
|
||||
N:Doe;John;3;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000003
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 8
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
END:VCARD
|
||||
|
|
@ -0,0 +1,241 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
BDAY:2006-01-08
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 1 Doe
|
||||
N:Doe;John;1;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000001
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
X-AIM:AIM JOHN
|
||||
X-YAHOO:YAHOO JDOE
|
||||
X-ICQ:ICQ JD
|
||||
X-GROUPWISE:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
TEL;TYPE=HOME:new remote tel 1
|
||||
TEL;X-ABLabel=new-remote-tel-label:new remote tel 2
|
||||
EMAIL;X-ABLabel=new-remote-email-label:new remote email 1
|
||||
EMAIL;TYPE=HOME:new remote email 2
|
||||
X-ABDATE;X-ABLabel=date-label-2014:2014-01-01
|
||||
URL;X-ABLabel=example-url-label:http://www.example.com/foobar
|
||||
X-AIM:new-aim
|
||||
X-GADUGADU:new-gadugadu
|
||||
X-GROUPWISE:new-groupwise
|
||||
X-ICQ:new-icq
|
||||
X-JABBER:new-jabber
|
||||
X-MSN:new-MSN
|
||||
X-YAHOO:new-yahoo
|
||||
X-SKYPE:new-skype
|
||||
X-SIP:new-sip
|
||||
IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc
|
||||
X-ABRELATEDNAMES;X-ABLabel=cousin:new person
|
||||
ADR;TYPE=WORK:box;;street;town;county;12346;country
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
BDAY:2006-01-01
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 2 Doe
|
||||
N:Doe;John;2;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000002
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
EMAIL:new local email
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 80
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
TEL;TYPE=HOME:new remote tel 1
|
||||
TEL;X-ABLabel=new-remote-tel-label:new remote tel 2
|
||||
EMAIL;X-ABLabel=new-remote-email-label:new remote email 1
|
||||
EMAIL;TYPE=HOME:new remote email 2
|
||||
X-ABDATE;X-ABLabel=date-label-2014:2014-01-01
|
||||
URL;X-ABLabel=example-url-label:http://www.example.com/foobar
|
||||
X-AIM:new-aim
|
||||
X-GADUGADU:new-gadugadu
|
||||
X-GROUPWISE:new-groupwise
|
||||
X-ICQ:new-icq
|
||||
X-JABBER:new-jabber
|
||||
X-MSN:new-MSN
|
||||
X-YAHOO:new-yahoo
|
||||
X-SKYPE:new-skype
|
||||
X-SIP:new-sip
|
||||
IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc
|
||||
X-ABRELATEDNAMES;X-ABLabel=cousin:new person
|
||||
ADR;TYPE=WORK:box;;street;town;county;12346;country
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 3 Doe
|
||||
N:Doe;John;3;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000003
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
EMAIL:new local email
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 80
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
BDAY:2006-01-01
|
||||
END:VCARD
|
|
@ -0,0 +1,23 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
IN=$1
|
||||
OUT=$2
|
||||
|
||||
rm -rf $OUT
|
||||
mkdir $OUT
|
||||
[ -d $IN ] || (echo >&2 "$IN not a directory"; false)
|
||||
|
||||
for i in $IN/*; do
|
||||
# Modify second and third contact by changing a field.
|
||||
# The second contact will also get modified locally.
|
||||
perl -e '$_ = join("", <>); if (/John [23] Doe/) {' \
|
||||
-e 's/primary 8/primary 80/;' \
|
||||
-e 's/END:VCARD/BDAY:2006-01-01\r\nEMAIL:new local email\r\nEND:VCARD/;' \
|
||||
-e 'print;' \
|
||||
-e '}' \
|
||||
<$i >$OUT/$(basename $i)
|
||||
done
|
||||
|
||||
find $OUT -size 0 -delete
|
|
@ -0,0 +1,64 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
IN=$1
|
||||
OUT=$2
|
||||
|
||||
rm -rf $OUT
|
||||
mkdir $OUT
|
||||
[ -d $IN ] || (echo >&2 "$IN not a directory"; false)
|
||||
|
||||
# TODO: X-SERVICE-TYPE, one for each kind, etc.
|
||||
|
||||
for i in $IN/*; do
|
||||
# Modify first and second contact by changing a field.
|
||||
# The second contact will also get modified locally.
|
||||
# We add a new BDAY property here, too, that will be added to
|
||||
# the local side during the merge by the engine, and
|
||||
# new array entries, that need special handling by the merge script.
|
||||
#
|
||||
# Each -e generates a line break, so no \n is necessary inside the expanded vCard.
|
||||
perl -e '$_ = join("", <>); if (/John [12] Doe/) {' \
|
||||
-e 's/primary 8/primary 80/;' \
|
||||
-e 's!END:VCARD!BDAY:2006-01-08\r' \
|
||||
-e 'TEL;TYPE=HOME:new remote tel 1\r' \
|
||||
-e 'tel2.TEL:new remote tel 2\r' \
|
||||
-e 'tel2.X-ABLabel:new-remote-tel-label\r' \
|
||||
-e 'email1.EMAIL:new remote email 1\r' \
|
||||
-e 'email1.X-ABLabel:new-remote-email-label\r' \
|
||||
-e 'EMAIL;TYPE=HOME:new remote email 2\r' \
|
||||
-e 'date1.X-ABDATE:2014-01-01\r' \
|
||||
-e 'date1.X-ABLabel:date-label-2014\r' \
|
||||
-e 'url1.URL:http\\://www.example.com/foobar\r' \
|
||||
-e 'url1.X-ABLabel:example-url-label\r' \
|
||||
-e 'impp1.IMPP;X-SERVICE-TYPE=AIM:aim:new-aim\r' \
|
||||
-e 'impp1.X-ABLabel:Other\r' \
|
||||
-e 'impp2.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:new-gadugadu\r' \
|
||||
-e 'impp2.X-ABLabel:Other\r' \
|
||||
-e 'impp3.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:new-groupwise\r' \
|
||||
-e 'impp3.X-ABLabel:Other\r' \
|
||||
-e 'impp4.IMPP;X-SERVICE-TYPE=ICQ:aim:new-icq\r' \
|
||||
-e 'impp4.X-ABLabel:Other\r' \
|
||||
-e 'impp5.IMPP;X-SERVICE-TYPE=Jabber:xmpp:new-jabber\r' \
|
||||
-e 'impp5.X-ABLabel:Other\r' \
|
||||
-e 'impp6.IMPP;X-SERVICE-TYPE=MSN:msnim:new-MSN\r' \
|
||||
-e 'impp6.X-ABLabel:Other\r' \
|
||||
-e 'impp7.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:new-yahoo\r' \
|
||||
-e 'impp7.X-ABLabel:Other\r' \
|
||||
-e 'impp8.IMPP;X-SERVICE-TYPE=Skype:skype:new-skype\r' \
|
||||
-e 'impp8.X-ABLabel:Other\r' \
|
||||
-e 'impp9.IMPP;X-SERVICE-TYPE=Sip:x-apple:new-sip\r' \
|
||||
-e 'impp9.X-ABLabel:Other\r' \
|
||||
-e 'impp10.IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc\r' \
|
||||
-e 'impp10.X-ABLabel:Other\r' \
|
||||
-e 'name1.X-ABRELATEDNAMES:new person\r' \
|
||||
-e 'name1.X-ABLabel:cousin\r' \
|
||||
-e 'ADR;TYPE=WORK:box;;street;town;county;12346;country\r' \
|
||||
-e 'END:VCARD!;' \
|
||||
-e 'print;' \
|
||||
-e '}' \
|
||||
<$i >$OUT/$(basename $i)
|
||||
done
|
||||
|
||||
find $OUT -size 0 -delete
|
|
@ -0,0 +1,301 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;1;;
|
||||
FN:John 1 Doe
|
||||
NICKNAME:user1
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
REV:2014-05-07T11:26:32Z
|
||||
UID:33a304690a6719e0
|
||||
BDAY;VALUE=DATE:2006-01-08
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
ADR;TYPE=OTHER:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;Ne
|
||||
w Testonia
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=HOME:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=FAX,WORK:businessfax 4
|
||||
TEL;TYPE=FAX,HOME:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL:john.doe@other.world
|
||||
EMAIL:john.doe@yet.another.world
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
PHOTO;ENCODING=B:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAA
|
||||
D//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJD
|
||||
BEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQR
|
||||
FB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQg
|
||||
AFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgEBf/EADIQAAECBQMCAwQLAA
|
||||
AAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/xAAUAQEAAAAAAAAAAAAAAAAAA
|
||||
AAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AuX6UehP45/aXv9MTPTLVKxNS
|
||||
vMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2VfmTR/wCaKlu6+blu/Ui72zxWtUmmUOr
|
||||
TaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2umhWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHK
|
||||
lJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJYV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7
|
||||
N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUkGZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICw
|
||||
L/sqlXp7v+aOHsnyGttq218MtKd8+Ru2JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2
|
||||
qqZl0UjAMwYKScfPAJ+cIQHHP0DthVFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28d
|
||||
znqo+hdksbQuS3Hs6tVtNzdM1Z/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQL
|
||||
oWkISOAkBKAABCEID//2Q==
|
||||
item2.IMPP;X-SERVICE-TYPE=AIM:aim:AIM%20JOHN
|
||||
item3.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:GADUGADU%20DOE
|
||||
item4.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:GROUPWISE%20DOE
|
||||
item5.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ%20JD
|
||||
item6.IMPP;X-SERVICE-TYPE=Jabber:xmpp:JABBER%20DOE
|
||||
item7.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN%20DOE
|
||||
item8.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:YAHOO%20JDOE
|
||||
item9.IMPP;X-SERVICE-TYPE=Skype:skype:SKYPE%20DOE
|
||||
item10.IMPP;X-SERVICE-TYPE=Sip:x-apple:SIP%20DOE
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
item1.X-ABDATE:2006-01-09
|
||||
item1.X-ABLabel:Anniversary
|
||||
item2.X-ABLabel:Other
|
||||
item3.X-ABLabel:Other
|
||||
item4.X-ABLabel:Other
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABRELATEDNAMES:John Doe Junior
|
||||
item11.X-ABLabel:Assistant
|
||||
item12.X-ABRELATEDNAMES:John Doe Senior
|
||||
item12.X-ABLabel:Manager
|
||||
item13.X-ABRELATEDNAMES:Joan Doe
|
||||
item13.X-ABLabel:Spouse
|
||||
item14.URL:http\://john.doe.com
|
||||
item14.X-ABLabel:Other
|
||||
TEL;TYPE=HOME:new remote tel 1
|
||||
tel2.TEL:new remote tel 2
|
||||
tel2.X-ABLabel:new-remote-tel-label
|
||||
email1.EMAIL:new remote email 1
|
||||
email1.X-ABLabel:new-remote-email-label
|
||||
EMAIL;TYPE=HOME:new remote email 2
|
||||
date1.X-ABDATE:2014-01-01
|
||||
date1.X-ABLabel:date-label-2014
|
||||
url1.URL:http\://www.example.com/foobar
|
||||
url1.X-ABLabel:example-url-label
|
||||
impp1.IMPP;X-SERVICE-TYPE=AIM:aim:new-aim
|
||||
impp1.X-ABLabel:Other
|
||||
impp2.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:new-gadugadu
|
||||
impp2.X-ABLabel:Other
|
||||
impp3.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:new-groupwise
|
||||
impp3.X-ABLabel:Other
|
||||
impp4.IMPP;X-SERVICE-TYPE=ICQ:aim:new-icq
|
||||
impp4.X-ABLabel:Other
|
||||
impp5.IMPP;X-SERVICE-TYPE=Jabber:xmpp:new-jabber
|
||||
impp5.X-ABLabel:Other
|
||||
impp6.IMPP;X-SERVICE-TYPE=MSN:msnim:new-MSN
|
||||
impp6.X-ABLabel:Other
|
||||
impp7.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:new-yahoo
|
||||
impp7.X-ABLabel:Other
|
||||
impp8.IMPP;X-SERVICE-TYPE=Skype:skype:new-skype
|
||||
impp8.X-ABLabel:Other
|
||||
impp9.IMPP;X-SERVICE-TYPE=Sip:x-apple:new-sip
|
||||
impp9.X-ABLabel:Other
|
||||
impp10.IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc
|
||||
impp10.X-ABLabel:Other
|
||||
name1.X-ABRELATEDNAMES:new person
|
||||
name1.X-ABLabel:cousin
|
||||
ADR;TYPE=WORK:box;;street;town;county;12346;country
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;2;;
|
||||
FN:John 2 Doe
|
||||
NICKNAME:user1
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
REV:2014-05-07T11:26:32Z
|
||||
UID:33a304690a6719e0
|
||||
BDAY;VALUE=DATE:2006-01-01
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
ADR;TYPE=OTHER:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;Ne
|
||||
w Testonia
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=HOME:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=FAX,WORK:businessfax 4
|
||||
TEL;TYPE=FAX,HOME:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL:john.doe@other.world
|
||||
EMAIL:john.doe@yet.another.world
|
||||
EMAIL:new local email
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
PHOTO;ENCODING=B:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAA
|
||||
D//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJD
|
||||
BEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQR
|
||||
FB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQg
|
||||
AFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgEBf/EADIQAAECBQMCAwQLAA
|
||||
AAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/xAAUAQEAAAAAAAAAAAAAAAAAA
|
||||
AAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AuX6UehP45/aXv9MTPTLVKxNS
|
||||
vMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2VfmTR/wCaKlu6+blu/Ui72zxWtUmmUOr
|
||||
TaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2umhWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHK
|
||||
lJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJYV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7
|
||||
N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUkGZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICw
|
||||
L/sqlXp7v+aOHsnyGttq218MtKd8+Ru2JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2
|
||||
qqZl0UjAMwYKScfPAJ+cIQHHP0DthVFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28d
|
||||
znqo+hdksbQuS3Hs6tVtNzdM1Z/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQL
|
||||
oWkISOAkBKAABCEID//2Q==
|
||||
item2.IMPP;X-SERVICE-TYPE=AIM:aim:AIM%20JOHN
|
||||
item3.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:GADUGADU%20DOE
|
||||
item4.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:GROUPWISE%20DOE
|
||||
item5.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ%20JD
|
||||
item6.IMPP;X-SERVICE-TYPE=Jabber:xmpp:JABBER%20DOE
|
||||
item7.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN%20DOE
|
||||
item8.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:YAHOO%20JDOE
|
||||
item9.IMPP;X-SERVICE-TYPE=Skype:skype:SKYPE%20DOE
|
||||
item10.IMPP;X-SERVICE-TYPE=Sip:x-apple:SIP%20DOE
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
item1.X-ABDATE:2006-01-09
|
||||
item1.X-ABLabel:Anniversary
|
||||
item2.X-ABLabel:Other
|
||||
item3.X-ABLabel:Other
|
||||
item4.X-ABLabel:Other
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABRELATEDNAMES:John Doe Junior
|
||||
item11.X-ABLabel:Assistant
|
||||
item12.X-ABRELATEDNAMES:John Doe Senior
|
||||
item12.X-ABLabel:Manager
|
||||
item13.X-ABRELATEDNAMES:Joan Doe
|
||||
item13.X-ABLabel:Spouse
|
||||
item14.URL:http\://john.doe.com
|
||||
item14.X-ABLabel:Other
|
||||
TEL;TYPE=HOME:new remote tel 1
|
||||
tel2.TEL:new remote tel 2
|
||||
tel2.X-ABLabel:new-remote-tel-label
|
||||
email1.EMAIL:new remote email 1
|
||||
email1.X-ABLabel:new-remote-email-label
|
||||
EMAIL;TYPE=HOME:new remote email 2
|
||||
date1.X-ABDATE:2014-01-01
|
||||
date1.X-ABLabel:date-label-2014
|
||||
url1.URL:http\://www.example.com/foobar
|
||||
url1.X-ABLabel:example-url-label
|
||||
impp1.IMPP;X-SERVICE-TYPE=AIM:aim:new-aim
|
||||
impp1.X-ABLabel:Other
|
||||
impp2.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:new-gadugadu
|
||||
impp2.X-ABLabel:Other
|
||||
impp3.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:new-groupwise
|
||||
impp3.X-ABLabel:Other
|
||||
impp4.IMPP;X-SERVICE-TYPE=ICQ:aim:new-icq
|
||||
impp4.X-ABLabel:Other
|
||||
impp5.IMPP;X-SERVICE-TYPE=Jabber:xmpp:new-jabber
|
||||
impp5.X-ABLabel:Other
|
||||
impp6.IMPP;X-SERVICE-TYPE=MSN:msnim:new-MSN
|
||||
impp6.X-ABLabel:Other
|
||||
impp7.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:new-yahoo
|
||||
impp7.X-ABLabel:Other
|
||||
impp8.IMPP;X-SERVICE-TYPE=Skype:skype:new-skype
|
||||
impp8.X-ABLabel:Other
|
||||
impp9.IMPP;X-SERVICE-TYPE=Sip:x-apple:new-sip
|
||||
impp9.X-ABLabel:Other
|
||||
impp10.IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc
|
||||
impp10.X-ABLabel:Other
|
||||
name1.X-ABRELATEDNAMES:new person
|
||||
name1.X-ABLabel:cousin
|
||||
ADR;TYPE=WORK:box;;street;town;county;12346;country
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;3;;
|
||||
FN:John 3 Doe
|
||||
NICKNAME:user1
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
REV:2014-05-07T11:26:32Z
|
||||
UID:33a304690a6719e0
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
ADR;TYPE=OTHER:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;Ne
|
||||
w Testonia
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=HOME:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=FAX,WORK:businessfax 4
|
||||
TEL;TYPE=FAX,HOME:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL:john.doe@other.world
|
||||
EMAIL:john.doe@yet.another.world
|
||||
EMAIL:new local email
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
PHOTO;ENCODING=B:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAA
|
||||
D//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJD
|
||||
BEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQR
|
||||
FB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQg
|
||||
AFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgEBf/EADIQAAECBQMCAwQLAA
|
||||
AAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/xAAUAQEAAAAAAAAAAAAAAAAAA
|
||||
AAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AuX6UehP45/aXv9MTPTLVKxNS
|
||||
vMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2VfmTR/wCaKlu6+blu/Ui72zxWtUmmUOr
|
||||
TaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2umhWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHK
|
||||
lJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJYV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7
|
||||
N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUkGZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICw
|
||||
L/sqlXp7v+aOHsnyGttq218MtKd8+Ru2JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2
|
||||
qqZl0UjAMwYKScfPAJ+cIQHHP0DthVFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28d
|
||||
znqo+hdksbQuS3Hs6tVtNzdM1Z/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQL
|
||||
oWkISOAkBKAABCEID//2Q==
|
||||
item2.IMPP;X-SERVICE-TYPE=AIM:aim:AIM%20JOHN
|
||||
item3.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:GADUGADU%20DOE
|
||||
item4.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:GROUPWISE%20DOE
|
||||
item5.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ%20JD
|
||||
item6.IMPP;X-SERVICE-TYPE=Jabber:xmpp:JABBER%20DOE
|
||||
item7.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN%20DOE
|
||||
item8.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:YAHOO%20JDOE
|
||||
item9.IMPP;X-SERVICE-TYPE=Skype:skype:SKYPE%20DOE
|
||||
item10.IMPP;X-SERVICE-TYPE=Sip:x-apple:SIP%20DOE
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
item1.X-ABDATE:2006-01-09
|
||||
item1.X-ABLabel:Anniversary
|
||||
item2.X-ABLabel:Other
|
||||
item3.X-ABLabel:Other
|
||||
item4.X-ABLabel:Other
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABRELATEDNAMES:John Doe Junior
|
||||
item11.X-ABLabel:Assistant
|
||||
item12.X-ABRELATEDNAMES:John Doe Senior
|
||||
item12.X-ABLabel:Manager
|
||||
item13.X-ABRELATEDNAMES:Joan Doe
|
||||
item13.X-ABLabel:Spouse
|
||||
item14.URL:http\://john.doe.com
|
||||
item14.X-ABLabel:Other
|
||||
BDAY:2006-01-01
|
||||
END:VCARD
|
|
@ -0,0 +1,5 @@
|
|||
Because the remote side wins and replaces values for common
|
||||
properties, the X-EVOLUTION-UI-SLOT gets lost when receiving a remote
|
||||
update or having the remote side win an update conflict.
|
||||
|
||||
local-synced takes that into account.
|
|
@ -0,0 +1,201 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 1 Doe
|
||||
N:Doe;John;1;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000001
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 8
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 2 Doe
|
||||
N:Doe;John;2;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000002
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 8
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 3 Doe
|
||||
N:Doe;John;3;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000003
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 8
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
END:VCARD
|
||||
|
|
@ -0,0 +1,242 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
BDAY:2006-01-08
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 1 Doe
|
||||
N:Doe;John;1;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000001
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
X-AIM:AIM JOHN
|
||||
X-YAHOO:YAHOO JDOE
|
||||
X-ICQ:ICQ JD
|
||||
X-GROUPWISE:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
TEL;TYPE=HOME:new remote tel 1
|
||||
TEL;X-ABLabel=new-remote-tel-label:new remote tel 2
|
||||
EMAIL;X-ABLabel=new-remote-email-label:new remote email 1
|
||||
EMAIL;TYPE=HOME:new remote email 2
|
||||
X-ABDATE;X-ABLabel=date-label-2014:2014-01-01
|
||||
URL;X-ABLabel=example-url-label:http://www.example.com/foobar
|
||||
X-AIM:new-aim
|
||||
X-GADUGADU:new-gadugadu
|
||||
X-GROUPWISE:new-groupwise
|
||||
X-ICQ:new-icq
|
||||
X-JABBER:new-jabber
|
||||
X-MSN:new-MSN
|
||||
X-YAHOO:new-yahoo
|
||||
X-SKYPE:new-skype
|
||||
X-SIP:new-sip
|
||||
IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc
|
||||
X-ABRELATEDNAMES;X-ABLabel=cousin:new person
|
||||
ADR;TYPE=WORK:box;;street;town;county;12346;country
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
BDAY:2006-01-08
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 2 Doe
|
||||
N:Doe;John;2;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000002
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER:john.doe@yet.another.world
|
||||
EMAIL:new local email
|
||||
TEL;TYPE=work;TYPE=Voice:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
X-AIM:AIM JOHN
|
||||
X-YAHOO:YAHOO JDOE
|
||||
X-ICQ:ICQ JD
|
||||
X-GROUPWISE:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
TEL;TYPE=HOME:new remote tel 1
|
||||
TEL;X-ABLabel=new-remote-tel-label:new remote tel 2
|
||||
EMAIL;X-ABLabel=new-remote-email-label:new remote email 1
|
||||
EMAIL;TYPE=HOME:new remote email 2
|
||||
X-ABDATE;X-ABLabel=date-label-2014:2014-01-01
|
||||
URL;X-ABLabel=example-url-label:http://www.example.com/foobar
|
||||
X-AIM:new-aim
|
||||
X-GADUGADU:new-gadugadu
|
||||
X-GROUPWISE:new-groupwise
|
||||
X-ICQ:new-icq
|
||||
X-JABBER:new-jabber
|
||||
X-MSN:new-MSN
|
||||
X-YAHOO:new-yahoo
|
||||
X-SKYPE:new-skype
|
||||
X-SIP:new-sip
|
||||
IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc
|
||||
X-ABRELATEDNAMES;X-ABLabel=cousin:new person
|
||||
ADR;TYPE=WORK:box;;street;town;county;12346;country
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John 3 Doe
|
||||
N:Doe;John;3;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000003
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
EMAIL:new local email
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 80
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
BDAY:2006-01-01
|
||||
END:VCARD
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
IN=$1
|
||||
OUT=$2
|
||||
|
||||
rm -rf $OUT
|
||||
mkdir $OUT
|
||||
[ -d $IN ] || (echo >&2 "$IN not a directory"; false)
|
||||
|
||||
for i in $IN/*; do
|
||||
# Modify second and third contact by changing a field.
|
||||
# The second contact will also get modified locally.
|
||||
# Add a different BDAY than the peer.
|
||||
perl -e '$_ = join("", <>); if (/John [23] Doe/) {' \
|
||||
-e 's/primary 8/primary 80/;' \
|
||||
-e 's/END:VCARD/BDAY:2006-01-01\r\nEMAIL:new local email\r\nEND:VCARD/;' \
|
||||
-e 'print;' \
|
||||
-e '}' \
|
||||
<$i >$OUT/$(basename $i)
|
||||
done
|
||||
|
||||
find $OUT -size 0 -delete
|
|
@ -0,0 +1,64 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
IN=$1
|
||||
OUT=$2
|
||||
|
||||
rm -rf $OUT
|
||||
mkdir $OUT
|
||||
[ -d $IN ] || (echo >&2 "$IN not a directory"; false)
|
||||
|
||||
# TODO: X-SERVICE-TYPE, one for each kind, etc.
|
||||
|
||||
for i in $IN/*; do
|
||||
# Modify first and second contact by changing a field.
|
||||
# The second contact will also get modified locally.
|
||||
# We add a new BDAY property here, too, that will be added to
|
||||
# the local side during the merge by the engine, and
|
||||
# new array entries, that need special handling by the merge script.
|
||||
#
|
||||
# Each -e generates a line break, so no \n is necessary inside the expanded vCard.
|
||||
perl -e '$_ = join("", <>); if (/John [12] Doe/) {' \
|
||||
-e 's/primary 8/primary 80/;' \
|
||||
-e 's!END:VCARD!BDAY:2006-01-08\r' \
|
||||
-e 'TEL;TYPE=HOME:new remote tel 1\r' \
|
||||
-e 'tel2.TEL:new remote tel 2\r' \
|
||||
-e 'tel2.X-ABLabel:new-remote-tel-label\r' \
|
||||
-e 'email1.EMAIL:new remote email 1\r' \
|
||||
-e 'email1.X-ABLabel:new-remote-email-label\r' \
|
||||
-e 'EMAIL;TYPE=HOME:new remote email 2\r' \
|
||||
-e 'date1.X-ABDATE:2014-01-01\r' \
|
||||
-e 'date1.X-ABLabel:date-label-2014\r' \
|
||||
-e 'url1.URL:http\\://www.example.com/foobar\r' \
|
||||
-e 'url1.X-ABLabel:example-url-label\r' \
|
||||
-e 'impp1.IMPP;X-SERVICE-TYPE=AIM:aim:new-aim\r' \
|
||||
-e 'impp1.X-ABLabel:Other\r' \
|
||||
-e 'impp2.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:new-gadugadu\r' \
|
||||
-e 'impp2.X-ABLabel:Other\r' \
|
||||
-e 'impp3.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:new-groupwise\r' \
|
||||
-e 'impp3.X-ABLabel:Other\r' \
|
||||
-e 'impp4.IMPP;X-SERVICE-TYPE=ICQ:aim:new-icq\r' \
|
||||
-e 'impp4.X-ABLabel:Other\r' \
|
||||
-e 'impp5.IMPP;X-SERVICE-TYPE=Jabber:xmpp:new-jabber\r' \
|
||||
-e 'impp5.X-ABLabel:Other\r' \
|
||||
-e 'impp6.IMPP;X-SERVICE-TYPE=MSN:msnim:new-MSN\r' \
|
||||
-e 'impp6.X-ABLabel:Other\r' \
|
||||
-e 'impp7.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:new-yahoo\r' \
|
||||
-e 'impp7.X-ABLabel:Other\r' \
|
||||
-e 'impp8.IMPP;X-SERVICE-TYPE=Skype:skype:new-skype\r' \
|
||||
-e 'impp8.X-ABLabel:Other\r' \
|
||||
-e 'impp9.IMPP;X-SERVICE-TYPE=Sip:x-apple:new-sip\r' \
|
||||
-e 'impp9.X-ABLabel:Other\r' \
|
||||
-e 'impp10.IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc\r' \
|
||||
-e 'impp10.X-ABLabel:Other\r' \
|
||||
-e 'name1.X-ABRELATEDNAMES:new person\r' \
|
||||
-e 'name1.X-ABLabel:cousin\r' \
|
||||
-e 'ADR;TYPE=WORK:box;;street;town;county;12346;country\r' \
|
||||
-e 'END:VCARD!;' \
|
||||
-e 'print;' \
|
||||
-e '}' \
|
||||
<$i >$OUT/$(basename $i)
|
||||
done
|
||||
|
||||
find $OUT -size 0 -delete
|
|
@ -0,0 +1,301 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;1;;
|
||||
FN:John 1 Doe
|
||||
NICKNAME:user1
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
REV:2014-05-07T11:26:32Z
|
||||
UID:33a304690a6719e0
|
||||
BDAY;VALUE=DATE:2006-01-08
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
ADR;TYPE=OTHER:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;Ne
|
||||
w Testonia
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=HOME:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=FAX,WORK:businessfax 4
|
||||
TEL;TYPE=FAX,HOME:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL:john.doe@other.world
|
||||
EMAIL:john.doe@yet.another.world
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
PHOTO;ENCODING=B:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAA
|
||||
D//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJD
|
||||
BEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQR
|
||||
FB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQg
|
||||
AFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgEBf/EADIQAAECBQMCAwQLAA
|
||||
AAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/xAAUAQEAAAAAAAAAAAAAAAAAA
|
||||
AAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AuX6UehP45/aXv9MTPTLVKxNS
|
||||
vMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2VfmTR/wCaKlu6+blu/Ui72zxWtUmmUOr
|
||||
TaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2umhWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHK
|
||||
lJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJYV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7
|
||||
N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUkGZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICw
|
||||
L/sqlXp7v+aOHsnyGttq218MtKd8+Ru2JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2
|
||||
qqZl0UjAMwYKScfPAJ+cIQHHP0DthVFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28d
|
||||
znqo+hdksbQuS3Hs6tVtNzdM1Z/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQL
|
||||
oWkISOAkBKAABCEID//2Q==
|
||||
item2.IMPP;X-SERVICE-TYPE=AIM:aim:AIM%20JOHN
|
||||
item3.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:GADUGADU%20DOE
|
||||
item4.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:GROUPWISE%20DOE
|
||||
item5.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ%20JD
|
||||
item6.IMPP;X-SERVICE-TYPE=Jabber:xmpp:JABBER%20DOE
|
||||
item7.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN%20DOE
|
||||
item8.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:YAHOO%20JDOE
|
||||
item9.IMPP;X-SERVICE-TYPE=Skype:skype:SKYPE%20DOE
|
||||
item10.IMPP;X-SERVICE-TYPE=Sip:x-apple:SIP%20DOE
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
item1.X-ABDATE:2006-01-09
|
||||
item1.X-ABLabel:Anniversary
|
||||
item2.X-ABLabel:Other
|
||||
item3.X-ABLabel:Other
|
||||
item4.X-ABLabel:Other
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABRELATEDNAMES:John Doe Junior
|
||||
item11.X-ABLabel:Assistant
|
||||
item12.X-ABRELATEDNAMES:John Doe Senior
|
||||
item12.X-ABLabel:Manager
|
||||
item13.X-ABRELATEDNAMES:Joan Doe
|
||||
item13.X-ABLabel:Spouse
|
||||
item14.URL:http\://john.doe.com
|
||||
item14.X-ABLabel:Other
|
||||
TEL;TYPE=HOME:new remote tel 1
|
||||
tel2.TEL:new remote tel 2
|
||||
tel2.X-ABLabel:new-remote-tel-label
|
||||
email1.EMAIL:new remote email 1
|
||||
email1.X-ABLabel:new-remote-email-label
|
||||
EMAIL;TYPE=HOME:new remote email 2
|
||||
date1.X-ABDATE:2014-01-01
|
||||
date1.X-ABLabel:date-label-2014
|
||||
url1.URL:http\://www.example.com/foobar
|
||||
url1.X-ABLabel:example-url-label
|
||||
impp1.IMPP;X-SERVICE-TYPE=AIM:aim:new-aim
|
||||
impp1.X-ABLabel:Other
|
||||
impp2.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:new-gadugadu
|
||||
impp2.X-ABLabel:Other
|
||||
impp3.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:new-groupwise
|
||||
impp3.X-ABLabel:Other
|
||||
impp4.IMPP;X-SERVICE-TYPE=ICQ:aim:new-icq
|
||||
impp4.X-ABLabel:Other
|
||||
impp5.IMPP;X-SERVICE-TYPE=Jabber:xmpp:new-jabber
|
||||
impp5.X-ABLabel:Other
|
||||
impp6.IMPP;X-SERVICE-TYPE=MSN:msnim:new-MSN
|
||||
impp6.X-ABLabel:Other
|
||||
impp7.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:new-yahoo
|
||||
impp7.X-ABLabel:Other
|
||||
impp8.IMPP;X-SERVICE-TYPE=Skype:skype:new-skype
|
||||
impp8.X-ABLabel:Other
|
||||
impp9.IMPP;X-SERVICE-TYPE=Sip:x-apple:new-sip
|
||||
impp9.X-ABLabel:Other
|
||||
impp10.IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc
|
||||
impp10.X-ABLabel:Other
|
||||
name1.X-ABRELATEDNAMES:new person
|
||||
name1.X-ABLabel:cousin
|
||||
ADR;TYPE=WORK:box;;street;town;county;12346;country
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;2;;
|
||||
FN:John 2 Doe
|
||||
NICKNAME:user1
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
REV:2014-05-07T11:26:32Z
|
||||
UID:33a304690a6719e0
|
||||
BDAY;VALUE=DATE:2006-01-08
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
ADR;TYPE=OTHER:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;Ne
|
||||
w Testonia
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=HOME:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=FAX,WORK:businessfax 4
|
||||
TEL;TYPE=FAX,HOME:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL:john.doe@other.world
|
||||
EMAIL:john.doe@yet.another.world
|
||||
EMAIL:new local email
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
PHOTO;ENCODING=B:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAA
|
||||
D//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJD
|
||||
BEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQR
|
||||
FB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQg
|
||||
AFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgEBf/EADIQAAECBQMCAwQLAA
|
||||
AAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/xAAUAQEAAAAAAAAAAAAAAAAAA
|
||||
AAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AuX6UehP45/aXv9MTPTLVKxNS
|
||||
vMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2VfmTR/wCaKlu6+blu/Ui72zxWtUmmUOr
|
||||
TaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2umhWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHK
|
||||
lJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJYV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7
|
||||
N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUkGZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICw
|
||||
L/sqlXp7v+aOHsnyGttq218MtKd8+Ru2JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2
|
||||
qqZl0UjAMwYKScfPAJ+cIQHHP0DthVFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28d
|
||||
znqo+hdksbQuS3Hs6tVtNzdM1Z/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQL
|
||||
oWkISOAkBKAABCEID//2Q==
|
||||
item2.IMPP;X-SERVICE-TYPE=AIM:aim:AIM%20JOHN
|
||||
item3.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:GADUGADU%20DOE
|
||||
item4.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:GROUPWISE%20DOE
|
||||
item5.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ%20JD
|
||||
item6.IMPP;X-SERVICE-TYPE=Jabber:xmpp:JABBER%20DOE
|
||||
item7.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN%20DOE
|
||||
item8.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:YAHOO%20JDOE
|
||||
item9.IMPP;X-SERVICE-TYPE=Skype:skype:SKYPE%20DOE
|
||||
item10.IMPP;X-SERVICE-TYPE=Sip:x-apple:SIP%20DOE
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
item1.X-ABDATE:2006-01-09
|
||||
item1.X-ABLabel:Anniversary
|
||||
item2.X-ABLabel:Other
|
||||
item3.X-ABLabel:Other
|
||||
item4.X-ABLabel:Other
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABRELATEDNAMES:John Doe Junior
|
||||
item11.X-ABLabel:Assistant
|
||||
item12.X-ABRELATEDNAMES:John Doe Senior
|
||||
item12.X-ABLabel:Manager
|
||||
item13.X-ABRELATEDNAMES:Joan Doe
|
||||
item13.X-ABLabel:Spouse
|
||||
item14.URL:http\://john.doe.com
|
||||
item14.X-ABLabel:Other
|
||||
TEL;TYPE=HOME:new remote tel 1
|
||||
tel2.TEL:new remote tel 2
|
||||
tel2.X-ABLabel:new-remote-tel-label
|
||||
email1.EMAIL:new remote email 1
|
||||
email1.X-ABLabel:new-remote-email-label
|
||||
EMAIL;TYPE=HOME:new remote email 2
|
||||
date1.X-ABDATE:2014-01-01
|
||||
date1.X-ABLabel:date-label-2014
|
||||
url1.URL:http\://www.example.com/foobar
|
||||
url1.X-ABLabel:example-url-label
|
||||
impp1.IMPP;X-SERVICE-TYPE=AIM:aim:new-aim
|
||||
impp1.X-ABLabel:Other
|
||||
impp2.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:new-gadugadu
|
||||
impp2.X-ABLabel:Other
|
||||
impp3.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:new-groupwise
|
||||
impp3.X-ABLabel:Other
|
||||
impp4.IMPP;X-SERVICE-TYPE=ICQ:aim:new-icq
|
||||
impp4.X-ABLabel:Other
|
||||
impp5.IMPP;X-SERVICE-TYPE=Jabber:xmpp:new-jabber
|
||||
impp5.X-ABLabel:Other
|
||||
impp6.IMPP;X-SERVICE-TYPE=MSN:msnim:new-MSN
|
||||
impp6.X-ABLabel:Other
|
||||
impp7.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:new-yahoo
|
||||
impp7.X-ABLabel:Other
|
||||
impp8.IMPP;X-SERVICE-TYPE=Skype:skype:new-skype
|
||||
impp8.X-ABLabel:Other
|
||||
impp9.IMPP;X-SERVICE-TYPE=Sip:x-apple:new-sip
|
||||
impp9.X-ABLabel:Other
|
||||
impp10.IMPP;X-SERVICE-TYPE=Abc:x-apple:new-abc
|
||||
impp10.X-ABLabel:Other
|
||||
name1.X-ABRELATEDNAMES:new person
|
||||
name1.X-ABLabel:cousin
|
||||
ADR;TYPE=WORK:box;;street;town;county;12346;country
|
||||
END:VCARD
|
||||
|
||||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;3;;
|
||||
FN:John 3 Doe
|
||||
NICKNAME:user1
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing
|
||||
REV:2014-05-07T11:26:32Z
|
||||
UID:33a304690a6719e0
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
ADR;TYPE=OTHER:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;Ne
|
||||
w Testonia
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=HOME:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=FAX,WORK:businessfax 4
|
||||
TEL;TYPE=FAX,HOME:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 80
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL:john.doe@other.world
|
||||
EMAIL:john.doe@yet.another.world
|
||||
EMAIL:new local email
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
PHOTO;ENCODING=B:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAA
|
||||
D//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJD
|
||||
BEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQR
|
||||
FB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQg
|
||||
AFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgEBf/EADIQAAECBQMCAwQLAA
|
||||
AAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/xAAUAQEAAAAAAAAAAAAAAAAAA
|
||||
AAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AuX6UehP45/aXv9MTPTLVKxNS
|
||||
vMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2VfmTR/wCaKlu6+blu/Ui72zxWtUmmUOr
|
||||
TaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2umhWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHK
|
||||
lJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJYV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7
|
||||
N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUkGZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICw
|
||||
L/sqlXp7v+aOHsnyGttq218MtKd8+Ru2JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2
|
||||
qqZl0UjAMwYKScfPAJ+cIQHHP0DthVFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28d
|
||||
znqo+hdksbQuS3Hs6tVtNzdM1Z/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQL
|
||||
oWkISOAkBKAABCEID//2Q==
|
||||
item2.IMPP;X-SERVICE-TYPE=AIM:aim:AIM%20JOHN
|
||||
item3.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:GADUGADU%20DOE
|
||||
item4.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:GROUPWISE%20DOE
|
||||
item5.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ%20JD
|
||||
item6.IMPP;X-SERVICE-TYPE=Jabber:xmpp:JABBER%20DOE
|
||||
item7.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN%20DOE
|
||||
item8.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:YAHOO%20JDOE
|
||||
item9.IMPP;X-SERVICE-TYPE=Skype:skype:SKYPE%20DOE
|
||||
item10.IMPP;X-SERVICE-TYPE=Sip:x-apple:SIP%20DOE
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
item1.X-ABDATE:2006-01-09
|
||||
item1.X-ABLabel:Anniversary
|
||||
item2.X-ABLabel:Other
|
||||
item3.X-ABLabel:Other
|
||||
item4.X-ABLabel:Other
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABRELATEDNAMES:John Doe Junior
|
||||
item11.X-ABLabel:Assistant
|
||||
item12.X-ABRELATEDNAMES:John Doe Senior
|
||||
item12.X-ABLabel:Manager
|
||||
item13.X-ABRELATEDNAMES:Joan Doe
|
||||
item13.X-ABLabel:Spouse
|
||||
item14.URL:http\://john.doe.com
|
||||
item14.X-ABLabel:Other
|
||||
BDAY:2006-01-01
|
||||
END:VCARD
|
|
@ -0,0 +1,6 @@
|
|||
The test data was adapted to cope with some bugs/limitations:
|
||||
|
||||
- ROLE, CALURL, FBURL, CATEGORIES, GEO are not stored by Google
|
||||
and get lost.
|
||||
- ORG department and unit get merged.
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing;test#1
|
||||
ROLE:professional test case
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
BDAY:2006-01-08
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John Doe
|
||||
N:Doe;John;;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
CATEGORIES:TEST
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
GEO:30.12;-130.34
|
||||
CALURI:calender
|
||||
FBURL:free/busy
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000001
|
||||
EMAIL;TYPE=WORK;X-EVOLUTION-UI-SLOT=1:john.doe@work.com
|
||||
EMAIL;TYPE=HOME;X-EVOLUTION-UI-SLOT=2:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=3:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER;X-EVOLUTION-UI-SLOT=4:john.doe@yet.another.world
|
||||
TEL;TYPE=work;TYPE=Voice;X-EVOLUTION-UI-SLOT=1:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE;X-EVOLUTION-UI-SLOT=2:home 2
|
||||
TEL;TYPE=CELL;X-EVOLUTION-UI-SLOT=3:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX;X-EVOLUTION-UI-SLOT=4:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX;X-EVOLUTION-UI-SLOT=5:homefax 5
|
||||
TEL;TYPE=PAGER;X-EVOLUTION-UI-SLOT=6:pager 6
|
||||
TEL;TYPE=CAR;X-EVOLUTION-UI-SLOT=7:car 7
|
||||
TEL;TYPE=PREF;X-EVOLUTION-UI-SLOT=8:primary 8
|
||||
X-AIM;X-EVOLUTION-UI-SLOT=1:AIM JOHN
|
||||
X-YAHOO;X-EVOLUTION-UI-SLOT=2:YAHOO JDOE
|
||||
X-ICQ;X-EVOLUTION-UI-SLOT=3:ICQ JD
|
||||
X-GROUPWISE;X-EVOLUTION-UI-SLOT=4:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
END:VCARD
|
|
@ -0,0 +1,68 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
URL:http://john.doe.com
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing\, test#1
|
||||
X-EVOLUTION-MANAGER:John Doe Senior
|
||||
X-EVOLUTION-ASSISTANT:John Doe Junior
|
||||
NICKNAME:user1
|
||||
BDAY:2006-01-08
|
||||
X-EVOLUTION-ANNIVERSARY:2006-01-09
|
||||
X-EVOLUTION-SPOUSE:Joan Doe
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
FN:John Doe
|
||||
N:Doe;John;;;
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
LABEL;TYPE=WORK:Test Drive 2\nTest Town\, Upper Test County\n12346\nTest Bo
|
||||
x #2\nOld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
LABEL;TYPE=HOME:Test Drive 1\nTest Village\, Lower Test County\n12345\nTest
|
||||
Box #1\nTestovia
|
||||
ADR:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;New Testonia
|
||||
LABEL;TYPE=OTHER:Test Drive 3\nTest Megacity\, Test County\n12347\nTest Box
|
||||
#3\nNew Testonia
|
||||
UID:pas-id-43C0ED3900000001
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL;TYPE=OTHER:john.doe@other.world
|
||||
EMAIL;TYPE=OTHER:john.doe@yet.another.world
|
||||
EMAIL:new remote email
|
||||
TEL;TYPE=work;TYPE=Voice:business 1
|
||||
TEL;TYPE=homE;TYPE=VOICE:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=WORK;TYPE=FAX:businessfax 4
|
||||
TEL;TYPE=HOME;TYPE=FAX:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 8
|
||||
X-AIM:AIM JOHN
|
||||
X-YAHOO:YAHOO JDOE
|
||||
X-ICQ:ICQ JD
|
||||
X-GROUPWISE:GROUPWISE DOE
|
||||
X-GADUGADU:GADUGADU DOE
|
||||
X-JABBER:JABBER DOE
|
||||
X-MSN:MSN DOE
|
||||
X-SKYPE:SKYPE DOE
|
||||
X-SIP:SIP DOE
|
||||
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAA
|
||||
AAgAAAAAAAD//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcM
|
||||
CAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEF
|
||||
BQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
|
||||
Hh4eHh4eHh4e/8AAEQgAFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgE
|
||||
Bf/EADIQAAECBQMCAwQLAAAAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/
|
||||
xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMR
|
||||
AD8AuX6UehP45/aXv9MTPTLVKxNSvMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2V
|
||||
fmTR/wCaKlu6+blu/Ui72zxWtUmmUOrTaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2um
|
||||
hWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHKlJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJ
|
||||
YV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUk
|
||||
GZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICwL/sqlXp7v+aOHsnyGttq218MtKd8+Ru2
|
||||
JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2qqZl0UjAMwYKScfPAJ+cIQHHP0Dth
|
||||
VFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28dznqo+hdksbQuS3Hs6tVtNzdM1Z
|
||||
/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQLoWkISOAkBKAABCEID//2Q==
|
||||
END:VCARD
|
|
@ -0,0 +1,20 @@
|
|||
#! /bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
IN=$1
|
||||
OUT=$2
|
||||
|
||||
rm -rf $OUT
|
||||
mkdir $OUT
|
||||
[ -d $IN ] || (echo >&2 "$IN not a directory"; false)
|
||||
|
||||
for i in $IN/*; do
|
||||
perl -e '$_ = join("", <>); if (1) {' \
|
||||
-e 's/END:VCARD/EMAIL:new remote email\r\nEND:VCARD/;' \
|
||||
-e 'print;' \
|
||||
-e '}' \
|
||||
<$i >$OUT/$(basename $i)
|
||||
done
|
||||
|
||||
find $OUT -size 0 -delete
|
|
@ -0,0 +1,77 @@
|
|||
BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
N:Doe;John;;;
|
||||
FN:John Doe
|
||||
NICKNAME:user1
|
||||
TITLE:Senior Tester
|
||||
ORG:Test Inc.;Testing\, test#1
|
||||
REV:2014-05-07T11:26:32Z
|
||||
UID:33a304690a6719e0
|
||||
BDAY;VALUE=DATE:2006-01-08
|
||||
ADR;TYPE=WORK:Test Box #2;;Test Drive 2;Test Town;Upper Test County;12346;O
|
||||
ld Testovia
|
||||
ADR;TYPE=HOME:Test Box #1;;Test Drive 1;Test Village;Lower Test County;1234
|
||||
5;Testovia
|
||||
ADR;TYPE=OTHER:Test Box #3;;Test Drive 3;Test Megacity;Test County;12347;Ne
|
||||
w Testonia
|
||||
TEL;TYPE=WORK:business 1
|
||||
TEL;TYPE=HOME:home 2
|
||||
TEL;TYPE=CELL:mobile 3
|
||||
TEL;TYPE=FAX,WORK:businessfax 4
|
||||
TEL;TYPE=FAX,HOME:homefax 5
|
||||
TEL;TYPE=PAGER:pager 6
|
||||
TEL;TYPE=CAR:car 7
|
||||
TEL;TYPE=PREF:primary 8
|
||||
EMAIL;TYPE=WORK:john.doe@work.com
|
||||
EMAIL;TYPE=HOME:john.doe@home.priv
|
||||
EMAIL:john.doe@other.world
|
||||
EMAIL:john.doe@yet.another.world
|
||||
NOTE:This is a test case which uses almost all Evolution fields.
|
||||
PHOTO;ENCODING=B:/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAA
|
||||
D//gAXQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJD
|
||||
BEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQR
|
||||
FB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQg
|
||||
AFwAkAwEiAAIRAQMRAf/EABkAAQADAQEAAAAAAAAAAAAAAAAGBwgEBf/EADIQAAECBQMCAwQLAA
|
||||
AAAAAAAAECBAADBQYRBxIhEzEUFSIIFjNBGCRHUVZ3lqXD0+P/xAAUAQEAAAAAAAAAAAAAAAAAA
|
||||
AAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AuX6UehP45/aXv9MTPTLVKxNS
|
||||
vMPcqu+a+XdLxf1SfJ6fU37PioTnOxfbOMc/KIZ7U/2VfmTR/wCaKlu6+blu/Ui72zxWtUmmUOr
|
||||
TaWwkWDT09FPR4K587OVrUfVsIwElPPPAbAjxr2umhWXbDu5rmfeApLPZ4hx0lzNm9aUJ9KAVHK
|
||||
lJHAPf7ozPLqWt9y6Z0EPGmoLNjTq48a1iaybJYV52yEtCms5KJmAT61JXtJyUdyQTEc1WlMql7
|
||||
N1/oZ6jagVZVFfUyZPpFy5lvWcxU7Z03BUkGZLWJqVhPYLkIIPBEBtSEUyNAsjI1q1m/VP+UICw
|
||||
L/sqlXp7v+aOHsnyGttq218MtKd8+Ru2JXuScoO45Awe2CIi96aKW1cVyubkYVy6rTqz0J8a5t2
|
||||
qqZl0UjAMwYKScfPAJ+cIQHHP0DthVFaMWt0XwxetnM50Ks2rsxL6ZMnJlJmb5hBBBEiVxjA28d
|
||||
znqo+hdksbQuS3Hs6tVtNzdM1Z/VH5nO3Bl/CJmYHKDynjv3zCEB5rLQNo0bIbydWNWxKljbLQL
|
||||
oWkISOAkBKAABCEID//2Q==
|
||||
item2.IMPP;X-SERVICE-TYPE=AIM:aim:AIM%20JOHN
|
||||
item3.IMPP;X-SERVICE-TYPE=Gadugadu:x-apple:GADUGADU%20DOE
|
||||
item4.IMPP;X-SERVICE-TYPE=Groupwise:x-apple:GROUPWISE%20DOE
|
||||
item5.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQ%20JD
|
||||
item6.IMPP;X-SERVICE-TYPE=Jabber:xmpp:JABBER%20DOE
|
||||
item7.IMPP;X-SERVICE-TYPE=MSN:msnim:MSN%20DOE
|
||||
item8.IMPP;X-SERVICE-TYPE=Yahoo:ymsgr:YAHOO%20JDOE
|
||||
item9.IMPP;X-SERVICE-TYPE=Skype:skype:SKYPE%20DOE
|
||||
item10.IMPP;X-SERVICE-TYPE=Sip:x-apple:SIP%20DOE
|
||||
X-EVOLUTION-FILE-AS:Doe\, John
|
||||
X-EVOLUTION-BLOG-URL:web log
|
||||
X-EVOLUTION-VIDEO-URL:chat
|
||||
X-MOZILLA-HTML:TRUE
|
||||
item1.X-ABDATE:2006-01-09
|
||||
item1.X-ABLabel:Anniversary
|
||||
item2.X-ABLabel:Other
|
||||
item3.X-ABLabel:Other
|
||||
item4.X-ABLabel:Other
|
||||
item5.X-ABLabel:Other
|
||||
item6.X-ABLabel:Other
|
||||
item7.X-ABLabel:Other
|
||||
item8.X-ABLabel:Other
|
||||
item9.X-ABLabel:Other
|
||||
item10.X-ABLabel:Other
|
||||
item11.X-ABRELATEDNAMES:John Doe Junior
|
||||
item11.X-ABLabel:Assistant
|
||||
item12.X-ABRELATEDNAMES:John Doe Senior
|
||||
item12.X-ABLabel:Manager
|
||||
item13.X-ABRELATEDNAMES:Joan Doe
|
||||
item13.X-ABLabel:Spouse
|
||||
item14.URL:http\://john.doe.com
|
||||
item14.X-ABLabel:Other
|
||||
END:VCARD
|
Loading…
Reference in New Issue