public function testAPILimit()
 {
     $api_calls_to_leave_unmade_per_minute = 100;
     $archive_limit = 100;
     $num_twitter_errors = 100;
     $max_api_calls_per_crawl = 100;
     $api = new CrawlerTwitterAPIAccessorOAuth('an_oauth_access_token', 'an_oauth_access_token_secret', 'an_oauth_consumer_key', 'oauth_consumer_secret', $api_calls_to_leave_unmade_per_minute, $archive_limit, $num_twitter_errors, $max_api_calls_per_crawl);
     $api->init();
     // no caller limits;
     $i = 0;
     for ($i = 1; $i <= 10; $i++) {
         $api->apiRequest("/bad_url");
     }
     $this->assertEqual($i, 11);
     // with caller limits, 404 errors do count against limit
     $api->setCallerLimits(array('testAPILimit' => array('count' => 2, 'remaining' => 2)));
     $i = 0;
     try {
         for ($i = 0; $i <= 10; $i++) {
             $api->apiRequest("/bad_url");
         }
         $this->fail("should throw APICallLimitExceededException");
     } catch (APICallLimitExceededException $e) {
         $this->assertEqual($i, 2);
     }
     // with caller limits, 403 errors do count against limit
     $api->setCallerLimits(array('testAPILimit' => array('count' => 2, 'remaining' => 2)));
     $i = 0;
     try {
         for ($i = 0; $i <= 10; $i++) {
             $api->apiRequest("403");
         }
         $this->fail("should throw APICallLimitExceededException");
     } catch (APICallLimitExceededException $e) {
         $this->assertEqual($i, 2);
     }
     // all other errors shouldn't count againts caller limits
     foreach (array(405, 500, 502, 504) as $status) {
         $api->setCallerLimits(array('testAPILimit' => array('count' => 1, 'remaining' => 1)));
         $i = 0;
         for ($i = 0; $i <= 1; $i++) {
             $api->apiRequest($status);
         }
         $this->assertEqual($i, 2);
     }
 }