Summarized test results:
Bidi algorithm

To run the test, click on the link in the left-most column. To see detailed results for a single test, click on a row and look just above the table. The detailed results show the date(s) the test result was recorded, and the version of the browser tested.

Updated

These tests check whether user agents apply the basic Unicode Bidirectional Algorithm (UBA) to text. In particular they test isolation when using RLI, LRI, or FSI, ... PDI, and bracket balancing.

The Unicode Bidirectional Algorithm is responsible for arranging a sequence of mixed direction characters in memory (ordered undirectionally) into a bidirectional visual output. In doing so, it makes certain assumptions about the relationships between adjacent runs of opposite direction text. These assumptions don't always hold, and the Unicode formatting code points (RLI, etc.) provide hints to help in the process.

The formatting characters examined here all come in pairs (RLI/LRI/FSI ... PDI), and prevent the effects of the bidi algorithm interacting with content outside of the text they encompass. As an example: in a left-to-right page, such as this, a sequence of Hebrew or Arabic characters followed in memory by a number will by default position the number to the left of the Hebrew/Arabic, eg. Name & age: القاهرة, 43, rather than ordering items from left to right, as expected, ie. Name & age: القاهرة, 43. In plain text, the formatting characters RLI...PDI can be placed either side of the Arabic text to prevent this issue from arising. They do so by isolating the Arabic text from what surrounds it.

These tests check whether those formatting characters produce the expected effect.

Where the instructions tell you to look for red strokes, these strokes should be clearly discernable behind the black text of the test – ignore any anti-aliasing 'glow'.


Isolating formatting characters

Isolation from following number

Links to run testsAssertionsGecko FirefoxBlink ChromeBlink EdgeWebkit SafariLegacy Edge
isolated from following number, opposite direction
rli-lri-fsi-pdi-001a.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from a following number. passpasspasspassfail
isolated from following number, auto
rli-lri-fsi-pdi-001b.html
Plain text content surrounded by FSI...PDI is treated as a neutral character and directionally isolated from a following number. passpasspasspassfail
isolated from following number, same direction
rli-lri-fsi-pdi-001c.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from a following number. passpasspasspassfail
isolated from following number with intervening neutrals, opposite direction
rli-lri-fsi-pdi-002a.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from a following number. passpasspasspartialfail
isolated from following number with intervening neutrals, auto
rli-lri-fsi-pdi-002b.html
Plain text content surrounded by FSI...PDI is treated as a neutral character and directionally isolated from a following number. passpasspasspassfail
isolated from following number with intervening neutrals, same direction
rli-lri-fsi-pdi-002c.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from a following number. passpasspasspassfail
isolated from immediately following number, opposite direction
rli-lri-fsi-pdi-003a.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and is directionally isolated from a following number, even with no intervening white space. passpasspasspassfail
isolated from immediately following number, auto
rli-lri-fsi-pdi-003b.html
Plain text content surrounded by FSI...PDI is treated as a neutral character and is directionally isolated from a following number, even with no intervening white space. passpasspasspassfail
isolated from immediately following number, same direction
rli-lri-fsi-pdi-003c.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and is directionally isolated from a following number, even with no intervening white space. passpasspasspassfail

Isolation from preceding number

Links to run testsAssertionsGecko FirefoxBlink ChromeBlink EdgeWebkit SafariLegacy Edge
numbers isolated from preceding text, opposite direction
rli-lri-fsi-pdi-004a.html
Plain text numeric content content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from preceding text. passpasspasspassfail
numbers isolated from preceding text, auto
rli-lri-fsi-pdi-004b.html
Plain text numeric content content surrounded by FSI...PDI is treated as a neutral character and directionally isolated from preceding text. passpasspasspassfail
numbers isolated from preceding text, same direction
rli-lri-fsi-pdi-004c.html
Plain text numeric content content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from preceding text. passpasspasspassfail

Isolation from following text

