Inheritance: extends Divisible
 /**
  * @test
  */
 public function most_states_of_all_countries_have_cities()
 {
     $planet = new Earth();
     $countries = $planet->getCountries();
     foreach ($countries as $country) {
         $citiesCount = 0;
         foreach ($country->getStates() as $state) {
             $cities = $state->getCities();
             foreach ($cities as $city) {
                 $citiesCount++;
                 $array = $city->toArray();
                 $this->assertTrue(isset($array['code']) && is_int($array['code']));
                 $this->assertTrue(isset($array['name']) && is_string($array['name']));
                 if ($country->getCode() == 'RU') {
                     //$city->setLanguage('ru')->inflict('from');
                     //echo $city->getName() . "\n";
                 }
             }
         }
         if (!in_array($country->getCode(), $this->emptyCountries)) {
             //if ($citiesCount == 0) echo $country->getCode();
             //if ($citiesCount == 0) echo count($country->getStates());
             $this->assertTrue($citiesCount > 0);
         }
     }
 }
 /**
  * @test
  */
 public function all_countries_have_translated_names()
 {
     $earth = new Earth();
     $countries = $earth->getCountries();
     foreach ($countries as $country) {
         $this->assertNotEquals($country->setLocale($this->languageCode)->getName(), $country->setLocale('en')->getName());
         //echo $country->inflict('from')->setLocale($this->languageCode)->getName() . "\n";
     }
 }
 /**
  * @test
  */
 public function can_filter_the_countries()
 {
     $earth = new Earth();
     $countries = $earth->getCountries();
     $count = $countries->count();
     $countries = $countries->filter(function ($item) {
         return $item->getPopulation() > 50000;
     });
     $this->assertNotEquals($count, $countries->count());
 }
 /**
  *
  */
 public function all_states_have_iso_codes()
 {
     $codes = file_get_contents(dirname(dirname(dirname(__FILE__))) . '/iso3166-2.csv');
     $line = strtok($codes, "\r\n");
     $countryData = [];
     while ($line !== false) {
         $line = str_replace('"', '', $line);
         list($country, $name, $code) = explode(',', $line);
         if (!isset($countryData[$country])) {
             $countryData[$country] = [];
         }
         if ($code != '-') {
             $countryData[$country][] = ['name' => $name, 'code' => $code];
         }
         $line = strtok("\r\n");
     }
     $planet = new Earth();
     $countries = $planet->getCountries();
     $guesses = 0;
     foreach ($countries as $country) {
         $filename = dirname(dirname(dirname(dirname(__FILE__)))) . '/resources/states/' . $country->getCode() . '.json';
         if (!file_exists($filename)) {
             continue;
         }
         $states = file_get_contents($filename);
         $states = json_decode($states, true);
         $counter = 0;
         $meta = isset($countryData[$country->getCode()]) ? $countryData[$country->getCode()] : [];
         foreach ($states as &$state) {
             if (!isset($state['ids']['iso_3166_2'])) {
                 $counter++;
             }
             $name = $state['long']['default'];
             if (isset($state['ids']['iso_3166'])) {
                 unset($state['ids']['iso_3166']);
             }
             if ($country->getFipsCode() && isset($state['ids']['fips']) && is_numeric($state['ids']['fips'])) {
                 $state['ids']['fips'] = $country->getFipsCode() . $state['ids']['fips'];
             }
             foreach ($meta as $oneMeta) {
                 similar_text($oneMeta['name'], $name, $percent);
                 if ($percent > 90) {
                     if (substr($oneMeta['code'], 0, 2) != $country->getCode()) {
                         continue;
                     }
                     //echo "Found a match for " . $name . " = " . $oneMeta['code'] . "\n";
                     $state['ids']['iso_3166_2'] = $oneMeta['code'];
                     $guesses++;
                 }
             }
         }
         $total = count($meta);
         echo "Country " . $country->getCode() . " has " . $counter . "/" . $total . " states\n";
         if ($total == 0 || $counter >= $total) {
             continue;
         }
     }
     echo "Guesses: " . $guesses . "\n";
 }
 /**
  * @test
  */
 public function lower_case_find_also_works()
 {
     $earth = new Earth();
     $russia = $earth->findOne(['code' => 'ru']);
     $this->assertInstanceOf(Country::class, $russia);
 }