//*******************************************************************************
//*
//*   Copyright (C) 2002-2015, International Business Machines
//*   Corporation and others.  All Rights Reserved.
//*
//*******************************************************************************


// This is a test resource to check whether the aliasing mechanism works
// as advertised

testaliases:table(nofallback) 
{
    // This should produce an error - circular alias
    aaa:alias { "testaliases/aab" } // Test circular dependency protection
    aab:alias { "testaliases/aaa" }

    // aliasing nonexist position
    nonexisting:alias { "/ICUDATA/ja" }

    // aliasing to another resource
    simplealias:alias { "testtypes/menu/file/open" } // simple referencing

    // alias that uses another alias and references parts of the end structure
    referencingalias:alias { "testaliases/anotheralias/2" } // Referencing through another alias
    anotheralias:alias { "/ICUDATA/ja_JP/calendar/gregorian/DateTimePatterns" } // Provoke a fallback too

    DateTimePatterns:alias { "/ICUDATA/ja/calendar/gregorian/DateTimePatterns" }

    // aliasing using position
    boundaries:alias { "/ICUDATA-brkitr/th" } // Referencing corresponding resource in another bundle

    // aliasing arrays
    zoneTests {
        zoneAlias:alias { "/ICUDATA-zone/en/zoneStrings" } // Referencing by index
        zoneAlias1:alias { "/ICUDATA-zone/en/zoneStrings/3" } // Referencing by index
        zoneAlias2:alias { "/ICUDATA-zone/en/zoneStrings/3/0" } // Referencing by index
    }

    // Test aliasing parts of an array using position
    zoneStrings { 
        :alias { "/ICUDATA/en" } 
        :alias { "/ICUDATA/en" } 
    }
    // WARNING: this test assumes that on all platforms digits sort normally
    // if not, the test may fail
    testGetStringByKeyAliasing {
        KeyAlias0PST:alias { "te/zoneStrings/2/0" } //"America/Los_Angeles",
        KeyAlias1PacificStandardTime:alias { "te/zoneStrings/2/1" } //"Pacific Standard Time",
        KeyAlias2PDT:alias { "te/zoneStrings/2/4" } //"PDT",
        KeyAlias3LosAngeles:alias { "te/zoneStrings/2/5" } //"Los Angeles",
    }
    testGetStringByIndexAliasing  {
        :alias { "te/zoneStrings/2/0" } //"America/Los_Angeles",
        :alias { "te/zoneStrings/2/1" } //"Pacific Standard Time",
        :alias { "te/zoneStrings/2/4" } //"PDT",
        :alias { "te/zoneStrings/2/5" } //"Los Angeles",
    }
    testAliasToTree:alias{"/ICUDATA-coll/en/collations"}

}

//eof