Links to run testsAssertionsGecko FirefoxBlink ChromeBlink EdgeWebkit SafariLegacy Edge
isolated from following text, opposite direction
rli-lri-fsi-pdi-005a.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from following text. passpasspasspassfail
isolated from following text, auto
rli-lri-fsi-pdi-005b.html
Plain text content surrounded by FSI...PDI is treated as a neutral character and directionally isolated from following text. passpasspasspassfail
isolated from following text, same direction
rli-lri-fsi-pdi-005c.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from following text. passpasspasspassfail
isolated from following text with intervening neutrals, opposite direction
rli-lri-fsi-pdi-006a.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from following text despite intervening neutrals. passpasspasspassfail
isolated from following text with intervening neutrals, auto
rli-lri-fsi-pdi-006b.html
Plain text content surrounded by FSI...PDI is treated as a neutral character and directionally isolated from following text despite intervening neutrals. passpasspasspassfail
isolated from following text with intervening neutrals, same direction
rli-lri-fsi-pdi-006c.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from following text despite intervening neutrals. passpasspasspassfail
isolated from immediately following text, opposite direction
rli-lri-fsi-pdi-007a.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from following text even with no intervening white space. passpasspasspassfail
isolated from immediately following text, auto
rli-lri-fsi-pdi-007b.html
Plain text content surrounded by FSI...PDI is treated as a neutral character and directionally isolated from following text even with no intervening white space. passpasspasspassfail
isolated from immediately following text, same direction
rli-lri-fsi-pdi-007c.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from following text even with no intervening white space. passpasspasspassfail

Isolation from preceding text

Links to run testsAssertionsGecko FirefoxBlink ChromeBlink EdgeWebkit SafariLegacy Edge
isolated from preceding text, opposite direction
rli-lri-fsi-pdi-008a.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from preceding text. passpasspasspassfail
isolated from preceding text, auto
rli-lri-fsi-pdi-008b.html
Plain text content surrounded by FSI...PDI is treated as a neutral character and directionally isolated from preceding text. passpasspasspassfail
isolated from preceding text, same direction
rli-lri-fsi-pdi-008c.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from preceding text. passpasspasspassfail

Isolation from surrounding text

Links to run testsAssertionsGecko FirefoxBlink ChromeBlink EdgeWebkit SafariLegacy Edge
isolated from surrounding text, opposite direction
rli-lri-fsi-pdi-009a.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from surrounding text. passpasspasspassfail
isolated from surrounding text, auto
rli-lri-fsi-pdi-009b.html
Plain text content surrounded by FSI...PDI is treated as a neutral character and directionally isolated from surrounding text. passpasspasspassfail
isolated from surrounding text, same direction
rli-lri-fsi-pdi-009c.html
Plain text content surrounded by RLI/LRI...PDI is treated as a neutral character and directionally isolated from surrounding text. passpasspasspassfail

Balancing brackets

Paired characters

Links to run testsAssertionsGecko FirefoxBlink ChromeBlink EdgeWebkit SafariLegacy Edge
RTL base, ltr parens
brackets-001.html
The bidi algorithm will keep parentheses around Latin text at the boundary of two runs with a RTL base direction. passpasspassfailpass
RTL base, ltr square brackets
brackets-002.html
The bidi algorithm will keep square brackets around Latin text at the boundary of two runs with a RTL base direction. passpasspassfailpass
RTL base, ltr curly brackets
brackets-003.html
The bidi algorithm will keep curly brackets around Latin text at the boundary of two runs with a RTL base direction. passpasspassfailpass

Unpaired characters

Dependencies

  1. This test is only relevant if the tests in the previous section pass. It checks whether the paired characters become unbalanced when you change one of the pair. The expected result is the default result for unbalanced brackets, so browsers that failed the previous tests are likely to pass this.
Links to run testsAssertionsGecko FirefoxBlink ChromeBlink EdgeWebkit SafariLegacy Edge
RTL base, ltr mismatched parens
brackets-010.html
The bidi algorithm will NOT keep paired characters around Latin text at the boundary of two runs with a RTL base direction if the paired characters are not the same. passpasspassfailpass

Acknowledgements

Thanks to the following people who submitted results: Lucas Werkmeister.