Repository: vacanza/holidays (python)

Issue:
Add Equatorial Guinea holidays
Links:
  - https://en.wikipedia.org/wiki/Public_holidays_in_Equatorial_Guinea
  - https://www.timeanddate.com/holidays/guineaecuatorial/

Pull request:
Add Equatorial Guinea holidays
<!--
  Thanks for contributing to holidays!
-->

## Proposed change

<!--
  Describe the big picture of your changes.
  Don't forget to link your PR to an existing issue if any.
-->

I have added support for Equatorial Guinea holidays. I hope my work is acceptable for your project.
Closes #1178 

## Type of change

<!--
  Type of change you want to introduce. Please, check one (1) box only!
  If your PR requires multiple boxes to be checked, most likely it needs to
  be split into multiple PRs.
-->

- [x] New country/market holidays support (thank you!)
- [ ] Supported country/market holidays update (calendar discrepancy fix, localization)
- [ ] Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
- [ ] Dependency update (version deprecation/pin/upgrade)
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] Breaking change (a code change causing existing functionality to break)
- [ ] New feature (new `holidays` functionality in general)

## Checklist

<!--
  Put an `x` in the boxes that apply. You can change them after PR is created.
-->

- [x] I've followed the [contributing guidelines][contributing-guidelines]
- [x] I've successfully run `make check`, all checks and tests are green

<!--
  Thanks again for your contribution!
-->

