J'écris quelques tests unitaires qui vont vérifier notre traitement des diverses ressources qui utilisent d'autres jeux de caractères en dehors de l'alphabet latin normal: cyrillique, hébreu, etc.Comment puis-je intégrer des constantes de chaîne Unicode dans un fichier source?
Le problème que j'ai est que je ne peux pas trouver un façon d'intégrer les attentes dans le fichier source de test: voici un exemple de ce que je suis en train de faire ...
///
/// Protected: TestGetHebrewConfigString
///
void CPrIniFileReaderTest::TestGetHebrewConfigString()
{
prwstring strHebrewTestFilePath = GetTestFilePath(strHebrewTestFileName);
CPrIniFileReader prIniListReader(strHebrewTestFilePath.c_str());
prIniListReader.SetCurrentSection(strHebrewSubSection);
CPPUNIT_ASSERT(prIniListReader.GetConfigString(L"דונדארןמע") == L"דונהשךוק"));
}
Ce travail ne marche pas tout simplement. Auparavant, je travaillais autour de cette aide d'une macro qui appelle une routine pour transformer une chaîne étroite à une grande chaîne (nous utilisons towstring partout dans nos applications il est donc le code existant)
#define UNICODE_CONSTANT(CONSTANT) towstring(CONSTANT)
wstring towstring(LPCSTR lpszValue)
{
wostringstream os;
os << lpszValue;
return os.str();
}
L'affirmation dans le test ci-dessus puis est devenu:
CPPUNIT_ASSERT(prIniListReader.GetConfigString(UNICODE_CONSTANT("דונדארןמע")) == UNICODE_CONSTANT("דונהשךוק"));
Cela a fonctionné OK sur OS X, mais maintenant je suis le portage vers linux et je trouve que les tests sont tous échouent: il se sent tout plutôt hackish aussi bien. Quelqu'un peut-il me dire s'ils ont une meilleure solution à ce problème?
Dans Windows wchar_t est 16 bits et tout le monde est 32 bits.Est-ce que cela a un effet sur ce que les littéraux hexadécimaux doivent être listés? Ou est-ce que '\ x05d3' fonctionne aussi bien pour 16 et 32 bits? –
Il n'y a pas de limite au nombre de chiffres hexadécimaux après \ x, donc cela devrait fonctionner de la même manière quelle que soit sizeof (wchar_t). Voir ce sujet pour plus d'informations: http://stackoverflow.com/questions/2735101/unicode-escaping-in-c-c – fbonnet