// 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();
}
