Repository: vacanza/holidays
Pull request #2540 (2025-05-13 18:30:26)

Update documentation build: make PR links in changelog
<!--
  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.
-->

Make clickable links to PR on GitHub in changelog (from #nnnn references).
It looks like [this](https://holidays--2540.org.readthedocs.build/en/2540/changelog/).

## 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.
-->

- [ ] New country/market holidays support (thank you!)
- [ ] Supported country/market holidays update (calendar discrepancy fix, localization)
- [x] 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


coderabbitai[bot]: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: review in progress by coderabbit.ai -->

> [!NOTE]
> Currently processing new changes in this PR. This may take a few minutes, please wait...
> 
> <details>
> <summary>📥 Commits</summary>
> 
> Reviewing files that changed from the base of the PR and between ad96cbeda2c0188ea1a3d38aacd5b28c73f39b18 and 05c3af689d2f08dbac518f20a62e805b593131cc.
> 
> </details>
> 
> <details>
> <summary>📒 Files selected for processing (1)</summary>
> 
> * `scripts/docs/gen_changelog.py` (1 hunks)
> 
> </details>
> 
> ```ascii
>  ______________________________
> < Carpe Debug. Seize the bugs. >
>  ------------------------------
>   \
>    \   (\__/)
>        (•ㅅ•)
>        / 　 づ
> ```

<!-- end of auto-generated comment: review in progress by coderabbit.ai -->
<!-- usage_tips_start -->

> [!TIP]
> <details>
> <summary>CodeRabbit can generate a title for your PR based on the changes with custom instructions.</summary>
> 
> Add the `reviews.auto_title_instructions` setting in your project's settings in CodeRabbit to generate a title for your PR based on the changes in the PR with custom instructions.
> 
> </details>

<!-- usage_tips_end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=vacanza/holidays&utm_content=2540):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2540) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2540&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2540&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2540&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2540&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2540&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2540)


