<?php 
/*******************************************************************************
 * Copyright (c) 2010 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
 *******************************************************************************/

require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
$App = new App();

require_once '../classes/Proposal.class.php';
require_once '../classes/TestRunner.class.php';

class ProposalTests extends TestCase {
	function testExtractScope() {
		$this->assertEquals("Junk", Proposal::extractScope("bogusurl", "stuff <h2>Scope</h2>Junk<h2>Description</h2> More stuff"));
	}
	
}

$App = new App();

$runner = new TestRunner("ProposalTests");
$runner->run_tests();

?>