// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

let listFormat = new Intl.ListFormat();
// The default style is 'long'
assertEquals('long', listFormat.resolvedOptions().style);

// The default type is 'conjunction'
assertEquals('conjunction', listFormat.resolvedOptions().type);

assertEquals(
    'short',
    (new Intl.ListFormat(['sr'], {style: 'short'}))
        .resolvedOptions().style);

assertEquals(
    'conjunction',
    (new Intl.ListFormat(['sr'], {style: 'short'}))
        .resolvedOptions().type);

assertEquals(
    'long',
    (new Intl.ListFormat(['sr'], {style: 'long'}))
        .resolvedOptions().style);

assertEquals(
    'conjunction',
    (new Intl.ListFormat(['sr'], {style: 'long'}))
        .resolvedOptions().type);

assertEquals(
    'conjunction',
    (new Intl.ListFormat(['sr'], {type: 'conjunction'}))
        .resolvedOptions().type);

assertEquals(
    'long',
    (new Intl.ListFormat(['sr'], {type: 'conjunction'}))
        .resolvedOptions().style);

assertEquals(
    'disjunction',
    (new Intl.ListFormat(['sr'], {type: 'disjunction'}))
        .resolvedOptions().type);

assertEquals(
    'long',
    (new Intl.ListFormat(['sr'], {type: 'disjunction'}))
        .resolvedOptions().style);

assertEquals(
    'unit',
    (new Intl.ListFormat(['sr'], {type: 'unit'}))
        .resolvedOptions().type);

assertEquals(
    'long',
    (new Intl.ListFormat(['sr'], {type: 'unit'}))
        .resolvedOptions().style);

assertEquals(
    'conjunction',
    (new Intl.ListFormat(['sr'], {style: 'long', type: 'conjunction'}))
        .resolvedOptions().type);

assertEquals(
    'long',
    (new Intl.ListFormat(['sr'], {style: 'long', type: 'conjunction'}))
        .resolvedOptions().style);

assertEquals(
    'conjunction',
    (new Intl.ListFormat(['sr'], {style: 'short', type: 'conjunction'}))
        .resolvedOptions().type);

assertEquals(
    'short',
    (new Intl.ListFormat(['sr'], {style: 'short', type: 'conjunction'}))
        .resolvedOptions().style);

assertEquals(
    'disjunction',
    (new Intl.ListFormat(['sr'], {style: 'long', type: 'disjunction'}))
        .resolvedOptions().type);

assertEquals(
    'long',
    (new Intl.ListFormat(['sr'], {style: 'long', type: 'disjunction'}))
        .resolvedOptions().style);

assertEquals(
    'disjunction',
    (new Intl.ListFormat(['sr'], {style: 'short', type: 'disjunction'}))
        .resolvedOptions().type);

assertEquals(
    'short',
    (new Intl.ListFormat(['sr'], {style: 'short', type: 'disjunction'}))
        .resolvedOptions().style);

assertEquals(
    'unit',
    (new Intl.ListFormat(['sr'], {style: 'long', type: 'unit'}))
        .resolvedOptions().type);

assertEquals(
    'long',
    (new Intl.ListFormat(['sr'], {style: 'long', type: 'unit'}))
        .resolvedOptions().style);

assertEquals(
    'unit',
    (new Intl.ListFormat(['sr'], {style: 'short', type: 'unit'}))
        .resolvedOptions().type);

assertEquals(
    'short',
    (new Intl.ListFormat(['sr'], {style: 'short', type: 'unit'}))
        .resolvedOptions().style);

assertEquals(
    'unit',
    (new Intl.ListFormat(['sr'], {style: 'narrow', type: 'unit'}))
        .resolvedOptions().type);

assertEquals(
    'narrow',
    (new Intl.ListFormat(['sr'], {style: 'narrow', type: 'unit'}))
        .resolvedOptions().style);

assertEquals(
    'ar',
    (new Intl.ListFormat(['ar'])).resolvedOptions().locale);

assertEquals(
    'ar',
    (new Intl.ListFormat(['ar', 'en'])).resolvedOptions().locale);

assertEquals(
    'fr',
    (new Intl.ListFormat(['fr', 'en'])).resolvedOptions().locale);

assertEquals(
    'ar',
    (new Intl.ListFormat(['xyz', 'ar'])).resolvedOptions().locale);

assertEquals(
    'ar',
    (new Intl.ListFormat(['i-default', 'ar'])).resolvedOptions().locale);
