SF #1796086: sync with EGW: lost or messed up telephones - SyncEvolution incorrectly added TYPE=OTHER to phone numbers sent with e.g. CELL instead of TYPE=CELL

git-svn-id: https://zeitsenke.de/svn/SyncEvolution/trunk@397 15ad00c4-1369-45f4-8270-35d70d36bdcd
This commit is contained in:
Patrick Ohly 2007-10-04 20:45:49 +00:00
parent 61467028b4
commit fd5a416b70

View file

@ -29,6 +29,7 @@ using namespace std;
#include "EvolutionContactSource.h"
#include <common/base/Log.h>
#include <base/test.h>
#include "vocl/VConverter.h"
using namespace vocl;
@ -511,6 +512,12 @@ string EvolutionContactSource::preparseVCard(SyncItem& item)
// ensure that at least one TYPE is set
if (!vprop->containsParameter("TYPE") &&
!vprop->containsParameter("CELL") &&
!vprop->containsParameter("CAR") &&
!vprop->containsParameter("PREF") &&
!vprop->containsParameter("FAX") &&
!vprop->containsParameter("VOICE") &&
!vprop->containsParameter("PAGER") &&
!vprop->containsParameter("INTERNET") &&
!vprop->containsParameter("HOME") &&
!vprop->containsParameter("WORK")) {
@ -853,6 +860,74 @@ extern "C" EvolutionSyncSource *SyncEvolutionCreateSource(const string &name,
}
}
#else /* ENABLE_MODULES */
#ifdef ENABLE_UNIT_TESTS
class EvolutionContactTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(EvolutionContactTest);
CPPUNIT_TEST(testImport);
CPPUNIT_TEST_SUITE_END();
protected:
/**
* Tests parsing of contacts as they might be send by certain servers.
* This complements the actual testing with real servers and might cover
* cases not occurring with servers that are actively tested against.
*/
void testImport() {
EvolutionContactSource source21("foo", NULL, "", "", EVC_FORMAT_VCARD_21),
source30("foo", NULL, "", "", EVC_FORMAT_VCARD_30);
string parsed;
// SF bug 1796086: sync with EGW: lost or messed up telephones
parsed = "BEGIN:VCARD\r\nVERSION:3.0\r\nTEL;CELL:cell\r\nEND:VCARD\r\n";
CPPUNIT_ASSERT_EQUAL(parsed,
preparse(source21,
"BEGIN:VCARD\nVERSION:2.1\nTEL;CELL:cell\nEND:VCARD\n",
"text/x-vcard"));
parsed = "BEGIN:VCARD\r\nVERSION:3.0\r\nTEL;TYPE=CAR:car\r\nEND:VCARD\r\n";
CPPUNIT_ASSERT_EQUAL(parsed,
preparse(source21,
"BEGIN:VCARD\nVERSION:2.1\nTEL;TYPE=CAR:car\nEND:VCARD\n",
"text/x-vcard"));
parsed = "BEGIN:VCARD\r\nVERSION:3.0\r\nTEL;TYPE=HOME:home\r\nEND:VCARD\r\n";
CPPUNIT_ASSERT_EQUAL(parsed,
preparse(source21,
"BEGIN:VCARD\nVERSION:2.1\nTEL:home\nEND:VCARD\n",
"text/x-vcard"));
// TYPE=PARCEL not supported by Evolution, used to represent Evolutions TYPE=OTHER
parsed = "BEGIN:VCARD\r\nVERSION:3.0\r\nTEL;TYPE=OTHER:other\r\nEND:VCARD\r\n";
CPPUNIT_ASSERT_EQUAL(parsed,
preparse(source21,
"BEGIN:VCARD\nVERSION:2.1\nTEL;TYPE=PARCEL:other\nEND:VCARD\n",
"text/x-vcard"));
parsed = "BEGIN:VCARD\r\nVERSION:3.0\r\nTEL;TYPE=HOME;TYPE=VOICE:cell\r\nEND:VCARD\r\n";
CPPUNIT_ASSERT_EQUAL(parsed,
preparse(source21,
"BEGIN:VCARD\nVERSION:2.1\nTEL;TYPE=HOME,VOICE:cell\nEND:VCARD\n",
"text/x-vcard"));
}
private:
string preparse(EvolutionContactSource &source,
const char *data,
const char *type) {
SyncItem item;
item.setData(data, strlen(data));
item.setDataType(type);
return source.preparseVCard(item);
}
};
FUNAMBOL_TEST_SUITE_REGISTRATION(EvolutionContactTest);
#endif
#endif /* ENABLE_MODULES */
#endif /* ENABLE_EBOOK */