// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:io';

import 'package:analysis_server/src/utilities/profiling.dart';
import 'package:test/test.dart';

main() {
  group('ProcessProfiler', () {
    // Skip on windows.
    if (Platform.isWindows) {
      return;
    }

    test('getProfilerForPlatform', () async {
      expect(ProcessProfiler.getProfilerForPlatform(), isNotNull);
    });

    test('getProcessUsage', () async {
      ProcessProfiler profiler = ProcessProfiler.getProfilerForPlatform();
      UsageInfo info = await profiler.getProcessUsage(pid);

      expect(info, isNotNull);
      expect(info.cpuPercentage, greaterThanOrEqualTo(0.0));
      expect(info.memoryKB, greaterThanOrEqualTo(0));
    });
  });
}
