Repository: vacanza/holidays
Pull request #2507 (2025-04-28 16:03:53)

Update Canada holidays: add historical 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.
-->

- Fixes the 1935 Canadian Thanksgiving Day date.
- Adds observances for Armistice Day (1921–1930).
- Adds historical observances for Victoria Day (1901-1952).
- Ensures all newly referenced sources are properly archived.
- Refactors test case to meet newer release standards, updates snapshot.

While cleaning up outdated `tiny.cc` source link aliases as part of #2504, I've noticed that our source doesn't match other online sources. Additionally, "Armistice Day" was the combined precursor of both Thanksgiving and Remembrance Day for 1921-1930 so I've added them in too.

## 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 856390cd907b7341762a096da75b03dfa66765de and c95b7f48e0261d6bebaefc57d35eb83c9a856189.
> 
> </details>
> 
> <details>
> <summary>📒 Files selected for processing (7)</summary>
> 
> * `holidays/countries/canada.py` (1 hunks)
> * `holidays/locale/ar/LC_MESSAGES/CA.po` (2 hunks)
> * `holidays/locale/en_CA/LC_MESSAGES/CA.po` (2 hunks)
> * `holidays/locale/en_US/LC_MESSAGES/CA.po` (2 hunks)
> * `holidays/locale/fr/LC_MESSAGES/CA.po` (2 hunks)
> * `holidays/locale/th/LC_MESSAGES/CA.po` (2 hunks)
> * `tests/countries/test_canada.py` (2 hunks)
> 
> </details>
> 
> ```ascii
>  ___________________________________________________________________________
> < Your code and I are going to be best friends. Very critical best friends. >
>  ---------------------------------------------------------------------------
>   \
>    \   (\__/)
>        (•ㅅ•)
>        / 　 づ
> ```

<!-- end of auto-generated comment: review in progress by coderabbit.ai -->
<!-- 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=2507):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `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 generate unit testing code for this file.`
  -	`@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 generate unit testing code.`
  - `@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.`

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 -->
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2507?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 [(`856390c`)](https://app.codecov.io/gh/vacanza/holidays/commit/856390cd907b7341762a096da75b03dfa66765de?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`c95b7f4`)](https://app.codecov.io/gh/vacanza/holidays/commit/c95b7f48e0261d6bebaefc57d35eb83c9a856189?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     #2507   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          215       215           
  Lines        13588     13590    +2     
  Branches      1931      1932    +1     
=========================================
+ Hits         13588     13590    +2     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2507?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>
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=2507) **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=2507&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=2507&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=2507&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=2507&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=2507&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2507)


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=2507) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2507&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=2507&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=2507&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=2507&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=2507&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2507)


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=2507) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2507&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=2507&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=2507&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=2507&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=2507&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2507)


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=2507) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2507&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=2507&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=2507&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=2507&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=2507&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2507)


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=2507) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2507&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=2507&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=2507&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=2507&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=2507&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2507)


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=2507) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2507&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=2507&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=2507&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=2507&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=2507&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2507)


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=2507) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2507&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=2507&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=2507&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=2507&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=2507&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2507)



Patch:
diff --git a/holidays/countries/canada.py b/holidays/countries/canada.py
index b2fe347a..8425d434 100644
--- a/holidays/countries/canada.py
+++ b/holidays/countries/canada.py
@@ -41,6 +41,10 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         * <https://www.gov.nu.ca/en/print/pdf/node/52266>
         * <https://www.officeholidays.com/countries/canada/>
         * <https://www.timeanddate.com/holidays/canada/>
