// Copyright (c) 2012, 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.

library dartdoc_search_test;

// TODO(rnystrom): Use "package:" URL (#4968).
import '../../../../../pkg/expect/lib/expect.dart';
import '../lib/src/dartdoc/nav.dart';
import '../lib/src/client/search.dart';

const String URL = 'dummy-url';

testTopLevelVsMembers() {
	var search = new SearchText('timer');
	var match = obtainMatch(search, 'timer');
	// Matching a top-level field 'timer';
	var topLevelResult = new Result(match, FIELD, URL);
	// Matching a member field 'timer' in 'Foo';
	var memberResult = new Result(match, FIELD, URL, type: 'Foo');
	Expect.equals(-1, resultComparator(topLevelResult, memberResult),
		"Top level fields should be preferred to member fields");
}

testTopLevelFullVsPrefix() {
	var search = new SearchText('cancel');
	var fullMatch = obtainMatch(search, 'cancel');
	var prefixMatch = obtainMatch(search, 'cancelable');
	// Matching a top-level method 'cancel';
	var fullResult = new Result(fullMatch, METHOD, URL);
	// Matching a top-level method 'cancelable';
	var prefixResult = new Result(prefixMatch, METHOD, URL);
	Expect.equals(-1, resultComparator(fullResult, prefixResult),
		"Full matches should be preferred to prefix matches");
}

testMemberFullVsPrefix() {
	var search = new SearchText('cancel');
	var fullMatch = obtainMatch(search, 'cancel');
	var prefixMatch = obtainMatch(search, 'cancelable');
	// Matching a member method 'cancel' in 'Isolate';
	var fullResult = new Result(fullMatch, METHOD, URL, type: 'Isolate');
	// Matching a member field 'cancelable' in 'Event';
	var prefixResult = new Result(prefixMatch, FIELD, URL, type: 'Event');
	Expect.equals(-1, resultComparator(fullResult, prefixResult),
		"Full matches should be preferred to prefix matches");
}

void main() {
	testTopLevelVsMembers();
	testTopLevelFullVsPrefix();
	testMemberFullVsPrefix();
}
