SF.net SVN: postfixadmin:[581] trunk
Brought to you by:
christian_boltz,
gingerdog
From: <Gin...@us...> - 2009-03-15 21:25:49
|
Revision: 581 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=581&view=rev Author: GingerDog Date: 2009-03-15 21:24:56 +0000 (Sun, 15 Mar 2009) Log Message: ----------- tests: add initial simpletest unit tests for the xmlrpc stuff Added Paths: ----------- trunk/tests/ trunk/tests/RemoteTest.php trunk/tests/RemoteVacationTest.php trunk/tests/common.php trunk/tests/run.php trunk/tests/simpletest/ trunk/tests/simpletest/BACKLOG trunk/tests/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE trunk/tests/simpletest/LICENSE trunk/tests/simpletest/README trunk/tests/simpletest/TODO trunk/tests/simpletest/VERSION trunk/tests/simpletest/authentication.php trunk/tests/simpletest/browser.php trunk/tests/simpletest/collector.php trunk/tests/simpletest/compatibility.php trunk/tests/simpletest/cookies.php trunk/tests/simpletest/detached.php trunk/tests/simpletest/docs/ trunk/tests/simpletest/docs/en/ trunk/tests/simpletest/docs/en/authentication_documentation.html trunk/tests/simpletest/docs/en/browser_documentation.html trunk/tests/simpletest/docs/en/docs.css trunk/tests/simpletest/docs/en/expectation_documentation.html trunk/tests/simpletest/docs/en/form_testing_documentation.html trunk/tests/simpletest/docs/en/group_test_documentation.html trunk/tests/simpletest/docs/en/index.html trunk/tests/simpletest/docs/en/mock_objects_documentation.html trunk/tests/simpletest/docs/en/overview.html trunk/tests/simpletest/docs/en/partial_mocks_documentation.html trunk/tests/simpletest/docs/en/reporter_documentation.html trunk/tests/simpletest/docs/en/unit_test_documentation.html trunk/tests/simpletest/docs/en/web_tester_documentation.html trunk/tests/simpletest/docs/fr/ trunk/tests/simpletest/docs/fr/docs.css trunk/tests/simpletest/docs/lastcraft/ trunk/tests/simpletest/docs/lastcraft/README trunk/tests/simpletest/docs/onpk/ trunk/tests/simpletest/docs/onpk/README trunk/tests/simpletest/docs/pkg/ trunk/tests/simpletest/docs/pkg/README trunk/tests/simpletest/docs/simpletest.org/ trunk/tests/simpletest/docs/simpletest.org/README trunk/tests/simpletest/docs/simpletest.org/images/ trunk/tests/simpletest/docs/simpletest.org/images/book-domain-driven-design.jpg trunk/tests/simpletest/docs/simpletest.org/images/book-guide-to-php-design-patterns.jpg trunk/tests/simpletest/docs/simpletest.org/images/book-the-php-anthology-object-oriented-php-solutions.jpg trunk/tests/simpletest/docs/simpletest.org/images/quote.png trunk/tests/simpletest/docs/simpletest.org/images/simpletest-download.png trunk/tests/simpletest/docs/simpletest.org/images/simpletest-logo.png trunk/tests/simpletest/docs/simpletest.org/images/simpletest-start-testing.png trunk/tests/simpletest/docs/simpletest.org/images/simpletest-support.png trunk/tests/simpletest/docs/simpletest.org/images/test-in-cli.png trunk/tests/simpletest/docs/simpletest.org/images/test-with-1-fail.png trunk/tests/simpletest/docs/simpletest.org/images/test-with-1-pass.png trunk/tests/simpletest/docs/simpletest.org/index.html trunk/tests/simpletest/docs/simpletest.org/simpletest.css trunk/tests/simpletest/docs/source/ trunk/tests/simpletest/docs/source/en/ trunk/tests/simpletest/docs/source/en/about.xml trunk/tests/simpletest/docs/source/en/authentication_documentation.xml trunk/tests/simpletest/docs/source/en/books_website.xml trunk/tests/simpletest/docs/source/en/boundary_classes_tutorial.xml trunk/tests/simpletest/docs/source/en/browser_documentation.xml trunk/tests/simpletest/docs/source/en/display_subclass_tutorial.xml trunk/tests/simpletest/docs/source/en/download_website.xml trunk/tests/simpletest/docs/source/en/expectation_documentation.xml trunk/tests/simpletest/docs/source/en/first_test_tutorial.xml trunk/tests/simpletest/docs/source/en/form_testing_documentation.xml trunk/tests/simpletest/docs/source/en/gain_control_tutorial.xml trunk/tests/simpletest/docs/source/en/group_test_documentation.xml trunk/tests/simpletest/docs/source/en/group_test_tutorial.xml trunk/tests/simpletest/docs/source/en/improving_design_tutorial.xml trunk/tests/simpletest/docs/source/en/index.xml trunk/tests/simpletest/docs/source/en/intro.xml trunk/tests/simpletest/docs/source/en/mock_objects_documentation.xml trunk/tests/simpletest/docs/source/en/mock_objects_tutorial.xml trunk/tests/simpletest/docs/source/en/overview.xml trunk/tests/simpletest/docs/source/en/partial_mocks_documentation.xml trunk/tests/simpletest/docs/source/en/reporter_documentation.xml trunk/tests/simpletest/docs/source/en/simple_test.xml trunk/tests/simpletest/docs/source/en/subclass_tutorial.xml trunk/tests/simpletest/docs/source/en/support_website.xml trunk/tests/simpletest/docs/source/en/unit_test_documentation.xml trunk/tests/simpletest/docs/source/en/web_tester_documentation.xml trunk/tests/simpletest/docs/source/fr/ trunk/tests/simpletest/docs/source/fr/authentication_documentation.xml trunk/tests/simpletest/docs/source/fr/books_website.xml trunk/tests/simpletest/docs/source/fr/boundary_classes_tutorial.xml trunk/tests/simpletest/docs/source/fr/browser_documentation.xml trunk/tests/simpletest/docs/source/fr/display_subclass_tutorial.xml trunk/tests/simpletest/docs/source/fr/download_website.xml trunk/tests/simpletest/docs/source/fr/expectation_documentation.xml trunk/tests/simpletest/docs/source/fr/first_test_tutorial.xml trunk/tests/simpletest/docs/source/fr/form_testing_documentation.xml trunk/tests/simpletest/docs/source/fr/gain_control_tutorial.xml trunk/tests/simpletest/docs/source/fr/group_test_documentation.xml trunk/tests/simpletest/docs/source/fr/group_test_tutorial.xml trunk/tests/simpletest/docs/source/fr/improving_design_tutorial.xml trunk/tests/simpletest/docs/source/fr/index.xml trunk/tests/simpletest/docs/source/fr/intro.xml trunk/tests/simpletest/docs/source/fr/mock_objects_documentation.xml trunk/tests/simpletest/docs/source/fr/mock_objects_tutorial.xml trunk/tests/simpletest/docs/source/fr/overview.xml trunk/tests/simpletest/docs/source/fr/partial_mocks_documentation.xml trunk/tests/simpletest/docs/source/fr/reporter_documentation.xml trunk/tests/simpletest/docs/source/fr/server_stubs_documentation.xml trunk/tests/simpletest/docs/source/fr/simple_test.xml trunk/tests/simpletest/docs/source/fr/subclass_tutorial.xml trunk/tests/simpletest/docs/source/fr/support_website.xml trunk/tests/simpletest/docs/source/fr/unit_test_documentation.xml trunk/tests/simpletest/docs/source/fr/web_tester_documentation.xml trunk/tests/simpletest/dumper.php trunk/tests/simpletest/eclipse.php trunk/tests/simpletest/encoding.php trunk/tests/simpletest/errors.php trunk/tests/simpletest/exceptions.php trunk/tests/simpletest/expectation.php trunk/tests/simpletest/extensions/ trunk/tests/simpletest/extensions/pear_test_case.php trunk/tests/simpletest/extensions/phpunit_test_case.php trunk/tests/simpletest/form.php trunk/tests/simpletest/frames.php trunk/tests/simpletest/http.php trunk/tests/simpletest/invoker.php trunk/tests/simpletest/mock_objects.php trunk/tests/simpletest/packages/ trunk/tests/simpletest/packages/README trunk/tests/simpletest/packages/build_tarball.sh trunk/tests/simpletest/packages/bundled_docs.xslt trunk/tests/simpletest/packages/bundled_map.xml trunk/tests/simpletest/packages/generate_package.php trunk/tests/simpletest/packages/lastcraft.xslt trunk/tests/simpletest/packages/make_bundled_docs.sh trunk/tests/simpletest/packages/make_bundled_docs_with_xalan.sh trunk/tests/simpletest/packages/make_lastcraft_docs.sh trunk/tests/simpletest/packages/make_phpdoc_docs.sh trunk/tests/simpletest/packages/onpk/ trunk/tests/simpletest/packages/onpk/map_onpk.xml trunk/tests/simpletest/packages/onpk/onpk.xslt trunk/tests/simpletest/packages/onpk/transform_all_onpk.php trunk/tests/simpletest/packages/package.xml trunk/tests/simpletest/packages/pear_package_create.php trunk/tests/simpletest/packages/phpdoc_docs.xslt trunk/tests/simpletest/packages/simpletest.ini trunk/tests/simpletest/packages/simpletest.org/ trunk/tests/simpletest/packages/simpletest.org/index.php trunk/tests/simpletest/packages/simpletest.org/map.xml trunk/tests/simpletest/packages/simpletest.org/package.php trunk/tests/simpletest/packages/simpletest.org/template.html trunk/tests/simpletest/packages/simpletest.org/test/ trunk/tests/simpletest/packages/simpletest.org/test/package/ trunk/tests/simpletest/packages/simpletest.org/test/package/content_without_section.xml trunk/tests/simpletest/packages/simpletest.org/test/package/here_download.xml trunk/tests/simpletest/packages/simpletest.org/test/package/here_overview.xml trunk/tests/simpletest/packages/simpletest.org/test/package/here_simpletest.xml trunk/tests/simpletest/packages/simpletest.org/test/package/here_start_testing.xml trunk/tests/simpletest/packages/simpletest.org/test/package/here_support.xml trunk/tests/simpletest/packages/simpletest.org/test/package/here_unit-tester.xml trunk/tests/simpletest/packages/simpletest.org/test/package/map.xml trunk/tests/simpletest/packages/simpletest.org/test/package/one_section_with_php_code.xml trunk/tests/simpletest/packages/simpletest.org/test/package_test.php trunk/tests/simpletest/packages/site_map.xml trunk/tests/simpletest/packages/transform_all_lastcraft.php trunk/tests/simpletest/page.php trunk/tests/simpletest/parser.php trunk/tests/simpletest/reflection_php4.php trunk/tests/simpletest/reflection_php5.php trunk/tests/simpletest/remote.php trunk/tests/simpletest/reporter.php trunk/tests/simpletest/scorer.php trunk/tests/simpletest/selector.php trunk/tests/simpletest/shell_tester.php trunk/tests/simpletest/simpletest.php trunk/tests/simpletest/socket.php trunk/tests/simpletest/tag.php trunk/tests/simpletest/test/ trunk/tests/simpletest/test/acceptance_test.php trunk/tests/simpletest/test/adapter_test.php trunk/tests/simpletest/test/all_tests.php trunk/tests/simpletest/test/authentication_test.php trunk/tests/simpletest/test/browser_test.php trunk/tests/simpletest/test/collector_test.php trunk/tests/simpletest/test/compatibility_test.php trunk/tests/simpletest/test/cookies_test.php trunk/tests/simpletest/test/detached_test.php trunk/tests/simpletest/test/dumper_test.php trunk/tests/simpletest/test/eclipse_test.php trunk/tests/simpletest/test/encoding_test.php trunk/tests/simpletest/test/errors_test.php trunk/tests/simpletest/test/exceptions_test.php trunk/tests/simpletest/test/expectation_test.php trunk/tests/simpletest/test/form_test.php trunk/tests/simpletest/test/frames_test.php trunk/tests/simpletest/test/http_test.php trunk/tests/simpletest/test/interfaces_test.php trunk/tests/simpletest/test/live_test.php trunk/tests/simpletest/test/mock_objects_test.php trunk/tests/simpletest/test/page_test.php trunk/tests/simpletest/test/parse_error_test.php trunk/tests/simpletest/test/parser_test.php trunk/tests/simpletest/test/reflection_php4_test.php trunk/tests/simpletest/test/reflection_php5_test.php trunk/tests/simpletest/test/remote_test.php trunk/tests/simpletest/test/shell_test.php trunk/tests/simpletest/test/shell_tester_test.php trunk/tests/simpletest/test/simpletest_test.php trunk/tests/simpletest/test/site/ trunk/tests/simpletest/test/site/1.html trunk/tests/simpletest/test/site/2.html trunk/tests/simpletest/test/site/3.html trunk/tests/simpletest/test/site/base_change_redirect.php trunk/tests/simpletest/test/site/cookie_based_counter.php trunk/tests/simpletest/test/site/counting_frameset.html trunk/tests/simpletest/test/site/double_base_change_redirect.php trunk/tests/simpletest/test/site/form.html trunk/tests/simpletest/test/site/form_data_encoded_form.html trunk/tests/simpletest/test/site/form_with_false_defaults.html trunk/tests/simpletest/test/site/form_with_mixed_post_and_get.html trunk/tests/simpletest/test/site/form_with_tricky_defaults.html trunk/tests/simpletest/test/site/form_with_unnamed_submit.html trunk/tests/simpletest/test/site/form_without_action.php trunk/tests/simpletest/test/site/frame_a.html trunk/tests/simpletest/test/site/frame_b.html trunk/tests/simpletest/test/site/frame_links.html trunk/tests/simpletest/test/site/frameset.html trunk/tests/simpletest/test/site/front_controller_style/ trunk/tests/simpletest/test/site/front_controller_style/a_page.php trunk/tests/simpletest/test/site/front_controller_style/index.php trunk/tests/simpletest/test/site/front_controller_style/show_request.php trunk/tests/simpletest/test/site/link_confirm.php trunk/tests/simpletest/test/site/local_redirect.php trunk/tests/simpletest/test/site/messy_frameset.html trunk/tests/simpletest/test/site/multiple_widget_form.html trunk/tests/simpletest/test/site/nested_frameset.html trunk/tests/simpletest/test/site/network_confirm.php trunk/tests/simpletest/test/site/one_page_frameset.html trunk/tests/simpletest/test/site/page_request.php trunk/tests/simpletest/test/site/path/ trunk/tests/simpletest/test/site/path/base_change_redirect.php trunk/tests/simpletest/test/site/path/network_confirm.php trunk/tests/simpletest/test/site/path/show_cookies.php trunk/tests/simpletest/test/site/protected/ trunk/tests/simpletest/test/site/protected/.htaccess trunk/tests/simpletest/test/site/protected/.htpasswd trunk/tests/simpletest/test/site/protected/1.html trunk/tests/simpletest/test/site/protected/2.html trunk/tests/simpletest/test/site/protected/3.html trunk/tests/simpletest/test/site/protected/htaccess trunk/tests/simpletest/test/site/protected/local_redirect.php trunk/tests/simpletest/test/site/protected/network_confirm.php trunk/tests/simpletest/test/site/redirect.php trunk/tests/simpletest/test/site/savant_style_form.html trunk/tests/simpletest/test/site/search.png trunk/tests/simpletest/test/site/self_form.php trunk/tests/simpletest/test/site/set_cookies.php trunk/tests/simpletest/test/site/slow_page.php trunk/tests/simpletest/test/site/timestamp.php trunk/tests/simpletest/test/site/upload_form.html trunk/tests/simpletest/test/site/upload_handler.php trunk/tests/simpletest/test/socket_test.php trunk/tests/simpletest/test/support/ trunk/tests/simpletest/test/support/collector/ trunk/tests/simpletest/test/support/collector/collectable.1 trunk/tests/simpletest/test/support/collector/collectable.2 trunk/tests/simpletest/test/support/latin1_sample trunk/tests/simpletest/test/support/spl_examples.php trunk/tests/simpletest/test/support/supplementary_upload_sample.txt trunk/tests/simpletest/test/support/test1.php trunk/tests/simpletest/test/support/upload_sample.txt trunk/tests/simpletest/test/tag_test.php trunk/tests/simpletest/test/test_groups.php trunk/tests/simpletest/test/test_with_parse_error.php trunk/tests/simpletest/test/unit_tester_test.php trunk/tests/simpletest/test/unit_tests.php trunk/tests/simpletest/test/url_test.php trunk/tests/simpletest/test/user_agent_test.php trunk/tests/simpletest/test/visual_test.php trunk/tests/simpletest/test/web_tester_test.php trunk/tests/simpletest/test/xml_test.php trunk/tests/simpletest/test_case.php trunk/tests/simpletest/ui/ trunk/tests/simpletest/ui/array_reporter/ trunk/tests/simpletest/ui/array_reporter/sample_test.php trunk/tests/simpletest/ui/array_reporter/test.php trunk/tests/simpletest/ui/array_reporter.php trunk/tests/simpletest/ui/colortext_reporter.php trunk/tests/simpletest/ui/css/ trunk/tests/simpletest/ui/css/webunit.css trunk/tests/simpletest/ui/img/ trunk/tests/simpletest/ui/img/wait.gif trunk/tests/simpletest/ui/js/ trunk/tests/simpletest/ui/js/tests/ trunk/tests/simpletest/ui/js/tests/TestOfWebunit.js.html trunk/tests/simpletest/ui/js/webunit.js trunk/tests/simpletest/ui/js/x.js trunk/tests/simpletest/ui/webunit_reporter.php trunk/tests/simpletest/unit_tester.php trunk/tests/simpletest/url.php trunk/tests/simpletest/user_agent.php trunk/tests/simpletest/web_tester.php trunk/tests/simpletest/xml.php Added: trunk/tests/RemoteTest.php =================================================================== --- trunk/tests/RemoteTest.php (rev 0) +++ trunk/tests/RemoteTest.php 2009-03-15 21:24:56 UTC (rev 581) @@ -0,0 +1,82 @@ +<?php + +require_once('common.php'); + +require_once('simpletest/unit_tester.php'); +require_once('Zend/XmlRpc/Client.php'); +require_once('Zend/Http/Client.php'); +require_once('Zend/Registry.php'); + +class RemoteTest extends UnitTestCase { + + protected $server_url = 'http://orange/david/postfixadmin/trunk/xmlrpc.php'; + protected $username = 'ro...@ex...'; + protected $password = 'patchthedog'; + + /* xmlrpc objects... */ + protected $user; + protected $vacation; + protected $alias; + + public function __construct() { + parent::__construct(); + + } + + public function setUp() { + parent::setUp(); + + // ensure a user exists as per the above... + + $table_vacation = table_by_key('vacation'); + $table_alias = table_by_key('alias'); + $table_mailbox = table_by_key('mailbox'); + $table_domain = table_by_key('domain'); + $username = escape_string($this->username); + $password = escape_string(pacrypt($this->password)); + + db_query("DELETE FROM $table_vacation WHERE email = '$username'"); + db_query("DELETE FROM $table_alias WHERE domain = 'example.com'"); + db_query("DELETE FROM $table_mailbox WHERE domain = 'example.com'"); + db_query("DELETE FROM $table_domain WHERE domain = 'example.com'"); + + // create new db records.. + $result = db_query("INSERT INTO $table_domain (domain, aliases, mailboxes) VALUES ('example.com', 100, 100)"); + if($result['rows'] != 1) { + die("Failed to add domain to db...."); + } + + $result = db_query("INSERT INTO $table_mailbox (username, password, name, local_part, domain) VALUES ('$username', '$password', 'test user', 'roger', 'example.com')"); + if($result['rows'] != 1) { + die("Failed to add user to db...."); + } + + $result = db_query("INSERT INTO $table_alias (address, goto, domain) VALUES ('$username', '$username', 'example.com')"); + if($result['rows'] != 1) { + die("Failed to add alias to db...."); + } + + try { + $this->xmlrpc_client = new Zend_XmlRpc_Client($this->server_url); + $http_client = $this->xmlrpc_client->getHttpClient(); + $http_client->setCookieJar(); + + $login_object = $this->xmlrpc_client->getProxy('login'); + $success = $login_object->login($this->username, $this->password); + + if(!$success) { + var_dump($success); + die("Failed to login to xmlrpc interface"); + } + + $this->user = $this->xmlrpc_client->getProxy('user'); + $this->alias = $this->xmlrpc_client->getProxy('alias'); + $this->vacation = $this->xmlrpc_client->getProxy('vacation'); + } + catch(Exception $e) { + var_dump($e); + var_dump($this->xmlrpc_client->getHttpClient()->getLastResponse()->getBody()); + die("Error setting up.."); + } + } +} Added: trunk/tests/RemoteVacationTest.php =================================================================== --- trunk/tests/RemoteVacationTest.php (rev 0) +++ trunk/tests/RemoteVacationTest.php 2009-03-15 21:24:56 UTC (rev 581) @@ -0,0 +1,81 @@ +<?php +/** + * Test for Postfixadmin - remote vacation stuff + * + * @package tests + */ + +require_once('RemoteTest.php'); + +class RemoteVacationTest extends RemoteTest { + + public function __construct() { + parent::__construct(); + global $CONF; + + // Ensure config.inc.php is vaguely correct. + if($CONF['vacation'] != 'YES' || $CONF['vacation_control'] != "YES") { + die("Cannot run tests; vacation not enabled - see config.inc.php"); + } + if($CONF['vacation_domain'] != 'autoreply.example.com') { + die("Cannot run tests; vacation_domain is not set to autoreply.example.com - see config.inc.php"); + } + } + + + /** + * Adds the test recipient data to the database. + */ + public function setUp() { + parent::setUp(); + } + public function tearDown() { + parent::tearDown(); + } + + public function testIsVacationSupported() { + try { + $this->assertTrue($this->vacation->isVacationSupported()); + } + catch(Exception $e){ + var_dump($e); + var_dump($this->xmlrpc_client->getHttpClient()->getLastResponse()->getBody()); + die("fail.."); + } + } + + public function testCheckVacation() { + $this->assertFalse($this->vacation->checkVacation()); + } + + + public function testGetDetails() { + $details = $this->vacation->getDetails(); + $this->assertFalse($details); // empty by default (thansk to tearDown/setUp); + } + + public function testSetAway() { + try { + $this->assertFalse($this->vacation->checkVacation()); + $this->assertTrue($this->vacation->setAway('zzzz', 'aaaa')); + $this->assertTrue($this->vacation->checkVacation()); + } + catch(Exception $e) { + var_dump($this->xmlrpc_client->getHttpClient()->getLastResponse()->getBody()); + } + $details = $this->vacation->getDetails(); + $this->assertEqual($details['subject'], 'zzzz'); + $this->assertEqual($details['body'], 'aaaa'); + + $this->vacation->remove(); + $details = $this->vacation->getDetails(); + $this->assertEqual($details['subject'], 'zzzz'); + $this->assertEqual($details['body'], 'aaaa'); + + $this->vacation->setAway('subject', 'body'); + $details = $this->vacation->getDetails(); + $this->assertEqual($details['subject'], 'subject'); + $this->assertEqual($details['body'], 'body'); + } + +} Added: trunk/tests/common.php =================================================================== --- trunk/tests/common.php (rev 0) +++ trunk/tests/common.php 2009-03-15 21:24:56 UTC (rev 581) @@ -0,0 +1,4 @@ +<?php + +ini_set('include_path', ini_get('include_path') . ':' . dirname(__FILE__) . '/../'); +require_once(dirname(__FILE__) . '/../common.php'); Added: trunk/tests/run.php =================================================================== --- trunk/tests/run.php (rev 0) +++ trunk/tests/run.php 2009-03-15 21:24:56 UTC (rev 581) @@ -0,0 +1,15 @@ +<?php +/** + * Responsible for test suite... + * @package tests + */ +require_once(dirname(__FILE__) . '/common.php'); + +require_once('simpletest/reporter.php'); +require_once('simpletest/unit_tester.php'); + +$test = new GroupTest('Postfixadmin XMLRPC Unit Tests'); + +$test->addTestFile('./RemoteVacationTest.php'); + +exit($test->run(new TextReporter()) ? 0 : 1); Added: trunk/tests/simpletest/BACKLOG =================================================================== --- trunk/tests/simpletest/BACKLOG (rev 0) +++ trunk/tests/simpletest/BACKLOG 2009-03-15 21:24:56 UTC (rev 581) @@ -0,0 +1,37 @@ +BACKLOG +This is backed up stuff that defines the 1.0.1 release. + +$Id: BACKLOG,v 1.10 2006/11/20 23:44:36 lastcraft Exp $ + +Unit tester +----------- + +Reporter +-------- + +Mock objects +------------ +Fix new type hinting bug in PHP 5.0.2 and above (1). + +Parser +------ +Add U flag to regexes to allow unicode (3). + +Browser +------- +Add a file() loading command (4). +Change getUrls() to return more information (2). + +Web tester +---------- + +Documentation +------------- +Extension docs (1). +Integrate SpikeSource docs (4). +Write Eclipse plug-in guide (4). +Add page for projects that use or extend SimpleTest (2). + +Build +----- +Integrate German documentation (2). Added: trunk/tests/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE =================================================================== --- trunk/tests/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE (rev 0) +++ trunk/tests/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE 2009-03-15 21:24:56 UTC (rev 581) @@ -0,0 +1,340 @@ +Simple Test interface changes +============================= +Because the SimpleTest tool set is still evolving it is likely that tests +written with earlier versions will fail with the newest ones. The most +dramatic changes are in the alpha releases. Here is a list of possible +problems and their fixes... + +Method setWildcard() removed in mocks +------------------------------------- +Even setWildcard() has been removed in 1.0.1beta now. +If you want to test explicitely for a '*' string, then +simply pass in new IdenticalExpectation('*') instead. + +No method _getTest() on mocks +----------------------------- +This has finally been removed. It was a pretty esoteric +flex point anyway. It was there to allow the mocks to +work with other test tools, but no one does this. + +No method assertError(), assertNoErrors(), swallowErrors() +---------------------------------------------------------- +These have been deprecated in 1.0.1beta in favour of +expectError() and expectException(). assertNoErrors() is +redundant if you use expectError() as failures are now reported +immediately. + +No method TestCase::signal() +---------------------------- +This has been deprecated in favour of triggering an error or +throwing an exception. Deprecated as of 1.0.1beta. + +No method TestCase::sendMessage() +--------------------------------- +This has been deprecated as of 1.0.1beta. + +Failure to connect now emits failures +------------------------------------- +It used to be that you would have to use the +getTransferError() call on the web tester to see if +there was a socket level error in a fetch. This check +is now always carried out by the WebTestCase unless +the fetch is prefaced with WebTestCase::ignoreErrors(). +The ignore directive only lasts for test case fetching +action such as get() and click(). + +No method SimpleTestOptions::ignore() +------------------------------------- +This is deprecated in version 1.0.1beta and has been moved +to SimpleTest::ignore() as that is more readable. In +addition, parent classes are also ignored automatically. +If you are using PHP5 you can skip this directive simply +by marking your test case as abstract. + +No method assertCopy() +---------------------- +This is deprecated in 1.0.1 in favour of assertClone(). +The assertClone() method is slightly different in that +the objects must be identical, but without being a +reference. It is thus not a strict inversion of +assertReference(). + +Constructor wildcard override has no effect in mocks +---------------------------------------------------- +As of 1.0.1beta this is now set with setWildcard() instead +of in the constructor. + +No methods setStubBaseClass()/getStubBaseClass() +------------------------------------------------ +As mocks are now used instead of stubs, these methods +stopped working and are now removed as of the 1.0.1beta +release. The mock objects may be freely used instead. + +No method addPartialMockCode() +------------------------------ +The ability to insert arbitrary partial mock code +has been removed. This was a low value feature +causing needless complications. It was removed +in the 1.0.1beta release. + +No method setMockBaseClass() +---------------------------- +The ability to change the mock base class has been +scheduled for removal and is deprecated since the +1.0.1beta version. This was a rarely used feature +except as a workaround for PHP5 limitations. As +these limitations are being resolved it's hoped +that the bundled mocks can be used directly. + +No class Stub +------------- +Server stubs are deprecated from 1.0.1 as the mocks now +have exactly the same interface. Just use mock objects +instead. + +No class SimpleTestOptions +-------------------------- +This was replced by the shorter SimpleTest in 1.0.1beta1 +and is since deprecated. + +No file simple_test.php +----------------------- +This was renamed test_case.php in 1.0.1beta to more accurately +reflect it's purpose. This file should never be directly +included in test suites though, as it's part of the +underlying mechanics and has a tendency to be refactored. + +No class WantedPatternExpectation +--------------------------------- +This was deprecated in 1.0.1alpha in favour of the simpler +name PatternExpectation. + +No class NoUnwantedPatternExpectation +------------------------------------- +This was deprecated in 1.0.1alpha in favour of the simpler +name NoPatternExpectation. + +No method assertNoUnwantedPattern() +----------------------------------- +This has been renamed to assertNoPattern() in 1.0.1alpha and +the old form is deprecated. + +No method assertWantedPattern() +------------------------------- +This has been renamed to assertPattern() in 1.0.1alpha and +the old form is deprecated. + +No method assertExpectation() +----------------------------- +This was renamed as assert() in 1.0.1alpha and the old form +has been deprecated. + +No class WildcardExpectation +---------------------------- +This was a mostly internal class for the mock objects. It was +renamed AnythingExpectation to bring it closer to JMock and +NMock in version 1.0.1alpha. + +Missing UnitTestCase::assertErrorPattern() +------------------------------------------ +This method is deprecated for version 1.0.1 onwards. +This method has been subsumed by assertError() that can now +take an expectation. Simply pass a PatternExpectation +into assertError() to simulate the old behaviour. + +No HTML when matching page elements +----------------------------------- +This behaviour has been switched to using plain text as if it +were seen by the user of the browser. This means that HTML tags +are suppressed, entities are converted and whitespace is +normalised. This should make it easier to match items in forms. +Also images are replaced with their "alt" text so that they +can be matched as well. + +No method SimpleRunner::_getTestCase() +-------------------------------------- +This was made public as getTestCase() in 1.0RC2. + +No method restartSession() +-------------------------- +This was renamed to restart() in the WebTestCase, SimpleBrowser +and the underlying SimpleUserAgent in 1.0RC2. Because it was +undocumented anyway, no attempt was made at backward +compatibility. + +My custom test case ignored by tally() +-------------------------------------- +The _assertTrue method has had it's signature changed due to a bug +in the PHP 5.0.1 release. You must now use getTest() from within +that method to get the test case. Mock compatibility with other +unit testers is now deprecated as of 1.0.1alpha as PEAR::PHPUnit2 +should soon have mock support of it's own. + +Broken code extending SimpleRunner +---------------------------------- +This was replaced with SimpleScorer so that I could use the runner +name in another class. This happened in RC1 development and there +is no easy backward compatibility fix. The solution is simply to +extend SimpleScorer instead. + +Missing method getBaseCookieValue() +----------------------------------- +This was renamed getCurrentCookieValue() in RC1. + +Missing files from the SimpleTest suite +--------------------------------------- +Versions of SimpleTest prior to Beta6 required a SIMPLE_TEST constant +to point at the SimpleTest folder location before any of the toolset +was loaded. This is no longer documented as it is now unnecessary +for later versions. If you are using an earlier version you may +need this constant. Consult the documentation that was bundled with +the release that you are using or upgrade to Beta6 or later. + +No method SimpleBrowser::getCurrentUrl() +-------------------------------------- +This is replaced with the more versatile showRequest() for +debugging. It only existed in this context for version Beta5. +Later versions will have SimpleBrowser::getHistory() for tracking +paths through pages. It is renamed as getUrl() since 1.0RC1. + +No method Stub::setStubBaseClass() +---------------------------------- +This method has finally been removed in 1.0RC1. Use +SimpleTestOptions::setStubBaseClass() instead. + +No class CommandLineReporter +---------------------------- +This was renamed to TextReporter in Beta3 and the deprecated version +was removed in 1.0RC1. + +No method requireReturn() +------------------------- +This was deprecated in Beta3 and is now removed. + +No method expectCookie() +------------------------ +This method was abruptly removed in Beta4 so as to simplify the internals +until another mechanism can replace it. As a workaround it is necessary +to assert that the cookie has changed by setting it before the page +fetch and then assert the desired value. + +No method clickSubmitByFormId() +------------------------------- +This method had an incorrect name as no button was involved. It was +renamed to submitByFormId() in Beta4 and the old version deprecated. +Now removed. + +No method paintStart() or paintEnd() +------------------------------------ +You should only get this error if you have subclassed the lower level +reporting and test runner machinery. These methods have been broken +down into events for test methods, events for test cases and events +for group tests. The new methods are... + +paintStart() --> paintMethodStart(), paintCaseStart(), paintGroupStart() +paintEnd() --> paintMethodEnd(), paintCaseEnd(), paintGroupEnd() + +This change was made in Beta3, ironically to make it easier to subclass +the inner machinery. Simply duplicating the code you had in the previous +methods should provide a temporary fix. + +No class TestDisplay +-------------------- +This has been folded into SimpleReporter in Beta3 and is now deprecated. +It was removed in RC1. + +No method WebTestCase::fetch() +------------------------------ +This was renamed get() in Alpha8. It is removed in Beta3. + +No method submit() +------------------ +This has been renamed clickSubmit() in Beta1. The old method was +removed in Beta2. + +No method clearHistory() +------------------------ +This method is deprecated in Beta2 and removed in RC1. + +No method getCallCount() +------------------------ +This method has been deprecated since Beta1 and has now been +removed. There are now more ways to set expectations on counts +and so this method should be unecessery. Removed in RC1. + +Cannot find file * +------------------ +The following public name changes have occoured... + +simple_html_test.php --> reporter.php +simple_mock.php --> mock_objects.php +simple_unit.php --> unit_tester.php +simple_web.php --> web_tester.php + +The old names were deprecated in Alpha8 and removed in Beta1. + +No method attachObserver() +-------------------------- +Prior to the Alpha8 release the old internal observer pattern was +gutted and replaced with a visitor. This is to trade flexibility of +test case expansion against the ease of writing user interfaces. + +Code such as... + +$test = &new MyTestCase(); +$test->attachObserver(new TestHtmlDisplay()); +$test->run(); + +...should be rewritten as... + +$test = &new MyTestCase(); +$test->run(new HtmlReporter()); + +If you previously attached multiple observers then the workaround +is to run the tests twice, once with each, until they can be combined. +For one observer the old method is simulated in Alpha 8, but is +removed in Beta1. + +No class TestHtmlDisplay +------------------------ +This class has been renamed to HtmlReporter in Alpha8. It is supported, +but deprecated in Beta1 and removed in Beta2. If you have subclassed +the display for your own design, then you will have to extend this +class (HtmlReporter) instead. + +If you have accessed the event queue by overriding the notify() method +then I am afraid you are in big trouble :(. The reporter is now +carried around the test suite by the runner classes and the methods +called directly. In the unlikely event that this is a problem and +you don't want to upgrade the test tool then simplest is to write your +own runner class and invoke the tests with... + +$test->accept(new MyRunner(new MyReporter())); + +...rather than the run method. This should be easier to extend +anyway and gives much more control. Even this method is overhauled +in Beta3 where the runner class can be set within the test case. Really +the best thing to do is to upgrade to this version as whatever you were +trying to achieve before should now be very much easier. + +Missing set options method +-------------------------- +All test suite options are now in one class called SimpleTestOptions. +This means that options are set differently... + +GroupTest::ignore() --> SimpleTestOptions::ignore() +Mock::setMockBaseClass() --> SimpleTestOptions::setMockBaseClass() + +These changed in Alpha8 and the old versions are now removed in RC1. + +No method setExpected*() +------------------------ +The mock expectations changed their names in Alpha4 and the old names +ceased to be supported in Alpha8. The changes are... + +setExpectedArguments() --> expectArguments() +setExpectedArgumentsSequence() --> expectArgumentsAt() +setExpectedCallCount() --> expectCallCount() +setMaximumCallCount() --> expectMaximumCallCount() + +The parameters remained the same. Added: trunk/tests/simpletest/LICENSE =================================================================== --- trunk/tests/simpletest/LICENSE (rev 0) +++ trunk/tests/simpletest/LICENSE 2009-03-15 21:24:56 UTC (rev 581) @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this Lic... [truncated message content] |