text: """The tests for the demo platform."""
  
  import pytest
  
  from homeassistant.components import geo_location
  from homeassistant.components.demo.geo_location import (
      DEFAULT_UPDATE_INTERVAL,
      NUMBER_OF_DEMO_DEVICES,
  )
  from homeassistant.const import (
      ATTR_LATITUDE,
      ATTR_LONGITUDE,
      ATTR_UNIT_OF_MEASUREMENT,
      LENGTH_KILOMETERS,
  )
  from homeassistant.setup import async_setup_component
  import homeassistant.util.dt as dt_util
  
  from tests.async_mock import patch
  from tests.common import assert_setup_component, async_fire_time_changed
  
  CONFIG = {geo_location.DOMAIN: [{"platform": "demo"}]}
  
  
  @pytest.fixture(autouse=True)
  def mock_legacy_time(legacy_patchable_time):
      """Make time patchable for all the tests."""
      yield
  
  
  async def test_setup_platform(hass):
      """Test setup of demo platform via configuration."""
      utcnow = dt_util.utcnow()
      # Patching 'utcnow' to gain more control over the timed update.
      with patch("homeassistant.util.dt.utcnow", return_value=utcnow):
          with assert_setup_component(1, geo_location.DOMAIN):
              assert await async_setup_component(hass, geo_location.DOMAIN, CONFIG)
          await hass.async_block_till_done()
  
          # In this test, one zone and geolocation entities have been
          # generated.
          all_states = [
              hass.states.get(entity_id)
              for entity_id in hass.states.async_entity_ids(geo_location.DOMAIN)
          ]
          assert len(all_states) == NUMBER_OF_DEMO_DEVICES
  
          for state in all_states:
              # Check a single device's attributes.
              if state.domain != geo_location.DOMAIN:
                  # ignore home zone state
                  continue
              assert abs(state.attributes[ATTR_LATITUDE] - hass.config.latitude) < 1.0
              assert abs(state.attributes[ATTR_LONGITUDE] - hass.config.longitude) < 1.0
              assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == LENGTH_KILOMETERS
  
          # Update (replaces 1 device).
          async_fire_time_changed(hass, utcnow + DEFAULT_UPDATE_INTERVAL)
          await hass.async_block_till_done()
          # Get all states again, ensure that the number of states is still
          # the same, but the lists are different.
          all_states_updated = [
              hass.states.get(entity_id)
              for entity_id in hass.states.async_entity_ids(geo_location.DOMAIN)
          ]
          assert len(all_states_updated) == NUMBER_OF_DEMO_DEVICES
          assert all_states != all_states_updated
  