// 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/foundation.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  test('test Category constructor', () {
    const sections = <String>['First section', 'Second section', 'Third section'];
    const category = Category(sections);
    expect(category.sections, sections);
  });
  test('test DocumentationIcon constructor', () {
    const docIcon = DocumentationIcon('Test String');
    expect(docIcon.url, contains('Test String'));
  });

  test('test Summary constructor', () {
    const summary = Summary('Test String');
    expect(summary.text, contains('Test String'));
  });
}