codecov[bot]: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2540?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 100.00%. Comparing base [(`ad96cbe`)](https://app.codecov.io/gh/vacanza/holidays/commit/ad96cbeda2c0188ea1a3d38aacd5b28c73f39b18?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`05c3af6`)](https://app.codecov.io/gh/vacanza/holidays/commit/05c3af689d2f08dbac518f20a62e805b593131cc?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff            @@
##               dev     #2540   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          215       215           
  Lines        13665     13665           
  Branches      1930      1930           
=========================================
  Hits         13665     13665           
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2540?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>

Patch:
diff --git a/README.md b/README.md
index 88b84229..277f5466 100644
--- a/README.md
+++ b/README.md
@@ -105,7 +105,7 @@ and detailed information.
 
 ## Available Countries
 
-We currently support 171 country codes. The standard way to refer to a country is by using its [ISO
+We currently support 172 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
@@ -385,6 +385,13 @@ any) in brackets, available languages and additional holiday categories. All cou
 <td>HALF_DAY</td>
 </tr>
 <tr>
+<td>Cocos Islands</td>
+<td>CC</td>
+<td></td>
+<td>coa_CC, <strong>en_CC</strong>,  en_US</td>
+<td></td>
+</tr>
+<tr>
 <td>Colombia</td>
 <td>CO</td>
 <td></td>
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index 26e9bee1..a8d665ea 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -46,6 +46,7 @@ from .canada import Canada, CA, CAN
 from .chad import Chad, TD, TCD
 from .chile import Chile, CL, CHL
 from .china import China, CN, CHN
+from .cocos_islands import CocosIslands, CC, CCK
 from .colombia import Colombia, CO, COL
 from .congo import Congo, CG, COG
 from .costa_rica import CostaRica, CR, CRI
diff --git a/holidays/countries/cocos_islands.py b/holidays/countries/cocos_islands.py
new file mode 100644
index 00000000..dee17fa0
--- /dev/null
+++ b/holidays/countries/cocos_islands.py
@@ -0,0 +1,259 @@
+#  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 import _CustomIslamicHolidays
+from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
+from holidays.groups import (
+    ChristianHolidays,
+    InternationalHolidays,
+    IslamicHolidays,
+    StaticHolidays,
+)
+from holidays.observed_holiday_base import (
+    ObservedHolidayBase,
+    MON_TO_NEXT_TUE,
+    SAT_SUN_TO_NEXT_MON,
+    SAT_SUN_TO_NEXT_MON_TUE,
+)
+
+
+class CocosIslands(
+    ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays, StaticHolidays
+):
+    """Cocos (Keeling) Islands holidays.
+
+    References:
+        * <https://en.wikipedia.org/wiki/Public_holidays_in_the_Cocos_(Keeling)_Islands>
+        * <https://www.infrastructure.gov.au/territories-regions-cities/territories/indian-ocean-territories/community-bulletins>
+        * <https://www.infrastructure.gov.au/territories-regions-cities/territories/indian-ocean-territories/gazettes-bulletins>
+
+        * [2007](https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2006/02_2006_Public_Holidays_2007_CKI.doc)
+        * [2008](https://web.archive.org/web/20240718120923/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2007/06-2007_Public_Holidays_CKI.pdf)
+        * [2008 Eid al-Fitr](https://web.archive.org/web/20240331104649/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2008/03_2008_Observance_of_Hari_Raya_Puasa_2008.pdf)
+        * [2009](https://web.archive.org/web/20231208153529/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2008/01-2008-2009-public-holiday-CKI-gazette.pdf)
+        * [2010](https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2009/2009-Gazette_6-2009-CKI-Proclamation_of_2010_Special_Public_Bank_Holidays.pdf)
+        * [2013](https://web.archive.org/web/20240805055409/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2012/2012-Gazette_8-2012-CKI-Proclamation_of_2013_Public_Holidays_for_Cocos_(Keeling)_Islands.pdf)
+        * [2014](https://web.archive.org/web/20240718123844/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2013/2013-Gazette_3-2013-Cocos_K_Islands_2014_Public_Holidays.pdf)
+        * [2016](https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2015/2015-Gazette_4-2015-CKI-Proclamation_of_2016_Special_Public_Bank_Holidays.pdf)
+        * [2016 Eid al-Fitr](https://web.archive.org/web/20231208203746/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2016/2016-Gazette_3-2016-CKI-Proclamation_Special_Public_and_Bank_Holidays_2016.pdf)
+        * [2017](https://web.archive.org/web/20240303203132/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2016/2016-Gazette_2-2016-CKI-Proclamation_Special_Public_and_Bank_Holidays_2017.pdf)
+        * [2019](https://web.archive.org/web/20241123131420/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2018/files/A38-2018.pdf)
+        * [2019 Act of Self Determination Day](https://web.archive.org/web/20220518200522/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2019/files/A10-2019-bank-holidays.pdf)
+        * [2020](https://web.archive.org/web/20240521203357/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2019/files/A53-2019.pdf)
+        * [2021](https://web.archive.org/web/20250502204052/https://www.infrastructure.gov.au/territories-regions-cities/territories/indian_ocean/iot_bulletins/2020/A041-2020-cki-public-holidays)
+        * [2022](https://web.archive.org/web/20250429071240/https://www.infrastructure.gov.au/sites/default/files/documents/a33-2021-2022-public-holidays-cocos-keeling-islands.pdf)
+        * [2022 Eid al-Fitr](https://web.archive.org/web/20220810061351/https://www.infrastructure.gov.au/sites/default/files/documents/Gazette-Change-to-CKI-Hari-Raya-Puasa-2022.pdf)
+        * [2023](https://web.archive.org/web/20240711221156/https://www.infrastructure.gov.au/sites/default/files/documents/a19-2022-community-bulletin-2023-kings-birthday-cocos-keeling-islands.pdf)
+        * [2023 Eid al-Adha](https://web.archive.org/web/20240804112114/https://www.infrastructure.gov.au/sites/default/files/documents/a06-2023_community_bulletin_-_change_of_public_holiday_date_for_hari_raya_haji_2023.pdf)
+        * [2024](https://web.archive.org/web/20250207203100/https://www.infrastructure.gov.au/sites/default/files/documents/a12-2023-2024-public-holidays-cocos-k-islands.pdf)
+        * [2025](https://web.archive.org/web/20250413083314/https://www.infrastructure.gov.au/sites/default/files/documents/a21-2024-administrator-community-bulletin-cki-public-holidays-2025.pdf)
+    """
+
+    country = "CC"
+    default_language = "en_CC"
+    # %s (observed).
+    observed_label = tr("%s (observed)")
+    # %s (estimated).
+    estimated_label = tr("%s (estimated)")
+    # %s (observed, estimated).
+    observed_estimated_label = tr("%s (observed, estimated)")
+    supported_languages = ("coa_CC", "en_CC", "en_US")
+    # Act of Self Determination 1984.
+    start_year = 1985
+
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        Args:
+            islamic_show_estimated:
+                Whether to add "estimated" label to Islamic holidays name
+                if holiday date is estimated.
+        """
+        ChristianHolidays.__init__(self)
+        InternationalHolidays.__init__(self)
+        IslamicHolidays.__init__(
+            self, cls=CocosIslandsIslamicHolidays, show_estimated=islamic_show_estimated
+        )
+        StaticHolidays.__init__(self, CocosIslandsStaticHolidays)
+        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("New Year's Day")))
+
+        # Australia Day.
+        self._add_observed(self._add_holiday_jan_26(tr("Australia Day")))
+
+        act_of_self_determination_dates = {
+            2007: (APR, 5),
+        }
+        # Act of Self Determination Day.
+        name = tr("Act of Self Determination Day")
+        if self._year in act_of_self_determination_dates:
+            self._add_holiday(name, act_of_self_determination_dates[self._year])
+        else:
+            dt = self._add_holiday_apr_6(name)
+            if self._year != 2019:
+                self._add_observed(dt)
+
+        # Good Friday.
+        self._add_good_friday(tr("Good Friday"))
+
+        # Easter Monday.
+        self._add_easter_monday(tr("Easter Monday"))
+
+        # ANZAC Day.
+        self._add_observed(self._add_holiday_apr_25(tr("ANZAC Day")))
+
+        queens_kings_birthday_dates = {
+            2021: (JUN, 7),
+            2022: (JUN, 6),
+            2023: (JUN, 6),
+            2024: (JUN, 6),
+        }
+        name = (
+            # King's Birthday.
+            tr("King's Birthday")
+            if self._year >= 2023
+            # Queen's Birthday.
+            else tr("Queen's Birthday")
+        )
+        if self._year in queens_kings_birthday_dates:
+            self._add_holiday(name, queens_kings_birthday_dates[self._year])
+        else:
+            self._add_holiday_2nd_mon_of_jun(name)
+
+        # Placed before Christmas Day for proper observed calculation.
+        self._add_observed(
+            # Boxing Day.
+            self._add_christmas_day_two(tr("Boxing Day")),
+            rule=SAT_SUN_TO_NEXT_MON_TUE + MON_TO_NEXT_TUE,
+        )
+
+        # Christmas Day.
+        self._add_observed(self._add_christmas_day(tr("Christmas Day")))
+
+        # Islamic holidays.
+
+        if self._year <= 2019:
+            # Islamic New Year.
+            for dt in self._add_islamic_new_year_day(tr("Islamic New Year")):
+                self._add_observed(dt)
+
+        # Prophet's Birthday.
+        for dt in self._add_mawlid_day(tr("Prophet's Birthday")):
+            self._add_observed(dt)
+
+        # Eid al-Fitr.
+        for dt in self._add_eid_al_fitr_day(tr("Eid al-Fitr")):
+            self._add_observed(dt)
+
+        # Eid al-Adha.
+        for dt in self._add_eid_al_adha_day(tr("Eid al-Adha")):
+            if self._year != 2025:
+                self._add_observed(dt)
+
+
+class CocosIslandsIslamicHolidays(_CustomIslamicHolidays):
+    EID_AL_ADHA_DATES = {
+        2007: (DEC, 20),
+        2008: (DEC, 8),
+        2009: (NOV, 30),
+        2010: (NOV, 16),
+        2013: (OCT, 15),
+        2014: (OCT, 4),
+        2016: (SEP, 13),
+        2017: (SEP, 1),
+        2019: (AUG, 11),
+        2020: (JUL, 31),
+        2021: (JUL, 20),
+        2022: (JUL, 9),
+        2023: (JUN, 28),
+        2024: (JUN, 17),
+        2025: (JUN, 7),
+    }
+
+    EID_AL_FITR_DATES = {
+        2007: (OCT, 15),
+        2008: (OCT, 1),
+        2009: (SEP, 21),
+        2010: (SEP, 10),
+        2013: (AUG, 8),
+        2014: (JUL, 28),
+        2016: (JUL, 6),
+        2017: (JUN, 24),
+        2019: (JUN, 5),
+        2020: (MAY, 24),
+        2021: (MAY, 13),
+        2022: (MAY, 3),
+        2023: (APR, 22),
+        2024: (APR, 10),
+        2025: (MAR, 31),
+    }
+
+    HIJRI_NEW_YEAR_DATES = {
+        2007: (JAN, 22),
+        2008: (JAN, 10),
+        2009: (DEC, 18),
+        2010: (DEC, 7),
+        2013: (NOV, 4),
+        2014: (OCT, 25),
+        2016: (OCT, 3),
+        2017: (SEP, 22),
+        2019: (SEP, 1),
+    }
+
+    MAWLID_DATES = {
+        2007: (APR, 2),
+        2008: (MAR, 20),
+        2009: (MAR, 9),
+        2010: (FEB, 26),
+        2013: (JAN, 24),
+        2014: (JAN, 13),
+        2016: (DEC, 12),
+        2017: (DEC, 1),
+        2019: (NOV, 9),
+        2020: (OCT, 29),
+        2021: (OCT, 19),
+        2022: (OCT, 8),
+        2023: (SEP, 27),
+        2024: (SEP, 16),
+        2025: (SEP, 5),
+    }
+
+
+class CC(CocosIslands):
+    pass
+
+
+class CCK(CocosIslands):
+    pass
+
+
+class CocosIslandsStaticHolidays:
+    """Cocos (Keeling) Islands special holidays.
+
+    References:
+        * [National Day of Mourning 2022](https://web.archive.org/web/20240712213751/https://www.infrastructure.gov.au/sites/default/files/documents/04-2022-proclamation-cki-day-of-mourning.pdf)
+    """
+
+    special_public_holidays = {
+        # National Day of Mourning for Queen Elizabeth II.
+        2022: (SEP, 22, tr("National Day of Mourning for Queen Elizabeth II")),
+    }
+
+    special_public_holidays_observed = {
+        2019: (APR, 10, tr("Act of Self Determination Day")),
+        2025: (JUN, 6, tr("Eid al-Adha")),
+    }
diff --git a/holidays/locale/coa_CC/LC_MESSAGES/CC.po b/holidays/locale/coa_CC/LC_MESSAGES/CC.po
new file mode 100644
index 00000000..b00af9e3
--- /dev/null
+++ b/holidays/locale/coa_CC/LC_MESSAGES/CC.po
@@ -0,0 +1,103 @@
+#  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)
+#
+# Cocos (Keeling) Islands holidays coa_CC localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.73\n"
+"POT-Creation-Date: 2025-05-07 12:18+0530\n"
+"PO-Revision-Date: 2025-05-07 12:22+0530\n"
+"Last-Translator: Devaraj K <devarajkaliyaamoorthy@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: coa_CC\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.6\n"
+"X-Generator: Poedit 3.5\n"
+"X-Source-Language: en_CC\n"
+
+#. %s (observed).
+#, c-format
+msgid "%s (observed)"
+msgstr "%s (disambut)"
+
+#. King's Birthday.
+msgid "King's Birthday"
+msgstr "Hari Ulang Tahun Raja"
+
+#. Queen's Birthday.
+msgid "Queen's Birthday"
+msgstr "Hari Ulang Tahun Ratu"
+
+#. New Year's Day.
+msgid "New Year's Day"
+msgstr "Hari Tahun Baru"
+
+#. Australia Day.
+msgid "Australia Day"
+msgstr "Hari Australia"
+
+#. Islamic New Year.
+msgid "Islamic New Year"
+msgstr "Tahun Baru Hijriah"
+
+#. Eid al-Fitr.
+msgid "Eid al-Fitr"
+msgstr "Hari Raya Puasa"
+
+#. Good Friday.
+msgid "Good Friday"
+msgstr "Jumat Agung"
+
+#. Easter Monday.
+msgid "Easter Monday"
+msgstr "Isnin Paskah"
+
+#. Act of Self Determination Day.
+msgid "Act of Self Determination Day"
+msgstr "Hari Penentuan Diri"
+
+#. ANZAC Day.
+msgid "ANZAC Day"
+msgstr "Hari ANZAC"
+
+#. Eid al-Adha.
+msgid "Eid al-Adha"
+msgstr "Hari Raya Haji"
+
+#. Prophet's Birthday.
+msgid "Prophet's Birthday"
+msgstr "Hari Maulaud Nabi"
+
+#. Christmas Day.
+msgid "Christmas Day"
+msgstr "Hari Natal"
+
+#. Boxing Day.
+msgid "Boxing Day"
+msgstr "Hari Boxing"
+
+#. National Day of Mourning for Queen Elizabeth II.
+msgid "National Day of Mourning for Queen Elizabeth II"
+msgstr "Hari Berkabung Negara untuk Ratu Elizabeth II"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimated)"
+msgstr "%s (dianggarkan)"
+
+#. %s (observed, estimated).
+#, c-format
+msgid "%s (observed, estimated)"
+msgstr "%s (disambut, dianggarkan)"
diff --git a/holidays/locale/en_CC/LC_MESSAGES/CC.po b/holidays/locale/en_CC/LC_MESSAGES/CC.po
new file mode 100644
index 00000000..a10b9686
--- /dev/null
+++ b/holidays/locale/en_CC/LC_MESSAGES/CC.po
@@ -0,0 +1,103 @@
+#  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)
+#
+# Cocos (Keeling) Islands holidays.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.73\n"
+"POT-Creation-Date: 2025-05-09 22:15+0530\n"
+"PO-Revision-Date: 2025-05-12 01:27+0530\n"
+"Last-Translator: Devaraj K <devarajkaliyaamoorthy@gmail.com>\n"
+"Language-Team: Holidays Localization Team\n"
+"Language: en_CC\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Lingva 5.0.6\n"
+"X-Generator: Poedit 3.5\n"
+"X-Source-Language: en_CC\n"
+
+#. %s (observed).
+#, c-format
+msgid "%s (observed)"
+msgstr ""
+
+#. King's Birthday.
+msgid "King's Birthday"
+msgstr ""
+
+#. Queen's Birthday.
+msgid "Queen's Birthday"
+msgstr ""
+
+#. New Year's Day.
+msgid "New Year's Day"
+msgstr ""
+
+#. Australia Day.
+msgid "Australia Day"
+msgstr ""
+
+#. Islamic New Year.
+msgid "Islamic New Year"
+msgstr ""
+
+#. Eid al-Fitr.
+msgid "Eid al-Fitr"
+msgstr ""
+
+#. Good Friday.
+msgid "Good Friday"
+msgstr ""
+
+#. Easter Monday.
+msgid "Easter Monday"
+msgstr ""
+
+#. Act of Self Determination Day.
+msgid "Act of Self Determination Day"
+msgstr ""
+
+#. ANZAC Day.
+msgid "ANZAC Day"
+msgstr ""
+
+#. Eid al-Adha.
+msgid "Eid al-Adha"
+msgstr ""
+
+#. Prophet's Birthday.
+msgid "Prophet's Birthday"
+msgstr ""
+
+#. Christmas Day.
+msgid "Christmas Day"
+msgstr ""
+
+#. Boxing Day.
+msgid "Boxing Day"
+msgstr ""
+
+#. National Day of Mourning for Queen Elizabeth II.
+msgid "National Day of Mourning for Queen Elizabeth II"
+msgstr ""
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimated)"
+msgstr ""
+
+#. %s (observed, estimated).
+#, c-format
+msgid "%s (observed, estimated)"
+msgstr ""
diff --git a/holidays/locale/en_US/LC_MESSAGES/CC.po b/holidays/locale/en_US/LC_MESSAGES/CC.po
new file mode 100644
index 00000000..9099a99b
--- /dev/null
+++ b/holidays/locale/en_US/LC_MESSAGES/CC.po
@@ -0,0 +1,103 @@
+#  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)
+#
+# Cocos (Keeling) Islands holidays en_US localization.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Holidays 0.73\n"
+"POT-Creation-Date: 2025-05-07 12:18+0530\n"
+"PO-Revision-Date: 2025-05-07 12:22+0530\n"
+"Last-Translator: Devaraj K <devarajkaliyaamoorthy@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.6\n"
+"X-Generator: Poedit 3.5\n"
+"X-Source-Language: en_CC\n"
+
+#. %s (observed).
+#, c-format
+msgid "%s (observed)"
+msgstr "%s (observed)"
+
+#. King's Birthday.
+msgid "King's Birthday"
+msgstr "King's Birthday"
+
+#. Queen's Birthday.
+msgid "Queen's Birthday"
+msgstr "Queen's Birthday"
+
+#. New Year's Day.
+msgid "New Year's Day"
+msgstr "New Year's Day"
+
+#. Australia Day.
+msgid "Australia Day"
+msgstr "Australia Day"
+
+#. Islamic New Year.
+msgid "Islamic New Year"
+msgstr "Islamic New Year"
+
+#. Eid al-Fitr.
+msgid "Eid al-Fitr"
+msgstr "Eid al-Fitr"
+
+#. Good Friday.
+msgid "Good Friday"
+msgstr "Good Friday"
+
+#. Easter Monday.
+msgid "Easter Monday"
+msgstr "Easter Monday"
+
+#. Act of Self Determination Day.
+msgid "Act of Self Determination Day"
+msgstr "Act of Self Determination Day"
+
+#. ANZAC Day.
+msgid "ANZAC Day"
+msgstr "ANZAC Day"
+
+#. Eid al-Adha.
+msgid "Eid al-Adha"
+msgstr "Eid al-Adha"
+
+#. Prophet's Birthday.
+msgid "Prophet's Birthday"
+msgstr "Prophet's Birthday"
+
+#. Christmas Day.
+msgid "Christmas Day"
+msgstr "Christmas Day"
+
+#. Boxing Day.
+msgid "Boxing Day"
+msgstr "Boxing Day"
+
+#. National Day of Mourning for Queen Elizabeth II.
+msgid "National Day of Mourning for Queen Elizabeth II"
+msgstr "National Day of Mourning for Queen Elizabeth II"
+
+#. %s (estimated).
+#, c-format
+msgid "%s (estimated)"
+msgstr "%s (estimated)"
+
+#. %s (observed, estimated).
+#, c-format
+msgid "%s (observed, estimated)"
+msgstr "%s (observed, estimated)"
diff --git a/holidays/registry.py b/holidays/registry.py
index b2f9511b..81b7d264 100644
--- a/holidays/registry.py
+++ b/holidays/registry.py
@@ -54,6 +54,7 @@ COUNTRIES: RegistryDict = {
     "chad": ("Chad", "TD", "TCD"),
     "chile": ("Chile", "CL", "CHL"),
     "china": ("China", "CN", "CHN"),
+    "cocos_islands": ("CocosIslands", "CC", "CCK"),
     "colombia": ("Colombia", "CO", "COL"),
     "congo": ("Congo", "CG", "COG"),
     "costa_rica": ("CostaRica", "CR", "CRI"),
diff --git a/requirements/build.txt b/requirements/build.txt
index 12a4235f..a8e458ac 100644
--- a/requirements/build.txt
+++ b/requirements/build.txt
@@ -1,3 +1,3 @@
 build==1.2.2.post1
-cyclonedx-bom==6.0.0
+cyclonedx-bom==6.1.1
 polib==1.2.0
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 1c9384c4..b8a26162 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -7,7 +7,7 @@ hijridate==2.5.0
 lingva==5.0.6
 pre-commit==4.2.0
 pygithub==2.6.1
-ruff==0.11.8
-tox==4.25.0
+ruff==0.11.9
+tox==4.26.0
 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability
 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability
diff --git a/scripts/docs/gen_changelog.py b/scripts/docs/gen_changelog.py
index e8e1165d..0a989310 100644
--- a/scripts/docs/gen_changelog.py
+++ b/scripts/docs/gen_changelog.py
@@ -12,6 +12,7 @@
 
 """Generate docs/changelog.md from CHANGES.md"""
 
+import re
 from pathlib import Path
 
 import mkdocs_gen_files
@@ -19,7 +20,11 @@ import mkdocs_gen_files
 
 def main():
     changes_file = Path(__file__).parents[2] / "CHANGES.md"
-    changes_lines = changes_file.read_text(encoding="utf-8").split("\n")
+    file_content = changes_file.read_text(encoding="utf-8")
+    file_content = re.sub(
+        r"#(\d+)", r"[\g<0>](https://github.com/vacanza/holidays/pull/\1)", file_content
+    )
+    changes_lines = file_content.split("\n")
     header = ["# Changelog", ""]
     changelog = [f"#{line}" if line.startswith("# Version") else line for line in changes_lines]
 
diff --git a/snapshots/countries/CC_COMMON.json b/snapshots/countries/CC_COMMON.json
new file mode 100644
index 00000000..7f5dd921
--- /dev/null
+++ b/snapshots/countries/CC_COMMON.json
@@ -0,0 +1,995 @@
+{
+    "1985-01-01": "New Year's Day",
+    "1985-01-26": "Australia Day",
+    "1985-01-28": "Australia Day (observed)",
+    "1985-04-05": "Good Friday",
+    "1985-04-06": "Act of Self Determination Day",
+    "1985-04-08": "Act of Self Determination Day (observed); Easter Monday",
+    "1985-04-25": "ANZAC Day",
+    "1985-06-10": "Queen's Birthday",
+    "1985-06-19": "Eid al-Fitr (estimated)",
+    "1985-08-26": "Eid al-Adha (estimated)",
+    "1985-09-15": "Islamic New Year (estimated)",
+    "1985-09-16": "Islamic New Year (observed, estimated)",
+    "1985-11-24": "Prophet's Birthday (estimated)",
+    "1985-11-25": "Prophet's Birthday (observed, estimated)",
+    "1985-12-25": "Christmas Day",
+    "1985-12-26": "Boxing Day",
+    "1986-01-01": "New Year's Day",
+    "1986-01-26": "Australia Day",
+    "1986-01-27": "Australia Day (observed)",
+    "1986-03-28": "Good Friday",
+    "1986-03-31": "Easter Monday",
+    "1986-04-06": "Act of Self Determination Day",
+    "1986-04-07": "Act of Self Determination Day (observed)",
+    "1986-04-25": "ANZAC Day",
+    "1986-06-08": "Eid al-Fitr (estimated)",
+    "1986-06-09": "Eid al-Fitr (observed, estimated); Queen's Birthday",
+    "1986-08-15": "Eid al-Adha (estimated)",
+    "1986-09-05": "Islamic New Year (estimated)",
+    "1986-11-14": "Prophet's Birthday (estimated)",
+    "1986-12-25": "Christmas Day",
+    "1986-12-26": "Boxing Day",
+    "1987-01-01": "New Year's Day",
+    "1987-01-26": "Australia Day",
+    "1987-04-06": "Act of Self Determination Day",
+    "1987-04-17": "Good Friday",
+    "1987-04-20": "Easter Monday",
+    "1987-04-25": "ANZAC Day",
+    "1987-04-27": "ANZAC Day (observed)",
+    "1987-05-28": "Eid al-Fitr (estimated)",
+    "1987-06-08": "Queen's Birthday",
+    "1987-08-04": "Eid al-Adha (estimated)",
+    "1987-08-25": "Islamic New Year (estimated)",
+    "1987-11-03": "Prophet's Birthday (estimated)",
+    "1987-12-25": "Christmas Day",
+    "1987-12-26": "Boxing Day",
+    "1987-12-28": "Boxing Day (observed)",
+    "1988-01-01": "New Year's Day",
+    "1988-01-26": "Australia Day",
+    "1988-04-01": "Good Friday",
+    "1988-04-04": "Easter Monday",
+    "1988-04-06": "Act of Self Determination Day",
+    "1988-04-25": "ANZAC Day",
+    "1988-05-16": "Eid al-Fitr (estimated)",
+    "1988-06-13": "Queen's Birthday",
+    "1988-07-23": "Eid al-Adha (estimated)",
+    "1988-07-25": "Eid al-Adha (observed, estimated)",
+    "1988-08-13": "Islamic New Year (estimated)",
+    "1988-08-15": "Islamic New Year (observed, estimated)",
+    "1988-10-22": "Prophet's Birthday (estimated)",
+    "1988-10-24": "Prophet's Birthday (observed, estimated)",
+    "1988-12-25": "Christmas Day",
+    "1988-12-26": "Boxing Day; Christmas Day (observed)",
+    "1988-12-27": "Boxing Day (observed)",
+    "1989-01-01": "New Year's Day",
+    "1989-01-02": "New Year's Day (observed)",
+    "1989-01-26": "Australia Day",
+    "1989-03-24": "Good Friday",
+    "1989-03-27": "Easter Monday",
+    "1989-04-06": "Act of Self Determination Day",
+    "1989-04-25": "ANZAC Day",
+    "1989-05-06": "Eid al-Fitr (estimated)",
+    "1989-05-08": "Eid al-Fitr (observed, estimated)",
+    "1989-06-12": "Queen's Birthday",
+    "1989-07-13": "Eid al-Adha (estimated)",
+    "1989-08-02": "Islamic New Year (estimated)",
+    "1989-10-11": "Prophet's Birthday (estimated)",
+    "1989-12-25": "Christmas Day",
+    "1989-12-26": "Boxing Day",
+    "1990-01-01": "New Year's Day",
+    "1990-01-26": "Australia Day",
+    "1990-04-06": "Act of Self Determination Day",
+    "1990-04-13": "Good Friday",
+    "1990-04-16": "Easter Monday",
+    "1990-04-25": "ANZAC Day",
+    "1990-04-26": "Eid al-Fitr (estimated)",
+    "1990-06-11": "Queen's Birthday",
+    "1990-07-02": "Eid al-Adha (estimated)",
+    "1990-07-23": "Islamic New Year (estimated)",
+    "1990-10-01": "Prophet's Birthday (estimated)",
+    "1990-12-25": "Christmas Day",
+    "1990-12-26": "Boxing Day",
+    "1991-01-01": "New Year's Day",
+    "1991-01-26": "Australia Day",
+    "1991-01-28": "Australia Day (observed)",
+    "1991-03-29": "Good Friday",
+    "1991-04-01": "Easter Monday",
+    "1991-04-06": "Act of Self Determination Day",
+    "1991-04-08": "Act of Self Determination Day (observed)",
+    "1991-04-15": "Eid al-Fitr (estimated)",
+    "1991-04-25": "ANZAC Day",
+    "1991-06-10": "Queen's Birthday",
+    "1991-06-22": "Eid al-Adha (estimated)",
+    "1991-06-24": "Eid al-Adha (observed, estimated)",
+    "1991-07-12": "Islamic New Year (estimated)",
+    "1991-09-20": "Prophet's Birthday (estimated)",
+    "1991-12-25": "Christmas Day",
+    "1991-12-26": "Boxing Day",
+    "1992-01-01": "New Year's Day",
+    "1992-01-26": "Australia Day",
+    "1992-01-27": "Australia Day (observed)",
+    "1992-04-04": "Eid al-Fitr (estimated)",
+    "1992-04-06": "Act of Self Determination Day; Eid al-Fitr (observed, estimated)",
+    "1992-04-17": "Good Friday",
+    "1992-04-20": "Easter Monday",
+    "1992-04-25": "ANZAC Day",
+    "1992-04-27": "ANZAC Day (observed)",
+    "1992-06-08": "Queen's Birthday",
+    "1992-06-11": "Eid al-Adha (estimated)",
+    "1992-07-01": "Islamic New Year (estimated)",
+    "1992-09-09": "Prophet's Birthday (estimated)",
+    "1992-12-25": "Christmas Day",
+    "1992-12-26": "Boxing Day",
+    "1992-12-28": "Boxing Day (observed)",
+    "1993-01-01": "New Year's Day",
+    "1993-01-26": "Australia Day",
+    "1993-03-24": "Eid al-Fitr (estimated)",
+    "1993-04-06": "Act of Self Determination Day",
+    "1993-04-09": "Good Friday",
+    "1993-04-12": "Easter Monday",
+    "1993-04-25": "ANZAC Day",
+    "1993-04-26": "ANZAC Day (observed)",
+    "1993-05-31": "Eid al-Adha (estimated)",
+    "1993-06-14": "Queen's Birthday",
+    "1993-06-21": "Islamic New Year (estimated)",
+    "1993-08-29": "Prophet's Birthday (estimated)",
+    "1993-08-30": "Prophet's Birthday (observed, estimated)",
+    "1993-12-25": "Christmas Day",
+    "1993-12-26": "Boxing Day",
+    "1993-12-27": "Christmas Day (observed)",
+    "1993-12-28": "Boxing Day (observed)",
+    "1994-01-01": "New Year's Day",
+    "1994-01-03": "New Year's Day (observed)",
+    "1994-01-26": "Australia Day",
+    "1994-03-13": "Eid al-Fitr (estimated)",
+    "1994-03-14": "Eid al-Fitr (observed, estimated)",
+    "1994-04-01": "Good Friday",
+    "1994-04-04": "Easter Monday",
+    "1994-04-06": "Act of Self Determination Day",
+    "1994-04-25": "ANZAC Day",
+    "1994-05-20": "Eid al-Adha (estimated)",
+    "1994-06-10": "Islamic New Year (estimated)",
+    "1994-06-13": "Queen's Birthday",
+    "1994-08-19": "Prophet's Birthday (estimated)",
+    "1994-12-25": "Christmas Day",
+    "1994-12-26": "Boxing Day; Christmas Day (observed)",
+    "1994-12-27": "Boxing Day (observed)",
+    "1995-01-01": "New Year's Day",
+    "1995-01-02": "New Year's Day (observed)",
+    "1995-01-26": "Australia Day",
+    "1995-03-02": "Eid al-Fitr (estimated)",
+    "1995-04-06": "Act of Self Determination Day",
+    "1995-04-14": "Good Friday",
+    "1995-04-17": "Easter Monday",
+    "1995-04-25": "ANZAC Day",
+    "1995-05-09": "Eid al-Adha (estimated)",
+    "1995-05-30": "Islamic New Year (estimated)",
+    "1995-06-12": "Queen's Birthday",
+    "1995-08-08": "Prophet's Birthday (estimated)",
+    "1995-12-25": "Christmas Day",
+    "1995-12-26": "Boxing Day",
+    "1996-01-01": "New Year's Day",
+    "1996-01-26": "Australia Day",
+    "1996-02-19": "Eid al-Fitr (estimated)",
+    "1996-04-05": "Good Friday",
+    "1996-04-06": "Act of Self Determination Day",
+    "1996-04-08": "Act of Self Determination Day (observed); Easter Monday",
+    "1996-04-25": "ANZAC Day",
+    "1996-04-27": "Eid al-Adha (estimated)",
+    "1996-04-29": "Eid al-Adha (observed, estimated)",
+    "1996-05-18": "Islamic New Year (estimated)",
+    "1996-05-20": "Islamic New Year (observed, estimated)",
+    "1996-06-10": "Queen's Birthday",
+    "1996-07-27": "Prophet's Birthday (estimated)",
+    "1996-07-29": "Prophet's Birthday (observed, estimated)",
+    "1996-12-25": "Christmas Day",
+    "1996-12-26": "Boxing Day",
+    "1997-01-01": "New Year's Day",
+    "1997-01-26": "Australia Day",
+    "1997-01-27": "Australia Day (observed)",
+    "1997-02-08": "Eid al-Fitr (estimated)",
+    "1997-02-10": "Eid al-Fitr (observed, estimated)",
+    "1997-03-28": "Good Friday",
+    "1997-03-31": "Easter Monday",
+    "1997-04-06": "Act of Self Determination Day",
+    "1997-04-07": "Act of Self Determination Day (observed)",
+    "1997-04-17": "Eid al-Adha (estimated)",
+    "1997-04-25": "ANZAC Day",
+    "1997-05-07": "Islamic New Year (estimated)",
+    "1997-06-09": "Queen's Birthday",
+    "1997-07-16": "Prophet's Birthday (estimated)",
+    "1997-12-25": "Christmas Day",
+    "1997-12-26": "Boxing Day",
+    "1998-01-01": "New Year's Day",
+    "1998-01-26": "Australia Day",
+    "1998-01-29": "Eid al-Fitr (estimated)",
+    "1998-04-06": "Act of Self Determination Day",
+    "1998-04-07": "Eid al-Adha (estimated)",
+    "1998-04-10": "Good Friday",
+    "1998-04-13": "Easter Monday",
+    "1998-04-25": "ANZAC Day",
+    "1998-04-27": "ANZAC Day (observed); Islamic New Year (estimated)",
+    "1998-06-08": "Queen's Birthday",
+    "1998-07-06": "Prophet's Birthday (estimated)",
+    "1998-12-25": "Christmas Day",
+    "1998-12-26": "Boxing Day",
+    "1998-12-28": "Boxing Day (observed)",
+    "1999-01-01": "New Year's Day",
+    "1999-01-18": "Eid al-Fitr (estimated)",
+    "1999-01-26": "Australia Day",
+    "1999-03-27": "Eid al-Adha (estimated)",
+    "1999-03-29": "Eid al-Adha (observed, estimated)",
+    "1999-04-02": "Good Friday",
+    "1999-04-05": "Easter Monday",
+    "1999-04-06": "Act of Self Determination Day",
+    "1999-04-17": "Islamic New Year (estimated)",
+    "1999-04-19": "Islamic New Year (observed, estimated)",
+    "1999-04-25": "ANZAC Day",
+    "1999-04-26": "ANZAC Day (observed)",
+    "1999-06-14": "Queen's Birthday",
+    "1999-06-26": "Prophet's Birthday (estimated)",
+    "1999-06-28": "Prophet's Birthday (observed, estimated)",
+    "1999-12-25": "Christmas Day",
+    "1999-12-26": "Boxing Day",
+    "1999-12-27": "Christmas Day (observed)",
+    "1999-12-28": "Boxing Day (observed)",
+    "2000-01-01": "New Year's Day",
+    "2000-01-03": "New Year's Day (observed)",
+    "2000-01-08": "Eid al-Fitr (estimated)",
+    "2000-01-10": "Eid al-Fitr (observed, estimated)",
+    "2000-01-26": "Australia Day",
+    "2000-03-16": "Eid al-Adha (estimated)",
+    "2000-04-06": "Act of Self Determination Day; Islamic New Year (estimated)",
+    "2000-04-21": "Good Friday",
+    "2000-04-24": "Easter Monday",
+    "2000-04-25": "ANZAC Day",
+    "2000-06-12": "Queen's Birthday",
+    "2000-06-14": "Prophet's Birthday (estimated)",
+    "2000-12-25": "Christmas Day",
+    "2000-12-26": "Boxing Day",
+    "2000-12-27": "Eid al-Fitr (estimated)",
+    "2001-01-01": "New Year's Day",
+    "2001-01-26": "Australia Day",
+    "2001-03-05": "Eid al-Adha (estimated)",
+    "2001-03-26": "Islamic New Year (estimated)",
+    "2001-04-06": "Act of Self Determination Day",
+    "2001-04-13": "Good Friday",
+    "2001-04-16": "Easter Monday",
+    "2001-04-25": "ANZAC Day",
+    "2001-06-04": "Prophet's Birthday (estimated)",
+    "2001-06-11": "Queen's Birthday",
+    "2001-12-16": "Eid al-Fitr (estimated)",
+    "2001-12-17": "Eid al-Fitr (observed, estimated)",
+    "2001-12-25": "Christmas Day",
+    "2001-12-26": "Boxing Day",
+    "2002-01-01": "New Year's Day",
+    "2002-01-26": "Australia Day",
+    "2002-01-28": "Australia Day (observed)",
+    "2002-02-22": "Eid al-Adha (estimated)",
+    "2002-03-15": "Islamic New Year (estimated)",
+    "2002-03-29": "Good Friday",
+    "2002-04-01": "Easter Monday",
+    "2002-04-06": "Act of Self Determination Day",
+    "2002-04-08": "Act of Self Determination Day (observed)",
+    "2002-04-25": "ANZAC Day",
+    "2002-05-24": "Prophet's Birthday (estimated)",
+    "2002-06-10": "Queen's Birthday",
+    "2002-12-05": "Eid al-Fitr (estimated)",
+    "2002-12-25": "Christmas Day",
+    "2002-12-26": "Boxing Day",
+    "2003-01-01": "New Year's Day",
+    "2003-01-26": "Australia Day",
+    "2003-01-27": "Australia Day (observed)",
+    "2003-02-11": "Eid al-Adha (estimated)",
+    "2003-03-04": "Islamic New Year (estimated)",
+    "2003-04-06": "Act of Self Determination Day",
+    "2003-04-07": "Act of Self Determination Day (observed)",
+    "2003-04-18": "Good Friday",
+    "2003-04-21": "Easter Monday",
+    "2003-04-25": "ANZAC Day",
+    "2003-05-13": "Prophet's Birthday (estimated)",
+    "2003-06-09": "Queen's Birthday",
+    "2003-11-25": "Eid al-Fitr (estimated)",
+    "2003-12-25": "Christmas Day",
+    "2003-12-26": "Boxing Day",
+    "2004-01-01": "New Year's Day",
+    "2004-01-26": "Australia Day",
+    "2004-02-01": "Eid al-Adha (estimated)",
+    "2004-02-02": "Eid al-Adha (observed, estimated)",
+    "2004-02-21": "Islamic New Year (estimated)",
+    "2004-02-23": "Islamic New Year (observed, estimated)",
+    "2004-04-06": "Act of Self Determination Day",
+    "2004-04-09": "Good Friday",
+    "2004-04-12": "Easter Monday",
+    "2004-04-25": "ANZAC Day",
+    "2004-04-26": "ANZAC Day (observed)",
+    "2004-05-01": "Prophet's Birthday (estimated)",
+    "2004-05-03": "Prophet's Birthday (observed, estimated)",
+    "2004-06-14": "Queen's Birthday",
+    "2004-11-14": "Eid al-Fitr (estimated)",
+    "2004-11-15": "Eid al-Fitr (observed, estimated)",
+    "2004-12-25": "Christmas Day",
+    "2004-12-26": "Boxing Day",
+    "2004-12-27": "Christmas Day (observed)",
+    "2004-12-28": "Boxing Day (observed)",
+    "2005-01-01": "New Year's Day",
+    "2005-01-03": "New Year's Day (observed)",
+    "2005-01-21": "Eid al-Adha (estimated)",
+    "2005-01-26": "Australia Day",
+    "2005-02-10": "Islamic New Year (estimated)",
+    "2005-03-25": "Good Friday",
+    "2005-03-28": "Easter Monday",
+    "2005-04-06": "Act of Self Determination Day",
+    "2005-04-21": "Prophet's Birthday (estimated)",
+    "2005-04-25": "ANZAC Day",
+    "2005-06-13": "Queen's Birthday",
+    "2005-11-03": "Eid al-Fitr (estimated)",
+    "2005-12-25": "Christmas Day",
+    "2005-12-26": "Boxing Day; Christmas Day (observed)",
+    "2005-12-27": "Boxing Day (observed)",
+    "2006-01-01": "New Year's Day",
+    "2006-01-02": "New Year's Day (observed)",
+    "2006-01-10": "Eid al-Adha (estimated)",
+    "2006-01-26": "Australia Day",
+    "2006-01-31": "Islamic New Year (estimated)",
+    "2006-04-06": "Act of Self Determination Day",
+    "2006-04-10": "Prophet's Birthday (estimated)",
+    "2006-04-14": "Good Friday",
+    "2006-04-17": "Easter Monday",
+    "2006-04-25": "ANZAC Day",
+    "2006-06-12": "Queen's Birthday",
+    "2006-10-23": "Eid al-Fitr (estimated)",
+    "2006-12-25": "Christmas Day",
+    "2006-12-26": "Boxing Day",
+    "2006-12-31": "Eid al-Adha (estimated)",
+    "2007-01-01": "New Year's Day",
+    "2007-01-22": "Islamic New Year",
+    "2007-01-26": "Australia Day",
+    "2007-04-02": "Prophet's Birthday",
+    "2007-04-05": "Act of Self Determination Day",
+    "2007-04-06": "Good Friday",
+    "2007-04-09": "Easter Monday",
+    "2007-04-25": "ANZAC Day",
+    "2007-06-11": "Queen's Birthday",
+    "2007-10-15": "Eid al-Fitr",
+    "2007-12-20": "Eid al-Adha",
+    "2007-12-25": "Christmas Day",
+    "2007-12-26": "Boxing Day",
+    "2008-01-01": "New Year's Day",
+    "2008-01-10": "Islamic New Year",
+    "2008-01-26": "Australia Day",
+    "2008-01-28": "Australia Day (observed)",
+    "2008-03-20": "Prophet's Birthday",
+    "2008-03-21": "Good Friday",
+    "2008-03-24": "Easter Monday",
+    "2008-04-06": "Act of Self Determination Day",
+    "2008-04-07": "Act of Self Determination Day (observed)",
+    "2008-04-25": "ANZAC Day",
+    "2008-06-09": "Queen's Birthday",
+    "2008-10-01": "Eid al-Fitr",
+    "2008-12-08": "Eid al-Adha",
+    "2008-12-25": "Christmas Day",
+    "2008-12-26": "Boxing Day",
+    "2009-01-01": "New Year's Day",
+    "2009-01-26": "Australia Day",
+    "2009-03-09": "Prophet's Birthday",
+    "2009-04-06": "Act of Self Determination Day",
+    "2009-04-10": "Good Friday",
+    "2009-04-13": "Easter Monday",
+    "2009-04-25": "ANZAC Day",
+    "2009-04-27": "ANZAC Day (observed)",
+    "2009-06-08": "Queen's Birthday",
+    "2009-09-21": "Eid al-Fitr",
+    "2009-11-30": "Eid al-Adha",
+    "2009-12-18": "Islamic New Year",
+    "2009-12-25": "Christmas Day",
+    "2009-12-26": "Boxing Day",
+    "2009-12-28": "Boxing Day (observed)",
+    "2010-01-01": "New Year's Day",
+    "2010-01-26": "Australia Day",
+    "2010-02-26": "Prophet's Birthday",
+    "2010-04-02": "Good Friday",
+    "2010-04-05": "Easter Monday",
+    "2010-04-06": "Act of Self Determination Day",
+    "2010-04-25": "ANZAC Day",
+    "2010-04-26": "ANZAC Day (observed)",
+    "2010-06-14": "Queen's Birthday",
+    "2010-09-10": "Eid al-Fitr",
+    "2010-11-16": "Eid al-Adha",
+    "2010-12-07": "Islamic New Year",
+    "2010-12-25": "Christmas Day",
+    "2010-12-26": "Boxing Day",
+    "2010-12-27": "Christmas Day (observed)",
+    "2010-12-28": "Boxing Day (observed)",
+    "2011-01-01": "New Year's Day",
+    "2011-01-03": "New Year's Day (observed)",
+    "2011-01-26": "Australia Day",
+    "2011-02-15": "Prophet's Birthday (estimated)",
+    "2011-04-06": "Act of Self Determination Day",
+    "2011-04-22": "Good Friday",
+    "2011-04-25": "ANZAC Day; Easter Monday",
+    "2011-06-13": "Queen's Birthday",
+    "2011-08-30": "Eid al-Fitr (estimated)",
+    "2011-11-06": "Eid al-Adha (estimated)",
+    "2011-11-07": "Eid al-Adha (observed, estimated)",
+    "2011-11-26": "Islamic New Year (estimated)",
+    "2011-11-28": "Islamic New Year (observed, estimated)",
+    "2011-12-25": "Christmas Day",
+    "2011-12-26": "Boxing Day; Christmas Day (observed)",
+    "2011-12-27": "Boxing Day (observed)",
+    "2012-01-01": "New Year's Day",
+    "2012-01-02": "New Year's Day (observed)",
+    "2012-01-26": "Australia Day",
+    "2012-02-04": "Prophet's Birthday (estimated)",
+    "2012-02-06": "Prophet's Birthday (observed, estimated)",
+    "2012-04-06": "Act of Self Determination Day; Good Friday",
+    "2012-04-09": "Easter Monday",
+    "2012-04-25": "ANZAC Day",
+    "2012-06-11": "Queen's Birthday",
+    "2012-08-19": "Eid al-Fitr (estimated)",
+    "2012-08-20": "Eid al-Fitr (observed, estimated)",
+    "2012-10-26": "Eid al-Adha (estimated)",
+    "2012-11-15": "Islamic New Year (estimated)",
+    "2012-12-25": "Christmas Day",
+    "2012-12-26": "Boxing Day",
+    "2013-01-01": "New Year's Day",
+    "2013-01-24": "Prophet's Birthday",
+    "2013-01-26": "Australia Day",
+    "2013-01-28": "Australia Day (observed)",
+    "2013-03-29": "Good Friday",
+    "2013-04-01": "Easter Monday",
+    "2013-04-06": "Act of Self Determination Day",
+    "2013-04-08": "Act of Self Determination Day (observed)",
+    "2013-04-25": "ANZAC Day",
+    "2013-06-10": "Queen's Birthday",
+    "2013-08-08": "Eid al-Fitr",
+    "2013-10-15": "Eid al-Adha",
+    "2013-11-04": "Islamic New Year",
+    "2013-12-25": "Christmas Day",
+    "2013-12-26": "Boxing Day",
+    "2014-01-01": "New Year's Day",
+    "2014-01-13": "Prophet's Birthday",
+    "2014-01-26": "Australia Day",
+    "2014-01-27": "Australia Day (observed)",
+    "2014-04-06": "Act of Self Determination Day",
+    "2014-04-07": "Act of Self Determination Day (observed)",
+    "2014-04-18": "Good Friday",
+    "2014-04-21": "Easter Monday",
+    "2014-04-25": "ANZAC Day",
+    "2014-06-09": "Queen's Birthday",
+    "2014-07-28": "Eid al-Fitr",
+    "2014-10-04": "Eid al-Adha",
+    "2014-10-06": "Eid al-Adha (observed)",
+    "2014-10-25": "Islamic New Year",
+    "2014-10-27": "Islamic New Year (observed)",
+    "2014-12-25": "Christmas Day",
+    "2014-12-26": "Boxing Day",
+    "2015-01-01": "New Year's Day",
+    "2015-01-03": "Prophet's Birthday (estimated)",
+    "2015-01-05": "Prophet's Birthday (observed, estimated)",
+    "2015-01-26": "Australia Day",
+    "2015-04-03": "Good Friday",
+    "2015-04-06": "Act of Self Determination Day; Easter Monday",
+    "2015-04-25": "ANZAC Day",
+    "2015-04-27": "ANZAC Day (observed)",
+    "2015-06-08": "Queen's Birthday",
+    "2015-07-17": "Eid al-Fitr (estimated)",
+    "2015-09-23": "Eid al-Adha (estimated)",
+    "2015-10-14": "Islamic New Year (estimated)",
+    "2015-12-23": "Prophet's Birthday (estimated)",
+    "2015-12-25": "Christmas Day",
+    "2015-12-26": "Boxing Day",
+    "2015-12-28": "Boxing Day (observed)",
+    "2016-01-01": "New Year's Day",
+    "2016-01-26": "Australia Day",
+    "2016-03-25": "Good Friday",
+    "2016-03-28": "Easter Monday",
+    "2016-04-06": "Act of Self Determination Day",
+    "2016-04-25": "ANZAC Day",
+    "2016-06-13": "Queen's Birthday",
+    "2016-07-06": "Eid al-Fitr",
+    "2016-09-13": "Eid al-Adha",
+    "2016-10-03": "Islamic New Year",
+    "2016-12-12": "Prophet's Birthday",
+    "2016-12-25": "Christmas Day",
+    "2016-12-26": "Boxing Day; Christmas Day (observed)",
+    "2016-12-27": "Boxing Day (observed)",
+    "2017-01-01": "New Year's Day",
+    "2017-01-02": "New Year's Day (observed)",
+    "2017-01-26": "Australia Day",
+    "2017-04-06": "Act of Self Determination Day",
+    "2017-04-14": "Good Friday",
+    "2017-04-17": "Easter Monday",
+    "2017-04-25": "ANZAC Day",
+    "2017-06-12": "Queen's Birthday",
+    "2017-06-24": "Eid al-Fitr",
+    "2017-06-26": "Eid al-Fitr (observed)",
+    "2017-09-01": "Eid al-Adha",
+    "2017-09-22": "Islamic New Year",
+    "2017-12-01": "Prophet's Birthday",
+    "2017-12-25": "Christmas Day",
+    "2017-12-26": "Boxing Day",
+    "2018-01-01": "New Year's Day",
+    "2018-01-26": "Australia Day",
+    "2018-03-30": "Good Friday",
+    "2018-04-02": "Easter Monday",
+    "2018-04-06": "Act of Self Determination Day",
+    "2018-04-25": "ANZAC Day",
+    "2018-06-11": "Queen's Birthday",
+    "2018-06-15": "Eid al-Fitr (estimated)",
+    "2018-08-21": "Eid al-Adha (estimated)",
+    "2018-09-11": "Islamic New Year (estimated)",
+    "2018-11-20": "Prophet's Birthday (estimated)",
+    "2018-12-25": "Christmas Day",
+    "2018-12-26": "Boxing Day",
+    "2019-01-01": "New Year's Day",
+    "2019-01-26": "Australia Day",
+    "2019-01-28": "Australia Day (observed)",
+    "2019-04-06": "Act of Self Determination Day",
+    "2019-04-10": "Act of Self Determination Day (observed)",
+    "2019-04-19": "Good Friday",
+    "2019-04-22": "Easter Monday",
+    "2019-04-25": "ANZAC Day",
+    "2019-06-05": "Eid al-Fitr",
+    "2019-06-10": "Queen's Birthday",
+    "2019-08-11": "Eid al-Adha",
+    "2019-08-12": "Eid al-Adha (observed)",
+    "2019-09-01": "Islamic New Year",
+    "2019-09-02": "Islamic New Year (observed)",
+    "2019-11-09": "Prophet's Birthday",
+    "2019-11-11": "Prophet's Birthday (observed)",
+    "2019-12-25": "Christmas Day",
+    "2019-12-26": "Boxing Day",
+    "2020-01-01": "New Year's Day",
+    "2020-01-26": "Australia Day",
+    "2020-01-27": "Australia Day (observed)",
+    "2020-04-06": "Act of Self Determination Day",
+    "2020-04-10": "Good Friday",
+    "2020-04-13": "Easter Monday",
+    "2020-04-25": "ANZAC Day",
+    "2020-04-27": "ANZAC Day (observed)",
+    "2020-05-24": "Eid al-Fitr",
+    "2020-05-25": "Eid al-Fitr (observed)",
+    "2020-06-08": "Queen's Birthday",
+    "2020-07-31": "Eid al-Adha",
+    "2020-10-29": "Prophet's Birthday",
+    "2020-12-25": "Christmas Day",
+    "2020-12-26": "Boxing Day",
+    "2020-12-28": "Boxing Day (observed)",
+    "2021-01-01": "New Year's Day",
+    "2021-01-26": "Australia Day",
+    "2021-04-02": "Good Friday",
+    "2021-04-05": "Easter Monday",
+    "2021-04-06": "Act of Self Determination Day",
+    "2021-04-25": "ANZAC Day",
+    "2021-04-26": "ANZAC Day (observed)",
+    "2021-05-13": "Eid al-Fitr",
+    "2021-06-07": "Queen's Birthday",
+    "2021-07-20": "Eid al-Adha",
+    "2021-10-19": "Prophet's Birthday",
+    "2021-12-25": "Christmas Day",
+    "2021-12-26": "Boxing Day",
+    "2021-12-27": "Christmas Day (observed)",
+    "2021-12-28": "Boxing Day (observed)",
+    "2022-01-01": "New Year's Day",
+    "2022-01-03": "New Year's Day (observed)",
+    "2022-01-26": "Australia Day",
+    "2022-04-06": "Act of Self Determination Day",
+    "2022-04-15": "Good Friday",
+    "2022-04-18": "Easter Monday",
+    "2022-04-25": "ANZAC Day",
+    "2022-05-03": "Eid al-Fitr",
+    "2022-06-06": "Queen's Birthday",
+    "2022-07-09": "Eid al-Adha",
+    "2022-07-11": "Eid al-Adha (observed)",
+    "2022-09-22": "National Day of Mourning for Queen Elizabeth II",
+    "2022-10-08": "Prophet's Birthday",
+    "2022-10-10": "Prophet's Birthday (observed)",
+    "2022-12-25": "Christmas Day",
+    "2022-12-26": "Boxing Day; Christmas Day (observed)",
+    "2022-12-27": "Boxing Day (observed)",
+    "2023-01-01": "New Year's Day",
+    "2023-01-02": "New Year's Day (observed)",
+    "2023-01-26": "Australia Day",
+    "2023-04-06": "Act of Self Determination Day",
+    "2023-04-07": "Good Friday",
+    "2023-04-10": "Easter Monday",
+    "2023-04-22": "Eid al-Fitr",
+    "2023-04-24": "Eid al-Fitr (observed)",
+    "2023-04-25": "ANZAC Day",
+    "2023-06-06": "King's Birthday",
+    "2023-06-28": "Eid al-Adha",
+    "2023-09-27": "Prophet's Birthday",
+    "2023-12-25": "Christmas Day",
+    "2023-12-26": "Boxing Day",
+    "2024-01-01": "New Year's Day",
+    "2024-01-26": "Australia Day",
+    "2024-03-29": "Good Friday",
+    "2024-04-01": "Easter Monday",
+    "2024-04-06": "Act of Self Determination Day",
+    "2024-04-08": "Act of Self Determination Day (observed)",
+    "2024-04-10": "Eid al-Fitr",
+    "2024-04-25": "ANZAC Day",
+    "2024-06-06": "King's Birthday",
+    "2024-06-17": "Eid al-Adha",
+    "2024-09-16": "Prophet's Birthday",
+    "2024-12-25": "Christmas Day",
+    "2024-12-26": "Boxing Day",
+    "2025-01-01": "New Year's Day",
+    "2025-01-26": "Australia Day",
+    "2025-01-27": "Australia Day (observed)",
+    "2025-03-31": "Eid al-Fitr",
+    "2025-04-06": "Act of Self Determination Day",
+    "2025-04-07": "Act of Self Determination Day (observed)",
+    "2025-04-18": "Good Friday",
+    "2025-04-21": "Easter Monday",
+    "2025-04-25": "ANZAC Day",
+    "2025-06-06": "Eid al-Adha (observed)",
+    "2025-06-07": "Eid al-Adha",
+    "2025-06-09": "King's Birthday",
+    "2025-09-05": "Prophet's Birthday",
+    "2025-12-25": "Christmas Day",
+    "2025-12-26": "Boxing Day",
+    "2026-01-01": "New Year's Day",
+    "2026-01-26": "Australia Day",
+    "2026-03-20": "Eid al-Fitr (estimated)",
+    "2026-04-03": "Good Friday",
+    "2026-04-06": "Act of Self Determination Day; Easter Monday",
+    "2026-04-25": "ANZAC Day",
+    "2026-04-27": "ANZAC Day (observed)",
+    "2026-05-27": "Eid al-Adha (estimated)",
+    "2026-06-08": "King's Birthday",
+    "2026-08-25": "Prophet's Birthday (estimated)",
+    "2026-12-25": "Christmas Day",
+    "2026-12-26": "Boxing Day",
+    "2026-12-28": "Boxing Day (observed)",
+    "2027-01-01": "New Year's Day",
+    "2027-01-26": "Australia Day",
+    "2027-03-09": "Eid al-Fitr (estimated)",
+    "2027-03-26": "Good Friday",
+    "2027-03-29": "Easter Monday",
+    "2027-04-06": "Act of Self Determination Day",
+    "2027-04-25": "ANZAC Day",
+    "2027-04-26": "ANZAC Day (observed)",
+    "2027-05-16": "Eid al-Adha (estimated)",
+    "2027-05-17": "Eid al-Adha (observed, estimated)",
+    "2027-06-14": "King's Birthday",
+    "2027-08-14": "Prophet's Birthday (estimated)",
+    "2027-08-16": "Prophet's Birthday (observed, estimated)",
+    "2027-12-25": "Christmas Day",
+    "2027-12-26": "Boxing Day",
+    "2027-12-27": "Christmas Day (observed)",
+    "2027-12-28": "Boxing Day (observed)",
+    "2028-01-01": "New Year's Day",
+    "2028-01-03": "New Year's Day (observed)",
+    "2028-01-26": "Australia Day",
+    "2028-02-26": "Eid al-Fitr (estimated)",
+    "2028-02-28": "Eid al-Fitr (observed, estimated)",
+    "2028-04-06": "Act of Self Determination Day",
+    "2028-04-14": "Good Friday",
+    "2028-04-17": "Easter Monday",
+    "2028-04-25": "ANZAC Day",
+    "2028-05-05": "Eid al-Adha (estimated)",
+    "2028-06-12": "King's Birthday",
+    "2028-08-03": "Prophet's Birthday (estimated)",
+    "2028-12-25": "Christmas Day",
+    "2028-12-26": "Boxing Day",
+    "2029-01-01": "New Year's Day",
+    "2029-01-26": "Australia Day",
+    "2029-02-14": "Eid al-Fitr (estimated)",
+    "2029-03-30": "Good Friday",
+    "2029-04-02": "Easter Monday",
+    "2029-04-06": "Act of Self Determination Day",
+    "2029-04-24": "Eid al-Adha (estimated)",
+    "2029-04-25": "ANZAC Day",
+    "2029-06-11": "King's Birthday",
+    "2029-07-24": "Prophet's Birthday (estimated)",
+    "2029-12-25": "Christmas Day",
+    "2029-12-26": "Boxing Day",
+    "2030-01-01": "New Year's Day",
+    "2030-01-26": "Australia Day",
+    "2030-01-28": "Australia Day (observed)",
+    "2030-02-04": "Eid al-Fitr (estimated)",
+    "2030-04-06": "Act of Self Determination Day",
+    "2030-04-08": "Act of Self Determination Day (observed)",
+    "2030-04-13": "Eid al-Adha (estimated)",
+    "2030-04-15": "Eid al-Adha (observed, estimated)",
+    "2030-04-19": "Good Friday",
+    "2030-04-22": "Easter Monday",
+    "2030-04-25": "ANZAC Day",
+    "2030-06-10": "King's Birthday",
+    "2030-07-13": "Prophet's Birthday (estimated)",
+    "2030-07-15": "Prophet's Birthday (observed, estimated)",
+    "2030-12-25": "Christmas Day",
+    "2030-12-26": "Boxing Day",
+    "2031-01-01": "New Year's Day",
+    "2031-01-24": "Eid al-Fitr (estimated)",
+    "2031-01-26": "Australia Day",
+    "2031-01-27": "Australia Day (observed)",
+    "2031-04-02": "Eid al-Adha (estimated)",
+    "2031-04-06": "Act of Self Determination Day",
+    "2031-04-07": "Act of Self Determination Day (observed)",
+    "2031-04-11": "Good Friday",
+    "2031-04-14": "Easter Monday",
+    "2031-04-25": "ANZAC Day",
+    "2031-06-09": "King's Birthday",
+    "2031-07-02": "Prophet's Birthday (estimated)",
+    "2031-12-25": "Christmas Day",
+    "2031-12-26": "Boxing Day",
+    "2032-01-01": "New Year's Day",
+    "2032-01-14": "Eid al-Fitr (estimated)",
+    "2032-01-26": "Australia Day",
+    "2032-03-22": "Eid al-Adha (estimated)",
+    "2032-03-26": "Good Friday",
+    "2032-03-29": "Easter Monday",
+    "2032-04-06": "Act of Self Determination Day",
+    "2032-04-25": "ANZAC Day",
+    "2032-04-26": "ANZAC Day (observed)",
+    "2032-06-14": "King's Birthday",
+    "2032-06-20": "Prophet's Birthday (estimated)",
+    "2032-06-21": "Prophet's Birthday (observed, estimated)",
+    "2032-12-25": "Christmas Day",
+    "2032-12-26": "Boxing Day",
+    "2032-12-27": "Christmas Day (observed)",
+    "2032-12-28": "Boxing Day (observed)",
+    "2033-01-01": "New Year's Day",
+    "2033-01-02": "Eid al-Fitr (estimated)",
+    "2033-01-03": "Eid al-Fitr (observed, estimated); New Year's Day (observed)",
+    "2033-01-26": "Australia Day",
+    "2033-03-11": "Eid al-Adha (estimated)",
+    "2033-04-06": "Act of Self Determination Day",
+    "2033-04-15": "Good Friday",
+    "2033-04-18": "Easter Monday",
+    "2033-04-25": "ANZAC Day",
+    "2033-06-09": "Prophet's Birthday (estimated)",
+    "2033-06-13": "King's Birthday",
+    "2033-12-23": "Eid al-Fitr (estimated)",
+    "2033-12-25": "Christmas Day",
+    "2033-12-26": "Boxing Day; Christmas Day (observed)",
+    "2033-12-27": "Boxing Day (observed)",
+    "2034-01-01": "New Year's Day",
+    "2034-01-02": "New Year's Day (observed)",
+    "2034-01-26": "Australia Day",
+    "2034-03-01": "Eid al-Adha (estimated)",
+    "2034-04-06": "Act of Self Determination Day",
+    "2034-04-07": "Good Friday",
+    "2034-04-10": "Easter Monday",
+    "2034-04-25": "ANZAC Day",
+    "2034-05-30": "Prophet's Birthday (estimated)",
+    "2034-06-12": "King's Birthday",
+    "2034-12-12": "Eid al-Fitr (estimated)",
+    "2034-12-25": "Christmas Day",
+    "2034-12-26": "Boxing Day",
+    "2035-01-01": "New Year's Day",
+    "2035-01-26": "Australia Day",
+    "2035-02-18": "Eid al-Adha (estimated)",
+    "2035-02-19": "Eid al-Adha (observed, estimated)",
+    "2035-03-23": "Good Friday",
+    "2035-03-26": "Easter Monday",
+    "2035-04-06": "Act of Self Determination Day",
+    "2035-04-25": "ANZAC Day",
+    "2035-05-20": "Prophet's Birthday (estimated)",
+    "2035-05-21": "Prophet's Birthday (observed, estimated)",
+    "2035-06-11": "King's Birthday",
+    "2035-12-01": "Eid al-Fitr (estimated)",
+    "2035-12-03": "Eid al-Fitr (observed, estimated)",
+    "2035-12-25": "Christmas Day",
+    "2035-12-26": "Boxing Day",
+    "2036-01-01": "New Year's Day",
+    "2036-01-26": "Australia Day",
+    "2036-01-28": "Australia Day (observed)",
+    "2036-02-07": "Eid al-Adha (estimated)",
+    "2036-04-06": "Act of Self Determination Day",
+    "2036-04-07": "Act of Self Determination Day (observed)",
+    "2036-04-11": "Good Friday",
+    "2036-04-14": "Easter Monday",
+    "2036-04-25": "ANZAC Day",
+    "2036-05-08": "Prophet's Birthday (estimated)",
+    "2036-06-09": "King's Birthday",
+    "2036-11-19": "Eid al-Fitr (estimated)",
+    "2036-12-25": "Christmas Day",
+    "2036-12-26": "Boxing Day",
+    "2037-01-01": "New Year's Day",
+    "2037-01-26": "Australia Day; Eid al-Adha (estimated)",
+    "2037-04-03": "Good Friday",
+    "2037-04-06": "Act of Self Determination Day; Easter Monday",
+    "2037-04-25": "ANZAC Day",
+    "2037-04-27": "ANZAC Day (observed)",
+    "2037-04-28": "Prophet's Birthday (estimated)",
+    "2037-06-08": "King's Birthday",
+    "2037-11-08": "Eid al-Fitr (estimated)",
+    "2037-11-09": "Eid al-Fitr (observed, estimated)",
+    "2037-12-25": "Christmas Day",
+    "2037-12-26": "Boxing Day",
+    "2037-12-28": "Boxing Day (observed)",
+    "2038-01-01": "New Year's Day",
+    "2038-01-16": "Eid al-Adha (estimated)",
+    "2038-01-18": "Eid al-Adha (observed, estimated)",
+    "2038-01-26": "Australia Day",
+    "2038-04-06": "Act of Self Determination Day",
+    "2038-04-17": "Prophet's Birthday (estimated)",
+    "2038-04-19": "Prophet's Birthday (observed, estimated)",
+    "2038-04-23": "Good Friday",
+    "2038-04-25": "ANZAC Day",
+    "2038-04-26": "ANZAC Day (observed); Easter Monday",
+    "2038-06-14": "King's Birthday",
+    "2038-10-29": "Eid al-Fitr (estimated)",
+    "2038-12-25": "Christmas Day",
+    "2038-12-26": "Boxing Day",
+    "2038-12-27": "Christmas Day (observed)",
+    "2038-12-28": "Boxing Day (observed)",
+    "2039-01-01": "New Year's Day",
+    "2039-01-03": "New Year's Day (observed)",
+    "2039-01-05": "Eid al-Adha (estimated)",
+    "2039-01-26": "Australia Day",
+    "2039-04-06": "Act of Self Determination Day; Prophet's Birthday (estimated)",
+    "2039-04-08": "Good Friday",
+    "2039-04-11": "Easter Monday",
+    "2039-04-25": "ANZAC Day",
+    "2039-06-13": "King's Birthday",
+    "2039-10-19": "Eid al-Fitr (estimated)",
+    "2039-12-25": "Christmas Day",
+    "2039-12-26": "Boxing Day; Christmas Day (observed); Eid al-Adha (estimated)",
+    "2039-12-27": "Boxing Day (observed)",
+    "2040-01-01": "New Year's Day",
+    "2040-01-02": "New Year's Day (observed)",
+    "2040-01-26": "Australia Day",
+    "2040-03-25": "Prophet's Birthday (estimated)",
+    "2040-03-26": "Prophet's Birthday (observed, estimated)",
+    "2040-03-30": "Good Friday",
+    "2040-04-02": "Easter Monday",
+    "2040-04-06": "Act of Self Determination Day",
+    "2040-04-25": "ANZAC Day",
+    "2040-06-11": "King's Birthday",
+    "2040-10-07": "Eid al-Fitr (estimated)",
+    "2040-10-08": "Eid al-Fitr (observed, estimated)",
+    "2040-12-14": "Eid al-Adha (estimated)",
+    "2040-12-25": "Christmas Day",
+    "2040-12-26": "Boxing Day",
+    "2041-01-01": "New Year's Day",
+    "2041-01-26": "Australia Day",
+    "2041-01-28": "Australia Day (observed)",
+    "2041-03-15": "Prophet's Birthday (estimated)",
+    "2041-04-06": "Act of Self Determination Day",
+    "2041-04-08": "Act of Self Determination Day (observed)",
+    "2041-04-19": "Good Friday",
+    "2041-04-22": "Easter Monday",
+    "2041-04-25": "ANZAC Day",
+    "2041-06-10": "King's Birthday",
+    "2041-09-26": "Eid al-Fitr (estimated)",
+    "2041-12-04": "Eid al-Adha (estimated)",
+    "2041-12-25": "Christmas Day",
+    "2041-12-26": "Boxing Day",
+    "2042-01-01": "New Year's Day",
+    "2042-01-26": "Australia Day",
+    "2042-01-27": "Australia Day (observed)",
+    "2042-03-04": "Prophet's Birthday (estimated)",
+    "2042-04-04": "Good Friday",
+    "2042-04-06": "Act of Self Determination Day",
+    "2042-04-07": "Act of Self Determination Day (observed); Easter Monday",
+    "2042-04-25": "ANZAC Day",
+    "2042-06-09": "King's Birthday",
+    "2042-09-15": "Eid al-Fitr (estimated)",
+    "2042-11-23": "Eid al-Adha (estimated)",
+    "2042-11-24": "Eid al-Adha (observed, estimated)",
+    "2042-12-25": "Christmas Day",
+    "2042-12-26": "Boxing Day",
+    "2043-01-01": "New Year's Day",
+    "2043-01-26": "Australia Day",
+    "2043-02-22": "Prophet's Birthday (estimated)",
+    "2043-02-23": "Prophet's Birthday (observed, estimated)",
+    "2043-03-27": "Good Friday",
+    "2043-03-30": "Easter Monday",
+    "2043-04-06": "Act of Self Determination Day",
+    "2043-04-25": "ANZAC Day",
+    "2043-04-27": "ANZAC Day (observed)",
+    "2043-06-08": "King's Birthday",
+    "2043-09-04": "Eid al-Fitr (estimated)",
+    "2043-11-12": "Eid al-Adha (estimated)",
+    "2043-12-25": "Christmas Day",
+    "2043-12-26": "Boxing Day",
+    "2043-12-28": "Boxing Day (observed)",
+    "2044-01-01": "New Year's Day",
+    "2044-01-26": "Australia Day",
+    "2044-02-11": "Prophet's Birthday (estimated)",
+    "2044-04-06": "Act of Self Determination Day",
+    "2044-04-15": "Good Friday",
+    "2044-04-18": "Easter Monday",
+    "2044-04-25": "ANZAC Day",
+    "2044-06-13": "King's Birthday",
+    "2044-08-24": "Eid al-Fitr (estimated)",
+    "2044-10-31": "Eid al-Adha (estimated)",
+    "2044-12-25": "Christmas Day",
+    "2044-12-26": "Boxing Day; Christmas Day (observed)",
+    "2044-12-27": "Boxing Day (observed)",
+    "2045-01-01": "New Year's Day",
+    "2045-01-02": "New Year's Day (observed)",
+    "2045-01-26": "Australia Day",
+    "2045-01-30": "Prophet's Birthday (estimated)",
+    "2045-04-06": "Act of Self Determination Day",
+    "2045-04-07": "Good Friday",
+    "2045-04-10": "Easter Monday",
+    "2045-04-25": "ANZAC Day",
+    "2045-06-12": "King's Birthday",
+    "2045-08-14": "Eid al-Fitr (estimated)",
+    "2045-10-21": "Eid al-Adha (estimated)",
+    "2045-10-23": "Eid al-Adha (observed, estimated)",
+    "2045-12-25": "Christmas Day",
+    "2045-12-26": "Boxing Day",
+    "2046-01-01": "New Year's Day",
+    "2046-01-19": "Prophet's Birthday (estimated)",
+    "2046-01-26": "Australia Day",
+    "2046-03-23": "Good Friday",
+    "2046-03-26": "Easter Monday",
+    "2046-04-06": "Act of Self Determination Day",
+    "2046-04-25": "ANZAC Day",
+    "2046-06-11": "King's Birthday",
+    "2046-08-03": "Eid al-Fitr (estimated)",
+    "2046-10-10": "Eid al-Adha (estimated)",
+    "2046-12-25": "Christmas Day",
+    "2046-12-26": "Boxing Day",
+    "2047-01-01": "New Year's Day",
+    "2047-01-08": "Prophet's Birthday (estimated)",
+    "2047-01-26": "Australia Day",
+    "2047-01-28": "Australia Day (observed)",
+    "2047-04-06": "Act of Self Determination Day",
+    "2047-04-08": "Act of Self Determination Day (observed)",
+    "2047-04-12": "Good Friday",
+    "2047-04-15": "Easter Monday",
+    "2047-04-25": "ANZAC Day",
+    "2047-06-10": "King's Birthday",
+    "2047-07-24": "Eid al-Fitr (estimated)",
+    "2047-09-30": "Eid al-Adha (estimated)",
+    "2047-12-25": "Christmas Day",
+    "2047-12-26": "Boxing Day",
+    "2047-12-29": "Prophet's Birthday (estimated)",
+    "2047-12-30": "Prophet's Birthday (observed, estimated)",
+    "2048-01-01": "New Year's Day",
+    "2048-01-26": "Australia Day",
+    "2048-01-27": "Australia Day (observed)",
+    "2048-04-03": "Good Friday",
+    "2048-04-06": "Act of Self Determination Day; Easter Monday",
+    "2048-04-25": "ANZAC Day",
+    "2048-04-27": "ANZAC Day (observed)",
+    "2048-06-08": "King's Birthday",
+    "2048-07-12": "Eid al-Fitr (estimated)",
+    "2048-07-13": "Eid al-Fitr (observed, estimated)",
+    "2048-09-19": "Eid al-Adha (estimated)",
+    "2048-09-21": "Eid al-Adha (observed, estimated)",
+    "2048-12-18": "Prophet's Birthday (estimated)",
+    "2048-12-25": "Christmas Day",
+    "2048-12-26": "Boxing Day",
+    "2048-12-28": "Boxing Day (observed)",
+    "2049-01-01": "New Year's Day",
+    "2049-01-26": "Australia Day",
+    "2049-04-06": "Act of Self Determination Day",
+    "2049-04-16": "Good Friday",
+    "2049-04-19": "Easter Monday",
+    "2049-04-25": "ANZAC Day",
+    "2049-04-26": "ANZAC Day (observed)",
+    "2049-06-14": "King's Birthday",
+    "2049-07-01": "Eid al-Fitr (estimated)",
+    "2049-09-08": "Eid al-Adha (estimated)",
+    "2049-12-07": "Prophet's Birthday (estimated)",
+    "2049-12-25": "Christmas Day",
+    "2049-12-26": "Boxing Day",
+    "2049-12-27": "Christmas Day (observed)",
+    "2049-12-28": "Boxing Day (observed)",
+    "2050-01-01": "New Year's Day",
+    "2050-01-03": "New Year's Day (observed)",
+    "2050-01-26": "Australia Day",
+    "2050-04-06": "Act of Self Determination Day",
+    "2050-04-08": "Good Friday",
+    "2050-04-11": "Easter Monday",
+    "2050-04-25": "ANZAC Day",
+    "2050-06-13": "King's Birthday",
+    "2050-06-20": "Eid al-Fitr (estimated)",
+    "2050-08-28": "Eid al-Adha (estimated)",
+    "2050-08-29": "Eid al-Adha (observed, estimated)",
+    "2050-11-26": "Prophet's Birthday (estimated)",
+    "2050-11-28": "Prophet's Birthday (observed, estimated)",
+    "2050-12-25": "Christmas Day",
+    "2050-12-26": "Boxing Day; Christmas Day (observed)",
+    "2050-12-27": "Boxing Day (observed)"
+}


Test patch:
diff --git a/tests/countries/test_cocos_islands.py b/tests/countries/test_cocos_islands.py
new file mode 100644
index 00000000..6553d373
--- /dev/null
+++ b/tests/countries/test_cocos_islands.py
@@ -0,0 +1,318 @@
+#  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.cocos_islands import CocosIslands, CC, CCK
+from tests.common import CommonCountryTests
+
+
+class TestCocosIslands(CommonCountryTests, TestCase):
+    @classmethod
+    def setUpClass(cls):
+        years = range(1985, 2050)
+        super().setUpClass(CocosIslands, years=years, years_non_observed=years)
+        cls.no_estimated_holidays = CocosIslands(years=years, islamic_show_estimated=False)
+
+    def test_country_aliases(self):
+        self.assertAliases(CocosIslands, CC, CCK)
+
+    def test_no_holidays(self):
+        self.assertNoHolidays(CocosIslands(years=1984))
+
+    def test_special_holidays(self):
+        self.assertHoliday(
+            "2022-09-22",
+        )
+
+    def test_new_years_day(self):
+        name = "New Year's Day"
+        self.assertHolidayName(name, (f"{year}-01-01" for year in range(1985, 2050)))
+        obs_dt = (
+            "2011-01-03",
+            "2012-01-02",
+            "2017-01-02",
+            "2022-01-03",
+            "2023-01-02",
+        )
+        self.assertHolidayName(f"{name} (observed)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_australia_day(self):
+        name = "Australia Day"
+        self.assertHolidayName(name, (f"{year}-01-26" for year in range(1985, 2050)))
+        obs_dt = (
+            "2013-01-28",
+            "2014-01-27",
+            "2019-01-28",
+            "2020-01-27",
+            "2025-01-27",
+        )
+        self.assertHolidayName(f"{name} (observed)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_act_of_self_determination_day(self):
+        name = "Act of Self Determination Day"
+        self.assertHolidayName(
+            name,
+            "2007-04-05",
+            (f"{year}-04-06" for year in (*range(1985, 2007), *range(2008, 2050))),
+        )
+        obs_dt = (
+            "2013-04-08",
+            "2014-04-07",
+            "2019-04-10",
+            "2024-04-08",
+            "2025-04-07",
+        )
+        self.assertHolidayName(f"{name} (observed)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_good_friday(self):
+        name = "Good Friday"
+        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(1985, 2050))
+
+    def test_easter_monday(self):
+        name = "Easter Monday"
+        self.assertHolidayName(
+            name,
+            "2020-04-13",
+            "2021-04-05",
+            "2022-04-18",
+            "2023-04-10",
+            "2024-04-01",
+            "2025-04-21",
+        )
+        self.assertHolidayName(name, range(1985, 2050))
+
+    def test_anzac_day(self):
+        name = "ANZAC Day"
+        self.assertHolidayName(name, (f"{year}-04-25" for year in range(1985, 2050)))
+        obs_dt = (
+            "2009-04-27",
+            "2010-04-26",
+            "2015-04-27",
+            "2020-04-27",
+            "2021-04-26",
+        )
+        self.assertHolidayName(f"{name} (observed)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_sovereigns_birthday(self):
+        name_1 = "Queen's Birthday"
+        name_2 = "King's Birthday"
+        self.assertHolidayName(
+            name_1,
+            "2018-06-11",
+            "2019-06-10",
+            "2020-06-08",
+            "2021-06-07",
+            "2022-06-06",
+        )
+        self.assertHolidayName(
+            name_2,
+            "2023-06-06",
+            "2024-06-06",
+            "2025-06-09",
+        )
+        self.assertHolidayName(name_1, range(1985, 2023))
+        self.assertHolidayName(name_2, range(2023, 2050))
+        self.assertNoHolidayName(name_1, range(2023, 2050))
+        self.assertNoHolidayName(name_2, range(1985, 2023))
+
+    def test_boxing_day(self):
+        name = "Boxing Day"
+        self.assertHolidayName(name, (f"{year}-12-26" for year in range(1985, 2050)))
+        obs_dt = (
+            "2015-12-28",
+            "2016-12-27",
+            "2020-12-28",
+            "2021-12-28",
+            "2022-12-27",
+        )
+        self.assertHolidayName(f"{name} (observed)", obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_christmas_day(self):
+        name = "Christmas Day"
+        self.assertHolidayName(name, (f"{year}-12-25" for year in range(1985, 2050)))
+        obs_dt = (
+            "2010-12-27",
+            "2011-12-26",
+            "2016-12-26",
+            "2021-12-27",
+            "2022-12-26",
+        )
+        self.assertHolidayName(f"{name} (observed)", obs_dt)
+
+    def test_islamic_new_year(self):
+        name = "Islamic New Year"
+        self.assertHolidayName(
+            name,
+            self.no_estimated_holidays,
+            "2015-10-14",
+            "2016-10-03",
+            "2017-09-22",
+            "2018-09-11",
+            "2019-09-01",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1985, 2020))
+        self.assertNoHolidayName(name, self.no_estimated_holidays, range(2020, 2050))
+        obs_dt = (
+            "1999-04-19",
+            "2004-02-23",
+            "2011-11-28",
+            "2014-10-27",
+            "2019-09-02",
+        )
+        self.assertHolidayName(f"{name} (observed)", self.no_estimated_holidays, obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_prophets_birthday(self):
+        name = "Prophet's Birthday"
+        self.assertHolidayName(
+            name,
+            "2020-10-29",
+            "2021-10-19",
+            "2022-10-08",
+            "2023-09-27",
+            "2024-09-16",
+            "2025-09-05",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1985, 2050))
+        obs_dt = (
+            "2004-05-03",
+            "2012-02-06",
+            "2015-01-05",
+            "2019-11-11",
+            "2022-10-10",
+        )
+        self.assertHolidayName(f"{name} (observed)", self.no_estimated_holidays, obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_eid_al_fitr(self):
+        name = "Eid al-Fitr"
+        self.assertHolidayName(
+            name,
+            "2020-05-24",
+            "2021-05-13",
+            "2022-05-03",
+            "2023-04-22",
+            "2024-04-10",
+            "2025-03-31",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1985, 2050))
+        obs_dt = (
+            "2004-11-15",
+            "2012-08-20",
+            "2017-06-26",
+            "2020-05-25",
+            "2023-04-24",
+        )
+        self.assertHolidayName(f"{name} (observed)", self.no_estimated_holidays, obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_eid_al_adha(self):
+        name = "Eid al-Adha"
+        self.assertHolidayName(
+            name,
+            "2020-07-31",
+            "2021-07-20",
+            "2022-07-09",
+            "2023-06-28",
+            "2024-06-17",
+            "2025-06-07",
+        )
+        self.assertHolidayName(name, self.no_estimated_holidays, range(1985, 2050))
+        obs_dt = (
+            "2011-11-07",
+            "2014-10-06",
+            "2019-08-12",
+            "2022-07-11",
+            "2025-06-06",
+        )
+        self.assertHolidayName(f"{name} (observed)", self.no_estimated_holidays, obs_dt)
+        self.assertNoNonObservedHoliday(obs_dt)
+
+    def test_l10n_default(self):
+        self.assertLocalizedHolidays(
+            ("2022-01-01", "New Year's Day"),
+            ("2022-01-03", "New Year's Day (observed)"),
+            ("2022-01-26", "Australia Day"),
+            ("2022-04-06", "Act of Self Determination Day"),
+            ("2022-04-15", "Good Friday"),
+            ("2022-04-18", "Easter Monday"),
+            ("2022-04-25", "ANZAC Day"),
+            ("2022-05-03", "Eid al-Fitr"),
+            ("2022-06-06", "Queen's Birthday"),
+            ("2022-07-09", "Eid al-Adha"),
+            ("2022-07-11", "Eid al-Adha (observed)"),
+            ("2022-09-22", "National Day of Mourning for Queen Elizabeth II"),
+            ("2022-10-08", "Prophet's Birthday"),
+            ("2022-10-10", "Prophet's Birthday (observed)"),
+            ("2022-12-25", "Christmas Day"),
+            ("2022-12-26", "Boxing Day; Christmas Day (observed)"),
+            ("2022-12-27", "Boxing Day (observed)"),
+        )
+
+    def test_l10n_coa_cc(self):
+        self.assertLocalizedHolidays(
+            "coa_CC",
+            ("2022-01-01", "Hari Tahun Baru"),
+            ("2022-01-03", "Hari Tahun Baru (disambut)"),
+            ("2022-01-26", "Hari Australia"),
+            ("2022-04-06", "Hari Penentuan Diri"),
+            ("2022-04-15", "Jumat Agung"),
+            ("2022-04-18", "Isnin Paskah"),
+            ("2022-04-25", "Hari ANZAC"),
+            ("2022-05-03", "Hari Raya Puasa"),
+            ("2022-06-06", "Hari Ulang Tahun Ratu"),
+            ("2022-07-09", "Hari Raya Haji"),
+            ("2022-07-11", "Hari Raya Haji (disambut)"),
+            ("2022-09-22", "Hari Berkabung Negara untuk Ratu Elizabeth II"),
+            ("2022-10-08", "Hari Maulaud Nabi"),
+            ("2022-10-10", "Hari Maulaud Nabi (disambut)"),
+            ("2022-12-25", "Hari Natal"),
+            ("2022-12-26", "Hari Boxing; Hari Natal (disambut)"),
+            ("2022-12-27", "Hari Boxing (disambut)"),
+        )
+
+    def test_l10n_en_us(self):
+        self.assertLocalizedHolidays(
+            "en_US",
+            ("2022-01-01", "New Year's Day"),
+            ("2022-01-03", "New Year's Day (observed)"),
+            ("2022-01-26", "Australia Day"),
+            ("2022-04-06", "Act of Self Determination Day"),
+            ("2022-04-15", "Good Friday"),
+            ("2022-04-18", "Easter Monday"),
+            ("2022-04-25", "ANZAC Day"),
+            ("2022-05-03", "Eid al-Fitr"),
+            ("2022-06-06", "Queen's Birthday"),
+            ("2022-07-09", "Eid al-Adha"),
+            ("2022-07-11", "Eid al-Adha (observed)"),
+            ("2022-09-22", "National Day of Mourning for Queen Elizabeth II"),
+            ("2022-10-08", "Prophet's Birthday"),
+            ("2022-10-10", "Prophet's Birthday (observed)"),
+            ("2022-12-25", "Christmas Day"),
+            ("2022-12-26", "Boxing Day; Christmas Day (observed)"),
+            ("2022-12-27", "Boxing Day (observed)"),
+        )