// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/cupertino.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  test('CupertinoTextTheme matches Apple Design resources', () {
    // Check the default cupertino text theme against the style values
    // Values derived from https://developer.apple.com/design/resources/.

    const CupertinoTextThemeData theme = CupertinoTextThemeData();
    const FontWeight normal = FontWeight.normal;
    const FontWeight regular = FontWeight.w400;
    const FontWeight medium = FontWeight.w500;
    const FontWeight semiBold = FontWeight.w600;
    const FontWeight bold = FontWeight.w700;

    // TextStyle 17 -0.41
    expect(theme.textStyle.fontSize, 17);
    expect(theme.textStyle.fontFamily, 'CupertinoSystemText');
    expect(theme.textStyle.letterSpacing, -0.41);
    expect(theme.textStyle.fontWeight, null);

    // ActionTextStyle 17 -0.41
    expect(theme.actionTextStyle.fontSize, 17);
    expect(theme.actionTextStyle.fontFamily, 'CupertinoSystemText');
    expect(theme.actionTextStyle.letterSpacing, -0.41);
    expect(theme.actionTextStyle.fontWeight, null);

    // TextStyle 17 -0.41
    expect(theme.tabLabelTextStyle.fontSize, 10);
    expect(theme.tabLabelTextStyle.fontFamily, 'CupertinoSystemText');
    expect(theme.tabLabelTextStyle.letterSpacing, -0.24);
    expect(theme.tabLabelTextStyle.fontWeight, medium);

    // NavTitle SemiBold 17 -0.41
    expect(theme.navTitleTextStyle.fontSize, 17);
    expect(theme.navTitleTextStyle.fontFamily, 'CupertinoSystemText');
    expect(theme.navTitleTextStyle.letterSpacing, -0.41);
    expect(theme.navTitleTextStyle.fontWeight, semiBold);

    // NavLargeTitle Bold 34 0.41
    expect(theme.navLargeTitleTextStyle.fontSize, 34);
    expect(theme.navLargeTitleTextStyle.fontFamily, 'CupertinoSystemDisplay');
    expect(theme.navLargeTitleTextStyle.letterSpacing, 0.38);
    expect(theme.navLargeTitleTextStyle.fontWeight, bold);

    // Picker Regular 21 -0.6
    expect(theme.pickerTextStyle.fontSize, 21);
    expect(theme.pickerTextStyle.fontFamily, 'CupertinoSystemDisplay');
    expect(theme.pickerTextStyle.letterSpacing, -0.6);
    expect(theme.pickerTextStyle.fontWeight, regular);

    // DateTimePicker Normal 21
    expect(theme.dateTimePickerTextStyle.fontSize, 21);
    expect(theme.dateTimePickerTextStyle.fontFamily, 'CupertinoSystemDisplay');
    expect(theme.dateTimePickerTextStyle.letterSpacing, 0.4);
    expect(theme.dateTimePickerTextStyle.fontWeight, normal);
  });
}