[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.md
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source


Patch:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index e903ab17..0623f10f 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -17,14 +17,14 @@ repos:
       - id: trailing-whitespace
 
   - repo: https://github.com/asottile/pyupgrade
-    rev: v3.19.1
+    rev: v3.20.0
     hooks:
     -   id: pyupgrade
         args:
           - --py39-plus
 
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.11.10
+    rev: v0.11.11
     hooks:
       - id: ruff-check
       - id: ruff-format
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 5abfa9ca..4b6120ca 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1,6 +1,7 @@
 Aaron Picht
 Aart Goossens
 Abdelkhalek Boukli Hacene
+Abheelash Mishra
 Akos Furton
 Alejandro Antunes
 Aleksei Zhuchkov
diff --git a/README.md b/README.md
index 065f3df5..22889141 100644
--- a/README.md
+++ b/README.md
@@ -105,7 +105,7 @@ and detailed information.
 
 ## Available Countries
 
-We currently support 175 country codes. The standard way to refer to a country is by using its [ISO
+We currently support 176 country codes. The standard way to refer to a country is by using its [ISO
 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes), the same used
 for domain names, and for a subdivision its [ISO 3166-2
 code](https://en.wikipedia.org/wiki/ISO_3166-2). Some countries have common or foreign names or
@@ -497,6 +497,13 @@ any) in brackets, available languages and additional holiday categories. All cou
 <td></td>
 </tr>
 <tr>
+<td>Equatorial Guinea</td>
+<td>GQ</td>
+<td>Provinces: AN (Annobón, Annobon), BN (Bioko Norte, North Bioko), BS (Bioko Sur, South Bioko), CS (Centro Sur, South Center), DJ (Djibloho), KN (Kié-Ntem, Kie-Ntem), LI (Litoral, Coast), WN (Wele-Nzas)</td>
+<td>en_US, <strong>es</strong></td>
+<td></td>
+</tr>
+<tr>
 <td>Estonia</td>
 <td>EE</td>
 <td></td>
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index cc8a055d..1544db53 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -62,6 +62,7 @@ from .dominican_republic import DominicanRepublic, DO, DOM
 from .ecuador import Ecuador, EC, ECU
 from .egypt import Egypt, EG, EGY
 from .el_salvador import ElSalvador, SV, SLV
+from .equatorial_guinea import EquatorialGuinea, GQ, GNQ
 from .estonia import Estonia, EE, EST
 from .eswatini import Eswatini, SZ, SZW, Swaziland
 from .ethiopia import Ethiopia, ET, ETH
diff --git a/holidays/countries/equatorial_guinea.py b/holidays/countries/equatorial_guinea.py
new file mode 100644
index 00000000..1fc2c7ac
--- /dev/null
+++ b/holidays/countries/equatorial_guinea.py
@@ -0,0 +1,150 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from gettext import gettext as tr
+
+from holidays.calendars.gregorian import JAN
+from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
+from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_MON
+
+
+class EquatorialGuinea(
+    ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays
+):
+    """Equatorial Guinea holidays.
+
+    References:
+        * [Decree 9/2007](https://web.archive.org/web/20250518185011/https://boe.gob.gq/files/Decreto%20de%20Fijaci%C3%B3n%20de%20los%20D%C3%ADas%20Feriados%20en%20Guinea%20Ecuatorial.pdf)
+        * <https://en.wikipedia.org/wiki/Public_holidays_in_Equatorial_Guinea>
+        * <https://web.archive.org/web/20250503042253/https://www.timeanddate.com/holidays/guineaecuatorial/>
+        * <https://web.archive.org/web/20250503042610/https://gq.usembassy.gov/holiday-calendar/>
+        * [2015](https://web.archive.org/web/20250421105147/https://www.guineainfomarket.com/gobierno/2015/01/01/calendario-laboral-de-guinea-ecuatorial-2015/)
+        * [2016](https://web.archive.org/web/20250212174334/https://www.guineainfomarket.com/libros/2015/12/06/calendario-laboral-de-guinea-ecuatorial-2016/)
+        * [2018](https://web.archive.org/web/20241005004303/https://www.guineainfomarket.com/economia/2017/12/29/calendario-laboral-guinea-ecuatorial-2018/)
+        * [2019](https://web.archive.org/web/20220526022213/https://www.guineainfomarket.com/economia/2019/01/01/calendario-laboral-guinea-ecuatorial-2019/)
+        * [2020](https://web.archive.org/web/20250503044753/https://www.guineainfomarket.com/cultura/2020/01/01/calendario-laboral-de-guinea-ecuatorial-2020/)
+        * [2021](https://web.archive.org/web/20250503044727/https://www.guineainfomarket.com/cultura/2021/01/29/calendario-laboral-de-guinea-ecuatorial-2021/)
+        * [2022](https://web.archive.org/web/20250503044746/https://www.guineainfomarket.com/cultura/2021/01/29/calendario-laboral-de-guinea-ecuatorial-2021-2/)
+        * [2024](https://web.archive.org/web/20250504175804/https://www.guineainfomarket.com/business/2024/03/29/calendario-laboral-de-guinea-ecuatorial-2024/)
+    """
+
+    country = "GQ"
+    default_language = "es"
+    supported_languages = ("en_US", "es")
+    # %s observed.
+    observed_label = tr("%s (observado)")
+    # Decree 9/2007.
+    start_year = 2007
+    subdivisions = (
+        "AN",  # Annobón (Annobon).
+        "BN",  # Bioko Norte (North Bioko).
+        "BS",  # Bioko Sur (South Bioko).
+        "CS",  # Centro Sur (South Center).
+        "DJ",  # Djibloho.
+        "KN",  # Kié-Ntem (Kie-Ntem).
+        "LI",  # Litoral (Coast).
+        "WN",  # Wele-Nzas.
+    )
+    subdivisions_aliases = {
+        "Annobón": "AN",
+        "Annobon": "AN",
+        "Bioko Norte": "BN",
+        "North Bioko": "BN",
+        "Bioko Sur": "BS",
+        "South Bioko": "BS",
+        "Centro Sur": "CS",
+        "South Center": "CS",
+        "Djibloho": "DJ",
+        "Kié-Ntem": "KN",
+        "Kie-Ntem": "KN",
+        "Litoral": "LI",
+        "Coast": "LI",
+        "Wele-Nzas": "WN",
+    }
+
+    def __init__(self, *args, **kwargs):
+        ChristianHolidays.__init__(self)
+        InternationalHolidays.__init__(self)
+        StaticHolidays.__init__(self, cls=EquatorialGuineaStaticHolidays)
+        kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
+        super().__init__(*args, **kwargs)
+
+    def _populate_public_holidays(self):
+        # New Year's Day.
+        self._add_observed(self._add_new_years_day(tr("Año Nuevo")))
+
+        # International Women's Day.
+        self._add_womens_day(tr("Día Internacional de la Mujer"))
+
+        # Maundy Thursday.
+        self._add_holy_thursday(tr("Jueves Santo"))
+
+        # Good Friday.
+        self._add_good_friday(tr("Viernes Santo"))
+
+        # International Labor Day.
+        self._add_observed(self._add_labor_day(tr("Día Internacional del Trabajo")))
+
+        # African Liberation Day.
+        self._add_africa_day(tr("Día de la liberación Africana"))
+
+        self._add_observed(
+            # President's Day.
+            self._add_holiday_jun_5(tr("Natalicio de Su Excelencia el Presidente de la República"))
+        )
+
+        # Corpus Christi.
+        self._add_corpus_christi_day(tr("Corpus Christi"))
+
+        # Armed Forces Day.
+        self._add_observed(self._add_holiday_aug_3(tr("Día de las Fuerzas Armadas")))
+
+        # Constitution Day.
+        self._add_observed(self._add_holiday_aug_15(tr("Día de la Constitución")))
+
+        # Independence Day.
+        self._add_observed(self._add_holiday_oct_12(tr("Día de la Independencia Nacional")))
+
+        self._add_observed(
+            self._add_immaculate_conception_day(
+                # Immaculate Conception.
+                tr("Festividad de la Inmaculada Concepción de María")
+            )
+        )
+
+        # Christmas Day.
+        self._add_observed(self._add_christmas_day(tr("Día de Navidad")))
+
+    def _populate_subdiv_an_public_holidays(self):
+        # Patron Saint Festival of Annobón.
+        self._add_holiday_jun_13(tr("Fiesta Patronal de Annobón"))
+
+
+class GQ(EquatorialGuinea):
+    pass
+
+
+class GNQ(EquatorialGuinea):
+    pass
+
+
+class EquatorialGuineaStaticHolidays:
+    """Equatorial Guinea special holidays.
+
+    References:
+        * [AFCON Victory Holiday](https://web.archive.org/web/20240124021813/https://www.monitor.co.ug/uganda/sports/soccer/equatorial-guinea-president-awards-team-1-million-for-afcon-victory-4500644)
+    """
+
+    special_public_holidays = {
+        # AFCON Victory Against Ivory Coast.
+        2024: (JAN, 23, tr("Victoria de la AFCON contra Costa de Marfil")),
+    }
diff --git a/holidays/locale/en_US/LC_MESSAGES/GQ.po b/holidays/locale/en_US/LC_MESSAGES/GQ.po
new file mode 100644
index 00000000..0b532695
--- /dev/null
+++ b/holidays/locale/en_US/LC_MESSAGES/GQ.po
@@ -0,0 +1,92 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+#
+# Equatorial Guinea holidays en_US localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.74\n"
+"POT-Creation-Date: 2025-05-01 05:05+0000\n"
+"PO-Revision-Date: 2025-05-01 05:05+0000\n"
+"Last-Translator: Abheelash Mishra <abheelashdev@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Source-Language: es\n"
+
+#. %s observed.
+#, c-format
+msgid "%s (observado)"
+msgstr "%s (observed)"
+
+#. New Year's Day.
+msgid "Año Nuevo"
+msgstr "New Year's Day"
+
+#. International Women's Day.
+msgid "Día Internacional de la Mujer"
+msgstr "International Women's Day"
+
+#. Good Friday.
+msgid "Viernes Santo"
+msgstr "Good Friday"
+
+#. Corpus Christi.
+msgid "Corpus Christi"
+msgstr "Corpus Christi"
+
+#. Christmas Day.
+msgid "Día de Navidad"
+msgstr "Christmas Day"
+
+#. AFCON Victory Against Ivory Coast.
+msgid "Victoria de la AFCON contra Costa de Marfil"
+msgstr "AFCON Victory Against Ivory Coast"
+
+#. Armed Forces Day.
+msgid "Día de las Fuerzas Armadas"
+msgstr "Armed Forces Day"
+
+#. Patron Saint Festival of Annobón.
+msgid "Fiesta Patronal de Annobón"
+msgstr "Patron Saint Festival of Annobón"
+
+#. Maundy Thursday.
+msgid "Jueves Santo"
+msgstr "Maundy Thursday"
+
+#. International Labor Day.
+msgid "Día Internacional del Trabajo"
+msgstr "International Labor Day"
+
+#. President's Day.
+msgid "Natalicio de Su Excelencia el Presidente de la República"
+msgstr "President's Day"
+
+#. Constitution Day.
+msgid "Día de la Constitución"
+msgstr "Constitution Day"
+
+#. Independence Day.
+msgid "Día de la Independencia Nacional"
+msgstr "Independence Day"
+
+#. Immaculate Conception.
+msgid "Festividad de la Inmaculada Concepción de María"
+msgstr "Immaculate Conception"
+
+#. African Liberation Day.
+msgid "Día de la liberación Africana"
+msgstr "African Liberation Day"
diff --git a/holidays/locale/es/LC_MESSAGES/GQ.po b/holidays/locale/es/LC_MESSAGES/GQ.po
new file mode 100644
index 00000000..83813254
--- /dev/null
+++ b/holidays/locale/es/LC_MESSAGES/GQ.po
@@ -0,0 +1,92 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+#
+# Equatorial Guinea holidays.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.74\n"
+"POT-Creation-Date: 2025-05-01 05:05+0000\n"
+"PO-Revision-Date: 2025-05-01 05:05+0000\n"
+"Last-Translator: Abheelash Mishra <abheelashdev@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.5\n"
+"X-Source-Language: es\n"
+
+#. %s observed.
+#, c-format
+msgid "%s (observado)"
+msgstr ""
+
+#. New Year's Day.
+msgid "Año Nuevo"
+msgstr ""
+
+#. International Women's Day.
+msgid "Día Internacional de la Mujer"
+msgstr ""
+
+#. Good Friday.
+msgid "Viernes Santo"
+msgstr ""
+
+#. Corpus Christi.
+msgid "Corpus Christi"
+msgstr ""
+
+#. Christmas Day.
+msgid "Día de Navidad"
+msgstr ""
+
+#. AFCON Victory Against Ivory Coast.
+msgid "Victoria de la AFCON contra Costa de Marfil"
+msgstr ""
+
+#. Armed Forces Day.
+msgid "Día de las Fuerzas Armadas"
+msgstr ""
+
+#. Patron Saint Festival of Annobón.
+msgid "Fiesta Patronal de Annobón"
+msgstr ""
+
+#. Maundy Thursday.
+msgid "Jueves Santo"
+msgstr ""
+
+#. International Labor Day.
+msgid "Día Internacional del Trabajo"
+msgstr ""
+
+#. President's Day.
+msgid "Natalicio de Su Excelencia el Presidente de la República"
+msgstr ""
+
+#. Constitution Day.
+msgid "Día de la Constitución"
+msgstr ""
+
+#. Independence Day.
+msgid "Día de la Independencia Nacional"
+msgstr ""
+
+#. Immaculate Conception.
+msgid "Festividad de la Inmaculada Concepción de María"
+msgstr ""
+
+#. African Liberation Day.
+msgid "Día de la liberación Africana"
+msgstr ""
diff --git a/holidays/registry.py b/holidays/registry.py
index f096e265..44f73956 100644
--- a/holidays/registry.py
+++ b/holidays/registry.py
@@ -71,6 +71,7 @@ COUNTRIES: RegistryDict = {
     "egypt": ("Egypt", "EG", "EGY"),
     "jordan": ("Jordan", "JO", "JOR"),
     "el_salvador": ("ElSalvador", "SV", "SLV"),
+    "equatorial_guinea": ("EquatorialGuinea", "GQ", "GNQ"),
     "estonia": ("Estonia", "EE", "EST"),
     "eswatini": ("Eswatini", "SZ", "SZW", "Swaziland"),
     "ethiopia": ("Ethiopia", "ET", "ETH"),


Test patch:
diff --git a/tests/countries/test_equatorial_guinea.py b/tests/countries/test_equatorial_guinea.py
new file mode 100644
index 00000000..ee52bbe5
--- /dev/null
+++ b/tests/countries/test_equatorial_guinea.py
@@ -0,0 +1,244 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from unittest import TestCase
+
+from holidays.countries.equatorial_guinea import EquatorialGuinea, GQ, GNQ
+from tests.common import CommonCountryTests
+
+
+class TestEquatorialGuinea(CommonCountryTests, TestCase):
+    @classmethod
+    def setUpClass(cls):
+        years = range(2007, 2050)
+        super().setUpClass(EquatorialGuinea, years=years, years_non_observed=years)
+
+    def test_country_aliases(self):
+        self.assertAliases(EquatorialGuinea, GQ, GNQ)
+
+    def test_no_holidays(self):
+        self.assertNoHolidays(EquatorialGuinea(years=2006))
+
+    def test_special_holidays(self):
+        self.assertHoliday(
+            "2024-01-23",
+        )
+
+    def test_new_years_day(self):
+        name = "Año Nuevo"
+        self.assertHolidayName(name, (f"{year}-01-01" for year in range(2007, 2050)))
+        obs_dt = (
+            "2011-01-03",
+            "2012-01-02",
+            "2017-01-02",
+            "2022-01-03",
+            "2023-01-02",
+        )
+        self.assertHolidayName(f"{name} (observado)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_international_womens_day(self):
+        self.assertHolidayName(
+            "Día Internacional de la Mujer", (f"{year}-03-08" for year in range(2007, 2050))
+        )
+
+    def test_maundy_thursday(self):
+        name = "Jueves Santo"
+        self.assertHolidayName(
+            name,
+            "2020-04-09",
+            "2021-04-01",
+            "2022-04-14",
+            "2023-04-06",
+            "2024-03-28",
+            "2025-04-17",
+        )
+        self.assertHolidayName(name, range(2007, 2050))
+
+    def test_good_friday(self):
+        name = "Viernes Santo"
+        self.assertHolidayName(
+            name,
+            "2020-04-10",
+            "2021-04-02",
+            "2022-04-15",
+            "2023-04-07",
+            "2024-03-29",
+            "2025-04-18",
+        )
+        self.assertHolidayName(name, range(2007, 2050))
+
+    def test_international_labor_day(self):
+        name = "Día Internacional del Trabajo"
+        self.assertHolidayName(name, (f"{year}-05-01" for year in range(2007, 2050)))
+        obs_dt = (
+            "2010-05-03",
+            "2011-05-02",
+            "2016-05-02",
+            "2021-05-03",
+            "2022-05-02",
+        )
+        self.assertHolidayName(f"{name} (observado)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_african_liberation_day(self):
+        self.assertHolidayName(
+            "Día de la liberación Africana", (f"{year}-05-25" for year in range(2007, 2050))
+        )
+
+    def test_presidents_day(self):
+        name = "Natalicio de Su Excelencia el Presidente de la República"
+        self.assertHolidayName(name, (f"{year}-06-05" for year in range(2007, 2050)))
+        obs_dt = (
+            "2010-06-07",
+            "2011-06-06",
+            "2016-06-06",
+            "2021-06-07",
+            "2022-06-06",
+        )
+        self.assertHolidayName(f"{name} (observado)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_corpus_christi(self):
+        name = "Corpus Christi"
+        self.assertHolidayName(
+            name,
+            "2020-06-11",
+            "2021-06-03",
+            "2022-06-16",
+            "2023-06-08",
+            "2024-05-30",
+            "2025-06-19",
+        )
+        self.assertHolidayName(name, range(2007, 2050))
+
+    def test_armed_forces_day(self):
+        name = "Día de las Fuerzas Armadas"
+        self.assertHolidayName(name, (f"{year}-08-03" for year in range(2007, 2050)))
+        obs_dt = (
+            "2008-08-04",
+            "2013-08-05",
+            "2014-08-04",
+            "2019-08-05",
+            "2024-08-05",
+            "2025-08-04",
+        )
+        self.assertHolidayName(f"{name} (observado)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_constitution_day(self):
+        name = "Día de la Constitución"
+        self.assertHolidayName(name, (f"{year}-08-15" for year in range(2007, 2050)))
+        obs_dt = (
+            "2009-08-17",
+            "2010-08-16",
+            "2015-08-17",
+            "2020-08-17",
+            "2021-08-16",
+        )
+        self.assertHolidayName(f"{name} (observado)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_independence_day(self):
+        name = "Día de la Independencia Nacional"
+        self.assertHolidayName(name, (f"{year}-10-12" for year in range(2007, 2050)))
+        obs_dt = (
+            "2008-10-13",
+            "2013-10-14",
+            "2014-10-13",
+            "2019-10-14",
+            "2024-10-14",
+            "2025-10-13",
+        )
+        self.assertHolidayName(f"{name} (observado)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_immaculate_conception(self):
+        name = "Festividad de la Inmaculada Concepción de María"
+        self.assertHolidayName(name, (f"{year}-12-08" for year in range(2007, 2050)))
+        obs_dt = (
+            "2007-12-10",
+            "2012-12-10",
+            "2013-12-09",
+            "2018-12-10",
+            "2019-12-09",
+            "2024-12-09",
+        )
+        self.assertHolidayName(f"{name} (observado)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_christmas_day(self):
+        name = "Día de Navidad"
+        self.assertHolidayName(name, (f"{year}-12-25" for year in range(2007, 2050)))
+        obs_dt = (
+            "2010-12-27",
+            "2011-12-26",
+            "2016-12-26",
+            "2021-12-27",
+            "2022-12-26",
+        )
+        self.assertHolidayName(f"{name} (observado)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_subdivision_holidays(self):
+        name = "Fiesta Patronal de Annobón"
+        self.assertNoHolidayName(name)
+
+        for subdiv in EquatorialGuinea.subdivisions:
+            holidays = EquatorialGuinea(subdiv=subdiv, years=range(2007, 2050))
+            if subdiv == "AN":
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-06-13" for year in range(2007, 2050))
+                )
+            else:
+                self.assertNoHolidayName(name, holidays)
+
+    def test_l10n_default(self):
+        self.assertLocalizedHolidays(
+            ("2025-01-01", "Año Nuevo"),
+            ("2025-03-08", "Día Internacional de la Mujer"),
+            ("2025-04-17", "Jueves Santo"),
+            ("2025-04-18", "Viernes Santo"),
+            ("2025-05-01", "Día Internacional del Trabajo"),
+            ("2025-05-25", "Día de la liberación Africana"),
+            ("2025-06-05", "Natalicio de Su Excelencia el Presidente de la República"),
+            ("2025-06-13", "Fiesta Patronal de Annobón"),
+            ("2025-06-19", "Corpus Christi"),
+            ("2025-08-03", "Día de las Fuerzas Armadas"),
+            ("2025-08-04", "Día de las Fuerzas Armadas (observado)"),
+            ("2025-08-15", "Día de la Constitución"),
+            ("2025-10-12", "Día de la Independencia Nacional"),
+            ("2025-10-13", "Día de la Independencia Nacional (observado)"),
+            ("2025-12-08", "Festividad de la Inmaculada Concepción de María"),
+            ("2025-12-25", "Día de Navidad"),
+        )
+
+    def test_l10n_en_us(self):
+        self.assertLocalizedHolidays(
+            "en_US",
+            ("2025-01-01", "New Year's Day"),
+            ("2025-03-08", "International Women's Day"),
+            ("2025-04-17", "Maundy Thursday"),
+            ("2025-04-18", "Good Friday"),
+            ("2025-05-01", "International Labor Day"),
+            ("2025-05-25", "African Liberation Day"),
+            ("2025-06-05", "President's Day"),
+            ("2025-06-13", "Patron Saint Festival of Annobón"),
+            ("2025-06-19", "Corpus Christi"),
+            ("2025-08-03", "Armed Forces Day"),
+            ("2025-08-04", "Armed Forces Day (observed)"),
+            ("2025-08-15", "Constitution Day"),
+            ("2025-10-12", "Independence Day"),
+            ("2025-10-13", "Independence Day (observed)"),
+            ("2025-12-08", "Immaculate Conception"),
+            ("2025-12-25", "Christmas Day"),
+        )