1/******************************************************************** 2 * COPYRIGHT: 3 * Copyright (c) 1997-2009, International Business Machines Corporation and 4 * others. All Rights Reserved. 5 ********************************************************************/ 6/******************************************************************************** 7* 8* File CESTST.C 9* 10* Modification History: 11* Name Description 12* Madhu Katragadda Ported for C API 13*********************************************************************************/ 14/** 15 * CollationSpanishTest is a third level test class. This tests the locale 16 * specific primary, secondary and tertiary rules. For example, the ignorable 17 * character '-' in string "black-bird". The en_US locale uses the default 18 * collation rules as its sorting sequence. 19 */ 20 21#include <stdlib.h> 22 23#include "unicode/utypes.h" 24 25#if !UCONFIG_NO_COLLATION 26 27#include "unicode/ucol.h" 28#include "unicode/uloc.h" 29#include "cintltst.h" 30#include "cestst.h" 31#include "ccolltst.h" 32#include "callcoll.h" 33#include "unicode/ustring.h" 34#include "string.h" 35 36static UCollator *myCollation; 37const static UChar testSourceCases[][MAX_TOKEN_LEN] = { 38 {0x0062/*'a'*/, 0x006c/*'l'*/, 0x0069/*'i'*/, 0x0061/*'a'*/, 0x0073/*'s'*/, 0x0000}, 39 {0x0045/*'E'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x0069/*'i'*/, 0x006f/*'o'*/, 0x0074/*'t'*/, 0x0000}, 40 {0x0048/*'H'*/, 0x0065/*'e'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x006f/*'o'*/, 0x0000}, 41 {0x0061/*'a'*/, 0x0063/*'c'*/, 0x0048/*'H'*/, 0x0063/*'c'*/, 0x0000}, 42 {0x0061/*'a'*/, 0x0063/*'c'*/, 0x0063/*'c'*/, 0x0000}, 43 {0x0061/*'a'*/, 0x006c/*'l'*/, 0x0069/*'i'*/, 0x0061/*'a'*/, 0x0073/*'s'*/, 0x0000}, 44 {0x0061/*'a'*/, 0x0063/*'c'*/, 0x0048/*'H'*/, 0x0063/*'c'*/, 0x0000}, 45 {0x0061/*'a'*/, 0x0063/*'c'*/, 0x0063/*'c'*/, 0x0000}, 46 {0x0048/*'H'*/, 0x0065/*'e'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x006f/*'o'*/, 0x0000}, 47}; 48 49const static UChar testTargetCases[][MAX_TOKEN_LEN] = { 50 {0x0062/*'a'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x0069/*'i'*/, 0x0061/*'a'*/, 0x0073/*'s'*/, 0x0000}, 51 {0x0045/*'E'*/, 0x006d/*'m'*/, 0x0069/*'i'*/, 0x006f/*'o'*/, 0x0074/*'t'*/, 0x0000}, 52 {0x0068/*'h'*/, 0x0065/*'e'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x006f/*'O'*/, 0x0000}, 53 {0x0061/*'a'*/, 0x0043/*'C'*/, 0x0048/*'H'*/, 0x0063/*'c'*/, 0x0000}, 54 {0x0061/*'a'*/, 0x0043/*'C'*/, 0x0048/*'H'*/, 0x0063/*'c'*/, 0x0000}, 55 {0x0062/*'a'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x0069/*'i'*/, 0x0061/*'a'*/, 0x0073/*'s'*/, 0x0000}, 56 {0x0061/*'a'*/, 0x0043/*'C'*/, 0x0048/*'H'*/, 0x0063/*'c'*/, 0x0000}, 57 {0x0061/*'a'*/, 0x0043/*'C'*/, 0x0048/*'H'*/, 0x0063/*'c'*/, 0x0000}, 58 {0x0068/*'h'*/, 0x0065/*'e'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x006f/*'O'*/, 0x0000}, 59}; 60 61const static UCollationResult results[] = { 62 UCOL_LESS, 63 UCOL_LESS, 64 UCOL_GREATER, 65 UCOL_LESS, 66 UCOL_LESS, 67 /* test primary > 5*/ 68 UCOL_LESS, 69 UCOL_EQUAL, 70 UCOL_LESS, 71 UCOL_EQUAL 72}; 73 74 75void addSpanishCollTest(TestNode** root) 76{ 77 78 79 addTest(root, &TestPrimary, "tscoll/cestst/TestPrimary"); 80 addTest(root, &TestTertiary, "tscoll/cestst/TestTertiary"); 81 82} 83 84 85static void TestTertiary( ) 86{ 87 88 int32_t i; 89 UErrorCode status = U_ZERO_ERROR; 90 myCollation = ucol_open("es_ES", &status); 91 if(U_FAILURE(status)){ 92 log_err_status(status, "ERROR: %s: in creation of rule based collator: %s\n", __FILE__, myErrorName(status)); 93 return; 94 } 95 log_verbose("Testing Spanish Collation with Tertiary strength\n"); 96 ucol_setStrength(myCollation, UCOL_TERTIARY); 97 for (i = 0; i < 5 ; i++) 98 { 99 doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); 100 } 101 ucol_close(myCollation); 102} 103 104static void TestPrimary() 105{ 106 107 int32_t i; 108 UErrorCode status = U_ZERO_ERROR; 109 myCollation = ucol_open("es_ES", &status); 110 if(U_FAILURE(status)){ 111 log_err_status(status, "ERROR: %s: in creation of rule based collator: %s\n", __FILE__, myErrorName(status)); 112 return; 113 } 114 log_verbose("Testing Spanish Collation with Primary strength\n"); 115 ucol_setStrength(myCollation, UCOL_PRIMARY); 116 for (i = 5; i < 9; i++) 117 { 118 doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); 119 } 120 ucol_close(myCollation); 121} 122 123#endif /* #if !UCONFIG_NO_COLLATION */ 124