diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/data/dictionaries/valid-dictionary1/tag_bank_3.json | 4 | ||||
| -rw-r--r-- | test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json | 36 | ||||
| -rw-r--r-- | test/data/html/test-document2-frame1.html | 42 | ||||
| -rw-r--r-- | test/data/html/test-document2-script.js | 41 | ||||
| -rw-r--r-- | test/data/html/test-document2.html | 81 | ||||
| -rw-r--r-- | test/data/html/test-stylesheet.css | 19 | ||||
| -rw-r--r-- | test/test-database.js | 9 | ||||
| -rw-r--r-- | test/test-japanese.js | 55 | 
8 files changed, 282 insertions, 5 deletions
| diff --git a/test/data/dictionaries/valid-dictionary1/tag_bank_3.json b/test/data/dictionaries/valid-dictionary1/tag_bank_3.json new file mode 100644 index 00000000..572221fe --- /dev/null +++ b/test/data/dictionaries/valid-dictionary1/tag_bank_3.json @@ -0,0 +1,4 @@ +[ +    ["ptag1", "pcategory1", 0, "ptag1 notes", 0], +    ["ptag2", "pcategory2", 0, "ptag2 notes", 0] +]
\ No newline at end of file diff --git a/test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json b/test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json index 78096502..26922394 100644 --- a/test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json +++ b/test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json @@ -1,5 +1,39 @@  [      ["打", "freq", 1],      ["打つ", "freq", 2], -    ["打ち込む", "freq", 3] +    ["打ち込む", "freq", 3], +    [ +        "打ち込む", +        "pitch", +        { +            "reading": "うちこむ", +            "pitches": [ +                {"position": 0}, +                {"position": 3} +            ] +        } +    ], +    [ +        "打ち込む", +        "pitch", +        { +            "reading": "ぶちこむ", +            "pitches": [ +                {"position": 0}, +                {"position": 3} +            ] +        } +    ], +    [ +        "お手前", +        "pitch", +        { +            "reading": "おてまえ", +            "pitches": [ +                {"position": 2, "tags": ["ptag1"]}, +                {"position": 2, "tags": ["ptag2"]}, +                {"position": 0, "tags": ["ptag2"]} +            ] +        } +    ]  ]
\ No newline at end of file diff --git a/test/data/html/test-document2-frame1.html b/test/data/html/test-document2-frame1.html new file mode 100644 index 00000000..3b85cdc5 --- /dev/null +++ b/test/data/html/test-document2-frame1.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html> +    <head> +        <meta charset="UTF-8"> +        <meta name="viewport" content="width=device-width,initial-scale=1" /> +        <title>Yomichan Tests</title> +        <script src="test-document2-script.js"></script> +        <style> +body { +    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +    font-size: 14px; +    padding: 0; +    margin: 0; +    background-color: #f8f8f8; +} +a, a:visited { +    color: #1080c0; +    text-decoration: underline; +} +.content { +    position: absolute; +    left: 0; +    top: 0; +    right: 0; +    bottom: 0; +    padding: 0.5em; +    background-color: #f8f8f8; +} +        </style> +    </head> +<body><div class="content"> +<div> +    ありがとう +</div> +<div> +    <a href="#" id="fullscreen-link">Toggle fullscreen</a> +    <script> +document.querySelector('#fullscreen-link').addEventListener('click', () => toggleFullscreen(document.body), false); +    </script> +</div> +</div></body> +</html>
\ No newline at end of file diff --git a/test/data/html/test-document2-script.js b/test/data/html/test-document2-script.js new file mode 100644 index 00000000..bd5a570d --- /dev/null +++ b/test/data/html/test-document2-script.js @@ -0,0 +1,41 @@ +function requestFullscreen(element) { +    if (element.requestFullscreen) { +        element.requestFullscreen(); +    } else if (element.mozRequestFullScreen) { +        element.mozRequestFullScreen(); +    } else if (element.webkitRequestFullscreen) { +        element.webkitRequestFullscreen(); +    } else if (element.msRequestFullscreen) { +        element.msRequestFullscreen(); +    } +} + +function exitFullscreen() { +    if (document.exitFullscreen) { +        document.exitFullscreen(); +    } else if (document.mozCancelFullScreen) { +        document.mozCancelFullScreen(); +    } else if (document.webkitExitFullscreen) { +        document.webkitExitFullscreen(); +    } else if (document.msExitFullscreen) { +        document.msExitFullscreen(); +    } +} + +function getFullscreenElement() { +    return ( +        document.fullscreenElement || +        document.msFullscreenElement || +        document.mozFullScreenElement || +        document.webkitFullscreenElement || +        null +    ); +} + +function toggleFullscreen(element) { +    if (getFullscreenElement()) { +        exitFullscreen(); +    } else { +        requestFullscreen(element); +    } +} diff --git a/test/data/html/test-document2.html b/test/data/html/test-document2.html new file mode 100644 index 00000000..3a22a5bf --- /dev/null +++ b/test/data/html/test-document2.html @@ -0,0 +1,81 @@ +<!DOCTYPE html> +<html> +    <head> +        <meta charset="UTF-8"> +        <meta name="viewport" content="width=device-width,initial-scale=1" /> +        <title>Yomichan Manual Tests</title> +        <link rel="icon" type="image/gif" href="data:image/gif;base64,R0lGODlhEAAQAKEBAAAAAP///////////yH5BAEKAAIALAAAAAAQABAAAAImFI6Zpt0B4YkS0TCpq07xbmEgcGVRUpLaI46ZG7ppalY0jDCwUAAAOw==" /> +        <link rel="stylesheet" href="test-stylesheet.css" /> +        <script src="test-document2-script.js"></script> +    </head> +<body> + +    <h1>Yomichan Manual Tests</h1> +    <p class="description">Manual tests involving fullscreen elements, <iframe>s, and shadow DOMs.</p> + +    <div class="test"> +        <div class="description">Standard content.</div> +        <div id="fullscreen-element1" style="width: 100%; height: 200px; border: 1px solid #d8d8d8; position: relative;"><div style="background-color: #f8f8f8; padding: 0.5em; position: absolute; left: 0; top: 0; bottom: 0; right: 0;"> +            <div> +                ありがとう +            </div> +            <div> +                <a href="#" id="fullscreen-link1">Toggle fullscreen</a> +            </div> +        </div></div> +        <script> +document.querySelector('#fullscreen-link1').addEventListener('click', () => toggleFullscreen(document.querySelector('#fullscreen-element1')), false); +        </script> +    </div> + +    <div class="test"> +        <div class="description">Content inside of a shadow DOM.</div> +        <div id="shadow-content-container"></div> +        <template id="shadow-content-container-content-template"> +            <link rel="stylesheet" href="test-stylesheet.css" /> +            <div id="fullscreen-element2" style="width: 100%; height: 200px; border: 1px solid #d8d8d8; position: relative;"><div style="background-color: #f8f8f8; padding: 0.5em; position: absolute; left: 0; top: 0; bottom: 0; right: 0;"> +                <div> +                    ありがとう +                </div> +                <div> +                    <a href="#" id="fullscreen-link2">Toggle fullscreen</a> +                </div> +            </div></div> +        </template> +        <script> +(() => { +    const shadowIframeContainer = document.querySelector('#shadow-content-container'); +    const shadow = shadowIframeContainer.attachShadow({mode: 'closed'}); +    const template = document.querySelector('#shadow-content-container-content-template').content; +    const content = document.importNode(template, true); +    const fullscreenElement = content.querySelector('#fullscreen-element2'); +    content.querySelector('#fullscreen-link2').addEventListener('click', () => toggleFullscreen(fullscreenElement), false); +    shadow.appendChild(content); +})(); +        </script> +    </div> + +    <div class="test"> +        <div class="description"><iframe> element.</div> +        <iframe src="test-document2-frame1.html" allowfullscreen="true" style="width: 100%; height: 200px; border: 1px solid #d8d8d8;"></iframe> +    </div> + +    <div class="test"> +        <div class="description"><iframe> element inside of a shadow DOM.</div> +        <div id="shadow-iframe-container"></div> +        <template id="shadow-iframe-container-content-template"> +            <iframe src="test-document2-frame1.html" allowfullscreen="true" style="width: 100%; height: 200px; border: 1px solid #d8d8d8;"></iframe> +        </template> +        <script> +(() => { +    const shadowIframeContainer = document.querySelector('#shadow-iframe-container'); +    const shadow = shadowIframeContainer.attachShadow({mode: 'closed'}); +    const template = document.querySelector('#shadow-iframe-container-content-template').content; +    const content = document.importNode(template, true); +    shadow.appendChild(content); +})(); +        </script> +    </div> + +</body> +</html>
\ No newline at end of file diff --git a/test/data/html/test-stylesheet.css b/test/data/html/test-stylesheet.css index ab25732e..f63d2481 100644 --- a/test/data/html/test-stylesheet.css +++ b/test/data/html/test-stylesheet.css @@ -7,6 +7,7 @@ body {      margin: 0 auto;      background-color: #f8f8f8;      counter-reset: test-id; +    overflow-y: scroll;  }  h1 { @@ -14,6 +15,19 @@ h1 {      margin: 0.67em 0;  } +p { +    margin: 0.33em 0; +} + +h1+p { +    margin-top: -0.67em; +} + +a, a:visited { +    color: #1080c0; +    text-decoration: underline; +} +  .test {      background-color: #ffffff;      margin: 1em 0; @@ -30,3 +44,8 @@ h1 {      border-bottom: 1px solid #d8d8d8;      font-weight: bold;  } + +.description { +    color: #444444; +    font-style: italic; +} diff --git a/test/test-database.js b/test/test-database.js index 833aa75d..dbd67257 100644 --- a/test/test-database.js +++ b/test/test-database.js @@ -231,8 +231,8 @@ async function testDatabase1() {              true          );          vm.assert.deepStrictEqual(counts, { -            counts: [{kanji: 2, kanjiMeta: 2, terms: 32, termMeta: 3, tagMeta: 12}], -            total: {kanji: 2, kanjiMeta: 2, terms: 32, termMeta: 3, tagMeta: 12} +            counts: [{kanji: 2, kanjiMeta: 2, terms: 32, termMeta: 6, tagMeta: 14}], +            total: {kanji: 2, kanjiMeta: 2, terms: 32, termMeta: 6, tagMeta: 14}          });          // Test find* functions @@ -648,9 +648,10 @@ async function testFindTermMetaBulk1(database, titles) {                  }              ],              expectedResults: { -                total: 1, +                total: 3,                  modes: [ -                    ['freq', 1] +                    ['freq', 1], +                    ['pitch', 2]                  ]              }          }, diff --git a/test/test-japanese.js b/test/test-japanese.js index a16a73b7..ca65dde2 100644 --- a/test/test-japanese.js +++ b/test/test-japanese.js @@ -394,6 +394,59 @@ function testDistributeFuriganaInflected() {      }  } +function testIsMoraPitchHigh() { +    const data = [ +        [[0, 0], false], +        [[1, 0], true], +        [[2, 0], true], +        [[3, 0], true], + +        [[0, 1], true], +        [[1, 1], false], +        [[2, 1], false], +        [[3, 1], false], + +        [[0, 2], true], +        [[1, 2], true], +        [[2, 2], false], +        [[3, 2], false], + +        [[0, 3], true], +        [[1, 3], true], +        [[2, 3], true], +        [[3, 3], false], + +        [[0, 4], true], +        [[1, 4], true], +        [[2, 4], true], +        [[3, 4], true] +    ]; + +    for (const [[moraIndex, pitchAccentPosition], expected] of data) { +        const actual = jp.isMoraPitchHigh(moraIndex, pitchAccentPosition); +        assert.strictEqual(actual, expected); +    } +} + +function testGetKanaMorae() { +    const data = [ +        ['かこ', ['か', 'こ']], +        ['かっこ', ['か', 'っ', 'こ']], +        ['カコ', ['カ', 'コ']], +        ['カッコ', ['カ', 'ッ', 'コ']], +        ['コート', ['コ', 'ー', 'ト']], +        ['ちゃんと', ['ちゃ', 'ん', 'と']], +        ['とうきょう', ['と', 'う', 'きょ', 'う']], +        ['ぎゅう', ['ぎゅ', 'う']], +        ['ディスコ', ['ディ', 'ス', 'コ']] +    ]; + +    for (const [text, expected] of data) { +        const actual = jp.getKanaMorae(text); +        vm.assert.deepStrictEqual(actual, expected); +    } +} +  function main() {      testIsCodePointKanji(); @@ -410,6 +463,8 @@ function main() {      testConvertAlphabeticToKana();      testDistributeFurigana();      testDistributeFuriganaInflected(); +    testIsMoraPitchHigh(); +    testGetKanaMorae();  } |