text: # Copyright 2016-2020 Blue Marble Analytics LLC.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  from __future__ import print_function
  
  from builtins import str
  from collections import OrderedDict
  from importlib import import_module
  import os.path
  import sys
  import unittest
  
  from tests.common_functions import create_abstract_model, add_components_and_load_data
  
  TEST_DATA_DIRECTORY = os.path.join(
      os.path.dirname(__file__), "..", "..", "..", "test_data"
  )
  
  # Import prerequisite modules
  PREREQUISITE_MODULE_NAMES = [
      "temporal.operations.timepoints",
      "temporal.operations.horizons",
      "temporal.investment.periods",
      "geography.load_zones",
      "system.load_balance.static_load_requirement",
      "geography.energy_target_zones",
      "project",
      "project.capacity.capacity",
      "project.availability.availability",
      "project.fuels",
      "project.operations",
      "project.operations.operational_types",
      "project.operations.power",
      "project.operations.fuel_burn",
      "project.operations.energy_target_contributions",
      "system.policy.energy_targets.period_energy_target",
      "system.policy.energy_targets.aggregate_period_energy_target_contributions",
      "system.policy.energy_targets.period_energy_target_balance",
  ]
  NAME_OF_MODULE_BEING_TESTED = (
      "objective.system.policy.aggregate_period_energy_target_violation_penalties"
  )
  IMPORTED_PREREQ_MODULES = list()
  for mdl in PREREQUISITE_MODULE_NAMES:
      try:
          imported_module = import_module("." + str(mdl), package="gridpath")
          IMPORTED_PREREQ_MODULES.append(imported_module)
      except ImportError:
          print("ERROR! Module " + str(mdl) + " not found.")
          sys.exit(1)
  # Import the module we'll test
  try:
      MODULE_BEING_TESTED = import_module(
          "." + NAME_OF_MODULE_BEING_TESTED, package="gridpath"
      )
  except ImportError:
      print("ERROR! Couldn't import module " + NAME_OF_MODULE_BEING_TESTED + " to test.")
  
  
  class TestObjectiveRPSPenalties(unittest.TestCase):
      """ """
  
      def test_add_model_components(self):
          """
          Test that there are no errors when adding model components
          :return:
          """
          create_abstract_model(
              prereq_modules=IMPORTED_PREREQ_MODULES,
              module_to_test=MODULE_BEING_TESTED,
              test_data_dir=TEST_DATA_DIRECTORY,
              subproblem="",
              stage="",
          )
  
      def test_load_model_data(self):
          """
          Test that data are loaded with no errors
          :return:
          """
          add_components_and_load_data(
              prereq_modules=IMPORTED_PREREQ_MODULES,
              module_to_test=MODULE_BEING_TESTED,
              test_data_dir=TEST_DATA_DIRECTORY,
              subproblem="",
              stage="",
          )
  
      def test_data_loaded_correctly(self):
          """
          Test components initialized with expected data
          :return:
          """
          m, data = add_components_and_load_data(
              prereq_modules=IMPORTED_PREREQ_MODULES,
              module_to_test=MODULE_BEING_TESTED,
              test_data_dir=TEST_DATA_DIRECTORY,
              subproblem="",
              stage="",
          )
          instance = m.create_instance(data)
  
  
  if __name__ == "__main__":
      unittest.main()
  