+        * <https://web.archive.org/web/20250122122256/https://www.warmuseum.ca/firstworldwar/history/after-the-war/remembrance/remembrance-day/>
+        * <https://web.archive.org/web/20250428153936/https://www.thecanadianencyclopedia.ca/en/article/thanksgiving-day>
+        * <https://web.archive.org/web/20250428154427/https://recherche-collection-search.bac-lac.gc.ca/eng/home/record?idnumber=9326&app=diawlmking&ecopy=80003QJW>
+        * <https://web.archive.org/web/20240915001506/https://www.britannica.com/topic/Victoria-Day>
     """
 
     country = "CA"
@@ -111,9 +115,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
 
         self._add_statutory_holidays()
 
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         if self._year >= 1879:
             self._add_observed(self._canada_day)
@@ -132,42 +134,64 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
 
         self._add_observed(self._christmas_day, rule=SAT_SUN_TO_NEXT_MON_TUE)
 
-        # Boxing Day.
         self._add_observed(
-            self._add_christmas_day_two(tr("Boxing Day")), rule=SAT_SUN_TO_NEXT_MON_TUE
+            # Boxing Day.
+            self._add_christmas_day_two(tr("Boxing Day")),
+            rule=SAT_SUN_TO_NEXT_MON_TUE,
         )
 
     def _populate_optional_holidays(self):
-        # Christmas Day.
         self._add_observed(
-            self._add_christmas_day(tr("Christmas Day")), rule=SAT_SUN_TO_NEXT_MON_TUE
+            # Christmas Day.
+            self._add_christmas_day(tr("Christmas Day")),
+            rule=SAT_SUN_TO_NEXT_MON_TUE,
         )
 
-        # Boxing Day.
         self._add_observed(
-            self._add_christmas_day_two(tr("Boxing Day")), rule=SAT_SUN_TO_NEXT_MON_TUE
+            # Boxing Day.
+            self._add_christmas_day_two(tr("Boxing Day")),
+            rule=SAT_SUN_TO_NEXT_MON_TUE,
         )
 
-    def _add_thanksgiving_day(self):
+    def _add_thanksgiving_day(self) -> None:
+        """Adds Thanksgiving Day / Armistice Day.
+
+        In 1921, Thanksgiving Day was moved to "Armistice Day" (1st Monday in the week of Nov 11).
+        "Remembrance Day" and "Thanksgiving Day" split again in 1931, with Thanksgiving usually on
+        the 2nd Monday of October — except in 1935, when it was delayed 10 days due to a General
+        Election. It was finally fixed to the 2nd Monday of October permanently in 1957.
+        """
         if self._year >= 1931:
             # Thanksgiving Day.
             name = tr("Thanksgiving Day")
-            # in 1935, Canadian Thanksgiving was moved due to the General
-            # Election falling on the second Monday of October
-            # http://tiny.cc/can_thkgvg
             if self._year == 1935:
-                self._add_holiday_oct_25(name)
+                self._add_holiday_oct_24(name)
             else:
                 self._add_holiday_2nd_mon_of_oct(name)
+        elif self._year >= 1921:
+            # Armistice Day.
+            self._add_holiday_1st_mon_before_nov_12(tr("Armistice Day"))
+
+    def _add_victoria_day(self) -> None:
+        """Adds Victoria Day.
+
+        After Queen Victoria’s death in 1901, an act of the Canadian Parliament established
+        Victoria Day as a legal holiday, to be celebrated on May 24 (or on May 25 when
+        May 24 fell on a Sunday). This was later moved to the Monday preceding May 24 in 1952.
+        """
+        # Victoria Day.
+        name = tr("Victoria Day")
+        if self._year >= 1953:
+            self._add_holiday_1st_mon_before_may_24(name)
+        elif self._year >= 1901:
+            self._add_observed(self._add_holiday_may_24(name), rule=SUN_TO_NEXT_MON)
 
     def _populate_subdiv_ab_public_holidays(self):
         if self._year >= 1990:
             # Family Day.
             self._add_holiday_3rd_mon_of_feb(tr("Family Day"))
 
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         if self._year >= 1879:
             self._add_observed(self._canada_day, rule=SUN_TO_NEXT_MON)
@@ -196,15 +220,14 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
 
     def _populate_subdiv_bc_public_holidays(self):
         if self._year >= 2013:
+            # Family Day.
             name = tr("Family Day")
             if self._year >= 2019:
                 self._add_holiday_3rd_mon_of_feb(name)
             else:
                 self._add_holiday_2nd_mon_of_feb(name)
 
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         if self._year >= 1879:
             self._add_observed(self._canada_day, rule=SUN_TO_NEXT_MON)
@@ -229,9 +252,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
             # Louis Riel Day.
             self._add_holiday_3rd_mon_of_feb(tr("Louis Riel Day"))
 
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         self._add_thanksgiving_day()
 
@@ -264,9 +285,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
             self._add_remembrance_day(tr("Remembrance Day"))
 
     def _populate_subdiv_nb_optional_holidays(self):
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         self._add_thanksgiving_day()
 
@@ -327,9 +346,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
             self._add_holiday_1st_mon_of_aug(tr("Natal Day"))
 
     def _populate_subdiv_nt_public_holidays(self):
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         if self._year >= 1996:
             # National Aboriginal Day.
@@ -350,9 +367,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
             self._add_remembrance_day(tr("Remembrance Day"))
 
     def _populate_subdiv_nu_public_holidays(self):
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         if self._year >= 2020:
             # Nunavut Day.
@@ -374,6 +389,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
 
     def _populate_subdiv_nu_optional_holidays(self):
         if 2000 <= self._year <= 2019:
+            # Nunavut Day.
             name = tr("Nunavut Day")
             if self._year == 2000:
                 self._add_holiday_apr_1(name)
@@ -385,12 +401,11 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
             # Family Day.
             self._add_holiday_3rd_mon_of_feb(tr("Family Day"))
 
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         self._add_thanksgiving_day()
 
+        # Boxing Day.
         self._add_observed(self._add_christmas_day_two(tr("Boxing Day")), rule=SUN_TO_NEXT_TUE)
 
     def _populate_subdiv_on_optional_holidays(self):
@@ -444,9 +459,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
             # Family Day.
             self._add_holiday_3rd_mon_of_feb(tr("Family Day"))
 
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         if self._year >= 1879:
             self._add_observed(self._canada_day)
@@ -463,9 +476,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
             self._add_observed(self._add_remembrance_day(tr("Remembrance Day")))
 
     def _populate_subdiv_yt_public_holidays(self):
-        if self._year >= 1953:
-            # Victoria Day.
-            self._add_holiday_1st_mon_before_may_24(tr("Victoria Day"))
+        self._add_victoria_day()
 
         if self._year >= 2017:
             # National Aboriginal Day.
@@ -491,6 +502,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
     def _populate_subdiv_yt_optional_holidays(self):
         # Friday before the last Sunday in February
         if self._year >= 1976:
+            # Heritage Day.
             self._add_holiday_2_days_prior_last_sun_of_feb(tr("Heritage Day"))
 
 
diff --git a/holidays/locale/ar/LC_MESSAGES/CA.po b/holidays/locale/ar/LC_MESSAGES/CA.po
index d0c0d242..67470fe3 100644
--- a/holidays/locale/ar/LC_MESSAGES/CA.po
+++ b/holidays/locale/ar/LC_MESSAGES/CA.po
@@ -14,18 +14,17 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.32\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2023-05-20 18:16-0700\n"
-"PO-Revision-Date: 2023-08-26 18:25+0300\n"
-"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
+"PO-Revision-Date: 2025-04-28 22:27+0700\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: ar\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
 "Generated-By: Lingua 4.15.0\n"
-"X-Generator: Poedit 3.2.2\n"
+"X-Generator: Poedit 3.6\n"
 
 #. %s (observed).
 #, c-format
@@ -159,3 +158,7 @@ msgstr "يوم رجال البرتقال"
 #. Natal Day.
 msgid "Natal Day"
 msgstr "يوم التأسيس"
+
+#. Armistice Day.
+msgid "Armistice Day"
+msgstr "يوم الهدنة"
diff --git a/holidays/locale/en_CA/LC_MESSAGES/CA.po b/holidays/locale/en_CA/LC_MESSAGES/CA.po
index a33b02d7..707cb391 100644
--- a/holidays/locale/en_CA/LC_MESSAGES/CA.po
+++ b/holidays/locale/en_CA/LC_MESSAGES/CA.po
@@ -14,18 +14,17 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.32\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2023-04-10 14:10+0300\n"
-"PO-Revision-Date: 2023-12-26 22:10+0200\n"
-"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
+"PO-Revision-Date: 2025-04-28 22:27+0700\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: en_CA\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Generated-By: Lingua 4.15.0\n"
-"X-Generator: Poedit 3.4\n"
+"X-Generator: Poedit 3.6\n"
 
 #. %s (observed).
 #, c-format
@@ -159,3 +158,7 @@ msgstr ""
 #. Natal Day.
 msgid "Natal Day"
 msgstr ""
+
+#. Armistice Day.
+msgid "Armistice Day"
+msgstr ""
diff --git a/holidays/locale/en_US/LC_MESSAGES/CA.po b/holidays/locale/en_US/LC_MESSAGES/CA.po
index 39e7ccaa..c8da2467 100644
--- a/holidays/locale/en_US/LC_MESSAGES/CA.po
+++ b/holidays/locale/en_US/LC_MESSAGES/CA.po
@@ -14,18 +14,17 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.56\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2023-04-10 14:10+0300\n"
-"PO-Revision-Date: 2024-08-31 18:20+0300\n"
-"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
+"PO-Revision-Date: 2025-04-28 22:27+0700\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\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"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Generated-By: Lingua 4.15.0\n"
-"X-Generator: Poedit 3.4\n"
+"X-Generator: Poedit 3.6\n"
 
 #. %s (observed).
 #, c-format
@@ -159,3 +158,7 @@ msgstr "Orangemen's Day"
 #. Natal Day.
 msgid "Natal Day"
 msgstr "Natal Day"
+
+#. Armistice Day.
+msgid "Armistice Day"
+msgstr "Armistice Day"
diff --git a/holidays/locale/fr/LC_MESSAGES/CA.po b/holidays/locale/fr/LC_MESSAGES/CA.po
index c51193b5..442df2e3 100644
--- a/holidays/locale/fr/LC_MESSAGES/CA.po
+++ b/holidays/locale/fr/LC_MESSAGES/CA.po
@@ -14,18 +14,17 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.32\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2023-04-10 14:10+0300\n"
-"PO-Revision-Date: 2023-08-26 18:23+0300\n"
-"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
+"PO-Revision-Date: 2025-04-28 22:27+0700\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "Generated-By: pygettext.py 1.5\n"
-"X-Generator: Poedit 3.2.2\n"
+"X-Generator: Poedit 3.6\n"
 
 #. %s (observed).
 #, c-format
@@ -159,3 +158,7 @@ msgstr "Journée des Orangistes"
 #. Natal Day.
 msgid "Natal Day"
 msgstr "Jour de la Fondation"
+
+#. Armistice Day.
+msgid "Armistice Day"
+msgstr "Jour de l'Armistice"
diff --git a/holidays/locale/th/LC_MESSAGES/CA.po b/holidays/locale/th/LC_MESSAGES/CA.po
index 15db12ce..96cbd8a8 100644
--- a/holidays/locale/th/LC_MESSAGES/CA.po
+++ b/holidays/locale/th/LC_MESSAGES/CA.po
@@ -14,18 +14,17 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Holidays 0.32\n"
+"Project-Id-Version: Holidays 0.72\n"
 "POT-Creation-Date: 2023-02-24 17:37+0700\n"
-"PO-Revision-Date: 2023-08-26 18:27+0300\n"
-"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
+"PO-Revision-Date: 2025-04-28 22:27+0700\n"
+"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
 "Language-Team: Holidays Localization Team\n"
 "Language: th\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
 "Generated-By: pygettext.py 1.5\n"
-"X-Generator: Poedit 3.2.2\n"
+"X-Generator: Poedit 3.6\n"
 
 #. New Year's Day.
 msgid "New Year's Day"
@@ -159,3 +158,7 @@ msgstr "วันออเรนจ์เมนส์"
 #. Natal Day.
 msgid "Natal Day"
 msgstr "วันสถาปนา"
+
+#. Armistice Day.
+msgid "Armistice Day"
+msgstr "วันสงบศึก"
diff --git a/snapshots/countries/CA_AB.json b/snapshots/countries/CA_AB.json
index 73540826..ddf7445e 100644
--- a/snapshots/countries/CA_AB.json
+++ b/snapshots/countries/CA_AB.json
@@ -3,6 +3,7 @@
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
     "1950-04-10": "Easter Monday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-09-04": "Labor Day",
@@ -14,6 +15,7 @@
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
     "1951-03-26": "Easter Monday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-09-03": "Labor Day",
@@ -25,6 +27,7 @@
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
     "1952-04-14": "Easter Monday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-09-01": "Labor Day",
     "1952-10-13": "Thanksgiving Day",
diff --git a/snapshots/countries/CA_BC.json b/snapshots/countries/CA_BC.json
index dd3e6c81..73f15482 100644
--- a/snapshots/countries/CA_BC.json
+++ b/snapshots/countries/CA_BC.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-09-04": "Labor Day",
@@ -12,6 +13,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-09-03": "Labor Day",
@@ -22,6 +24,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-09-01": "Labor Day",
     "1952-10-13": "Thanksgiving Day",
diff --git a/snapshots/countries/CA_COMMON.json b/snapshots/countries/CA_COMMON.json
index 71a5579d..3d1a0670 100644
--- a/snapshots/countries/CA_COMMON.json
+++ b/snapshots/countries/CA_COMMON.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-09-04": "Labor Day",
@@ -12,6 +13,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-09-03": "Labor Day",
@@ -22,6 +24,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-09-01": "Labor Day",
     "1952-10-13": "Thanksgiving Day",
diff --git a/snapshots/countries/CA_MB.json b/snapshots/countries/CA_MB.json
index 091f4865..b7a0908f 100644
--- a/snapshots/countries/CA_MB.json
+++ b/snapshots/countries/CA_MB.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-08-07": "Civic Holiday",
@@ -13,6 +14,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-08-06": "Civic Holiday",
@@ -24,6 +26,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-08-04": "Civic Holiday",
     "1952-09-01": "Labor Day",
diff --git a/snapshots/countries/CA_NB.json b/snapshots/countries/CA_NB.json
index ee4a9695..836243a9 100644
--- a/snapshots/countries/CA_NB.json
+++ b/snapshots/countries/CA_NB.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-09-04": "Labor Day",
@@ -12,6 +13,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-09-03": "Labor Day",
@@ -22,6 +24,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-09-01": "Labor Day",
     "1952-10-13": "Thanksgiving Day",
diff --git a/snapshots/countries/CA_NL.json b/snapshots/countries/CA_NL.json
index e5715f7d..33f62995 100644
--- a/snapshots/countries/CA_NL.json
+++ b/snapshots/countries/CA_NL.json
@@ -3,6 +3,7 @@
     "1950-01-02": "New Year's Day (observed)",
     "1950-03-20": "Saint Patrick's Day",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day; Memorial Day",
     "1950-07-03": "Dominion Day (observed); Memorial Day (observed)",
     "1950-07-10": "Orangemen's Day",
@@ -15,6 +16,7 @@
     "1951-01-01": "New Year's Day",
     "1951-03-19": "Saint Patrick's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day; Memorial Day",
     "1951-07-02": "Dominion Day (observed); Memorial Day (observed)",
     "1951-07-09": "Orangemen's Day",
@@ -27,6 +29,7 @@
     "1952-01-01": "New Year's Day",
     "1952-03-17": "Saint Patrick's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day; Memorial Day",
     "1952-07-14": "Orangemen's Day",
     "1952-09-01": "Labor Day",
diff --git a/snapshots/countries/CA_NS.json b/snapshots/countries/CA_NS.json
index a9a85849..22471824 100644
--- a/snapshots/countries/CA_NS.json
+++ b/snapshots/countries/CA_NS.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-09-04": "Labor Day",
@@ -12,6 +13,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-09-03": "Labor Day",
@@ -22,6 +24,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-09-01": "Labor Day",
     "1952-10-13": "Thanksgiving Day",
diff --git a/snapshots/countries/CA_NT.json b/snapshots/countries/CA_NT.json
index 17ddb5f3..2969e95e 100644
--- a/snapshots/countries/CA_NT.json
+++ b/snapshots/countries/CA_NT.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-08-07": "Civic Holiday",
@@ -13,6 +14,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-08-06": "Civic Holiday",
@@ -24,6 +26,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-08-04": "Civic Holiday",
     "1952-09-01": "Labor Day",
diff --git a/snapshots/countries/CA_NU.json b/snapshots/countries/CA_NU.json
index 17b63d39..6ea75d5a 100644
--- a/snapshots/countries/CA_NU.json
+++ b/snapshots/countries/CA_NU.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-08-07": "Civic Holiday",
@@ -13,6 +14,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-08-06": "Civic Holiday",
@@ -24,6 +26,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-08-04": "Civic Holiday",
     "1952-09-01": "Labor Day",
diff --git a/snapshots/countries/CA_ON.json b/snapshots/countries/CA_ON.json
index 51b4262f..6775dc90 100644
--- a/snapshots/countries/CA_ON.json
+++ b/snapshots/countries/CA_ON.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-08-07": "Civic Holiday",
@@ -13,6 +14,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-08-06": "Civic Holiday",
@@ -24,6 +26,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-08-04": "Civic Holiday",
     "1952-09-01": "Labor Day",
diff --git a/snapshots/countries/CA_PE.json b/snapshots/countries/CA_PE.json
index fa2fc705..6f7311e0 100644
--- a/snapshots/countries/CA_PE.json
+++ b/snapshots/countries/CA_PE.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-09-04": "Labor Day",
@@ -12,6 +13,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-09-03": "Labor Day",
@@ -22,6 +24,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-09-01": "Labor Day",
     "1952-10-13": "Thanksgiving Day",
diff --git a/snapshots/countries/CA_QC.json b/snapshots/countries/CA_QC.json
index 9fe878d8..66783fe8 100644
--- a/snapshots/countries/CA_QC.json
+++ b/snapshots/countries/CA_QC.json
@@ -3,6 +3,7 @@
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
     "1950-04-10": "Easter Monday",
+    "1950-05-24": "Victoria Day",
     "1950-06-24": "Saint John the Baptist Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
@@ -15,6 +16,7 @@
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
     "1951-03-26": "Easter Monday",
+    "1951-05-24": "Victoria Day",
     "1951-06-24": "Saint John the Baptist Day",
     "1951-06-25": "Saint John the Baptist Day (observed)",
     "1951-07-01": "Dominion Day",
@@ -28,6 +30,7 @@
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
     "1952-04-14": "Easter Monday",
+    "1952-05-24": "Victoria Day",
     "1952-06-24": "Saint John the Baptist Day",
     "1952-07-01": "Dominion Day",
     "1952-09-01": "Labor Day",
diff --git a/snapshots/countries/CA_SK.json b/snapshots/countries/CA_SK.json
index 2e250785..db7a00f1 100644
--- a/snapshots/countries/CA_SK.json
+++ b/snapshots/countries/CA_SK.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-08-07": "Saskatchewan Day",
@@ -13,6 +14,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-08-06": "Saskatchewan Day",
@@ -24,6 +26,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-08-04": "Saskatchewan Day",
     "1952-09-01": "Labor Day",
diff --git a/snapshots/countries/CA_YT.json b/snapshots/countries/CA_YT.json
index 1824f4ee..6784815c 100644
--- a/snapshots/countries/CA_YT.json
+++ b/snapshots/countries/CA_YT.json
@@ -2,6 +2,7 @@
     "1950-01-01": "New Year's Day",
     "1950-01-02": "New Year's Day (observed)",
     "1950-04-07": "Good Friday",
+    "1950-05-24": "Victoria Day",
     "1950-07-01": "Dominion Day",
     "1950-07-03": "Dominion Day (observed)",
     "1950-08-21": "Discovery Day",
@@ -13,6 +14,7 @@
     "1950-12-26": "Boxing Day",
     "1951-01-01": "New Year's Day",
     "1951-03-23": "Good Friday",
+    "1951-05-24": "Victoria Day",
     "1951-07-01": "Dominion Day",
     "1951-07-02": "Dominion Day (observed)",
     "1951-08-20": "Discovery Day",
@@ -24,6 +26,7 @@
     "1951-12-26": "Boxing Day",
     "1952-01-01": "New Year's Day",
     "1952-04-11": "Good Friday",
+    "1952-05-24": "Victoria Day",
     "1952-07-01": "Dominion Day",
     "1952-08-18": "Discovery Day",
     "1952-09-01": "Labor Day",


Test patch:
diff --git a/tests/countries/test_canada.py b/tests/countries/test_canada.py
index b3c0f0a1..f6ac8c96 100644
--- a/tests/countries/test_canada.py
+++ b/tests/countries/test_canada.py
@@ -23,15 +23,24 @@ class TestCanada(CommonCountryTests, TestCase):
         years = range(1867, 2050)
         years_non_observed = range(2000, 2024)
         super().setUpClass(Canada, years=years, years_non_observed=years_non_observed)
-        cls.prov_hols = {prov: CA(subdiv=prov, years=years) for prov in CA.subdivisions}
-        cls.prov_hols_nonobs = {
-            prov: CA(subdiv=prov, years=years_non_observed, observed=False)
-            for prov in CA.subdivisions
+        cls.subdiv_holidays = {
+            subdiv: Canada(subdiv=subdiv, years=years) for subdiv in Canada.subdivisions
         }
-        cls.gov_hols = CA(years=years, categories=GOVERNMENT)
-        cls.opt_hols = CA(years=years, categories=OPTIONAL)
-        cls.prov_opt_hols = {
-            prov: CA(subdiv=prov, years=years, categories=OPTIONAL) for prov in CA.subdivisions
+        cls.subdiv_holidays_non_observed = {
+            subdiv: Canada(subdiv=subdiv, years=years_non_observed, observed=False)
+            for subdiv in Canada.subdivisions
+        }
+        cls.government_holidays = Canada(years=years, categories=GOVERNMENT)
+        cls.government_holidays_non_observed = Canada(
+            years=years, categories=GOVERNMENT, observed=False
+        )
+        cls.optional_holidays = Canada(years=years, categories=OPTIONAL)
+        cls.optional_holidays_non_observed = Canada(
+            years=years, categories=OPTIONAL, observed=False
+        )
+        cls.subdiv_optional_holidays = {
+            subdiv: Canada(subdiv=subdiv, years=years, categories=OPTIONAL)
+            for subdiv in Canada.subdivisions
         }
 
     def test_country_aliases(self):
@@ -45,9 +54,9 @@ class TestCanada(CommonCountryTests, TestCase):
         name_observed = f"{name} (observed)"
         self.assertHolidayName(name, (f"{year}-01-01" for year in range(1867, 2050)))
         self.assertHolidayName(
-            name, self.gov_hols, (f"{year}-01-01" for year in range(1867, 2050))
+            name, self.government_holidays, (f"{year}-01-01" for year in range(1867, 2050))
         )
-        for _, holidays in self.prov_hols.items():
+        for _, holidays in self.subdiv_holidays.items():
             self.assertHolidayName(name, holidays, (f"{year}-01-01" for year in range(1867, 2050)))
 
         dts = (
@@ -58,10 +67,10 @@ class TestCanada(CommonCountryTests, TestCase):
             "2023-01-02",
         )
         self.assertHolidayName(name_observed, dts)
-        self.assertHolidayName(name_observed, self.gov_hols, dts)
-        for prov, holidays in self.prov_hols.items():
+        self.assertHolidayName(name_observed, self.government_holidays, dts)
+        for subdiv, holidays in self.subdiv_holidays.items():
             self.assertHolidayName(name_observed, holidays, dts)
-            self.assertNoNonObservedHoliday(self.prov_hols_nonobs[prov], dts)
+            self.assertNoNonObservedHoliday(self.subdiv_holidays_non_observed[subdiv], dts)
         self.assertNoNonObservedHoliday(dts)
 
     def test_good_friday(self):
@@ -82,9 +91,9 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertHolidayName(name, dts)
         self.assertHolidayName(name, range(1867, 2050))
-        self.assertHolidayName(name, self.gov_hols, dts)
-        self.assertHolidayName(name, self.gov_hols, range(1867, 2050))
-        for _, holidays in self.prov_hols.items():
+        self.assertHolidayName(name, self.government_holidays, dts)
+        self.assertHolidayName(name, self.government_holidays, range(1867, 2050))
+        for _, holidays in self.subdiv_holidays.items():
             self.assertHolidayName(name, holidays, dts)
             self.assertHolidayName(name, holidays, range(1867, 2050))
 
@@ -111,26 +120,26 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         name_observed = f"{name_2} (observed)"
         self.assertNoHoliday(dts_sat, dts_sun)
-        self.assertHolidayName(name_observed, self.gov_hols, dts_sat, dts_sun)
-        self.assertNoNonObservedHoliday(
-            CA(observed=False, categories=GOVERNMENT), dts_sat, dts_sun
-        )
-        for prov, holidays in self.prov_hols.items():
-            if prov in {"AB", "BC", "QC"}:
-                self.assertHolidayName(name_observed, self.prov_hols[prov], dts_sun)
-                self.assertNoHoliday(self.prov_hols[prov], dts_sat)
-            elif prov in {"NL", "PE", "SK", "YT"}:
-                self.assertHoliday(self.prov_hols[prov], dts_sat, dts_sun)
+        self.assertHolidayName(name_observed, self.government_holidays, dts_sat, dts_sun)
+        self.assertNoNonObservedHoliday(self.government_holidays_non_observed, dts_sat, dts_sun)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"AB", "BC", "QC"}:
+                self.assertHolidayName(name_observed, holidays, dts_sun)
+                self.assertNoHoliday(holidays, dts_sat)
+            elif subdiv in {"NL", "PE", "SK", "YT"}:
+                self.assertHoliday(holidays, dts_sat, dts_sun)
             else:
-                self.assertNoHoliday(self.prov_hols[prov], dts_sat, dts_sun)
-            self.assertNoNonObservedHoliday(self.prov_hols_nonobs[prov], dts_sat, dts_sun)
+                self.assertNoHoliday(holidays, dts_sat, dts_sun)
+            self.assertNoNonObservedHoliday(
+                self.subdiv_holidays_non_observed[subdiv], dts_sat, dts_sun
+            )
 
     def test_labour_day(self):
         name = "Labour Day"
         self.assertNoHolidayName(name, range(1867, 1894))
         self.assertHolidayName(name, range(1894, 2050))
-        self.assertNoHolidayName(name, self.gov_hols, range(1867, 1894))
-        self.assertHolidayName(name, self.gov_hols, range(1894, 2050))
+        self.assertNoHolidayName(name, self.government_holidays, range(1867, 1894))
+        self.assertHolidayName(name, self.government_holidays, range(1894, 2050))
 
         dts = (
             "1894-09-03",
@@ -147,8 +156,8 @@ class TestCanada(CommonCountryTests, TestCase):
             "2023-09-04",
         )
         self.assertHolidayName(name, dts)
-        self.assertHolidayName(name, self.gov_hols, dts)
-        for _, holidays in self.prov_hols.items():
+        self.assertHolidayName(name, self.government_holidays, dts)
+        for _, holidays in self.subdiv_holidays.items():
             self.assertHolidayName(name, holidays, dts)
             self.assertHolidayName(name, holidays, range(1894, 2050))
             self.assertNoHolidayName(name, holidays, range(1867, 1894))
@@ -157,7 +166,7 @@ class TestCanada(CommonCountryTests, TestCase):
         name = "Christmas Day"
         name_observed = f"{name} (observed)"
         self.assertHolidayName(name, (f"{year}-12-25" for year in range(1867, 2050)))
-        for _, holidays in self.prov_hols.items():
+        for _, holidays in self.subdiv_holidays.items():
             self.assertHolidayName(name, holidays, (f"{year}-12-25" for year in range(1867, 2050)))
 
         dts_sat = (
@@ -180,23 +189,27 @@ class TestCanada(CommonCountryTests, TestCase):
         self.assertHolidayName(name_observed, dts_sat, dts_sun_without_boxing)
         self.assertNoHoliday(dts_sun_with_boxing)
         self.assertNoNonObservedHoliday(dts_sat, dts_sun_with_boxing, dts_sun_without_boxing)
-        self.assertHolidayName(name_observed, self.gov_hols, dts_sat, dts_sun_with_boxing)
+        self.assertHolidayName(
+            name_observed, self.government_holidays, dts_sat, dts_sun_with_boxing
+        )
         self.assertNoNonObservedHoliday(
-            CA(observed=False, categories=GOVERNMENT), dts_sat, dts_sun_with_boxing
+            self.government_holidays_non_observed, dts_sat, dts_sun_with_boxing
         )
-        self.assertHolidayName(name_observed, self.opt_hols, dts_sat, dts_sun_with_boxing)
+        self.assertHolidayName(name_observed, self.optional_holidays, dts_sat, dts_sun_with_boxing)
         self.assertNoNonObservedHoliday(
-            CA(observed=False, categories=OPTIONAL), dts_sat, dts_sun_with_boxing
+            self.optional_holidays_non_observed, dts_sat, dts_sun_with_boxing
         )
-        for prov, holidays in self.prov_hols.items():
+        for subdiv, holidays in self.subdiv_holidays.items():
             self.assertHolidayName(name_observed, holidays, dts_sat, dts_sun_without_boxing)
             self.assertNoHoliday(holidays, dts_sun_with_boxing)
             self.assertNoNonObservedHoliday(
-                self.prov_hols_nonobs[prov], dts_sat, dts_sun_with_boxing
+                self.subdiv_holidays_non_observed[subdiv], dts_sat, dts_sun_with_boxing
             )
 
     def test_victoria_day(self):
         name = "Victoria Day"
+        name_observed = f"{name} (observed)"
+
         dts = (
             "1953-05-18",
             "2000-05-22",
@@ -208,16 +221,35 @@ class TestCanada(CommonCountryTests, TestCase):
             "2022-05-23",
             "2023-05-22",
         )
+        dts_obs = (
+            "1903-05-25",
+            "1908-05-25",
+            "1914-05-25",
+            "1925-05-25",
+            "1931-05-25",
+            "1936-05-25",
+            "1942-05-25",
+        )
         self.assertNoHolidayName(name)
-        self.assertHolidayName(name, self.gov_hols, dts)
-        self.assertHolidayName(name, self.gov_hols, range(1953, 2050))
-        self.assertNoHolidayName(name, self.gov_hols, range(1867, 1953))
+        self.assertHolidayName(name, self.government_holidays, dts)
+        self.assertHolidayName(
+            name, self.government_holidays, (f"{year}-05-24" for year in range(1901, 1953))
+        )
+        self.assertHolidayName(name, self.government_holidays, range(1953, 2050))
+        self.assertNoHolidayName(name, self.government_holidays, range(1867, 1901))
+        self.assertHolidayName(name_observed, self.government_holidays, dts_obs)
+        self.assertNoNonObservedHoliday(self.government_holidays_non_observed, dts_obs)
 
-        for prov, holidays in self.prov_hols.items():
-            if prov in {"AB", "BC", "MB", "NT", "NU", "ON", "SK", "YT"}:
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"AB", "BC", "MB", "NT", "NU", "ON", "SK", "YT"}:
                 self.assertHolidayName(name, holidays, dts)
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-05-24" for year in range(1901, 1953))
+                )
                 self.assertHolidayName(name, holidays, range(1953, 2050))
-                self.assertNoHolidayName(name, holidays, range(1867, 1953))
+                self.assertNoHolidayName(name, holidays, range(1867, 1901))
+                self.assertHolidayName(name_observed, holidays, dts_obs)
+                self.assertNoNonObservedHoliday(self.subdiv_holidays_non_observed[subdiv], dts_obs)
             else:
                 self.assertNoHolidayName(name, holidays)
 
@@ -226,17 +258,17 @@ class TestCanada(CommonCountryTests, TestCase):
         name_observed = f"{name} (observed)"
         self.assertNoHolidayName(name)
         self.assertHolidayName(
-            name, self.gov_hols, (f"{year}-09-30" for year in range(2021, 2050))
+            name, self.government_holidays, (f"{year}-09-30" for year in range(2021, 2050))
         )
-        self.assertNoHolidayName(name, self.gov_hols, range(1867, 2021))
+        self.assertNoHolidayName(name, self.government_holidays, range(1867, 2021))
 
         dts = (
             "2023-10-02",
             "2028-10-02",
             "2029-10-01",
         )
-        self.assertHolidayName(name_observed, self.gov_hols, dts)
-        self.assertNoNonObservedHoliday(CA(observed=False, categories=GOVERNMENT), dts)
+        self.assertHolidayName(name_observed, self.government_holidays, dts)
+        self.assertNoNonObservedHoliday(self.government_holidays_non_observed, dts)
 
         start_years = {
             "AB": 2021,
@@ -246,29 +278,51 @@ class TestCanada(CommonCountryTests, TestCase):
             "PE": 2022,
             "YT": 2023,
         }
-        for prov, holidays in self.prov_hols.items():
-            if prov in {"BC", "NT", "NU", "PE", "YT"}:
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"BC", "NT", "NU", "PE", "YT"}:
                 self.assertHolidayName(
-                    name, holidays, (f"{year}-09-30" for year in range(start_years[prov], 2050))
+                    name, holidays, (f"{year}-09-30" for year in range(start_years[subdiv], 2050))
                 )
-                self.assertNoHolidayName(name, holidays, range(1867, start_years[prov]))
+                self.assertNoHolidayName(name, holidays, range(1867, start_years[subdiv]))
             else:
                 self.assertNoHolidayName(name, holidays)
-            self.assertNoNonObservedHoliday(self.prov_hols_nonobs[prov], dts)
+            self.assertNoNonObservedHoliday(self.subdiv_holidays_non_observed[subdiv], dts)
 
         self.assertHolidayName(
-            name, self.prov_opt_hols["AB"], (f"{year}-09-30" for year in range(2021, 2050))
+            name,
+            self.subdiv_optional_holidays["AB"],
+            (f"{year}-09-30" for year in range(2021, 2050)),
         )
 
     def test_thanksgiving_day(self):
-        name = "Thanksgiving Day"
-        self.assertNoHolidayName(name)
-        self.assertHolidayName(name, self.gov_hols, range(1931, 2050))
-        self.assertNoHolidayName(name, self.gov_hols, range(1867, 1931))
+        name_1921 = "Armistice Day"
+        name_1931 = "Thanksgiving Day"
+
+        dts_1921 = (
+            # By Statute.
+            "1921-11-07",
+            "1922-11-06",
+            "1923-11-12",
+            "1924-11-10",
+            "1925-11-09",
+            "1926-11-08",
+            "1927-11-07",
+            "1928-11-12",
+            "1929-11-11",
+            "1930-11-10",
+        )
 
-        dts = (
+        self.assertHolidayName(name_1921, self.government_holidays, dts_1921)
+        self.assertNoHolidayName(
+            name_1921, self.government_holidays, range(1867, 1921), range(1931, 2050)
+        )
+        self.assertNoHolidayName(name_1921)
+
+        dts_1931 = (
+            # By Proclamation.
             "1931-10-12",
-            "1935-10-25",
+            "1935-10-24",
+            # Post-Proclamation of 1957.
             "1990-10-08",
             "1999-10-11",
             "2000-10-09",
@@ -280,27 +334,35 @@ class TestCanada(CommonCountryTests, TestCase):
             "2022-10-10",
             "2023-10-09",
         )
-        self.assertHolidayName(name, self.gov_hols, dts)
-        for prov, holidays in self.prov_hols.items():
-            if prov in {"AB", "BC", "MB", "NT", "NU", "ON", "QC", "SK", "YT"}:
-                self.assertHolidayName(name, holidays, dts)
-                self.assertHolidayName(name, holidays, range(1931, 2050))
-                self.assertNoHolidayName(name, holidays, range(1867, 1931))
+
+        self.assertHolidayName(name_1931, self.government_holidays, dts_1931)
+        self.assertHolidayName(name_1931, self.government_holidays, range(1931, 2050))
+        self.assertNoHolidayName(name_1931, self.government_holidays, range(1867, 1931))
+        self.assertNoHolidayName(name_1931)
+
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"AB", "BC", "MB", "NT", "NU", "ON", "QC", "SK", "YT"}:
+                self.assertHolidayName(name_1931, holidays, dts_1931)
+                self.assertHolidayName(name_1921, holidays, range(1921, 1931))
+                self.assertHolidayName(name_1931, holidays, range(1931, 2050))
+                self.assertNoHolidayName(name_1921, holidays, range(1867, 1921), range(1931, 2050))
+                self.assertNoHolidayName(name_1931, holidays, range(1867, 1931))
             else:
-                self.assertNoHolidayName(name, holidays, dts)
+                self.assertNoHolidayName(name_1921, holidays, dts_1921)
+                self.assertNoHolidayName(name_1931, holidays, dts_1931)
 
-        for prov in ("NB", "NL"):
-            self.assertHolidayName(name, self.prov_opt_hols[prov], dts)
+        for subdiv in ("NB", "NL"):
+            self.assertHolidayName(name_1921, self.subdiv_optional_holidays[subdiv], dts_1921)
+            self.assertHolidayName(name_1931, self.subdiv_optional_holidays[subdiv], dts_1931)
 
     def test_remembrance_day(self):
         name = "Remembrance Day"
         name_observed = f"{name} (observed)"
         self.assertNoHolidayName(name)
         self.assertHolidayName(
-            name, self.gov_hols, (f"{year}-11-11" for year in range(1931, 2050))
+            name, self.government_holidays, (f"{year}-11-11" for year in range(1931, 2050))
         )
-        self.assertNoHoliday(self.gov_hols, (f"{year}-11-11" for year in range(1900, 1931)))
-        self.assertNoHolidayName(name, self.gov_hols, range(1900, 1931))
+        self.assertNoHolidayName(name, self.government_holidays, range(1900, 1931))
 
         dts = (
             "2006-11-13",
@@ -310,30 +372,29 @@ class TestCanada(CommonCountryTests, TestCase):
             "2018-11-12",
             "2023-11-13",
         )
-        self.assertHolidayName(name_observed, self.gov_hols, dts)
-        self.assertNoNonObservedHoliday(CA(observed=False, categories=GOVERNMENT), dts)
+        self.assertHolidayName(name_observed, self.government_holidays, dts)
+        self.assertNoNonObservedHoliday(self.government_holidays_non_observed, dts)
 
-        for prov, holidays in self.prov_hols.items():
-            if prov in {"AB", "BC", "NB", "NL", "NS", "NT", "NU", "PE", "SK", "YT"}:
-                start_year = 1981 if prov == "NS" else 1931
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"AB", "BC", "NB", "NL", "NS", "NT", "NU", "PE", "SK", "YT"}:
+                start_year = 1981 if subdiv == "NS" else 1931
                 self.assertHolidayName(
                     name, holidays, (f"{year}-11-11" for year in range(start_year, 2050))
                 )
-                self.assertNoHoliday(
-                    holidays, (f"{year}-11-11" for year in range(1900, start_year))
-                )
                 self.assertNoHolidayName(name, holidays, range(1900, start_year))
             else:
                 self.assertNoHolidayName(name, holidays)
 
-            if prov in {"AB", "NL", "NS", "PE", "SK", "YT"}:
+            if subdiv in {"AB", "NL", "NS", "PE", "SK", "YT"}:
                 self.assertHolidayName(name_observed, holidays, dts)
-                self.assertNoNonObservedHoliday(self.prov_hols_nonobs[prov], dts)
+                self.assertNoNonObservedHoliday(self.subdiv_holidays_non_observed[subdiv], dts)
             else:
                 self.assertNoHoliday(holidays, dts)
 
         self.assertHolidayName(
-            name, self.prov_opt_hols["MB"], (f"{year}-11-11" for year in range(1931, 2050))
+            name,
+            self.subdiv_optional_holidays["MB"],
+            (f"{year}-11-11" for year in range(1931, 2050)),
         )
 
     def test_boxing_day(self):
@@ -341,11 +402,11 @@ class TestCanada(CommonCountryTests, TestCase):
         name_observed = f"{name} (observed)"
         self.assertNoHolidayName(name)
         self.assertHolidayName(
-            name, self.gov_hols, (f"{year}-12-26" for year in range(1867, 2050))
+            name, self.government_holidays, (f"{year}-12-26" for year in range(1867, 2050))
         )
 
         self.assertHolidayName(
-            name, self.opt_hols, (f"{year}-12-26" for year in range(1867, 2050))
+            name, self.optional_holidays, (f"{year}-12-26" for year in range(1867, 2050))
         )
 
         dts = (
@@ -356,20 +417,22 @@ class TestCanada(CommonCountryTests, TestCase):
             "2020-12-28",
             "2021-12-28",
         )
-        self.assertHolidayName(name_observed, self.opt_hols, dts)
-        self.assertNoNonObservedHoliday(CA(observed=False, categories=OPTIONAL), dts)
+        self.assertHolidayName(name_observed, self.optional_holidays, dts)
+        self.assertNoNonObservedHoliday(self.optional_holidays_non_observed, dts)
 
         dts = (
             "2004-12-28",
             "2010-12-28",
             "2021-12-28",
         )
-        self.assertHolidayName(name_observed, self.prov_hols["ON"], dts)
-        self.assertNoNonObservedHoliday(self.prov_hols_nonobs["ON"], dts)
+        self.assertHolidayName(name_observed, self.subdiv_holidays["ON"], dts)
+        self.assertNoNonObservedHoliday(self.subdiv_holidays_non_observed["ON"], dts)
 
-        for prov in ("AB", "NB", "NL"):
+        for subdiv in ("AB", "NB", "NL"):
             self.assertHolidayName(
-                name, self.prov_opt_hols[prov], (f"{year}-12-26" for year in range(1867, 2050))
+                name,
+                self.subdiv_optional_holidays[subdiv],
+                (f"{year}-12-26" for year in range(1867, 2050)),
             )
 
     def test_family_day(self):
@@ -419,25 +482,25 @@ class TestCanada(CommonCountryTests, TestCase):
             "2022-02-21",
             "2023-02-20",
         )
-        prov_names = {
+        subdiv_names = {
             "MB": "Louis Riel Day",
             "NS": "Heritage Day",
             "PE": "Islander Day",
         }
-        for prov, holidays in self.prov_hols.items():
-            name = prov_names.get(prov, "Family Day")
+        for subdiv, holidays in self.subdiv_holidays.items():
+            name = subdiv_names.get(subdiv, "Family Day")
             for year, dt in enumerate(dts, 1990):
-                if prov in start_years and year >= start_years[prov]:
+                if subdiv in start_years and year >= start_years[subdiv]:
                     self.assertHolidayName(name, holidays, dt)
                 else:
                     self.assertNoHoliday(holidays, dt)
         self.assertNoHoliday(dts)
         self.assertNoHolidayName("Family Day")
-        for name in prov_names.values():
+        for name in subdiv_names.values():
             self.assertNoHolidayName(name)
 
         self.assertHoliday(
-            self.prov_hols["BC"],
+            self.subdiv_holidays["BC"],
             "2013-02-11",
             "2014-02-10",
             "2015-02-09",
@@ -445,7 +508,7 @@ class TestCanada(CommonCountryTests, TestCase):
             "2017-02-13",
             "2018-02-12",
         )
-        self.assertHoliday(self.prov_hols["PE"], "2009-02-09")
+        self.assertHoliday(self.subdiv_holidays["PE"], "2009-02-09")
 
     def test_easter_monday(self):
         name = "Easter Monday"
@@ -462,20 +525,20 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
-        self.assertNoHoliday(self.gov_hols, dts)
-        self.assertNoHolidayName(name, self.gov_hols)
+        self.assertNoHoliday(self.government_holidays, dts)
+        self.assertNoHolidayName(name, self.government_holidays)
 
-        for prov, holidays in self.prov_hols.items():
+        for subdiv, holidays in self.subdiv_holidays.items():
             self.assertNoHoliday(holidays, dts)
             self.assertNoHolidayName(name, holidays)
 
-            if prov in {"AB", "QC"}:
-                self.assertHolidayName(name, self.prov_opt_hols[prov], dts)
+            if subdiv in {"AB", "QC"}:
+                self.assertHolidayName(name, self.subdiv_optional_holidays[subdiv], dts)
 
     def test_civic_holiday_ab(self):
         name = "Heritage Day"
-        self.assertNoHolidayName(name, self.prov_hols["AB"])
-        ab_opt_holidays = self.prov_opt_hols["AB"]
+        self.assertNoHolidayName(name, self.subdiv_holidays["AB"])
+        ab_optional_holidays = self.subdiv_optional_holidays["AB"]
         dts = (
             "1974-08-05",
             "1999-08-02",
@@ -486,12 +549,13 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
-        self.assertHoliday(ab_opt_holidays, dts)
-        self.assertNoHoliday(ab_opt_holidays, "1973-08-06")
+        self.assertHolidayName(name, ab_optional_holidays, dts)
+        self.assertHolidayName(name, ab_optional_holidays, range(1974, 2050))
+        self.assertNoHolidayName(name, ab_optional_holidays, range(1867, 1974))
 
     def test_civic_holiday_bc(self):
         name = "British Columbia Day"
-        bc_holidays = self.prov_hols["BC"]
+        bc_holidays = self.subdiv_holidays["BC"]
         dts = (
             "1974-08-05",
             "1999-08-02",
@@ -503,36 +567,44 @@ class TestCanada(CommonCountryTests, TestCase):
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
         self.assertHolidayName(name, bc_holidays, dts)
-        self.assertNoHoliday(bc_holidays, "1973-08-06")
+        self.assertHolidayName(name, bc_holidays, range(1974, 2050))
+        self.assertNoHolidayName(name, bc_holidays, range(1867, 1974))
 
     def test_civic_holiday_mb(self):
         old_name = "Civic Holiday"
         new_name = "Terry Fox Day"
-        self.assertNoHolidayName(old_name, self.prov_hols["MB"])
-        self.assertNoHolidayName(new_name, self.prov_hols["MB"])
+        self.assertNoHolidayName(old_name, self.subdiv_holidays["MB"])
+        self.assertNoHolidayName(new_name, self.subdiv_holidays["MB"])
 
-        mb_opt_holidays = self.prov_opt_hols["MB"]
-        dts = (
+        mb_optional_holidays = self.subdiv_optional_holidays["MB"]
+        dts_old = (
             "1900-08-06",
             "1999-08-02",
             "2000-08-07",
             "2010-08-02",
+            "2014-08-04",
+        )
+        dts_new = (
             "2015-08-03",
             "2020-08-03",
         )
-        self.assertNoHoliday(dts)
+        self.assertNoHoliday(dts_old, dts_new)
         self.assertNoHolidayName(old_name)
         self.assertNoHolidayName(new_name)
-        self.assertHoliday(mb_opt_holidays, dts)
-        self.assertNoHoliday(mb_opt_holidays, "1899-08-07")
-        self.assertHolidayName(old_name, mb_opt_holidays, "2014-08-04")
-        self.assertHolidayName(new_name, mb_opt_holidays, "2015-08-03")
-        self.assertNoHolidayName(old_name, mb_opt_holidays, 2015)
-        self.assertNoHolidayName(new_name, mb_opt_holidays, 2014)
+
+        self.assertHolidayName(old_name, mb_optional_holidays, dts_old)
+        self.assertHolidayName(old_name, mb_optional_holidays, range(1900, 2015))
+        self.assertNoHolidayName(
+            old_name, mb_optional_holidays, range(1867, 1900), range(2015, 2050)
+        )
+
+        self.assertHolidayName(new_name, mb_optional_holidays, dts_new)
+        self.assertHolidayName(new_name, mb_optional_holidays, range(2015, 2050))
+        self.assertNoHolidayName(new_name, mb_optional_holidays, range(1867, 2015))
 
     def test_civic_holiday_nb(self):
         name = "New Brunswick Day"
-        nb_holidays = self.prov_hols["NB"]
+        nb_holidays = self.subdiv_holidays["NB"]
         dts = (
             "1975-08-04",
             "1999-08-02",
@@ -544,13 +616,13 @@ class TestCanada(CommonCountryTests, TestCase):
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
         self.assertHolidayName(name, nb_holidays, dts)
-        self.assertNoHoliday(nb_holidays, "1974-08-05")
+        self.assertHolidayName(name, nb_holidays, range(1975, 2050))
         self.assertNoHolidayName(name, nb_holidays, range(1867, 1975))
 
     def test_civic_holiday_ns(self):
         name = "Natal Day"
-        self.assertNoHolidayName(name, self.prov_hols["NS"])
-        ns_opt_holidays = self.prov_opt_hols["NS"]
+        self.assertNoHolidayName(name, self.subdiv_holidays["NS"])
+        ns_optional_holidays = self.subdiv_optional_holidays["NS"]
         dts = (
             "1996-08-05",
             "1999-08-02",
@@ -561,15 +633,18 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
-        self.assertHoliday(ns_opt_holidays, dts)
-        self.assertNoHoliday(ns_opt_holidays, "1995-08-07")
+        self.assertHolidayName(name, ns_optional_holidays, dts)
+        self.assertHolidayName(name, ns_optional_holidays, range(1996, 2050))
+        self.assertNoHolidayName(name, ns_optional_holidays, range(1867, 1996))
 
     def test_civic_holiday_nt_nu_on_sk(self):
         name = "Civic Holiday"
-        nt_holidays = self.prov_hols["NT"]
-        nu_holidays = self.prov_hols["NU"]
-        on_opt_holidays = self.prov_opt_hols["ON"]
-        sk_holidays = self.prov_hols["SK"]
+        name_sk = "Saskatchewan Day"
+
+        nt_holidays = self.subdiv_holidays["NT"]
+        nu_holidays = self.subdiv_holidays["NU"]
+        on_optional_holidays = self.subdiv_optional_holidays["ON"]
+        sk_holidays = self.subdiv_holidays["SK"]
         dts = (
             "1900-08-06",
             "1999-08-02",
@@ -580,26 +655,34 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
+
         self.assertHolidayName(name, nt_holidays, dts)
+        self.assertHolidayName(name, nt_holidays, range(1900, 2050))
+        self.assertNoHolidayName(name, nt_holidays, range(1867, 1900))
+
         self.assertHolidayName(name, nu_holidays, dts)
-        self.assertHolidayName(name, on_opt_holidays, dts)
-        self.assertHolidayName("Saskatchewan Day", sk_holidays, dts)
-        self.assertNoHoliday(nt_holidays, "1899-08-07")
-        self.assertNoHoliday(nu_holidays, "1899-08-07")
-        self.assertNoHoliday(on_opt_holidays, "1899-08-07")
-        self.assertNoHoliday(sk_holidays, "1899-08-07")
+        self.assertHolidayName(name, nu_holidays, range(1900, 2050))
+        self.assertNoHolidayName(name, nu_holidays, range(1867, 1900))
+
+        self.assertHolidayName(name, on_optional_holidays, dts)
+        self.assertHolidayName(name, on_optional_holidays, range(1900, 2050))
+        self.assertNoHolidayName(name, on_optional_holidays, range(1867, 1900))
+
+        self.assertHolidayName(name_sk, sk_holidays, dts)
+        self.assertHolidayName(name_sk, sk_holidays, range(1900, 2050))
+        self.assertNoHolidayName(name_sk, sk_holidays, range(1867, 1900))
 
     def test_memorial_day(self):
         name = "Memorial Day"
         self.assertNoHolidayName(name)
-        nl_holidays = self.prov_hols["NL"]
+        nl_holidays = self.subdiv_holidays["NL"]
         self.assertHolidayName(name, nl_holidays, (f"{year}-07-01" for year in range(1917, 2050)))
         self.assertNoHolidayName(name, nl_holidays, range(1900, 1917))
 
     def test_st_patricks_day(self):
         name = "Saint Patrick's Day"
-        self.assertNoHolidayName(name, self.prov_hols["NL"])
-        nl_opt_holidays = self.prov_opt_hols["NL"]
+        self.assertNoHolidayName(name, self.subdiv_holidays["NL"])
+        nl_optional_holidays = self.subdiv_optional_holidays["NL"]
         dts = (
             "1900-03-19",
             "1999-03-15",
@@ -613,13 +696,14 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
-        self.assertHolidayName(name, nl_opt_holidays, dts)
-        self.assertNoHoliday(nl_opt_holidays, "1899-03-20")
+        self.assertHolidayName(name, nl_optional_holidays, dts)
+        self.assertHolidayName(name, nl_optional_holidays, range(1900, 2050))
+        self.assertNoHolidayName(name, nl_optional_holidays, range(1867, 1900))
 
     def test_st_georges_day(self):
         name = "Saint George's Day"
-        self.assertNoHolidayName(name, self.prov_hols["NL"])
-        nl_opt_holidays = self.prov_opt_hols["NL"]
+        self.assertNoHolidayName(name, self.subdiv_holidays["NL"])
+        nl_optional_holidays = self.subdiv_optional_holidays["NL"]
         dts = (
             "1990-04-23",
             "1999-04-26",
@@ -629,13 +713,14 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
-        self.assertHolidayName(name, nl_opt_holidays, dts)
-        self.assertNoHoliday(nl_opt_holidays, "1989-04-24")
+        self.assertHolidayName(name, nl_optional_holidays, dts)
+        self.assertHolidayName(name, nl_optional_holidays, range(1990, 2050))
+        self.assertNoHolidayName(name, nl_optional_holidays, range(1867, 1990))
 
     def test_discovery_day_nl(self):
         name = "Discovery Day"
-        self.assertNoHolidayName(name, self.prov_hols["NL"])
-        nl_opt_holidays = self.prov_opt_hols["NL"]
+        self.assertNoHolidayName(name, self.subdiv_holidays["NL"])
+        nl_optional_holidays = self.subdiv_optional_holidays["NL"]
         dts = (
             "1997-06-23",
             "1999-06-21",
@@ -646,13 +731,14 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
-        self.assertHoliday(nl_opt_holidays, dts)
-        self.assertNoHoliday(nl_opt_holidays, "1996-06-24")
+        self.assertHolidayName(name, nl_optional_holidays, dts)
+        self.assertHolidayName(name, nl_optional_holidays, range(1997, 2050))
+        self.assertNoHolidayName(name, nl_optional_holidays, range(1867, 1997))
 
     def test_orangemans_day(self):
         name = "Orangemen's Day"
-        self.assertNoHolidayName(name, self.prov_hols["NL"])
-        nl_opt_holidays = self.prov_opt_hols["NL"]
+        self.assertNoHolidayName(name, self.subdiv_holidays["NL"])
+        nl_optional_holidays = self.subdiv_optional_holidays["NL"]
         dts = (
             "1900-07-09",
             "1999-07-12",
@@ -663,12 +749,13 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
-        self.assertHoliday(nl_opt_holidays, dts)
-        self.assertNoHoliday(nl_opt_holidays, "1899-07-10")
+        self.assertHolidayName(name, nl_optional_holidays, dts)
+        self.assertHolidayName(name, nl_optional_holidays, range(1900, 2050))
+        self.assertNoHolidayName(name, nl_optional_holidays, range(1867, 1900))
 
     def test_discovery_day_yt(self):
         name = "Discovery Day"
-        yt_holidays = self.prov_hols["YT"]
+        yt_holidays = self.subdiv_holidays["YT"]
         dts = (
             "1912-08-19",
             "1999-08-16",
@@ -679,13 +766,14 @@ class TestCanada(CommonCountryTests, TestCase):
         )
         self.assertNoHoliday(dts)
         self.assertNoHolidayName(name)
-        self.assertHoliday(yt_holidays, dts)
-        self.assertNoHoliday(yt_holidays, "1911-08-21")
+        self.assertHolidayName(name, yt_holidays, dts)
+        self.assertHolidayName(name, yt_holidays, range(1912, 2050))
+        self.assertNoHolidayName(name, yt_holidays, range(1867, 1912))
 
     def test_national_aboriginal_day(self):
         name = "National Aboriginal Day"
-        nt_holidays = self.prov_hols["NT"]
-        yt_holidays = self.prov_hols["YT"]
+        nt_holidays = self.subdiv_holidays["NT"]
+        yt_holidays = self.subdiv_holidays["YT"]
         self.assertHolidayName(name, nt_holidays, (f"{year}-06-21" for year in range(1996, 2050)))
         self.assertNoHolidayName(nt_holidays, range(1867, 1996))
         self.assertHolidayName(name, yt_holidays, (f"{year}-06-21" for year in range(2017, 2050)))
@@ -695,22 +783,25 @@ class TestCanada(CommonCountryTests, TestCase):
 
     def test_nunavut_day(self):
         name = "Nunavut Day"
-        nu_holidays = self.prov_hols["NU"]
-        nu_opt_holidays = self.prov_opt_hols["NU"]
+        nu_holidays = self.subdiv_holidays["NU"]
+        nu_optional_holidays = self.subdiv_optional_holidays["NU"]
         self.assertNoHolidayName(name)
         self.assertNoHoliday(f"{year}-07-09" for year in range(2001, 2050))
         self.assertHolidayName(name, nu_holidays, (f"{year}-07-09" for year in range(2020, 2050)))
         self.assertNoHolidayName(name, nu_holidays, range(1867, 2020))
-        self.assertNoHoliday(nu_opt_holidays, "1999-07-09", "2000-07-09", "2020-07-09")
+        self.assertNoHoliday(nu_optional_holidays, "1999-07-09", "2000-07-09", "2020-07-09")
         self.assertHolidayName(
-            name, nu_opt_holidays, "2000-04-01", (f"{year}-07-09" for year in range(2001, 2020))
+            name,
+            nu_optional_holidays,
+            "2000-04-01",
+            (f"{year}-07-09" for year in range(2001, 2020)),
         )
-        self.assertNoHolidayName(name, nu_opt_holidays, range(1867, 2000), range(2020, 2050))
+        self.assertNoHolidayName(name, nu_optional_holidays, range(1867, 2000), range(2020, 2050))
 
     def test_national_patriots_day(self):
         name = "National Patriots' Day"
         self.assertNoHolidayName(name)
-        qc_holidays = self.prov_hols["QC"]
+        qc_holidays = self.subdiv_holidays["QC"]
         self.assertHolidayName(
             name,
             qc_holidays,
@@ -720,22 +811,24 @@ class TestCanada(CommonCountryTests, TestCase):
             "2021-05-24",
             "2022-05-23",
         )
+        self.assertHolidayName(name, qc_holidays, range(2003, 2050))
         self.assertNoHolidayName(name, qc_holidays, range(1867, 2003))
 
     def test_st_jean_baptiste_day(self):
         name = "Saint Jean Baptiste Day"
         self.assertNoHolidayName(name)
-        qc_holidays = self.prov_hols["QC"]
+        qc_holidays = self.subdiv_holidays["QC"]
         self.assertHoliday(qc_holidays, (f"{year}-06-24" for year in range(1925, 2050)))
         self.assertNoHoliday(qc_holidays, (f"{year}-06-24" for year in range(1867, 1925)))
         self.assertNoHoliday(f"{year}-06-24" for year in range(1925, 2050))
         self.assertHoliday(qc_holidays, "2001-06-25")
-        self.assertNoNonObservedHoliday(self.prov_hols_nonobs["QC"], "2001-06-25")
+        self.assertNoNonObservedHoliday(self.subdiv_holidays_non_observed["QC"], "2001-06-25")
 
     def test_yukon_heritage_day(self):
         name = "Heritage Day"
         self.assertNoHolidayName(name)
-        self.assertNoHolidayName(name, self.prov_hols["YT"])
+        self.assertNoHolidayName(name, self.subdiv_holidays["YT"])
+        yt_optional_holidays = self.subdiv_optional_holidays["YT"]
         dts = (
             "2017-02-24",
             "2018-02-23",
@@ -744,11 +837,13 @@ class TestCanada(CommonCountryTests, TestCase):
             "2021-02-26",
             "2022-02-25",
         )
-        self.assertHolidayName(name, self.prov_opt_hols["YT"], dts)
+        self.assertHolidayName(name, yt_optional_holidays, dts)
+        self.assertHolidayName(name, yt_optional_holidays, range(1976, 2050))
+        self.assertNoHolidayName(name, yt_optional_holidays, range(1867, 1976))
 
     def test_queens_funeral(self):
-        for prov, holidays in self.prov_hols.items():
-            if prov in {"BC", "NB", "NL", "NS", "PE", "YT"}:
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"BC", "NB", "NL", "NS", "PE", "YT"}:
                 self.assertHoliday(holidays, "2022-09-19")
             else:
                 self.assertNoHoliday(holidays, "2022-09-19")
@@ -792,8 +887,8 @@ class TestCanada(CommonCountryTests, TestCase):
 
     def test_all_holidays_present(self):
         y_2022 = set()
-        for prov in Canada.subdivisions:
-            y_2022.update(Canada(years=2022, subdiv=prov, observed=False).values())
+        for subdiv in Canada.subdivisions:
+            y_2022.update(Canada(years=2022, subdiv=subdiv, observed=False).values())
         all_h = {  # Holidays names in their chronological order.
             "New Year's Day",
             "Family Day",