blob: 496697a01e3d5dbe5ea97b90ae40469fa7261c90 [file] [log] [blame]
// Copyright (c) 2014, 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.
/// Test that poi.dart finds the right element.
library trydart.poi_find_test;
import 'dart:io' show
Platform;
import 'dart:async' show
Future;
import 'package:try/poi/poi.dart' as poi;
import 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';
import 'package:compiler/src/elements/elements.dart' show
Element;
import 'package:compiler/src/source_file_provider.dart' show
FormattingDiagnosticHandler;
Future testPoi() {
Uri script = Platform.script.resolve('data/empty_main.dart');
FormattingDiagnosticHandler handler = new FormattingDiagnosticHandler();
handler.verbose = false;
Future future = poi.runPoi(script, 225, handler.provider, handler);
return future.then((Element element) {
Uri foundScript = element.compilationUnit.script.resourceUri;
Expect.stringEquals('$script', '$foundScript');
Expect.stringEquals('main', element.name);
String source = handler.provider.sourceFiles['$script'].slowText();
final int position = source.indexOf('main()');
Expect.isTrue(position > 0, '$position > 0');
var token;
// When the cursor is at the same character offset as "main()", it
// corresponds to having the cursor just before "main()". So we find the
// "void" token.
token = poi.findToken(element, position);
Expect.isNotNull(token, 'token');
Expect.stringEquals('void', token.value);
// Cursor at position + 1 corresponds to having the cursor just after "m"
// in "main()". So we find the "main" token.
token = poi.findToken(element, position + 1);
Expect.isNotNull(token, 'token');
Expect.equals(position, token.charOffset);
Expect.stringEquals('main', token.value);
// This corresponds to the cursor after "main", but before "()" in
// "main()". So we find the "main" token.
token = poi.findToken(element, position + 4);
Expect.isNotNull(token, 'token');
Expect.equals(position, token.charOffset);
Expect.stringEquals('main', token.value);
// This corresponds to the cursor after "(" in "main()". So we find the "("
// token.
token = poi.findToken(element, position + 5);
Expect.isNotNull(token, 'token');
Expect.equals(position + 4, token.charOffset, '$token');
Expect.stringEquals('(', token.value);
});
}
void main() {
asyncTest(testPoi);
}