// Copyright 2012 Norbert Lindenberg. All rights reserved.
// Copyright 2012 Mozilla Corporation. All rights reserved.
// This code is governed by the license found in the LICENSE file.

/*---
es5id: 10.3.2_CS_a
description: >
    Tests that the function returned by
    Intl.Collator.prototype.compare  returns 0 when comparing Strings
    that are considered canonically equivalent  by the Unicode
    standard.
author: Norbert Lindenberg
---*/

var collator = new Intl.Collator();
var pairs = [
    // example from Unicode 5.0, section 3.7, definition D70
    ["o\u0308", "ö"],
    // examples from Unicode 5.0, chapter 3.11
    ["ä\u0323", "a\u0323\u0308"],
    ["a\u0308\u0323", "a\u0323\u0308"],
    ["ạ\u0308", "a\u0323\u0308"],
    ["ä\u0306", "a\u0308\u0306"],
    ["ă\u0308", "a\u0306\u0308"],
    // example from Unicode 5.0, chapter 3.12
    ["\u1111\u1171\u11B6", "퓛"],
    // examples from UTS 10, Unicode Collation Algorithm
    ["Å", "Å"],
    ["Å", "A\u030A"],
    ["x\u031B\u0323", "x\u0323\u031B"],
    ["ự", "ụ\u031B"],
    ["ự", "u\u031B\u0323"],
    ["ự", "ư\u0323"],
    ["ự", "u\u0323\u031B"],
    // examples from UAX 15, Unicode Normalization Forms
    ["Ç", "C\u0327"],
    ["q\u0307\u0323", "q\u0323\u0307"],
    ["가", "\u1100\u1161"],
    ["Å", "A\u030A"],
    ["Ω", "Ω"],
    ["Å", "A\u030A"],
    ["ô", "o\u0302"],
    ["ṩ", "s\u0323\u0307"],
    ["ḋ\u0323", "d\u0323\u0307"],
    ["ḋ\u0323", "ḍ\u0307"],
    ["q\u0307\u0323", "q\u0323\u0307"],
    // examples involving supplementary characters from UCD NormalizationTest.txt
    ["\uD834\uDD5E", "\uD834\uDD57\uD834\uDD65"],
    ["\uD87E\uDC2B", "北"]
    
];
var i;
for (i = 0; i < pairs.length; i++) {
    var pair = pairs[i];
    assert.sameValue(collator.compare(pair[0], pair[1]), 0, "Collator.compare considers " + pair[0] + " (" + toU(pair[0]) + ") ≠ " + pair[1] + " (" + toU(pair[1]) + ").");
}

function toU(s) {
    var result = "";
    var escape = "\\u0000";
    var i;
    for (i = 0; i < s.length; i++) {
        var hex = s.charCodeAt(i).toString(16);
        result += escape.substring(0, escape.length - hex.length) + hex;
    }
    return result;
}
