comparison UnitTestsSources/FromDcmtkTests.cpp @ 1695:18c02c6987d5

fix for encodings
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 08 Oct 2015 14:34:19 +0200
parents 558b25228a23
children 8ca0e89798b2
comparison
equal deleted inserted replaced
1694:06d579e82bb8 1695:18c02c6987d5
205 for (unsigned int i = 0; i < testEncodingsCount; i++) 205 for (unsigned int i = 0; i < testEncodingsCount; i++)
206 { 206 {
207 std::string source(testEncodingsEncoded[i]); 207 std::string source(testEncodingsEncoded[i]);
208 std::string expected(testEncodingsExpected[i]); 208 std::string expected(testEncodingsExpected[i]);
209 std::string s = Toolbox::ConvertToUtf8(source, testEncodings[i]); 209 std::string s = Toolbox::ConvertToUtf8(source, testEncodings[i]);
210 std::cout << EnumerationToString(testEncodings[i]) << std::endl; 210 //std::cout << EnumerationToString(testEncodings[i]) << std::endl;
211 EXPECT_EQ(expected, s); 211 EXPECT_EQ(expected, s);
212 } 212 }
213 } 213 }
214 214
215 215
260 260
261 TEST(FromDcmtkBridge, Encodings3) 261 TEST(FromDcmtkBridge, Encodings3)
262 { 262 {
263 for (unsigned int i = 0; i < testEncodingsCount; i++) 263 for (unsigned int i = 0; i < testEncodingsCount; i++)
264 { 264 {
265 std::cout << EnumerationToString(testEncodings[i]) << std::endl; 265 //std::cout << EnumerationToString(testEncodings[i]) << std::endl;
266 std::string dicom; 266 std::string dicom;
267 267
268 { 268 {
269 ParsedDicomFile f; 269 ParsedDicomFile f;
270 f.SetEncoding(testEncodings[i]); 270 f.SetEncoding(testEncodings[i]);
271 f.Insert(DICOM_TAG_PATIENT_NAME, testEncodingsEncoded[i]); 271
272 std::string s = Toolbox::ConvertToUtf8(testEncodingsEncoded[i], testEncodings[i]);
273 f.Insert(DICOM_TAG_PATIENT_NAME, s);
272 f.SaveToMemoryBuffer(dicom); 274 f.SaveToMemoryBuffer(dicom);
273 } 275 }
274 276
275 if (testEncodings[i] != Encoding_Windows1251) 277 if (testEncodings[i] != Encoding_Windows1251)
276 { 278 {
332 std::auto_ptr<DcmElement> element; 334 std::auto_ptr<DcmElement> element;
333 335
334 { 336 {
335 Json::Value a; 337 Json::Value a;
336 a = "Hello"; 338 a = "Hello";
337 element.reset(FromDcmtkBridge::FromJson(DICOM_TAG_PATIENT_NAME, a, false)); 339 element.reset(FromDcmtkBridge::FromJson(DICOM_TAG_PATIENT_NAME, a, false, Encoding_Utf8));
338 340
339 Json::Value b; 341 Json::Value b;
340 FromDcmtkBridge::ToJson(b, *element, DicomToJsonFormat_Short, 0, Encoding_Ascii); 342 FromDcmtkBridge::ToJson(b, *element, DicomToJsonFormat_Short, 0, Encoding_Ascii);
341 ASSERT_EQ("Hello", b["0010,0010"].asString()); 343 ASSERT_EQ("Hello", b["0010,0010"].asString());
342 } 344 }
343 345
344 { 346 {
345 Json::Value a; 347 Json::Value a;
346 a = "Hello"; 348 a = "Hello";
347 // Cannot assign a string to a sequence 349 // Cannot assign a string to a sequence
348 ASSERT_THROW(element.reset(FromDcmtkBridge::FromJson(REFERENCED_STUDY_SEQUENCE, a, false)), OrthancException); 350 ASSERT_THROW(element.reset(FromDcmtkBridge::FromJson(REFERENCED_STUDY_SEQUENCE, a, false, Encoding_Utf8)), OrthancException);
349 } 351 }
350 352
351 { 353 {
352 Json::Value a = Json::arrayValue; 354 Json::Value a = Json::arrayValue;
353 a.append("Hello"); 355 a.append("Hello");
354 // Cannot assign an array to a string 356 // Cannot assign an array to a string
355 ASSERT_THROW(element.reset(FromDcmtkBridge::FromJson(DICOM_TAG_PATIENT_NAME, a, false)), OrthancException); 357 ASSERT_THROW(element.reset(FromDcmtkBridge::FromJson(DICOM_TAG_PATIENT_NAME, a, false, Encoding_Utf8)), OrthancException);
356 } 358 }
357 359
358 { 360 {
359 Json::Value a; 361 Json::Value a;
360 a = "data:application/octet-stream;base64,SGVsbG8="; // echo -n "Hello" | base64 362 a = "data:application/octet-stream;base64,SGVsbG8="; // echo -n "Hello" | base64
361 element.reset(FromDcmtkBridge::FromJson(DICOM_TAG_PATIENT_NAME, a, true)); 363 element.reset(FromDcmtkBridge::FromJson(DICOM_TAG_PATIENT_NAME, a, true, Encoding_Utf8));
362 364
363 Json::Value b; 365 Json::Value b;
364 FromDcmtkBridge::ToJson(b, *element, DicomToJsonFormat_Short, 0, Encoding_Ascii); 366 FromDcmtkBridge::ToJson(b, *element, DicomToJsonFormat_Short, 0, Encoding_Ascii);
365 ASSERT_EQ("Hello", b["0010,0010"].asString()); 367 ASSERT_EQ("Hello", b["0010,0010"].asString());
366 } 368 }
367 369
368 { 370 {
369 Json::Value a = Json::arrayValue; 371 Json::Value a = Json::arrayValue;
370 CreateSampleJson(a); 372 CreateSampleJson(a);
371 element.reset(FromDcmtkBridge::FromJson(REFERENCED_STUDY_SEQUENCE, a, true)); 373 element.reset(FromDcmtkBridge::FromJson(REFERENCED_STUDY_SEQUENCE, a, true, Encoding_Utf8));
372 374
373 { 375 {
374 Json::Value b; 376 Json::Value b;
375 FromDcmtkBridge::ToJson(b, *element, DicomToJsonFormat_Short, 0, Encoding_Ascii); 377 FromDcmtkBridge::ToJson(b, *element, DicomToJsonFormat_Short, 0, Encoding_Ascii);
376 ASSERT_EQ(Json::arrayValue, b["0008,1110"].type()); 378 ASSERT_EQ(Json::arrayValue, b["0008,1110"].type());
489 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_SOP_CLASS_UID)); 491 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_SOP_CLASS_UID));
490 ASSERT_EQ(s, "Tata"); 492 ASSERT_EQ(s, "Tata");
491 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_MEDIA_STORAGE_SOP_CLASS_UID)); // Implicitly modified by (**) 493 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_MEDIA_STORAGE_SOP_CLASS_UID)); // Implicitly modified by (**)
492 ASSERT_EQ(s, "Tata"); 494 ASSERT_EQ(s, "Tata");
493 } 495 }
496
497
498 TEST(ParsedDicomFile, JsonEncoding)
499 {
500 ParsedDicomFile f;
501
502 for (unsigned int i = 0; i < testEncodingsCount; i++)
503 {
504 if (testEncodings[i] != Encoding_Windows1251)
505 {
506 //std::cout << EnumerationToString(testEncodings[i]) << std::endl;
507 f.SetEncoding(testEncodings[i]);
508
509 if (testEncodings[i] != Encoding_Ascii)
510 {
511 ASSERT_EQ(testEncodings[i], f.GetEncoding());
512 }
513
514 Json::Value s = Toolbox::ConvertToUtf8(testEncodingsEncoded[i], testEncodings[i]);
515 f.Replace(DICOM_TAG_PATIENT_NAME, s, false);
516
517 Json::Value v;
518 f.ToJson(v, DicomToJsonFormat_Simple, 0);
519 ASSERT_EQ(v["PatientName"].asString(), std::string(testEncodingsExpected[i]));
520 }
521 }
522 }