// 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/material.dart';
import 'package:flutter_api_samples/material/segmented_button/segmented_button.1.dart'
    as example;
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('Can use SegmentedButton.styleFrom to customize SegmentedButton', (WidgetTester tester) async {
    await tester.pumpWidget(
      const example.SegmentedButtonApp(),
    );

    final Color unselectedBackgroundColor = Colors.grey[200]!;
    const Color unselectedForegroundColor = Colors.red;
    const Color selectedBackgroundColor = Colors.green;
    const Color selectedForegroundColor = Colors.white;

    Material getMaterial(String text) {
      return tester.widget<Material>(find.ancestor(
        of: find.text(text),
        matching: find.byType(Material),
      ).first);
    }

    // Verify the unselected button style.
    expect(getMaterial('Day').textStyle?.color, unselectedForegroundColor);
    expect(getMaterial('Day').color, unselectedBackgroundColor);

    // Verify the selected button style.
    expect(getMaterial('Week').textStyle?.color, selectedForegroundColor);
    expect(getMaterial('Week').color, selectedBackgroundColor);
  });
}
