summaryrefslogtreecommitdiffstats
path: root/intl/l10n/docs/migrations/testing.rst
diff options
context:
space:
mode:
Diffstat (limited to 'intl/l10n/docs/migrations/testing.rst')
-rw-r--r--intl/l10n/docs/migrations/testing.rst73
1 files changed, 73 insertions, 0 deletions
diff --git a/intl/l10n/docs/migrations/testing.rst b/intl/l10n/docs/migrations/testing.rst
new file mode 100644
index 0000000000..94421c8b66
--- /dev/null
+++ b/intl/l10n/docs/migrations/testing.rst
@@ -0,0 +1,73 @@
+.. role:: bash(code)
+ :language: bash
+
+.. role:: js(code)
+ :language: javascript
+
+.. role:: python(code)
+ :language: python
+
+=============================
+How to Test Migration Recipes
+=============================
+
+To test migration recipes, use the following mach command:
+
+.. code-block:: bash
+
+ ./mach fluent-migration-test python/l10n/fluent_migrations/bug_1485002_newtab.py
+
+This will analyze your migration recipe to check that the :python:`migrate`
+function exists, and interacts correctly with the migration context. Once that
+passes, it clones :bash:`gecko-strings` into :bash:`$OBJDIR/python/l10n`, creates a
+reference localization by adding your local Fluent strings to the ones in
+:bash:`gecko-strings`. It then runs the migration recipe, both as dry run and
+as actual migration. Finally it analyzes the commits, and checks if any
+migrations were actually run and the bug number in the commit message matches
+the migration name.
+
+At the end of the execution, the output will include a diff if there are
+differences between the migrated files and the reference content (blank lines
+are automatically ignored). There are cases where a diff is still expected, even
+if the recipe is correct:
+
+- If the patch includes new strings that are not being migrated, the diff
+ output will show these as removals. This occurs because the migration recipe
+ test contains the latest version of strings from :bash:`gecko-strings` with
+ only migrations applied, while the reference file contains all string changes
+ being introduced by the patch.
+- If there are pending changes to FTL files included in the recipe that landed
+ in the last few days, and haven't been pushed to :bash:`gecko-strings` yet
+ (they're in :bash:`gecko-strings-quarantine`), these will show up as
+ additions.
+
+If a diff is displayed and the patch doesn't fall into the highlighted cases,
+there may be an issue with the migration recipe.
+
+You can inspect the generated repository further by looking at
+
+.. code-block:: bash
+
+ ls $OBJDIR/python/l10n/bug_1485002_newtab/en-US
+
+Caveats
+-------
+
+Be aware of hard-coded English context in migration. Consider for example:
+
+
+.. code-block:: python
+
+ ctx.add_transforms(
+ "browser/browser/preferences/siteDataSettings.ftl",
+ "browser/browser/preferences/siteDataSettings.ftl",
+ transforms_from(
+ """
+ site-usage-persistent = { site-usage-pattern } (Persistent)
+ """)
+ )
+
+
+This Transform will pass a manual comparison, since the two files are identical,
+but will result in :js:`(Persistent)` being hard-coded in English for all
+languages.