diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5241e1d93..90e8be1bd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -67,11 +67,11 @@ jobs: dotnet-version: '8' - run: npm ci - run: npm run build-csharp - - run: npm run test-csharp + - run: npm run test-ci-csharp id: test - uses: actions/upload-artifact@v7 if: ${{ failure() && steps.test.conclusion == 'failure' }} - with: + with: name: test-results-csharp path: | packages/alphatab/test-data/**/*.new.png @@ -80,9 +80,11 @@ jobs: build_kotlin: name: Build and Test Kotlin runs-on: ubuntu-latest + permissions: + checks: write steps: - uses: actions/checkout@v6 - with: + with: fetch-depth: 100 - uses: actions/setup-node@v6 with: @@ -99,11 +101,17 @@ jobs: - run: npm run build-kotlin - run: npm run test-kotlin id: test + - uses: dorny/test-reporter@v2 + if: ${{ always() }} + with: + name: Kotlin Tests + path: 'packages/kotlin/**/build/test-results/**/*.xml' + reporter: java-junit - uses: actions/upload-artifact@v7 if: ${{ failure() && steps.test.conclusion == 'failure' }} - with: + with: name: test-results-kotlin path: | packages/alphatab/test-data/**/*.new.png - packages/alphatab/test-data/**/*.diff.png + packages/alphatab/test-data/**/*.diff.png - run: ./packages/kotlin/src/gradlew --stop diff --git a/package-lock.json b/package-lock.json index ee2540ed4..318bae77c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,515 +14,6 @@ "concurrently": "^9.2.1" } }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@bcoe/v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", @@ -799,9 +290,9 @@ "link": true }, "node_modules/@discoveryjs/json-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.0.0.tgz", - "integrity": "sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", "dev": true, "license": "MIT", "engines": { @@ -1282,271 +773,77 @@ "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/diff-sequences": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz", - "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz", - "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.34.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/snapshot-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz", - "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@jest/transform": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz", - "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.3.0", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.3.0", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@jest/types": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz", - "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { @@ -1559,17 +856,6 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -1673,19 +959,6 @@ "node": ">=14" } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -2242,10 +1515,10 @@ "string-argv": "~0.3.1" } }, - "node_modules/@sinclair/typebox": { - "version": "0.34.49", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz", - "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==", + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, "license": "MIT" }, @@ -2320,26 +1593,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -2379,13 +1632,6 @@ "@types/node": "*" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -2400,29 +1646,128 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "node_modules/@vitest/expect": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.5.tgz", + "integrity": "sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==", "dev": true, "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.5", + "@vitest/utils": "4.1.5", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "node_modules/@vitest/mocker": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.5.tgz", + "integrity": "sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.5", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.5.tgz", + "integrity": "sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.5.tgz", + "integrity": "sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.5", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.5.tgz", + "integrity": "sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.5", + "@vitest/utils": "4.1.5", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.5.tgz", + "integrity": "sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.5.tgz", + "integrity": "sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.5", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, "node_modules/@vscode/test-cli": { "version": "0.0.12", @@ -2657,6 +2002,53 @@ "@xtuc/long": "4.2.2" } }, + "node_modules/@webpack-cli/configtest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -2881,121 +2273,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", - "dev": true, - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-plugin-istanbul/node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" - } - }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -3104,16 +2381,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3216,13 +2483,16 @@ } }, "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/caniuse-lite": { @@ -3312,27 +2582,11 @@ }, "node_modules/chrome-trace-event": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.0" } }, "node_modules/clean-css": { @@ -3427,6 +2681,13 @@ "dev": true, "license": "MIT" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -3444,13 +2705,6 @@ "dev": true, "license": "MIT" }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, "node_modules/concurrently": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", @@ -3926,20 +3180,6 @@ "node": ">=8.0.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3995,22 +3235,14 @@ "node": ">=0.8.x" } }, - "node_modules/expect": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz", - "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==", + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.3.0", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-util": "30.3.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=12.0.0" } }, "node_modules/fast-deep-equal": { @@ -4019,13 +3251,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", @@ -4052,16 +3277,6 @@ "node": ">= 4.9.1" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -4176,13 +3391,6 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -4217,16 +3425,6 @@ "node": ">= 0.4" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -4275,16 +3473,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -4653,28 +3841,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -4965,23 +4131,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", @@ -5040,175 +4189,18 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-diff": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz", - "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.3.0", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.3.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz", - "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.3.0", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.3.0", - "jest-worker": "30.3.0", - "picomatch": "^4.0.3", - "walker": "^1.0.8" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.3" - } - }, - "node_modules/jest-matcher-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz", - "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.3.0", - "pretty-format": "30.3.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz", - "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.3.0", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3", - "pretty-format": "30.3.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-mock": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", - "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.3.0", - "@types/node": "*", - "jest-util": "30.3.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz", - "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.3.0", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.3.0", - "graceful-fs": "^4.2.11", - "jest-diff": "30.3.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", - "pretty-format": "30.3.0", - "semver": "^7.7.2", - "synckit": "^0.11.8" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz", - "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.3.0", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-worker": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz", - "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==", - "dev": true, + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "license": "MIT", "dependencies": { "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.3.0", "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" + "supports-color": "^8.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 10.13.0" } }, "node_modules/jju": { @@ -5218,39 +4210,25 @@ "dev": true, "license": "MIT" }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } + "license": "Python-2.0" }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -5258,19 +4236,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/jsonfile": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", @@ -5381,14 +4346,11 @@ } }, "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } + "license": "ISC" }, "node_modules/lucide": { "version": "1.11.0", @@ -5421,16 +4383,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, "node_modules/marked": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", @@ -5560,13 +4512,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, "node_modules/mocha/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5610,19 +4555,6 @@ "node": ">=0.3.1" } }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "9.0.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", @@ -5707,13 +4639,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -5731,13 +4656,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, "node_modules/node-releases": { "version": "2.0.38", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", @@ -5815,6 +4733,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -5827,16 +4756,6 @@ "node": ">= 0.8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/onetime": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", @@ -6110,16 +5029,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -6154,12 +5063,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "license": "ISC" + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", @@ -6179,16 +5088,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -6299,40 +5198,12 @@ "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", - "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, "node_modules/process-nextick-args": { @@ -6361,13 +5232,6 @@ "node": ">= 0.6" } }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -6671,9 +5535,9 @@ } }, "node_modules/rollup-plugin-node-externals": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-externals/-/rollup-plugin-node-externals-9.0.1.tgz", - "integrity": "sha512-Yp91CX1ebDA8s4+BY7bOOdhF8VRR1XAKnSsHeVhYg4DW4MRXPsF4F2FnSsN9ghJgFhHl3L1uyK7A9NA/SF4Zgw==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-externals/-/rollup-plugin-node-externals-8.1.2.tgz", + "integrity": "sha512-EuB6/lolkMLK16gvibUjikERq5fCRVIGwD2xue/CrM8D0pz5GXD2V6N8IrgxegwbcUoKkUFI8VYCEEv8MMvgpA==", "dev": true, "funding": [ { @@ -6687,19 +5551,10 @@ ], "license": "MIT", "engines": { - "node": ">= 24" + "node": ">= 21 || ^20.6.0 || ^18.19.0" }, "peerDependencies": { - "rollup": "^4.0.0", - "vite": ">=5.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - }, - "vite": { - "optional": true - } + "rollup": "^4.0.0" } }, "node_modules/rxjs": { @@ -6921,6 +5776,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -6934,16 +5796,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/smob": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.1.tgz", @@ -7062,28 +5914,12 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/statuses": { "version": "2.0.2", @@ -7094,6 +5930,13 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/stdin-discarder": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", @@ -7226,22 +6069,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", - "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/tapable": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", @@ -7306,20 +6133,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -7341,6 +6154,23 @@ "node": ">=18" } }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tinyglobby": { "version": "0.2.16", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", @@ -7357,12 +6187,15 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -7659,6 +6492,96 @@ "vite": "*" } }, + "node_modules/vitest": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.5.tgz", + "integrity": "sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.5", + "@vitest/mocker": "4.1.5", + "@vitest/pretty-format": "4.1.5", + "@vitest/runner": "4.1.5", + "@vitest/snapshot": "4.1.5", + "@vitest/spy": "4.1.5", + "@vitest/utils": "4.1.5", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.5", + "@vitest/browser-preview": "4.1.5", + "@vitest/browser-webdriverio": "4.1.5", + "@vitest/coverage-istanbul": "4.1.5", + "@vitest/coverage-v8": "4.1.5", + "@vitest/ui": "4.1.5", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, "node_modules/vscode-jsonrpc": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", @@ -7759,16 +6682,6 @@ "integrity": "sha512-n2uGbUcrjhUEBH16uGA0TvUfhWwliFZ1e3+pTjrkim1Mt7ydB41lV08aUvsi70OlzDWp6X7Bx3w/x3fAXIsN0Q==", "license": "MIT" }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/watchpack": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", @@ -7830,15 +6743,19 @@ } }, "node_modules/webpack-cli": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-7.0.2.tgz", - "integrity": "sha512-dB0R4T+C/8YuvM+fabdvil6QE44/ChDXikV5lOOkrUeCkW5hTJv2pGLE3keh+D5hjYw8icBaJkZzpFoaHV4T+g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "^1.0.0", - "commander": "^14.0.3", - "cross-spawn": "^7.0.6", + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -7850,16 +6767,14 @@ "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=20.9.0" + "node": ">=18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.101.0", - "webpack-bundle-analyzer": "^4.0.0 || ^5.0.0", - "webpack-dev-server": "^5.0.0" + "webpack": "^5.82.0" }, "peerDependenciesMeta": { "webpack-bundle-analyzer": { @@ -7871,13 +6786,13 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", - "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { - "node": ">=20" + "node": ">=18" } }, "node_modules/webpack-merge": { @@ -7942,6 +6857,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -7993,27 +6925,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -8024,13 +6935,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -8076,19 +6980,6 @@ "node": ">=10" } }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -8102,29 +6993,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/alphasynth": { - "name": "@coderline/alphasynth", - "version": "1.9.0", - "extraneous": true, - "license": "MPL-2.0", - "devDependencies": { - "@biomejs/biome": "^2.3.14", - "@types/chai": "^5.2.3", - "@types/mocha": "^10.0.10", - "@types/node": "^25.2.2", - "assert": "^2.1.0", - "chai": "^6.2.2", - "mocha": "^11.7.5", - "rimraf": "^6.1.2", - "tslib": "^2.8.1", - "tsx": "^4.21.0", - "typescript": "^5.9.3", - "vite": "^7.3.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, "packages/alphatab": { "name": "@coderline/alphatab", "version": "1.9.0", @@ -8132,38 +7000,21 @@ "devDependencies": { "@biomejs/biome": "^2.4.10", "@coderline/alphaskia": "^3.5.147", - "@coderline/alphaskia-linux": "^3.4.135", + "@coderline/alphaskia-linux": "^3.5.147", "@coderline/alphaskia-windows": "^3.5.147", - "@types/chai": "^5.2.3", - "@types/mocha": "^10.0.10", - "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", - "chalk": "^5.6.2", - "jest-snapshot": "^30.3.0", - "mocha": "^11.7.5", - "rimraf": "^6.1.3", + "@types/node": "^25.2.2", + "rimraf": "^6.1.2", "tslib": "^2.8.1", "tsx": "^4.21.0", "typescript": "^5.9.3", - "vite": "^7.3.2", - "vite-plugin-static-copy": "^3.3.0" + "vite": "^7.3.1", + "vite-plugin-static-copy": "^3.2.0", + "vitest": "^4.1.5" }, "engines": { "node": ">=6.0.0" } }, - "packages/alphatab/node_modules/chalk": { - "version": "5.6.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "packages/alphatex": { "name": "@coderline/alphatab-alphatex", "version": "1.9.0", @@ -8171,7 +7022,8 @@ "rimraf": "^6.1.3", "tslib": "^2.8.1", "tsx": "^4.21.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.1.5" } }, "packages/csharp": { @@ -8201,16 +7053,13 @@ "devDependencies": { "@biomejs/biome": "^2.4.10", "@microsoft/api-extractor": "^7.57.7", - "@types/chai": "^5.2.2", - "@types/mocha": "^10.0.10", "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", - "mocha": "^11.7.4", "rimraf": "^6.1.3", "tslib": "^2.8.1", "tsx": "^4.21.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" } }, "packages/monaco": { @@ -8231,16 +7080,13 @@ "devDependencies": { "@biomejs/biome": "^2.4.10", "@microsoft/api-extractor": "^7.57.7", - "@types/chai": "^5.2.2", - "@types/mocha": "^10.0.10", "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", - "mocha": "^11.7.4", "rimraf": "^6.1.3", "tslib": "^2.8.1", "tsx": "^4.21.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" } }, "packages/playground": { @@ -8261,7 +7107,8 @@ "tslib": "^2.8.1", "typescript": "^5.9.3", "vite": "^7.3.2", - "vite-tsconfig-paths": "^6.1.1" + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" } }, "packages/tooling": { @@ -8272,12 +7119,18 @@ "@rollup/plugin-terser": "^1.0.0", "@rollup/plugin-typescript": "^12.3.0", "rollup-plugin-license": "^3.7.0", - "typescript": "^5.9.3" + "rollup-plugin-node-externals": "^8.1.2", + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" } }, "packages/transpiler": { "name": "@coderline/alphatab-transpiler", - "version": "1.9.0" + "version": "1.9.0", + "devDependencies": { + "vitest": "^4.1.5" + } }, "packages/vite": { "name": "@coderline/alphatab-vite", @@ -8288,20 +7141,16 @@ "vite": "^7.3.2" }, "devDependencies": { - "@biomejs/biome": "^2.4.10", - "@microsoft/api-extractor": "^7.57.7", - "@types/chai": "^5.2.3", - "@types/mocha": "^10.0.10", - "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", - "mocha": "^11.7.5", - "rimraf": "^6.1.3", - "rollup-plugin-node-externals": "^9.0.1", - "terser": "^5.46.1", + "@biomejs/biome": "^2.3.14", + "@microsoft/api-extractor": "^7.56.3", + "@types/node": "^25.2.2", + "rimraf": "^6.1.2", + "rollup-plugin-node-externals": "^8.1.2", + "terser": "^5.46.0", "tslib": "^2.8.1", "tsx": "^4.21.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.1.5" }, "engines": { "node": ">=20.19.0" @@ -8342,19 +7191,15 @@ "webpack": "^5.105.4" }, "devDependencies": { - "@biomejs/biome": "^2.4.10", - "@types/chai": "^5.2.3", - "@types/mocha": "^10.0.10", - "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", + "@biomejs/biome": "^2.3.14", + "@types/node": "^25.2.2", "html-webpack-plugin": "^5.6.6", - "mocha": "^11.7.5", - "rimraf": "^6.1.3", + "rimraf": "^6.1.2", "tslib": "^2.8.1", "tsx": "^4.21.0", "typescript": "^5.9.3", - "webpack-cli": "^7.0.2" + "vitest": "^4.1.5", + "webpack-cli": "^6.0.1" }, "engines": { "node": ">=20.19.0" diff --git a/package.json b/package.json index 9026be2d0..5ba969f32 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,11 @@ "test": "npm run test --workspace=packages/alphatab", "build-web": "npm run build && npm run build-webpack && npm run build-vite", - "test-web": "npm run test && npm run test-webpack && npm run test-vite", + "test-web": "npm run test-web --workspaces --if-present", "build-csharp": "npm run generate-typescript && npm run build --workspace=packages/csharp", "test-csharp": "npm run test --workspace=packages/csharp", + "test-ci-csharp": "npm run test-ci --workspace=packages/csharp", "build-kotlin": "npm run generate-typescript && npm run build --workspace=packages/kotlin", "test-kotlin": "npm run test --workspace=packages/kotlin", diff --git a/packages/alphatab/.env b/packages/alphatab/.env deleted file mode 100644 index 33ccbd705..000000000 --- a/packages/alphatab/.env +++ /dev/null @@ -1,2 +0,0 @@ -FORCE_COLOR=1 -NODE_OPTIONS=--expose-gc \ No newline at end of file diff --git a/packages/alphatab/.mocharc.json b/packages/alphatab/.mocharc.json deleted file mode 100644 index 7956a6f58..000000000 --- a/packages/alphatab/.mocharc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extension": [ - "ts" - ], - "node-option": [ - "env-file=.env", - "experimental-specifier-resolution=node", - "import=tsx/esm", - "no-warnings" - ], - "spec": "test/**/*.test.ts", - "timeout": "10000", - "require": [ - "test/global-hooks.ts" - ] -} \ No newline at end of file diff --git a/packages/alphatab/package.json b/packages/alphatab/package.json index 5639429fc..10d1145c5 100644 --- a/packages/alphatab/package.json +++ b/packages/alphatab/package.json @@ -54,28 +54,23 @@ "bravura-smufl": "tsx scripts/smufl-metadata.ts font/bravura/bravura_metadata.json font/bravura/bravura_alphatab_metadata.json true", "generate-typescript": "rimraf src/generated && tsx scripts/generate-typescript.ts", "build": "npm run generate-typescript && vite build --mode esm && vite build --mode umd", - "test": "mocha", + "test": "vitest run", + "test-web": "npm run test", "test-accept-reference": "tsx scripts/accept-new-reference-files.ts" }, "devDependencies": { "@biomejs/biome": "^2.4.10", "@coderline/alphaskia": "^3.5.147", - "@coderline/alphaskia-linux": "^3.4.135", + "@coderline/alphaskia-linux": "^3.5.147", "@coderline/alphaskia-windows": "^3.5.147", - "@types/chai": "^5.2.3", - "@types/mocha": "^10.0.10", - "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", - "chalk": "^5.6.2", - "jest-snapshot": "^30.3.0", - "mocha": "^11.7.5", - "rimraf": "^6.1.3", + "@types/node": "^25.2.2", + "rimraf": "^6.1.2", "tslib": "^2.8.1", "tsx": "^4.21.0", "typescript": "^5.9.3", - "vite": "^7.3.2", - "vite-plugin-static-copy": "^3.3.0" + "vite": "^7.3.1", + "vite-plugin-static-copy": "^3.2.0", + "vitest": "^4.1.5" }, "files": [ "/dist/alphaTab*.js", diff --git a/packages/alphatab/scripts/EmitterBase.ts b/packages/alphatab/scripts/EmitterBase.ts index b8ff9df9c..f38fa3a95 100644 --- a/packages/alphatab/scripts/EmitterBase.ts +++ b/packages/alphatab/scripts/EmitterBase.ts @@ -65,7 +65,7 @@ export function generateClass( generate: (program: ts.Program, classDeclaration: ts.ClassDeclaration) => ts.SourceFile ) { const sourceFileName = path.relative( - path.resolve(path.dirname(program.getCompilerOptions().configFilePath as string), 'src'), + path.join(path.dirname(program.getCompilerOptions().configFilePath as string), 'src'), path.resolve(classDeclaration.getSourceFile().fileName) ); diff --git a/packages/alphatab/scripts/TypeSchema.ts b/packages/alphatab/scripts/TypeSchema.ts index 974b9c4b2..b5bb452e3 100644 --- a/packages/alphatab/scripts/TypeSchema.ts +++ b/packages/alphatab/scripts/TypeSchema.ts @@ -407,7 +407,7 @@ function findModule(type: ts.Type, options: ts.CompilerOptions) { for (const decl of type.symbol.declarations) { const file = decl.getSourceFile(); if (file) { - const relative = path.relative(path.join(path.dirname(options.configFilePath as string)), path.resolve(file.fileName)); + const relative = path.relative(path.dirname(options.configFilePath as string), path.resolve(file.fileName)); return toImportPath(relative); } } diff --git a/packages/alphatab/test/PrettyFormat.ts b/packages/alphatab/test/PrettyFormat.ts index 46eb805cb..f96c711b8 100644 --- a/packages/alphatab/test/PrettyFormat.ts +++ b/packages/alphatab/test/PrettyFormat.ts @@ -33,7 +33,7 @@ * @internal */ export class PrettyFormatConfig { - public escapeString: boolean = true; + public escapeString: boolean = false; public indent: string = ' '; public maxDepth: number = Number.POSITIVE_INFINITY; public maxWidth: number = Number.POSITIVE_INFINITY; @@ -166,7 +166,7 @@ export class PrettyFormat { return 'Uint32Array'; } if (Array.isArray(val)) { - return 'Array'; + return '_Array'; } if (val instanceof Set) { return 'Set'; @@ -200,7 +200,7 @@ export class PrettyFormat { return hitMaxDepth ? `[${arrayTypeName}]` : `${ - min ? '' : `${arrayTypeName} ` + min || arrayTypeName.startsWith('_') ? '' : `${arrayTypeName} ` }[${PrettyFormat.printIterableValues(TestPlatform.typedArrayAsUnknownIterable(val), config, indentation, depth, refs, PrettyFormat.printer)}]`; } diff --git a/packages/alphatab/test/audio/AlphaSynth.test.ts b/packages/alphatab/test/audio/AlphaSynth.test.ts index a75abe4de..82d2ad48d 100644 --- a/packages/alphatab/test/audio/AlphaSynth.test.ts +++ b/packages/alphatab/test/audio/AlphaSynth.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; import { AlphaSynthMidiFileHandler } from '@coderline/alphatab/midi/AlphaSynthMidiFileHandler'; @@ -17,7 +18,6 @@ import { AudioExportOptions } from '@coderline/alphatab/synth/IAudioExporter'; import { SynthConstants } from '@coderline/alphatab/synth/SynthConstants'; import { TinySoundFont } from '@coderline/alphatab/synth/synthesis/TinySoundFont'; import { VorbisFile } from '@coderline/alphatab/synth/vorbis/VorbisFile'; -import { assert, expect } from 'chai'; import { TestOutput } from 'test/audio/TestOutput'; import { TestPlatform } from 'test/TestPlatform'; @@ -69,12 +69,12 @@ describe('AlphaSynthTests', () => { synth.loadSoundFont(data, false); synth.loadMidiFile(midi); - expect(synth.isReadyForPlayback).to.be.true; - expect(synth.hasSamplesForProgram(24)).to.be.true; - expect(synth.hasSamplesForProgram(30)).to.be.true; - expect(synth.hasSamplesForProgram(1)).to.be.false; - expect(synth.hasSamplesForProgram(35)).to.be.false; - expect(synth.hasSamplesForPercussion(SynthConstants.MetronomeKey)).to.be.true; + expect(synth.isReadyForPlayback).toBe(true); + expect(synth.hasSamplesForProgram(24)).toBe(true); + expect(synth.hasSamplesForProgram(30)).toBe(true); + expect(synth.hasSamplesForProgram(1)).toBe(false); + expect(synth.hasSamplesForProgram(35)).toBe(false); + expect(synth.hasSamplesForPercussion(SynthConstants.MetronomeKey)).toBe(true); }); it('only-used-instruments-decoded-sf3', async () => { @@ -99,30 +99,30 @@ describe('AlphaSynthTests', () => { synth.loadSoundFont(data, false); synth.loadMidiFile(midi); - expect(synth.isReadyForPlayback).to.be.true; - expect(synth.hasSamplesForProgram(24)).to.be.true; - expect(synth.hasSamplesForProgram(30)).to.be.true; - expect(synth.hasSamplesForProgram(1)).to.be.false; - expect(synth.hasSamplesForProgram(35)).to.be.false; - expect(synth.hasSamplesForPercussion(SynthConstants.MetronomeKey)).to.be.true; + expect(synth.isReadyForPlayback).toBe(true); + expect(synth.hasSamplesForProgram(24)).toBe(true); + expect(synth.hasSamplesForProgram(30)).toBe(true); + expect(synth.hasSamplesForProgram(1)).toBe(false); + expect(synth.hasSamplesForProgram(35)).toBe(false); + expect(synth.hasSamplesForPercussion(SynthConstants.MetronomeKey)).toBe(true); }); async function testVorbisFile(name: string) { const data = await TestPlatform.loadFile(`test-data/audio/${name}.ogg`); const vorbis = new VorbisFile(ByteBuffer.fromBuffer(data)); - expect(vorbis.streams.length).to.equal(1); - expect(vorbis.streams[0].audioChannels).to.equal(2); - expect(vorbis.streams[0].audioSampleRate).to.equal(44100); - expect(vorbis.streams[0].samples.length).to.be.greaterThan(44100 * 0.05); + expect(vorbis.streams.length).toBe(1); + expect(vorbis.streams[0].audioChannels).toBe(2); + expect(vorbis.streams[0].audioSampleRate).toBe(44100); + expect(vorbis.streams[0].samples.length).toBeGreaterThan(44100 * 0.05); const generated = vorbis.streams[0].samples; const reference = new DataView((await TestPlatform.loadFile(`test-data/audio/${name}_alphaTab.pcm`)).buffer); try { - expect(generated.length).to.equal(reference.buffer.byteLength / 4); + expect(generated.length).toBe(reference.buffer.byteLength / 4); for (let i = 0; i < generated.length; i++) { - expect(generated[i]).to.equal(reference.getFloat32(i * 4, true), `Difference at index ${i}`); + expect(generated[i], `Difference at index ${i}`).toBe(reference.getFloat32(i * 4, true)); } } catch (e) { await TestPlatform.saveFile( @@ -138,7 +138,7 @@ describe('AlphaSynthTests', () => { await testVorbisFile('Short'); }); - it('ogg-vorbis-example', async () => { + it('ogg-vorbis-example', { timeout: 30000 }, async () => { await testVorbisFile('Example'); }); @@ -212,13 +212,13 @@ describe('AlphaSynthTests', () => { try { const reference = new DataView((await TestPlatform.loadFile(`test-data/audio/${fileName}.pcm`)).buffer); - expect(generated.length).to.equal(reference.buffer.byteLength / 4); + expect(generated.length).toBe(reference.buffer.byteLength / 4); for (let i = 0; i < generated.length; i++) { const expected = reference.getFloat32(i * 4, true); if (generated[i] !== expected) { // custom check, chai assertion has quite huge overhead if called that often - expect(generated[i]).to.equal(expected, `Difference at index ${i}`); + expect(generated[i], `Difference at index ${i}`).toBe(expected); } } } catch (e) { @@ -320,22 +320,22 @@ describe('AlphaSynthTests', () => { } playTo(0); - expect(synth.channelGetPresetBank(0)).to.equal(77); - expect(synth.channelGetPresetBank(1)).to.equal(77); - expect(synth.channelGetPresetBank(2)).to.equal(50); - expect(synth.channelGetPresetBank(3)).to.equal(50); + expect(synth.channelGetPresetBank(0)).toBe(77); + expect(synth.channelGetPresetBank(1)).toBe(77); + expect(synth.channelGetPresetBank(2)).toBe(50); + expect(synth.channelGetPresetBank(3)).toBe(50); playTo(3840); - expect(synth.channelGetPresetBank(0)).to.equal(1000); - expect(synth.channelGetPresetBank(1)).to.equal(1000); - expect(synth.channelGetPresetBank(2)).to.equal(50); - expect(synth.channelGetPresetBank(3)).to.equal(50); + expect(synth.channelGetPresetBank(0)).toBe(1000); + expect(synth.channelGetPresetBank(1)).toBe(1000); + expect(synth.channelGetPresetBank(2)).toBe(50); + expect(synth.channelGetPresetBank(3)).toBe(50); playTo(3840 * 2); - expect(synth.channelGetPresetBank(0)).to.equal(1000); - expect(synth.channelGetPresetBank(1)).to.equal(1000); - expect(synth.channelGetPresetBank(2)).to.equal(4000); - expect(synth.channelGetPresetBank(3)).to.equal(4000); + expect(synth.channelGetPresetBank(0)).toBe(1000); + expect(synth.channelGetPresetBank(1)).toBe(1000); + expect(synth.channelGetPresetBank(2)).toBe(4000); + expect(synth.channelGetPresetBank(3)).toBe(4000); }); async function testPlaythrough(midi: MidiFile) { @@ -355,7 +355,7 @@ describe('AlphaSynthTests', () => { while (!finished) { const now = Date.now(); if (now - start > 2000) { - assert.fail(`play did not complete after ${2000}ms`); + throw new Error(`play did not complete after ${2000}ms`); } testOutput.next(); } @@ -364,7 +364,7 @@ describe('AlphaSynthTests', () => { it('small-tempos', async () => { const score = ScoreLoader.loadScoreFromBytes(await TestPlatform.loadFile('test-data/audio/small-tempo.xml')); - expect(score.masterBars[0].tempoAutomations[0].value).to.equal(0.111); + expect(score.masterBars[0].tempoAutomations[0].value).toBe(0.111); const midi = new MidiFile(); const handler = new AlphaSynthMidiFileHandler(midi); @@ -372,8 +372,8 @@ describe('AlphaSynthTests', () => { generator.generate(); const tempoChange: MidiEvent[] = midi.events.filter(e => e instanceof TempoChangeEvent); - expect(tempoChange.length).to.equal(1); - expect((tempoChange[0] as TempoChangeEvent).beatsPerMinute).to.equal(0.111); + expect(tempoChange.length).toBe(1); + expect((tempoChange[0] as TempoChangeEvent).beatsPerMinute).toBe(0.111); await testPlaythrough(midi); }); @@ -381,7 +381,7 @@ describe('AlphaSynthTests', () => { it('zero-tempo', async () => { const score = ScoreLoader.loadScoreFromBytes(await TestPlatform.loadFile('test-data/audio/small-tempo.xml')); - expect(score.masterBars[0].tempoAutomations[0].value).to.equal(0.111); + expect(score.masterBars[0].tempoAutomations[0].value).toBe(0.111); score.masterBars[0].tempoAutomations[0].value = 0; const midi = new MidiFile(); @@ -390,8 +390,8 @@ describe('AlphaSynthTests', () => { generator.generate(); const tempoChange: MidiEvent[] = midi.events.filter(e => e instanceof TempoChangeEvent); - expect(tempoChange.length).to.equal(1); - expect((tempoChange[0] as TempoChangeEvent).beatsPerMinute).to.equal(0); + expect(tempoChange.length).toBe(1); + expect((tempoChange[0] as TempoChangeEvent).beatsPerMinute).toBe(0); await testPlaythrough(midi); }); diff --git a/packages/alphatab/test/audio/MidiFileGenerator.test.ts b/packages/alphatab/test/audio/MidiFileGenerator.test.ts index b2d553a0d..9ade098c5 100644 --- a/packages/alphatab/test/audio/MidiFileGenerator.test.ts +++ b/packages/alphatab/test/audio/MidiFileGenerator.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { Gp3To5Importer } from '@coderline/alphatab/importer/Gp3To5Importer'; import { Gp7To8Importer } from '@coderline/alphatab/importer/Gp7To8Importer'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; @@ -31,7 +32,6 @@ import { AlphaSynth } from '@coderline/alphatab/synth/AlphaSynth'; import { AlphaSynthWrapper } from '@coderline/alphatab/synth/AlphaSynthWrapper'; import { PlaybackRange } from '@coderline/alphatab/synth/PlaybackRange'; import type { PositionChangedEventArgs } from '@coderline/alphatab/synth/PositionChangedEventArgs'; -import { expect } from 'chai'; import { FlatControlChangeEvent, type FlatMidiEvent, @@ -59,13 +59,12 @@ describe('MidiFileGeneratorTest', () => { for (let i: number = 0; i < actualEvents.length; i++) { Logger.info('Test', `i[${i}] ${actualEvents[i]}`); if (i < expectedEvents.length) { - expect(expectedEvents[i].equals(actualEvents[i])).to.equal( - true, - `i[${i}] expected[${expectedEvents[i]}] !== actual[${actualEvents[i]}]` + expect(expectedEvents[i].equals(actualEvents[i]), `i[${i}] expected[${expectedEvents[i]}] !== actual[${actualEvents[i]}]`).toBe( + true ); } } - expect(actualEvents.length).to.equal(expectedEvents.length); + expect(actualEvents.length).toBe(expectedEvents.length); }; it('full-song', async () => { @@ -84,22 +83,22 @@ describe('MidiFileGeneratorTest', () => { midiFile.addEvent(new NoteOnEvent(0, 100, 0, 2, 0)); midiFile.addEvent(new NoteOnEvent(0, 50, 0, 3, 0)); midiFile.addEvent(new NoteOnEvent(0, 50, 0, 4, 0)); - expect((midiFile.tracks[0].events[0] as NoteOnEvent).noteKey).to.equal(0); - expect((midiFile.tracks[0].events[1] as NoteOnEvent).noteKey).to.equal(1); - expect((midiFile.tracks[0].events[2] as NoteOnEvent).noteKey).to.equal(3); - expect((midiFile.tracks[0].events[3] as NoteOnEvent).noteKey).to.equal(4); - expect((midiFile.tracks[0].events[4] as NoteOnEvent).noteKey).to.equal(2); + expect((midiFile.tracks[0].events[0] as NoteOnEvent).noteKey).toBe(0); + expect((midiFile.tracks[0].events[1] as NoteOnEvent).noteKey).toBe(1); + expect((midiFile.tracks[0].events[2] as NoteOnEvent).noteKey).toBe(3); + expect((midiFile.tracks[0].events[3] as NoteOnEvent).noteKey).toBe(4); + expect((midiFile.tracks[0].events[4] as NoteOnEvent).noteKey).toBe(2); }); it('bend', () => { const tex: string = ':4 15.6{b(0 4)} 15.6'; const score: Score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.tracks[0].staves[0].bars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).to.equal(1); + expect(score.tracks.length).toBe(1); + expect(score.tracks[0].staves[0].bars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).toBe(1); const handler: FlatMidiEventGenerator = new FlatMidiEventGenerator(); const generator: MidiFileGenerator = new MidiFileGenerator(score, null, handler); generator.generate(); @@ -188,39 +187,39 @@ describe('MidiFileGeneratorTest', () => { // on beat let tick: number = 0; const ticks: number[] = []; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].absolutePlaybackStart).to.equal(tick); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].playbackDuration).to.equal(3840); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].absolutePlaybackStart).toBe(tick); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].playbackDuration).toBe(3840); ticks.push(tick); tick += score.tracks[0].staves[0].bars[0].voices[0].beats[0].playbackDuration; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].absolutePlaybackStart).to.equal(tick); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].playbackDuration).to.equal(120); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].absolutePlaybackStart).toBe(tick); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].playbackDuration).toBe(120); ticks.push(tick); tick += score.tracks[0].staves[0].bars[1].voices[0].beats[0].playbackDuration; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].absolutePlaybackStart).to.equal(tick); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].playbackDuration).to.equal(3720); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].absolutePlaybackStart).toBe(tick); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].playbackDuration).toBe(3720); ticks.push(tick); tick += score.tracks[0].staves[0].bars[1].voices[0].beats[1].playbackDuration; // before beat - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].absolutePlaybackStart).to.equal(tick); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].playbackDuration).to.equal(3720); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].absolutePlaybackStart).toBe(tick); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].playbackDuration).toBe(3720); ticks.push(tick); tick += score.tracks[0].staves[0].bars[2].voices[0].beats[0].playbackDuration; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].absolutePlaybackStart).to.equal(tick); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].playbackDuration).to.equal(120); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].absolutePlaybackStart).toBe(tick); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].playbackDuration).toBe(120); ticks.push(tick); tick += score.tracks[0].staves[0].bars[3].voices[0].beats[0].playbackDuration; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].absolutePlaybackStart).to.equal(tick); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].playbackDuration).to.equal(3840); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].absolutePlaybackStart).toBe(tick); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].playbackDuration).toBe(3840); ticks.push(tick); tick += score.tracks[0].staves[0].bars[3].voices[0].beats[1].playbackDuration; // bend - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].graceType).to.equal(GraceType.BendGrace); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].absolutePlaybackStart).to.equal(tick); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].playbackDuration).to.equal(1920); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].graceType).toBe(GraceType.BendGrace); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].absolutePlaybackStart).toBe(tick); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].playbackDuration).toBe(1920); ticks.push(tick); tick += score.tracks[0].staves[0].bars[4].voices[0].beats[0].playbackDuration; - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[1].absolutePlaybackStart).to.equal(tick); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[1].playbackDuration).to.equal(1920); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[1].absolutePlaybackStart).toBe(tick); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[1].playbackDuration).toBe(1920); ticks.push(tick); tick += score.tracks[0].staves[0].bars[4].voices[0].beats[1].playbackDuration; const info: PlaybackInformation = score.tracks[0].playbackInfo; @@ -299,12 +298,12 @@ describe('MidiFileGeneratorTest', () => { it('bend-multi-point', () => { const tex: string = ':4 15.6{b(0 4 0)} 15.6'; const score: Score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.tracks[0].staves[0].bars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).to.equal(1); + expect(score.tracks.length).toBe(1); + expect(score.tracks[0].staves[0].bars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).toBe(1); const handler: FlatMidiEventGenerator = new FlatMidiEventGenerator(); const generator: MidiFileGenerator = new MidiFileGenerator(score, null, handler); generator.generate(); @@ -637,8 +636,8 @@ describe('MidiFileGeneratorTest', () => { actualPlaybackDurations.push(beat.playbackDuration); beat = beat.nextBeat; } - expect(actualPlaybackStartTimes.join(',')).to.equal(expectedPlaybackStartTimes.join(',')); - expect(actualPlaybackDurations.join(',')).to.equal(expectedPlaybackDurations.join(',')); + expect(actualPlaybackStartTimes.join(',')).toBe(expectedPlaybackStartTimes.join(',')); + expect(actualPlaybackDurations.join(',')).toBe(expectedPlaybackDurations.join(',')); // prettier-ignore const expectedMidiStartTimes: number[] = [ 0, 640, 960, 1600, 1920, 2240, 2400, 2720, 2880, 3200, 3360, 3680, 3840, 4560, 4800, 5520, 5760, 6120, 6240, @@ -661,19 +660,19 @@ describe('MidiFileGeneratorTest', () => { actualMidiDurations.push(midiEvent.length); } } - expect(actualMidiStartTimes.join(',')).to.equal(expectedMidiStartTimes.join(',')); - expect(actualMidiDurations.join(',')).to.equal(expectedMidiDurations.join(',')); + expect(actualMidiStartTimes.join(',')).toBe(expectedMidiStartTimes.join(',')); + expect(actualMidiDurations.join(',')).toBe(expectedMidiDurations.join(',')); }); it('beat-multi-bend', () => { const tex: string = ':4 (15.6{b(0 4)} 14.6{b(0 8)}) 15.6'; const score: Score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.tracks[0].staves[0].bars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).to.equal(1); + expect(score.tracks.length).toBe(1); + expect(score.tracks[0].staves[0].bars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).toBe(1); const handler: FlatMidiEventGenerator = new FlatMidiEventGenerator(); const generator: MidiFileGenerator = new MidiFileGenerator(score, null, handler); generator.generate(); @@ -792,8 +791,8 @@ describe('MidiFileGeneratorTest', () => { it('tied-vibrato', () => { const tex: string = '3.3{v}.4 -.3{v}.4'; const score: Score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].vibrato).to.equal(VibratoType.Slight); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isTieDestination).to.be.true; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].vibrato).toBe(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isTieDestination).toBe(true); score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].vibrato = VibratoType.None; const handler: FlatMidiEventGenerator = new FlatMidiEventGenerator(); const settings = new Settings(); @@ -1190,7 +1189,7 @@ describe('MidiFileGeneratorTest', () => { it('full-bar-rest', () => { const tex: string = '\\ts 3 4 3.3.4 3.3.4 3.3.4 | r.1 | 3.3.4 3.3.4 3.3.4'; const score: Score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].isFullBarRest).to.be.true; + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].isFullBarRest).toBe(true); const expectedNoteOnTimes: number[] = [ 0 * MidiUtils.QuarterTime, // note 1 @@ -1208,7 +1207,7 @@ describe('MidiFileGeneratorTest', () => { beat = beat.nextBeat; } - expect(noteOnTimes.join(',')).to.equal(expectedNoteOnTimes.join(',')); + expect(noteOnTimes.join(',')).toBe(expectedNoteOnTimes.join(',')); const handler: FlatMidiEventGenerator = new FlatMidiEventGenerator(); const generator: MidiFileGenerator = new MidiFileGenerator(score, null, handler); @@ -1221,7 +1220,7 @@ describe('MidiFileGeneratorTest', () => { noteOnTimes.push(evt.tick); } } - expect(noteOnTimes.join(',')).to.equal(expectedNoteOnTimes.join(',')); + expect(noteOnTimes.join(',')).toBe(expectedNoteOnTimes.join(',')); }); it('time-signature', () => { @@ -1241,21 +1240,21 @@ describe('MidiFileGeneratorTest', () => { } } - expect(timeSignature).to.be.ok; + expect(timeSignature).toBeTruthy(); const meta: TimeSignatureEvent = timeSignature as TimeSignatureEvent; const timeSignatureNumerator: number = meta.numerator; const timeSignatureDenominator: number = Math.pow(2, meta.denominatorIndex); - expect(timeSignatureNumerator).to.equal(3); - expect(timeSignatureDenominator).to.equal(4); + expect(timeSignatureNumerator).toBe(3); + expect(timeSignatureDenominator).toBe(4); }); it('first-bar-tempo', () => { const tex: string = '\\tempo 120 . \\tempo 60 3.3*4 | \\tempo 80 3.3*4'; const score: Score = parseTex(tex); - expect(score.tempo).to.be.equal(60); - expect(score.masterBars[0].tempoAutomations.length).to.equal(1); - expect(score.masterBars[0].tempoAutomations[0]!.value).to.be.equal(60); + expect(score.tempo).toBe(60); + expect(score.masterBars[0].tempoAutomations.length).toBe(1); + expect(score.masterBars[0].tempoAutomations[0]!.value).toBe(60); const handler: FlatMidiEventGenerator = new FlatMidiEventGenerator(); const generator: MidiFileGenerator = new MidiFileGenerator(score, null, handler); @@ -1268,8 +1267,8 @@ describe('MidiFileGeneratorTest', () => { } } - expect(tempoChanges.map(t => t.tick).join(',')).to.be.equal('0,3840'); - expect(tempoChanges.map(t => t.tempo).join(',')).to.be.equal('60,80'); + expect(tempoChanges.map(t => t.tick).join(',')).toBe('0,3840'); + expect(tempoChanges.map(t => t.tempo).join(',')).toBe('60,80'); }); it('has-valid-dynamics', () => { @@ -1280,12 +1279,12 @@ describe('MidiFileGeneratorTest', () => { const note1: Note = score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0]; const note2: Note = score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0]; // First note has already highest dynamics which is increased due to accentuation - expect(note1.dynamics).to.be.equal(DynamicValue.FFF); - expect(note1.accentuated).to.be.equal(AccentuationType.Normal); + expect(note1.dynamics).toBe(DynamicValue.FFF); + expect(note1.accentuated).toBe(AccentuationType.Normal); // Second note has lowest dynamics which is decreased due to ghost note - expect(note2.dynamics).to.be.equal(DynamicValue.PPP); - expect(note2.isGhost).to.be.true; + expect(note2.dynamics).toBe(DynamicValue.PPP); + expect(note2.isGhost).toBe(true); const expectedEvents: FlatMidiEvent[] = [ // channel init @@ -1352,10 +1351,10 @@ describe('MidiFileGeneratorTest', () => { millisDuration: number ) { const res = tickLookup.findBeat(new Set([0]), tick); - expect(res).to.be.ok; - expect(res!.beat.notes[0].fret).to.equal(fret); - expect(res!.tickDuration).to.equal(tickDuration); - expect(res!.duration).to.equal(millisDuration); + expect(res).toBeTruthy(); + expect(res!.beat.notes[0].fret).toBe(fret); + expect(res!.tickDuration).toBe(tickDuration); + expect(res!.duration).toBe(millisDuration); } it('beat-tempo-change', async () => { @@ -1386,8 +1385,8 @@ describe('MidiFileGeneratorTest', () => { } } - expect(tempoChanges.map(t => t.tick).join(',')).to.be.equal('0,1920,3840,6288,7680,9120,11520,12960,15120'); - expect(tempoChanges.map(t => t.tempo).join(',')).to.be.equal('120,60,100,120,121,120,121,120,121'); + expect(tempoChanges.map(t => t.tick).join(',')).toBe('0,1920,3840,6288,7680,9120,11520,12960,15120'); + expect(tempoChanges.map(t => t.tempo).join(',')).toBe('120,60,100,120,121,120,121,120,121'); const tickLookup = generator.tickLookup; @@ -1413,8 +1412,8 @@ describe('MidiFileGeneratorTest', () => { const tempoChangeTick = score.masterBars[1].start + score.masterBars[1].calculateDuration() * score.masterBars[1].tempoAutomations[1].ratioPosition; - expect(tempoChangeTick - beatStart).to.equal(528); - expect(beatEnd - tempoChangeTick).to.equal(432); + expect(tempoChangeTick - beatStart).toBe(528); + expect(beatEnd - tempoChangeTick).toBe(432); const firstPartMillis = MidiUtils.ticksToMillis(tempoChangeTick - beatStart, 100); const secondPartMillis = MidiUtils.ticksToMillis(beatEnd - tempoChangeTick, 120); @@ -1762,7 +1761,7 @@ describe('MidiFileGeneratorTest', () => { const expectedTimers: number[] = [0, 2000, 4000, 6000, 8000, 16000, 26000, 28000, -1]; - expect(actualTimers.join(',')).to.equal(expectedTimers.join(',')); + expect(actualTimers.join(',')).toBe(expectedTimers.join(',')); }); it('beat-timer-tempo-changes', () => { @@ -1785,8 +1784,8 @@ describe('MidiFileGeneratorTest', () => { // no timers at start let b: Beat | null = score.tracks[0].staves[0].bars[0].voices[0].beats[0]; while (b !== null) { - expect(b.showTimer).to.be.true; - expect(b.timer).to.equal(null); + expect(b.showTimer).toBe(true); + expect(b.timer).toBe(null); b = b.nextBeat; } @@ -1809,7 +1808,7 @@ describe('MidiFileGeneratorTest', () => { 2000, 3000, 3500, 3625, 3875 ]; - expect(actualTimers.join(',')).to.equal(expectedTimers.join(',')); + expect(actualTimers.join(',')).toBe(expectedTimers.join(',')); }); it('transpose', () => { @@ -1823,36 +1822,36 @@ describe('MidiFileGeneratorTest', () => { \\transpose 12 r.1 | r.1 | C4.4 `); - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(0); - expect(score.tracks[0].staves[0].transpositionPitch).to.equal(0); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(0); + expect(score.tracks[0].staves[0].transpositionPitch).toBe(0); - expect(score.tracks[1].staves[0].displayTranspositionPitch).to.equal(-12); - expect(score.tracks[1].staves[0].transpositionPitch).to.equal(0); + expect(score.tracks[1].staves[0].displayTranspositionPitch).toBe(-12); + expect(score.tracks[1].staves[0].transpositionPitch).toBe(0); - expect(score.tracks[2].staves[0].displayTranspositionPitch).to.equal(0); - expect(score.tracks[2].staves[0].transpositionPitch).to.equal(-12); + expect(score.tracks[2].staves[0].displayTranspositionPitch).toBe(0); + expect(score.tracks[2].staves[0].transpositionPitch).toBe(-12); const handler: FlatMidiEventGenerator = new FlatMidiEventGenerator(); const generator: MidiFileGenerator = new MidiFileGenerator(score, null, handler); generator.generate(); - expect(generator.transpositionPitches.has(0)).to.be.true; - expect(generator.transpositionPitches.get(0)!).to.equal(0); + expect(generator.transpositionPitches.has(0)).toBe(true); + expect(generator.transpositionPitches.get(0)!).toBeCloseTo(0); - expect(generator.transpositionPitches.has(1)).to.be.true; - expect(generator.transpositionPitches.get(1)!).to.equal(0); + expect(generator.transpositionPitches.has(1)).toBe(true); + expect(generator.transpositionPitches.get(1)!).toBeCloseTo(0); - expect(generator.transpositionPitches.has(2)).to.be.true; - expect(generator.transpositionPitches.get(2)!).to.equal(0); + expect(generator.transpositionPitches.has(2)).toBe(true); + expect(generator.transpositionPitches.get(2)!).toBeCloseTo(0); - expect(generator.transpositionPitches.has(3)).to.be.true; - expect(generator.transpositionPitches.get(3)!).to.equal(0); + expect(generator.transpositionPitches.has(3)).toBe(true); + expect(generator.transpositionPitches.get(3)!).toBeCloseTo(0); - expect(generator.transpositionPitches.has(4)).to.be.true; - expect(generator.transpositionPitches.get(4)!).to.equal(12); + expect(generator.transpositionPitches.has(4)).toBe(true); + expect(generator.transpositionPitches.get(4)!).toBe(12); - expect(generator.transpositionPitches.has(5)).to.be.true; - expect(generator.transpositionPitches.get(5)!).to.equal(12); + expect(generator.transpositionPitches.has(5)).toBe(true); + expect(generator.transpositionPitches.get(5)!).toBe(12); }); it('tickshift-flat', () => { @@ -1864,9 +1863,9 @@ describe('MidiFileGeneratorTest', () => { const generator = new MidiFileGenerator(score, null, handler); generator.generate(); - expect(handler.tickShift).to.equal(120); + expect(handler.tickShift).toBe(120); const firstNote = handler.midiEvents.find(e => e instanceof FlatNoteEvent) as FlatNoteEvent; - expect(firstNote.tick).to.equal(-120); + expect(firstNote.tick).toBe(-120); }); it('tickshift-synth', () => { @@ -1879,9 +1878,9 @@ describe('MidiFileGeneratorTest', () => { const generator = new MidiFileGenerator(score, null, handler); generator.generate(); - expect(handler.tickShift).to.equal(120); + expect(handler.tickShift).toBe(120); const firstNote = file.events.find(e => e instanceof NoteOnEvent) as NoteOnEvent; - expect(firstNote.tick).to.equal(0); + expect(firstNote.tick).toBe(0); }); it('synthwrapper-mapping', () => { @@ -1908,24 +1907,24 @@ describe('MidiFileGeneratorTest', () => { // check API -> Player mappings wrapper.tickPosition = -120; - expect(synth.tickPosition).to.equal(tickImprecision); + expect(synth.tickPosition).toBe(tickImprecision); wrapper.tickPosition = 0; - expect(synth.tickPosition).to.equal(120 + tickImprecision); + expect(synth.tickPosition).toBe(120 + tickImprecision); const range = new PlaybackRange(); range.startTick = 960; range.endTick = 1920; wrapper.playbackRange = range; - expect(synth.playbackRange!.startTick).to.equal(range.startTick + handler.tickShift); - expect(synth.playbackRange!.endTick).to.equal(range.endTick + handler.tickShift); + expect(synth.playbackRange!.startTick).toBe(range.startTick + handler.tickShift); + expect(synth.playbackRange!.endTick).toBe(range.endTick + handler.tickShift); // check API <- Player mappings wrapper.stop(); - expect(wrapper.tickPosition).to.equal(range.startTick + tickImprecision); - expect(wrapper.loadedMidiInfo!.endTick).to.equal(3840); - expect(wrapper.playbackRange!.startTick).to.equal(range.startTick); - expect(wrapper.playbackRange!.endTick).to.equal(range.endTick); + expect(wrapper.tickPosition).toBe(range.startTick + tickImprecision); + expect(wrapper.loadedMidiInfo!.endTick).toBe(3840); + expect(wrapper.playbackRange!.startTick).toBe(range.startTick); + expect(wrapper.playbackRange!.endTick).toBe(range.endTick); wrapper.playbackRange = null; let lastArgs: PositionChangedEventArgs | null = null; @@ -1933,8 +1932,8 @@ describe('MidiFileGeneratorTest', () => { lastArgs = e; }); wrapper.tickPosition = 0; - expect(lastArgs!.currentTick).to.equal(tickImprecision); - expect(synth.tickPosition).to.equal(handler.tickShift + tickImprecision); + expect(lastArgs!.currentTick).toBe(tickImprecision); + expect(synth.tickPosition).toBe(handler.tickShift + tickImprecision); }); describe('effect-note-durations', () => { diff --git a/packages/alphatab/test/audio/MidiPlaybackController.test.ts b/packages/alphatab/test/audio/MidiPlaybackController.test.ts index 4551f28ae..ad687a74b 100644 --- a/packages/alphatab/test/audio/MidiPlaybackController.test.ts +++ b/packages/alphatab/test/audio/MidiPlaybackController.test.ts @@ -1,10 +1,9 @@ +import { describe, expect, it } from 'vitest'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { Logger } from '@coderline/alphatab/Logger'; import { MidiPlaybackController } from '@coderline/alphatab/midi/MidiPlaybackController'; import type { Score } from '@coderline/alphatab/model/Score'; import { GpImporterTestHelper } from 'test/importer/GpImporterTestHelper'; -import { assert, expect } from 'chai'; - describe('MidiPlaybackControllerTest', () => { function testRepeat(score: Score, expectedIndexes: number[], maxBars: number): void { const controller: MidiPlaybackController = new MidiPlaybackController(score); @@ -16,7 +15,7 @@ describe('MidiPlaybackControllerTest', () => { controller.processCurrent(); if (controller.shouldPlay) { if (i > maxBars) { - assert.fail('Too many bars generated'); + throw new Error('Too many bars generated'); } Logger.debug('Test', `Checking index ${i}, expected[${expectedIndexes[i]}]`, i, expectedIndexes[i]); if (index !== expectedIndexes[i]) { @@ -28,14 +27,14 @@ describe('MidiPlaybackControllerTest', () => { controller.moveNext(); } if (errors.length > 0) { - assert.fail( + throw new Error( `Sequence errors: ${errors.join(', ')}, Expected: [${expectedIndexes.join( ', ' )}], Actual: [${actual.join(', ')}]` ); } - expect(i).to.equal(expectedIndexes.length); - expect(controller.finished).to.be.equal(true); + expect(i).toBe(expectedIndexes.length); + expect(controller.finished).toBe(true); } async function testGuitarProRepeat(file: string, expectedBars: number[], maxBars: number): Promise { diff --git a/packages/alphatab/test/audio/MidiTickLookup.test.ts b/packages/alphatab/test/audio/MidiTickLookup.test.ts index 6e537abdd..70e479ae7 100644 --- a/packages/alphatab/test/audio/MidiTickLookup.test.ts +++ b/packages/alphatab/test/audio/MidiTickLookup.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; import { Logger } from '@coderline/alphatab/Logger'; @@ -23,7 +24,6 @@ import { Track } from '@coderline/alphatab/model/Track'; import { Voice } from '@coderline/alphatab/model/Voice'; import { Settings } from '@coderline/alphatab/Settings'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; import { PlaybackRange } from '@coderline/alphatab/synth/PlaybackRange'; describe('MidiTickLookupTest', () => { @@ -48,11 +48,11 @@ describe('MidiTickLookupTest', () => { const nb = new Beat(); lookup.addBeat(nb, 0, MidiUtils.QuarterTime); - expect(masterBarLookup.firstBeat).to.be.ok; - expect(masterBarLookup.firstBeat!.start).to.equal(0); - expect(masterBarLookup.firstBeat!.end).to.equal(MidiUtils.QuarterTime); - expect(masterBarLookup.firstBeat!.highlightedBeats.length).to.equal(1); - expect(masterBarLookup.firstBeat!.highlightedBeats[0].beat).to.equal(nb); + expect(masterBarLookup.firstBeat).toBeTruthy(); + expect(masterBarLookup.firstBeat!.start).toBe(0); + expect(masterBarLookup.firstBeat!.end).toBe(MidiUtils.QuarterTime); + expect(masterBarLookup.firstBeat!.highlightedBeats.length).toBe(1); + expect(masterBarLookup.firstBeat!.highlightedBeats[0].beat).toBe(nb); }); function prepareVariantTest(): MidiTickLookup { @@ -68,17 +68,17 @@ describe('MidiTickLookupTest', () => { lookup.addBeat(new Beat(), MidiUtils.QuarterTime * 0, MidiUtils.QuarterTime); lookup.addBeat(new Beat(), MidiUtils.QuarterTime * 1, MidiUtils.QuarterTime); - expect(masterBarLookup.firstBeat).to.be.ok; - expect(masterBarLookup.firstBeat!.start).to.equal(0); - expect(masterBarLookup.firstBeat!.end).to.equal(MidiUtils.QuarterTime); - expect(masterBarLookup.firstBeat!.highlightedBeats.length).to.equal(1); + expect(masterBarLookup.firstBeat).toBeTruthy(); + expect(masterBarLookup.firstBeat!.start).toBe(0); + expect(masterBarLookup.firstBeat!.end).toBe(MidiUtils.QuarterTime); + expect(masterBarLookup.firstBeat!.highlightedBeats.length).toBe(1); - expect(masterBarLookup.lastBeat).to.be.ok; - expect(masterBarLookup.lastBeat!.start).to.equal(MidiUtils.QuarterTime); - expect(masterBarLookup.lastBeat!.end).to.equal(2 * MidiUtils.QuarterTime); - expect(masterBarLookup.lastBeat!.highlightedBeats.length).to.equal(1); + expect(masterBarLookup.lastBeat).toBeTruthy(); + expect(masterBarLookup.lastBeat!.start).toBe(MidiUtils.QuarterTime); + expect(masterBarLookup.lastBeat!.end).toBe(2 * MidiUtils.QuarterTime); + expect(masterBarLookup.lastBeat!.highlightedBeats.length).toBe(1); - expect(masterBarLookup.firstBeat!.nextBeat).to.equal(masterBarLookup.lastBeat); + expect(masterBarLookup.firstBeat!.nextBeat).toBe(masterBarLookup.lastBeat); return lookup; } @@ -94,14 +94,14 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.lastBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(nb); - expect(n1.start).to.equal(MidiUtils.QuarterTime * 2); - expect(n1.end).to.equal(MidiUtils.QuarterTime * 3); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(nb); + expect(n1.start).toBe(MidiUtils.QuarterTime * 2); + expect(n1.end).toBe(MidiUtils.QuarterTime * 3); - expect(l1).to.equal(masterBar.firstBeat!); - expect(l1.nextBeat).to.equal(l2); - expect(l2.nextBeat).to.equal(n1); + expect(l1).toBe(masterBar.firstBeat!); + expect(l1.nextBeat).toBe(l2); + expect(l2.nextBeat).toBe(n1); }); it('variant-c', () => { @@ -115,15 +115,15 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.lastBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(nb); - expect(n1.start).to.equal(MidiUtils.QuarterTime * 2); - expect(n1.end).to.equal(MidiUtils.QuarterTime * 4); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(nb); + expect(n1.start).toBe(MidiUtils.QuarterTime * 2); + expect(n1.end).toBe(MidiUtils.QuarterTime * 4); - expect(l1).to.equal(masterBar.firstBeat!); - expect(l1.nextBeat).to.equal(l2); - expect(l2.nextBeat).to.equal(n1); - expect(n1).to.equal(masterBar.lastBeat!); + expect(l1).toBe(masterBar.firstBeat!); + expect(l1.nextBeat).toBe(l2); + expect(l2.nextBeat).toBe(n1); + expect(n1).toBe(masterBar.lastBeat!); }); it('variant-d', () => { @@ -137,15 +137,15 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(nb); - expect(n1.start).to.equal(-MidiUtils.QuarterTime); - expect(n1.end).to.equal(0); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(nb); + expect(n1.start).toBe(-MidiUtils.QuarterTime); + expect(n1.end).toBe(0); - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-e', () => { @@ -159,15 +159,15 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(nb); - expect(n1.start).to.equal(-MidiUtils.QuarterTime * 2); - expect(n1.end).to.equal(0); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(nb); + expect(n1.start).toBe(-MidiUtils.QuarterTime * 2); + expect(n1.end).toBe(0); - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-f', () => { @@ -182,26 +182,26 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; const n2 = n1.nextBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(nb); - expect(n1.start).to.equal(-MidiUtils.QuarterTime * 0.5); - expect(n1.end).to.equal(0); - - expect(n2.highlightedBeats.length).to.equal(2); - expect(n2.highlightedBeats[0].beat).to.equal(l1.highlightedBeats[0].beat); - expect(n2.highlightedBeats[1].beat).to.equal(nb); - expect(n2.start).to.equal(0); - expect(n2.end).to.equal(MidiUtils.QuarterTime * 0.5); - - expect(l1.highlightedBeats.length).to.equal(1); - expect(l1.start).to.equal(MidiUtils.QuarterTime * 0.5); - expect(l1.end).to.equal(MidiUtils.QuarterTime); - - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(n2); - expect(n2.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(nb); + expect(n1.start).toBe(-MidiUtils.QuarterTime * 0.5); + expect(n1.end).toBe(0); + + expect(n2.highlightedBeats.length).toBe(2); + expect(n2.highlightedBeats[0].beat).toBe(l1.highlightedBeats[0].beat); + expect(n2.highlightedBeats[1].beat).toBe(nb); + expect(n2.start).toBe(0); + expect(n2.end).toBe(MidiUtils.QuarterTime * 0.5); + + expect(l1.highlightedBeats.length).toBe(1); + expect(l1.start).toBe(MidiUtils.QuarterTime * 0.5); + expect(l1.end).toBe(MidiUtils.QuarterTime); + + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(n2); + expect(n2.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-g', () => { @@ -215,20 +215,20 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(nb); - expect(n1.start).to.equal(-MidiUtils.QuarterTime); - expect(n1.end).to.equal(0); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(nb); + expect(n1.start).toBe(-MidiUtils.QuarterTime); + expect(n1.end).toBe(0); - expect(l1.highlightedBeats.length).to.equal(2); - expect(l1.highlightedBeats[1].beat).to.equal(nb); - expect(l1.start).to.equal(0); - expect(l1.end).to.equal(MidiUtils.QuarterTime); + expect(l1.highlightedBeats.length).toBe(2); + expect(l1.highlightedBeats[1].beat).toBe(nb); + expect(l1.start).toBe(0); + expect(l1.end).toBe(MidiUtils.QuarterTime); - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-h-variant-m', () => { @@ -243,31 +243,31 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; const n2 = l1.nextBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(nb); - expect(n1.start).to.equal(-MidiUtils.QuarterTime); - expect(n1.end).to.equal(0); - - expect(l1.highlightedBeats.length).to.equal(2); - expect(l1.highlightedBeats[1].beat).to.equal(nb); - expect(l1.start).to.equal(0); - expect(l1.end).to.equal(MidiUtils.QuarterTime); - - expect(n2.highlightedBeats.length).to.equal(2); - expect(n2.highlightedBeats[0].beat).to.equal(l2.highlightedBeats[0].beat); - expect(n2.highlightedBeats[1].beat).to.equal(nb); - expect(n2.start).to.equal(MidiUtils.QuarterTime); - expect(n2.end).to.equal(MidiUtils.QuarterTime * 1.5); - - expect(l2.highlightedBeats.length).to.equal(1); - expect(l2.start).to.equal(MidiUtils.QuarterTime * 1.5); - expect(l2.end).to.equal(MidiUtils.QuarterTime * 2); - - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(n2); - expect(n2.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(nb); + expect(n1.start).toBe(-MidiUtils.QuarterTime); + expect(n1.end).toBe(0); + + expect(l1.highlightedBeats.length).toBe(2); + expect(l1.highlightedBeats[1].beat).toBe(nb); + expect(l1.start).toBe(0); + expect(l1.end).toBe(MidiUtils.QuarterTime); + + expect(n2.highlightedBeats.length).toBe(2); + expect(n2.highlightedBeats[0].beat).toBe(l2.highlightedBeats[0].beat); + expect(n2.highlightedBeats[1].beat).toBe(nb); + expect(n2.start).toBe(MidiUtils.QuarterTime); + expect(n2.end).toBe(MidiUtils.QuarterTime * 1.5); + + expect(l2.highlightedBeats.length).toBe(1); + expect(l2.start).toBe(MidiUtils.QuarterTime * 1.5); + expect(l2.end).toBe(MidiUtils.QuarterTime * 2); + + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(n2); + expect(n2.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-i', () => { @@ -281,24 +281,24 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(l1.highlightedBeats[0].beat); - expect(n1.start).to.equal(0); - expect(n1.end).to.equal(MidiUtils.QuarterTime * 0.5); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(l1.highlightedBeats[0].beat); + expect(n1.start).toBe(0); + expect(n1.end).toBe(MidiUtils.QuarterTime * 0.5); - expect(l1.highlightedBeats.length).to.equal(2); - expect(l1.highlightedBeats[1].beat).to.equal(nb); - expect(l1.start).to.equal(MidiUtils.QuarterTime * 0.5); - expect(l1.end).to.equal(MidiUtils.QuarterTime); + expect(l1.highlightedBeats.length).toBe(2); + expect(l1.highlightedBeats[1].beat).toBe(nb); + expect(l1.start).toBe(MidiUtils.QuarterTime * 0.5); + expect(l1.end).toBe(MidiUtils.QuarterTime); - expect(l2.highlightedBeats.length).to.equal(1); - expect(l2.start).to.equal(MidiUtils.QuarterTime * 1); - expect(l2.end).to.equal(MidiUtils.QuarterTime * 2); + expect(l2.highlightedBeats.length).toBe(1); + expect(l2.start).toBe(MidiUtils.QuarterTime * 1); + expect(l2.end).toBe(MidiUtils.QuarterTime * 2); - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-j', () => { @@ -313,30 +313,30 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; const n2 = n1.nextBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(l1.highlightedBeats[0].beat); - expect(n1.start).to.equal(0); - expect(n1.end).to.equal(MidiUtils.QuarterTime * 0.25); - - expect(n2.highlightedBeats.length).to.equal(2); - expect(n2.highlightedBeats[0].beat).to.equal(l1.highlightedBeats[0].beat); - expect(n2.highlightedBeats[1].beat).to.equal(nb); - expect(n2.start).to.equal(MidiUtils.QuarterTime * 0.25); - expect(n2.end).to.equal(MidiUtils.QuarterTime * 0.75); - - expect(l1.highlightedBeats.length).to.equal(1); - expect(l1.start).to.equal(MidiUtils.QuarterTime * 0.75); - expect(l1.end).to.equal(MidiUtils.QuarterTime); - - expect(l2.highlightedBeats.length).to.equal(1); - expect(l2.start).to.equal(MidiUtils.QuarterTime * 1); - expect(l2.end).to.equal(MidiUtils.QuarterTime * 2); - - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(n2); - expect(n2.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(l1.highlightedBeats[0].beat); + expect(n1.start).toBe(0); + expect(n1.end).toBe(MidiUtils.QuarterTime * 0.25); + + expect(n2.highlightedBeats.length).toBe(2); + expect(n2.highlightedBeats[0].beat).toBe(l1.highlightedBeats[0].beat); + expect(n2.highlightedBeats[1].beat).toBe(nb); + expect(n2.start).toBe(MidiUtils.QuarterTime * 0.25); + expect(n2.end).toBe(MidiUtils.QuarterTime * 0.75); + + expect(l1.highlightedBeats.length).toBe(1); + expect(l1.start).toBe(MidiUtils.QuarterTime * 0.75); + expect(l1.end).toBe(MidiUtils.QuarterTime); + + expect(l2.highlightedBeats.length).toBe(1); + expect(l2.start).toBe(MidiUtils.QuarterTime * 1); + expect(l2.end).toBe(MidiUtils.QuarterTime * 2); + + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(n2); + expect(n2.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-k-variant-m', () => { @@ -351,30 +351,30 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; const n2 = n1.nextBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(l1.highlightedBeats[0].beat); - expect(n1.start).to.equal(0); - expect(n1.end).to.equal(MidiUtils.QuarterTime * 0.25); - - expect(n2.highlightedBeats.length).to.equal(2); - expect(n2.highlightedBeats[0].beat).to.equal(l1.highlightedBeats[0].beat); - expect(n2.highlightedBeats[1].beat).to.equal(nb); - expect(n2.start).to.equal(MidiUtils.QuarterTime * 0.25); - expect(n2.end).to.equal(MidiUtils.QuarterTime * 0.75); - - expect(l1.highlightedBeats.length).to.equal(1); - expect(l1.start).to.equal(MidiUtils.QuarterTime * 0.75); - expect(l1.end).to.equal(MidiUtils.QuarterTime); - - expect(l2.highlightedBeats.length).to.equal(1); - expect(l2.start).to.equal(MidiUtils.QuarterTime * 1); - expect(l2.end).to.equal(MidiUtils.QuarterTime * 2); - - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(n2); - expect(n2.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(l1.highlightedBeats[0].beat); + expect(n1.start).toBe(0); + expect(n1.end).toBe(MidiUtils.QuarterTime * 0.25); + + expect(n2.highlightedBeats.length).toBe(2); + expect(n2.highlightedBeats[0].beat).toBe(l1.highlightedBeats[0].beat); + expect(n2.highlightedBeats[1].beat).toBe(nb); + expect(n2.start).toBe(MidiUtils.QuarterTime * 0.25); + expect(n2.end).toBe(MidiUtils.QuarterTime * 0.75); + + expect(l1.highlightedBeats.length).toBe(1); + expect(l1.start).toBe(MidiUtils.QuarterTime * 0.75); + expect(l1.end).toBe(MidiUtils.QuarterTime); + + expect(l2.highlightedBeats.length).toBe(1); + expect(l2.start).toBe(MidiUtils.QuarterTime * 1); + expect(l2.end).toBe(MidiUtils.QuarterTime * 2); + + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(n2); + expect(n2.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-l', () => { @@ -386,12 +386,12 @@ describe('MidiTickLookupTest', () => { const nb = new Beat(); lookup.addBeat(nb, l1.start, MidiUtils.QuarterTime); - expect(l1.highlightedBeats.length).to.equal(2); - expect(l1.highlightedBeats[1].beat).to.equal(nb); + expect(l1.highlightedBeats.length).toBe(2); + expect(l1.highlightedBeats[1].beat).toBe(nb); - expect(l1).to.equal(masterBar.firstBeat!); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(l1).toBe(masterBar.firstBeat!); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-m', () => { @@ -405,24 +405,24 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; - expect(n1.highlightedBeats.length).to.equal(2); - expect(n1.highlightedBeats[0].beat).to.equal(l1.highlightedBeats[0].beat); - expect(n1.highlightedBeats[1].beat).to.equal(nb); - expect(n1.start).to.equal(0); - expect(n1.end).to.equal(MidiUtils.QuarterTime * 0.5); + expect(n1.highlightedBeats.length).toBe(2); + expect(n1.highlightedBeats[0].beat).toBe(l1.highlightedBeats[0].beat); + expect(n1.highlightedBeats[1].beat).toBe(nb); + expect(n1.start).toBe(0); + expect(n1.end).toBe(MidiUtils.QuarterTime * 0.5); - expect(l1.highlightedBeats.length).to.equal(1); - expect(l1.start).to.equal(MidiUtils.QuarterTime * 0.5); - expect(l1.end).to.equal(MidiUtils.QuarterTime); + expect(l1.highlightedBeats.length).toBe(1); + expect(l1.start).toBe(MidiUtils.QuarterTime * 0.5); + expect(l1.end).toBe(MidiUtils.QuarterTime); - expect(l2.highlightedBeats.length).to.equal(1); - expect(l2.start).to.equal(MidiUtils.QuarterTime * 1); - expect(l2.end).to.equal(MidiUtils.QuarterTime * 2); + expect(l2.highlightedBeats.length).toBe(1); + expect(l2.start).toBe(MidiUtils.QuarterTime * 1); + expect(l2.end).toBe(MidiUtils.QuarterTime * 2); - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2).to.equal(masterBar.lastBeat!); + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2).toBe(masterBar.lastBeat!); }); it('variant-h-variant-n-variant-b', () => { @@ -437,31 +437,31 @@ describe('MidiTickLookupTest', () => { const n1 = masterBar.firstBeat!; const n2 = l2.nextBeat!; - expect(n1.highlightedBeats.length).to.equal(1); - expect(n1.highlightedBeats[0].beat).to.equal(nb); - expect(n1.start).to.equal(-MidiUtils.QuarterTime); - expect(n1.end).to.equal(0); - - expect(l1.highlightedBeats.length).to.equal(2); - expect(l1.highlightedBeats[1].beat).to.equal(nb); - expect(l1.start).to.equal(0); - expect(l1.end).to.equal(MidiUtils.QuarterTime); - - expect(l2.highlightedBeats.length).to.equal(2); - expect(l2.highlightedBeats[1].beat).to.equal(nb); - expect(l2.start).to.equal(MidiUtils.QuarterTime * 1); - expect(l2.end).to.equal(MidiUtils.QuarterTime * 2); - - expect(n2.highlightedBeats.length).to.equal(1); - expect(n2.highlightedBeats[0].beat).to.equal(nb); - expect(n2.start).to.equal(MidiUtils.QuarterTime * 2); - expect(n2.end).to.equal(MidiUtils.QuarterTime * 3); - - expect(n1).to.equal(masterBar.firstBeat!); - expect(n1.nextBeat).to.equal(l1); - expect(l1.nextBeat).to.equal(l2); - expect(l2.nextBeat).to.equal(n2); - expect(n2).to.equal(masterBar.lastBeat!); + expect(n1.highlightedBeats.length).toBe(1); + expect(n1.highlightedBeats[0].beat).toBe(nb); + expect(n1.start).toBe(-MidiUtils.QuarterTime); + expect(n1.end).toBe(0); + + expect(l1.highlightedBeats.length).toBe(2); + expect(l1.highlightedBeats[1].beat).toBe(nb); + expect(l1.start).toBe(0); + expect(l1.end).toBe(MidiUtils.QuarterTime); + + expect(l2.highlightedBeats.length).toBe(2); + expect(l2.highlightedBeats[1].beat).toBe(nb); + expect(l2.start).toBe(MidiUtils.QuarterTime * 1); + expect(l2.end).toBe(MidiUtils.QuarterTime * 2); + + expect(n2.highlightedBeats.length).toBe(1); + expect(n2.highlightedBeats[0].beat).toBe(nb); + expect(n2.start).toBe(MidiUtils.QuarterTime * 2); + expect(n2.end).toBe(MidiUtils.QuarterTime * 3); + + expect(n1).toBe(masterBar.firstBeat!); + expect(n1.nextBeat).toBe(l1); + expect(l1.nextBeat).toBe(l2); + expect(l2.nextBeat).toBe(n2); + expect(n2).toBe(masterBar.lastBeat!); }); function beatWithFret(fret: number) { @@ -522,30 +522,30 @@ describe('MidiTickLookupTest', () => { // validate first bar let current = lookup.masterBars[0].firstBeat!; - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('0,2'); - expect(current.start).to.equal(0); - expect(current.duration).to.equal(1920); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('0,2'); + expect(current.start).toBe(0); + expect(current.duration).toBe(1920); current = current.nextBeat!; - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('1,2'); - expect(current.start).to.equal(1920); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('1,2'); + expect(current.start).toBe(1920); // quarter note ends earlier due to grace note - expect(current.duration).to.equal(840); + expect(current.duration).toBe(840); current = current.nextBeat!; // on last slice we have the grace note but not the quarter note - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('2,3'); - expect(current.start).to.equal(2760); - expect(current.duration).to.equal(120); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('2,3'); + expect(current.start).toBe(2760); + expect(current.duration).toBe(120); // // validate second bar current = lookup.masterBars[1].firstBeat!; // no grace note, normal quarter note - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('4'); - expect(current.start).to.equal(0); - expect(current.duration).to.equal(960); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('4'); + expect(current.start).toBe(0); + expect(current.duration).toBe(960); }); it('grace-multivoice-with-overlap', () => { @@ -555,36 +555,36 @@ describe('MidiTickLookupTest', () => { // validate first bar let current = lookup.masterBars[0].firstBeat!; - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('0,2'); - expect(current.start).to.equal(0); - expect(current.duration).to.equal(1920); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('0,2'); + expect(current.start).toBe(0); + expect(current.duration).toBe(1920); current = current.nextBeat!; - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('1,2'); - expect(current.start).to.equal(1920); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('1,2'); + expect(current.start).toBe(1920); // quarter note ends earlier due to grace note - expect(current.duration).to.equal(840); + expect(current.duration).toBe(840); current = current.nextBeat!; // on last slice we have the grace note but not the quarter note - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('2,3'); - expect(current.start).to.equal(2760); - expect(current.duration).to.equal(120); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('2,3'); + expect(current.start).toBe(2760); + expect(current.duration).toBe(120); // // validate second bar current = lookup.masterBars[1].firstBeat!; // half the grace note - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('3'); - expect(current.start).to.equal(0); - expect(current.duration).to.equal(120); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('3'); + expect(current.start).toBe(0); + expect(current.duration).toBe(120); // no grace note, normal quarter note current = current.nextBeat!; - expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('4'); - expect(current.start).to.equal(120); - expect(current.duration).to.equal(840); + expect(current.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('4'); + expect(current.start).toBe(120); + expect(current.duration).toBe(840); }); it('cursor-snapping', async () => { @@ -599,32 +599,32 @@ describe('MidiTickLookupTest', () => { // with the quarter rest on the second voice as next beat const firstBeat = lookup.findBeat(tracks, 0, null); - expect(firstBeat!.beat.id).to.equal(score.tracks[0].staves[0].bars[0].voices[0].beats[0].id); - expect(firstBeat!.nextBeat!.beat.id).to.equal(score.tracks[0].staves[0].bars[0].voices[1].beats[1].id); - expect(firstBeat!.beat.duration).to.equal(Duration.Whole); - expect(firstBeat!.nextBeat!.beat.duration).to.equal(Duration.Quarter); + expect(firstBeat!.beat.id).toBe(score.tracks[0].staves[0].bars[0].voices[0].beats[0].id); + expect(firstBeat!.nextBeat!.beat.id).toBe(score.tracks[0].staves[0].bars[0].voices[1].beats[1].id); + expect(firstBeat!.beat.duration).toBe(Duration.Whole); + expect(firstBeat!.nextBeat!.beat.duration).toBe(Duration.Quarter); // Duration must only go to the next rest on the second voice despite the whole note - expect(firstBeat!.duration).to.equal(750); - expect(firstBeat!.beatLookup.duration).to.equal(960); + expect(firstBeat!.duration).toBe(750); + expect(firstBeat!.beatLookup.duration).toBe(960); // Still playing first beat const stillFirst = lookup.findBeat(tracks, 400, firstBeat); - expect(stillFirst!.beat.id).to.equal(score.tracks[0].staves[0].bars[0].voices[0].beats[0].id); - expect(stillFirst!.nextBeat!.beat.id).to.equal(score.tracks[0].staves[0].bars[0].voices[1].beats[1].id); - expect(stillFirst!.beat.duration).to.equal(Duration.Whole); - expect(stillFirst!.nextBeat!.beat.duration).to.equal(Duration.Quarter); - expect(stillFirst!.duration).to.equal(750); - expect(stillFirst!.beatLookup.duration).to.equal(960); + expect(stillFirst!.beat.id).toBe(score.tracks[0].staves[0].bars[0].voices[0].beats[0].id); + expect(stillFirst!.nextBeat!.beat.id).toBe(score.tracks[0].staves[0].bars[0].voices[1].beats[1].id); + expect(stillFirst!.beat.duration).toBe(Duration.Whole); + expect(stillFirst!.nextBeat!.beat.duration).toBe(Duration.Quarter); + expect(stillFirst!.duration).toBe(750); + expect(stillFirst!.beatLookup.duration).toBe(960); // Now we're past the second rest heading to the third const secondBeat = lookup.findBeat(tracks, 970 /* after first quarter */, stillFirst); - expect(secondBeat!.beat.id).to.equal(score.tracks[0].staves[0].bars[0].voices[1].beats[1].id); - expect(secondBeat!.nextBeat!.beat.id).to.equal(score.tracks[0].staves[0].bars[0].voices[1].beats[2].id); - expect(secondBeat!.beat.duration).to.equal(Duration.Quarter); - expect(secondBeat!.nextBeat!.beat.duration).to.equal(Duration.Quarter); - expect(secondBeat!.duration).to.equal(750); - expect(secondBeat!.beatLookup.duration).to.equal(960); + expect(secondBeat!.beat.id).toBe(score.tracks[0].staves[0].bars[0].voices[1].beats[1].id); + expect(secondBeat!.nextBeat!.beat.id).toBe(score.tracks[0].staves[0].bars[0].voices[1].beats[2].id); + expect(secondBeat!.beat.duration).toBe(Duration.Quarter); + expect(secondBeat!.nextBeat!.beat.duration).toBe(Duration.Quarter); + expect(secondBeat!.duration).toBe(750); + expect(secondBeat!.beatLookup.duration).toBe(960); }); it('before-beat-grace-later-bars', () => { @@ -639,24 +639,24 @@ describe('MidiTickLookupTest', () => { const bar2 = lookup.masterBars[1]; let current = bar2.firstBeat; - expect(current!.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('2'); - expect(current!.start).to.equal(0); - expect(current!.duration).to.equal(960); + expect(current!.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('2'); + expect(current!.start).toBe(0); + expect(current!.duration).toBe(960); current = current!.nextBeat; - expect(current!.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('3'); - expect(current!.start).to.equal(960); - expect(current!.duration).to.equal(840); // 120 ticks stolen by grace beats + expect(current!.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('3'); + expect(current!.start).toBe(960); + expect(current!.duration).toBe(840); // 120 ticks stolen by grace beats current = current!.nextBeat; - expect(current!.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('4'); - expect(current!.start).to.equal(960 + 840); - expect(current!.duration).to.equal(60); + expect(current!.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('4'); + expect(current!.start).toBe(960 + 840); + expect(current!.duration).toBe(60); current = current!.nextBeat; - expect(current!.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).to.equal('5'); - expect(current!.start).to.equal(960 + 840 + 60); - expect(current!.duration).to.equal(60); + expect(current!.highlightedBeats.map(b => b.beat.notes[0].fret).join(',')).toBe('5'); + expect(current!.start).toBe(960 + 840 + 60); + expect(current!.duration).toBe(60); }); function lookupTest( @@ -710,7 +710,7 @@ describe('MidiTickLookupTest', () => { currentLookup = lookup.findBeat(tracks, ticks[i], currentLookup); Logger.info('Test', `Checking index ${i} with tick ${ticks[i]}`); - expect(currentLookup).to.be.ok; + expect(currentLookup).toBeTruthy(); actualIncrementalIds.push(idOfBeat(currentLookup!.beat)); actualIncrementalNextIds.push(idOfBeat(currentLookup!.nextBeat?.beat ?? null)); actualIncrementalTickDurations.push(currentLookup!.tickDuration); @@ -725,20 +725,19 @@ describe('MidiTickLookupTest', () => { } } - expect(actualIncrementalIds.join(',')).to.equal(currentBeatIds.join(','), 'currentBeatIds mismatch'); - expect(actualIncrementalNextIds.join(',')).to.equal(nextBeatIds.join(','), 'nextBeatIds mismatch'); - expect(actualIncrementalTickDurations.join(',')).to.equal(durations.join(','), 'durations mismatch'); + expect(actualIncrementalIds.join(','), 'currentBeatIds mismatch').toBe(currentBeatIds.join(',')); + expect(actualIncrementalNextIds.join(','), 'nextBeatIds mismatch').toBe(nextBeatIds.join(',')); + expect(actualIncrementalTickDurations.join(','), 'durations mismatch').toBe(durations.join(',')); if (expectedCursorModes) { - expect(expectedCursorModes.map(m => MidiTickLookupFindBeatResultCursorMode[m]).join(',')).to.equal( - actualCursorModes.map(m => MidiTickLookupFindBeatResultCursorMode[m]).join(','), - 'cursorModes mismatch' + expect(expectedCursorModes.map(m => MidiTickLookupFindBeatResultCursorMode[m]).join(','), 'cursorModes mismatch').toBe( + actualCursorModes.map(m => MidiTickLookupFindBeatResultCursorMode[m]).join(',') ); } if (!skipClean) { - expect(actualCleanIds.join(',')).to.equal(currentBeatIds.join(','), 'cleanIds mismatch'); - expect(actualCleanNextIds.join(',')).to.equal(nextBeatIds.join(','), 'cleanNextIds mismatch'); - expect(actualCleanTickDurations.join(',')).to.equal(durations.join(','), 'cleanTickDurations mismatch'); + expect(actualCleanIds.join(','), 'cleanIds mismatch').toBe(currentBeatIds.join(',')); + expect(actualCleanNextIds.join(','), 'cleanNextIds mismatch').toBe(nextBeatIds.join(',')); + expect(actualCleanTickDurations.join(','), 'cleanTickDurations mismatch').toBe(durations.join(',')); } } @@ -1301,10 +1300,10 @@ describe('MidiTickLookupTest', () => { const lookup = buildLookup(score, settings); // with the filter removed, an isEmpty beat in a mixed voice should still be findable - expect(voice.isEmpty).to.equal(false); + expect(voice.isEmpty).toBe(false); const result = lookup.findBeat(new Set([0]), 0); - expect(result).to.not.equal(null); - expect(result!.beat).to.equal(emptyBeat); + expect(result).not.toBe(null); + expect(result!.beat).toBe(emptyBeat); }); it('multi-beat empty voice produces non-overlapping slices', () => { @@ -1337,8 +1336,8 @@ describe('MidiTickLookupTest', () => { const settings = new Settings(); score.finish(settings); - expect(bar.isEmpty).to.equal(true); - expect(voice.beats.length).to.equal(slotCount); + expect(bar.isEmpty).toBe(true); + expect(voice.beats.length).toBe(slotCount); const lookup = buildLookup(score, settings); const mbLookup = lookup.masterBars[0]; @@ -1348,12 +1347,12 @@ describe('MidiTickLookupTest', () => { while (slice) { // every slice must contain exactly one beat - otherwise slices are overlapping // and the multi-beat empty voice has regressed. - expect(slice.highlightedBeats.length, `slice ${sliceIdx} range [${slice.start},${slice.end})`).to.equal(1); - expect(slice.highlightedBeats[0].beat).to.equal(voice.beats[sliceIdx]); + expect(slice.highlightedBeats.length, `slice ${sliceIdx} range [${slice.start},${slice.end})`).toBe(1); + expect(slice.highlightedBeats[0].beat).toBe(voice.beats[sliceIdx]); slice = slice.nextBeat; sliceIdx++; } - expect(sliceIdx).to.equal(slotCount); + expect(sliceIdx).toBe(slotCount); // single-beat empty bar still gets the full-bar override (existing behaviour // preserved for the typical whole-bar-rest placeholder case). @@ -1375,7 +1374,7 @@ describe('MidiTickLookupTest', () => { const singleLookup = buildLookup(singleBeatScore, settings); const singleMb = singleLookup.masterBars[0]; - expect(singleMb.firstBeat!.end - singleMb.firstBeat!.start).to.equal(singleMb.end - singleMb.start); + expect(singleMb.firstBeat!.end - singleMb.firstBeat!.start).toBe(singleMb.end - singleMb.start); }); describe('playback-range', () => { diff --git a/packages/alphatab/test/audio/SyncPoint.test.ts b/packages/alphatab/test/audio/SyncPoint.test.ts index 22f657cb9..aadf2bd4c 100644 --- a/packages/alphatab/test/audio/SyncPoint.test.ts +++ b/packages/alphatab/test/audio/SyncPoint.test.ts @@ -1,9 +1,5 @@ -import { - type IEventEmitterOfT, - type IEventEmitter, - EventEmitterOfT, - EventEmitter -} from '@coderline/alphatab/EventEmitter'; +import { describe, expect, it } from 'vitest'; +import { type IEventEmitterOfT, type IEventEmitter, EventEmitterOfT, EventEmitter } from '@coderline/alphatab/EventEmitter'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { AlphaSynthMidiFileHandler } from '@coderline/alphatab/midi/AlphaSynthMidiFileHandler'; import { MidiFile } from '@coderline/alphatab/midi/MidiFile'; @@ -24,7 +20,6 @@ import type { Hydra } from '@coderline/alphatab/synth/soundfont/Hydra'; import type { SynthEvent } from '@coderline/alphatab/synth/synthesis/SynthEvent'; import { FlatMidiEventGenerator } from 'test/audio/FlatMidiEventGenerator'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; describe('SyncPointTests', () => { it('sync-point-update', async () => { @@ -68,24 +63,24 @@ describe('SyncPointTests', () => { sequencer.loadMidi(midi); sequencer.currentUpdateCurrentTempo(0); - expect(sequencer.currentTempo).to.equal(90); - expect(sequencer.modifiedTempo).to.equal(90); + expect(sequencer.currentTempo).toBe(90); + expect(sequencer.modifiedTempo).toBe(90); sequencer.currentUpdateCurrentTempo(1000); - expect(sequencer.currentTempo).to.equal(90); - expect(sequencer.modifiedTempo).to.equal(90); + expect(sequencer.currentTempo).toBe(90); + expect(sequencer.modifiedTempo).toBe(90); sequencer.currentUpdateCurrentTempo(2000); - expect(sequencer.currentTempo).to.equal(90); - expect(sequencer.modifiedTempo).to.equal(90); + expect(sequencer.currentTempo).toBe(90); + expect(sequencer.modifiedTempo).toBe(90); sequencer.currentUpdateCurrentTempo(3000); - expect(sequencer.currentTempo).to.equal(120); - expect(sequencer.modifiedTempo).to.equal(120); + expect(sequencer.currentTempo).toBe(120); + expect(sequencer.modifiedTempo).toBe(120); sequencer.currentUpdateCurrentTempo(4000); - expect(sequencer.currentTempo).to.equal(120); - expect(sequencer.modifiedTempo).to.equal(120); + expect(sequencer.currentTempo).toBe(120); + expect(sequencer.modifiedTempo).toBe(120); }); async function syncPointTestScore() { @@ -117,15 +112,15 @@ describe('SyncPointTests', () => { const update = MidiFileGenerator.generateSyncPoints(score); - expect(generator.syncPoints.length).to.equal(update.length); + expect(generator.syncPoints.length).toBe(update.length); for (let i = 0; i < generator.syncPoints.length; i++) { - expect(update[i].masterBarIndex).to.equal(generator.syncPoints[i].masterBarIndex); - expect(update[i].masterBarOccurence).to.equal(generator.syncPoints[i].masterBarOccurence); - expect(update[i].syncBpm).to.equal(generator.syncPoints[i].syncBpm); - expect(update[i].syncTime).to.equal(generator.syncPoints[i].syncTime); - expect(update[i].synthBpm).to.equal(generator.syncPoints[i].synthBpm); - expect(update[i].synthTick).to.equal(generator.syncPoints[i].synthTick); - expect(update[i].synthTime).to.equal(generator.syncPoints[i].synthTime); + expect(update[i].masterBarIndex).toBe(generator.syncPoints[i].masterBarIndex); + expect(update[i].masterBarOccurence).toBe(generator.syncPoints[i].masterBarOccurence); + expect(update[i].syncBpm).toBe(generator.syncPoints[i].syncBpm); + expect(update[i].syncTime).toBe(generator.syncPoints[i].syncTime); + expect(update[i].synthBpm).toBe(generator.syncPoints[i].synthBpm); + expect(update[i].synthTick).toBe(generator.syncPoints[i].synthTick); + expect(update[i].synthTime).toBe(generator.syncPoints[i].synthTime); } }); diff --git a/packages/alphatab/test/audio/__snapshots__/AlphaSynth.test.ts.snap b/packages/alphatab/test/audio/__snapshots__/AlphaSynth.test.ts.snap index cc6bd6ab2..a0234b4a2 100644 --- a/packages/alphatab/test/audio/__snapshots__/AlphaSynth.test.ts.snap +++ b/packages/alphatab/test/audio/__snapshots__/AlphaSynth.test.ts.snap @@ -1,7 +1,7 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`AlphaSynthTests midi-bank 1`] = ` -Array [ +exports[`AlphaSynthTests > midi-bank 1`] = ` +[ Map { "track" => 0, "tick" => 0, diff --git a/packages/alphatab/test/audio/__snapshots__/MidiFileGenerator.test.ts.snap b/packages/alphatab/test/audio/__snapshots__/MidiFileGenerator.test.ts.snap index 70aec95d3..aacb29bcc 100644 --- a/packages/alphatab/test/audio/__snapshots__/MidiFileGenerator.test.ts.snap +++ b/packages/alphatab/test/audio/__snapshots__/MidiFileGenerator.test.ts.snap @@ -1,7 +1,7 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`MidiFileGeneratorTest effect-note-durations dots tremolo-2 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > dots > tremolo-2 1`] = ` +[ "Note: C4 180", "Note: C4 180", "Note: C4 180", @@ -17,8 +17,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations dots tremolo-3 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > dots > tremolo-3 1`] = ` +[ "Note: C4 90", "Note: C4 90", "Note: C4 90", @@ -46,8 +46,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations dots trill 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > dots > trill 1`] = ` +[ "Note: C4 120", "Note: C5 120", "Note: C4 120", @@ -69,8 +69,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations grace-notes-before-beat tremolo-2 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > grace-notes-before-beat > tremolo-2 1`] = ` +[ "Note: C4 120", "Note: C4 90", "Note: C4 90", @@ -94,8 +94,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations grace-notes-before-beat tremolo-3 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > grace-notes-before-beat > tremolo-3 1`] = ` +[ "Note: C4 120", "Note: C4 45", "Note: C4 45", @@ -135,8 +135,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations grace-notes-before-beat trill 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > grace-notes-before-beat > trill 1`] = ` +[ "Note: C4 120", "Note: C4 120", "Note: C5 120", @@ -157,8 +157,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations grace-notes-on-beat tremolo-2 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > grace-notes-on-beat > tremolo-2 1`] = ` +[ "Note: C3 120", "Note: C4 90", "Note: C4 90", @@ -182,8 +182,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations grace-notes-on-beat tremolo-3 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > grace-notes-on-beat > tremolo-3 1`] = ` +[ "Note: C3 120", "Note: C4 45", "Note: C4 45", @@ -223,8 +223,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations grace-notes-on-beat trill 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > grace-notes-on-beat > trill 1`] = ` +[ "Note: C3 120", "Note: C4 120", "Note: C5 120", @@ -244,8 +244,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations plain dot 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > plain > dot 1`] = ` +[ "Note: C4 720", "Note: D4 720", "Note: E4 720", @@ -253,8 +253,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations plain tremolo-2 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > plain > tremolo-2 1`] = ` +[ "Note: C4 120", "Note: C4 120", "Note: C4 120", @@ -274,8 +274,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations plain tremolo-3 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > plain > tremolo-3 1`] = ` +[ "Note: C4 60", "Note: C4 60", "Note: C4 60", @@ -311,8 +311,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations plain trill 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > plain > trill 1`] = ` +[ "Note: C4 120", "Note: C5 120", "Note: C4 120", @@ -332,8 +332,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations plain tripletfeel 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > plain > tripletfeel 1`] = ` +[ "Note: C4 640", "Note: D4 320", "Note: E4 640", @@ -341,8 +341,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations plain tuplet 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > plain > tuplet 1`] = ` +[ "Note: C4 320", "Note: D4 320", "Note: E4 320", @@ -350,8 +350,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations triplet-feel tremolo-2 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > triplet-feel > tremolo-2 1`] = ` +[ "Note: C4 160", "Note: C4 160", "Note: C4 160", @@ -371,8 +371,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations triplet-feel tremolo-3 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > triplet-feel > tremolo-3 1`] = ` +[ "Note: C4 80", "Note: C4 80", "Note: C4 80", @@ -408,8 +408,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations triplet-feel trill 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > triplet-feel > trill 1`] = ` +[ "Note: C4 120", "Note: C5 120", "Note: C4 120", @@ -431,8 +431,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations tuplet tremolo-2 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > tuplet > tremolo-2 1`] = ` +[ "Note: C4 80", "Note: C4 80", "Note: C4 80", @@ -448,8 +448,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations tuplet tremolo-3 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > tuplet > tremolo-3 1`] = ` +[ "Note: C4 40", "Note: C4 40", "Note: C4 40", @@ -477,8 +477,8 @@ Array [ ] `; -exports[`MidiFileGeneratorTest effect-note-durations tuplet trill 1`] = ` -Array [ +exports[`MidiFileGeneratorTest > effect-note-durations > tuplet > trill 1`] = ` +[ "Note: C4 120", "Note: C5 120", "Note: C4 80", diff --git a/packages/alphatab/test/audio/__snapshots__/SyncPoint.test.ts.snap b/packages/alphatab/test/audio/__snapshots__/SyncPoint.test.ts.snap index b5c35e9ed..99ad5e979 100644 --- a/packages/alphatab/test/audio/__snapshots__/SyncPoint.test.ts.snap +++ b/packages/alphatab/test/audio/__snapshots__/SyncPoint.test.ts.snap @@ -1,7 +1,7 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`SyncPointTests modified-tempo-lookup 1`] = ` -Array [ +exports[`SyncPointTests > modified-tempo-lookup 1`] = ` +[ "0 => 120", "4000 => 240", "5000 => 240", @@ -14,8 +14,8 @@ Array [ ] `; -exports[`SyncPointTests playback-fast-backing-track 1`] = ` -Array [ +exports[`SyncPointTests > playback-fast-backing-track 1`] = ` +[ "0,120,240", "500,120,240", "1000,120,240", @@ -62,8 +62,8 @@ Array [ ] `; -exports[`SyncPointTests playback-fast-external-media 1`] = ` -Array [ +exports[`SyncPointTests > playback-fast-external-media 1`] = ` +[ "0,120,240", "500,120,240", "1000,120,240", @@ -110,8 +110,8 @@ Array [ ] `; -exports[`SyncPointTests playback-normal-backing-track 1`] = ` -Array [ +exports[`SyncPointTests > playback-normal-backing-track 1`] = ` +[ "0,120,120", "500,120,120", "1000,120,120", @@ -200,8 +200,8 @@ Array [ ] `; -exports[`SyncPointTests playback-normal-external-media 1`] = ` -Array [ +exports[`SyncPointTests > playback-normal-external-media 1`] = ` +[ "0,120,120", "500,120,120", "1000,120,120", @@ -290,8 +290,8 @@ Array [ ] `; -exports[`SyncPointTests seek-fast-backing-track 1`] = ` -Array [ +exports[`SyncPointTests > seek-fast-backing-track 1`] = ` +[ "2000,120,240", "5000,60,240", "13000,80,240", @@ -302,8 +302,8 @@ Array [ ] `; -exports[`SyncPointTests seek-fast-backing-track 2`] = ` -Array [ +exports[`SyncPointTests > seek-fast-backing-track 2`] = ` +[ 0, 0, 0.5208333333333334, @@ -315,8 +315,8 @@ Array [ ] `; -exports[`SyncPointTests seek-fast-external-media 1`] = ` -Array [ +exports[`SyncPointTests > seek-fast-external-media 1`] = ` +[ "2000,120,240", "5000,60,240", "13000,80,240", @@ -327,8 +327,8 @@ Array [ ] `; -exports[`SyncPointTests seek-fast-external-media 2`] = ` -Array [ +exports[`SyncPointTests > seek-fast-external-media 2`] = ` +[ 0, 0, 0.5208333333333334, @@ -340,8 +340,8 @@ Array [ ] `; -exports[`SyncPointTests seek-normal-backing-track 1`] = ` -Array [ +exports[`SyncPointTests > seek-normal-backing-track 1`] = ` +[ "2000,120,120", "5000,120,120", "13000,60,120", @@ -352,8 +352,8 @@ Array [ ] `; -exports[`SyncPointTests seek-normal-backing-track 2`] = ` -Array [ +exports[`SyncPointTests > seek-normal-backing-track 2`] = ` +[ 0, 0, 0.5208333333333334, @@ -364,8 +364,8 @@ Array [ ] `; -exports[`SyncPointTests seek-normal-external-media 1`] = ` -Array [ +exports[`SyncPointTests > seek-normal-external-media 1`] = ` +[ "2000,120,120", "5000,120,120", "13000,60,120", @@ -376,8 +376,8 @@ Array [ ] `; -exports[`SyncPointTests seek-normal-external-media 2`] = ` -Array [ +exports[`SyncPointTests > seek-normal-external-media 2`] = ` +[ 0, 0, 0.5208333333333334, @@ -388,8 +388,8 @@ Array [ ] `; -exports[`SyncPointTests sync-point-generation 1`] = ` -Array [ +exports[`SyncPointTests > sync-point-generation 1`] = ` +[ "0,0,120,120,0,0", "2,0,120,240,4000,4000", "3,0,120,240,6000,5000", @@ -403,8 +403,8 @@ Array [ ] `; -exports[`SyncPointTests sync-point-generation-new 1`] = ` -Array [ +exports[`SyncPointTests > sync-point-generation-new 1`] = ` +[ "0,0,120,120,0,0", "4,0,60,60,8000,8000", "8,0,80,80,24000,24000", @@ -412,8 +412,8 @@ Array [ ] `; -exports[`SyncPointTests sync-point-update 1`] = ` -Array [ +exports[`SyncPointTests > sync-point-update 1`] = ` +[ "0,0,120,120,0,0", "2,0,120,240,4000,4000", "3,0,120,240,6000,5000", diff --git a/packages/alphatab/test/exporter/AlphaTexExporter.test.ts b/packages/alphatab/test/exporter/AlphaTexExporter.test.ts index 77f9c86ae..f0c6c17a3 100644 --- a/packages/alphatab/test/exporter/AlphaTexExporter.test.ts +++ b/packages/alphatab/test/exporter/AlphaTexExporter.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { AlphaTexExporter } from '@coderline/alphatab/exporter/AlphaTexExporter'; import { AlphaTexErrorWithDiagnostics } from '@coderline/alphatab/importer/AlphaTexImporter'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; @@ -5,8 +6,6 @@ import type { Score } from '@coderline/alphatab/model/Score'; import { Settings } from '@coderline/alphatab/Settings'; import { ComparisonHelpers } from 'test/model/ComparisonHelpers'; import { TestPlatform } from 'test/TestPlatform'; -import { assert } from 'chai'; - describe('AlphaTexExporterTest', () => { async function loadScore(name: string): Promise { const data = await TestPlatform.loadFile(`test-data/${name}`); @@ -50,7 +49,7 @@ describe('AlphaTexExporterTest', () => { } } - assert.fail( + throw new Error( `<${fileName}>${unwrapped.toString()}\n${errorLines.join('\n')}${error.stack}\n Tex:\n${exported}` ); } @@ -123,7 +122,7 @@ describe('AlphaTexExporterTest', () => { if (errors.length > 0) { await TestPlatform.saveFileAsString('test-data/exporter/notation-legend-formatted.atex.new', data); - assert.fail(errors.join('\n')); + throw new Error(errors.join('\n')); } else { await TestPlatform.deleteFile('test-data/exporter/notation-legend-formatted.atex.new'); } diff --git a/packages/alphatab/test/exporter/Gp7Exporter.test.ts b/packages/alphatab/test/exporter/Gp7Exporter.test.ts index 5c1f95695..60d749252 100644 --- a/packages/alphatab/test/exporter/Gp7Exporter.test.ts +++ b/packages/alphatab/test/exporter/Gp7Exporter.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { Gp7Exporter } from '@coderline/alphatab/exporter/Gp7Exporter'; import { GpifInstrumentArticulation, @@ -16,7 +17,6 @@ import type { Score } from '@coderline/alphatab/model/Score'; import { Settings } from '@coderline/alphatab/Settings'; import { XmlDocument } from '@coderline/alphatab/xml/XmlDocument'; import { ZipReader } from '@coderline/alphatab/zip/ZipReader'; -import { assert, expect } from 'chai'; import { ComparisonHelpers } from 'test/model/ComparisonHelpers'; import { TestPlatform } from 'test/TestPlatform'; @@ -170,11 +170,11 @@ describe('Gp7ExporterTest', () => { ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, '', ['accidentalmode']); - expect(actual.tracks[0].percussionArticulations.length).to.equal(2); - expect(actual.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).to.equal(0); - expect(actual.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).to.equal(1); - expect(actual.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).to.equal(0); - expect(actual.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).to.equal(1); + expect(actual.tracks[0].percussionArticulations.length).toBe(2); + expect(actual.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).toBe(0); + expect(actual.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).toBe(1); + expect(actual.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).toBe(0); + expect(actual.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).toBe(1); }); it('gp7-lyrics-null', async () => { @@ -255,7 +255,7 @@ describe('Gp7ExporterTest', () => { const expected = await TestPlatform.loadFileAsString('test-data/exporter/articulations.source'); if (expected !== sourceCode) { await TestPlatform.saveFileAsString('test-data/exporter/articulations.source.new', sourceCode); - assert.fail('Articulations have changed, update the PercussionMapper and update the snapshot file'); + throw new Error('Articulations have changed, update the PercussionMapper and update the snapshot file'); } }); @@ -411,7 +411,7 @@ describe('Gp7ExporterTest', () => { const expected = await TestPlatform.loadFileAsString('test-data/exporter/soundmapper.source'); if (expected !== sourceCode) { await TestPlatform.saveFileAsString('test-data/exporter/soundmapper.source.new', sourceCode); - assert.fail('RSE instrument set has, update the GpifSoundMapper and update the snapshot file'); + throw new Error('RSE instrument set has, update the GpifSoundMapper and update the snapshot file'); } }); @@ -433,72 +433,62 @@ describe('Gp7ExporterTest', () => { const actualInstrumentSet = getInstrumentSet(exported); // order IS important for the elements and articulations. the InstrumentArticulation is index based. - expect(actualInstrumentSet.name).to.equal(expectedInstrumentSet.name); - expect(actualInstrumentSet.type).to.equal(expectedInstrumentSet.type); - expect(actualInstrumentSet.lineCount).to.equal(expectedInstrumentSet.lineCount); + expect(actualInstrumentSet.name).toBe(expectedInstrumentSet.name); + expect(actualInstrumentSet.type).toBe(expectedInstrumentSet.type); + expect(actualInstrumentSet.lineCount).toBe(expectedInstrumentSet.lineCount); const expectedElements = Array.from(expectedInstrumentSet.elements); const actualElements = Array.from(actualInstrumentSet.elements); for (let i = 0; i < expectedElements.length; i++) { const expectedElement = expectedElements[i]; - expect(actualElements.length).to.be.greaterThan( - i, - `Element ${i} (${expectedElement.name}) missing in actual file` + expect(actualElements.length, `Element ${i} (${expectedElement.name}) missing in actual file`).toBeGreaterThan( + i ); const actualElement = actualElements[i]; - expect(actualElement.name).to.equal(expectedElement.name); - expect(actualElement.type).to.equal(expectedElement.type); - expect(actualElement.soundbankName).to.equal(expectedElement.soundbankName); + expect(actualElement.name).toBe(expectedElement.name); + expect(actualElement.type).toBe(expectedElement.type); + expect(actualElement.soundbankName).toBe(expectedElement.soundbankName); for (let j = 0; j < expectedElement.articulations.length; j++) { const expectedArticulation = expectedElement.articulations[j]; - expect(actualElement.articulations.length).to.be.greaterThan( - j, - `Articulation ${i} missing in actual file` + expect(actualElement.articulations.length, `Articulation ${i} missing in actual file`).toBeGreaterThan( + j ); const actualArticulation = actualElement.articulations[j]; - expect(actualArticulation.name).to.equal(expectedArticulation.name); - expect(actualArticulation.staffLine).to.equal( - expectedArticulation.staffLine, - `Wrong staffline for articulation ${actualArticulation.name}` + expect(actualArticulation.name).toBe(expectedArticulation.name); + expect(actualArticulation.staffLine, `Wrong staffline for articulation ${actualArticulation.name}`).toBe( + expectedArticulation.staffLine ); - expect(actualArticulation.noteHeads.map(s => MusicFontSymbol[s]).join(' ')).to.equal( - expectedArticulation.noteHeads.map(s => MusicFontSymbol[s]).join(' '), - `Wrong noteHeads for articulation ${actualArticulation.name}` + expect(actualArticulation.noteHeads.map(s => MusicFontSymbol[s]).join(' '), `Wrong noteHeads for articulation ${actualArticulation.name}`).toBe( + expectedArticulation.noteHeads.map(s => MusicFontSymbol[s]).join(' ') ); - expect(MusicFontSymbol[actualArticulation.techniqueSymbol]).to.equal( - MusicFontSymbol[expectedArticulation.techniqueSymbol], - `Wrong techniqueSymbol for articulation ${actualArticulation.name}` + expect(MusicFontSymbol[actualArticulation.techniqueSymbol], `Wrong techniqueSymbol for articulation ${actualArticulation.name}`).toBe( + MusicFontSymbol[expectedArticulation.techniqueSymbol] ); - expect(TechniqueSymbolPlacement[actualArticulation.techniqueSymbolPlacement]).to.equal( - TechniqueSymbolPlacement[expectedArticulation.techniqueSymbolPlacement], - `Wrong techniqueSymbolPlacement for articulation ${actualArticulation.name}` + expect(TechniqueSymbolPlacement[actualArticulation.techniqueSymbolPlacement], `Wrong techniqueSymbolPlacement for articulation ${actualArticulation.name}`).toBe( + TechniqueSymbolPlacement[expectedArticulation.techniqueSymbolPlacement] ); - expect(actualArticulation.inputMidiNumbers.map(i => i.toString()).join(',')).to.equal( - expectedArticulation.inputMidiNumbers.map(i => i.toString()).join(','), - `Wrong inputMidiNumbers for articulation ${actualArticulation.name}` + expect(actualArticulation.inputMidiNumbers.map(i => i.toString()).join(','), `Wrong inputMidiNumbers for articulation ${actualArticulation.name}`).toBe( + expectedArticulation.inputMidiNumbers.map(i => i.toString()).join(',') ); - expect(actualArticulation.outputMidiNumber).to.equal( - expectedArticulation.outputMidiNumber, - `Wrong outputMidiNumber for articulation ${actualArticulation.name}` + expect(actualArticulation.outputMidiNumber, `Wrong outputMidiNumber for articulation ${actualArticulation.name}`).toBe( + expectedArticulation.outputMidiNumber ); - expect(actualArticulation.outputRSESound).to.equal( - expectedArticulation.outputRSESound, - `Wrong outputRSESound for articulation ${actualArticulation.name}` + expect(actualArticulation.outputRSESound, `Wrong outputRSESound for articulation ${actualArticulation.name}`).toBe( + expectedArticulation.outputRSESound ); } - expect(actualElement.articulations.length).to.equal( - expectedElement.articulations.length, - `articulation length mismatch on element ${expectedElement.name}` + expect(actualElement.articulations.length, `articulation length mismatch on element ${expectedElement.name}`).toBe( + expectedElement.articulations.length ); } - expect(actualInstrumentSet.elements.length).to.equal(expectedInstrumentSet.elements.length); + expect(actualInstrumentSet.elements.length).toBe(expectedInstrumentSet.elements.length); // await TestPlatform.saveFile('test-data/exporter/articulations.exported.gp', exported); }); diff --git a/packages/alphatab/test/global-hooks.ts b/packages/alphatab/test/global-hooks.ts index 1aaddd00f..06c8d9b10 100644 --- a/packages/alphatab/test/global-hooks.ts +++ b/packages/alphatab/test/global-hooks.ts @@ -1,22 +1,41 @@ /** @target web */ -import * as chai from 'chai'; -import { afterAll, beforeEachTest, initializeJestSnapshot } from './mocha.jest-snapshot'; import { TestPlatform } from 'test/TestPlatform'; +import { beforeEach, expect } from 'vitest'; +import { + AlphaTexAstNodePlugin, + AlphaTexDiagnosticPlugin, + MidiEventSerializerPlugin, + type PrettyFormatConfig, + type PrettyFormatPrinter, + ScoreSerializerPlugin +} from './PrettyFormat'; -export const mochaHooks = { - async beforeAll() { - chai.config.truncateThreshold = 0; // disable truncating - await initializeJestSnapshot(); - }, +const plugins = [ + ScoreSerializerPlugin.instance, + MidiEventSerializerPlugin.instance, + AlphaTexDiagnosticPlugin.instance, + AlphaTexAstNodePlugin.instance +]; - beforeEach: function (done) { - beforeEachTest(this.currentTest!); - TestPlatform.currentTestName = this.currentTest!.title; - done(); - }, +for (const plugin of plugins) { + expect.addSnapshotSerializer({ + test(val) { + return plugin.test(val); + }, + serialize(val, config, indentation, depth, refs, printer) { + return plugin.serialize( + val, + config as PrettyFormatConfig, + indentation, + depth, + refs, + printer as PrettyFormatPrinter + ); + } + }); +} - afterAll(done) { - afterAll(); - done(); - } -} satisfies Mocha.RootHookObject; +beforeEach(() => { + const fullName = expect.getState().currentTestName ?? ''; + TestPlatform.currentTestName = fullName.split(' > ').pop() ?? ''; +}); diff --git a/packages/alphatab/test/importer/AlphaTexImporter.test.ts b/packages/alphatab/test/importer/AlphaTexImporter.test.ts index 1b8308f87..39a76e468 100644 --- a/packages/alphatab/test/importer/AlphaTexImporter.test.ts +++ b/packages/alphatab/test/importer/AlphaTexImporter.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { AlphaTexExporter } from '@coderline/alphatab/exporter/AlphaTexExporter'; import { AlphaTexStaffNoteKind } from '@coderline/alphatab/importer/alphaTex/AlphaTexShared'; import { AlphaTexErrorWithDiagnostics, AlphaTexImporter } from '@coderline/alphatab/importer/AlphaTexImporter'; @@ -50,7 +51,6 @@ import { Settings } from '@coderline/alphatab/Settings'; import { StaveProfile } from '@coderline/alphatab/StaveProfile'; import { ComparisonHelpers } from 'test/model/ComparisonHelpers'; import { VisualTestHelper } from 'test/visualTests/VisualTestHelper'; -import { assert, expect } from 'chai'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { TremoloPickingEffectSerializer } from '@coderline/alphatab/generated/model/TremoloPickingEffectSerializer'; import { BeamDirection } from '@coderline/alphatab/rendering/utils/BeamDirection'; @@ -64,7 +64,7 @@ describe('AlphaTexImporterTest', () => { importer.initFromString(tex, new Settings()); try { importer.readScore(); - assert.fail('Expected error on import'); + throw new Error('Expected error on import'); } catch { expect(importer.lexerDiagnostics.errors).toMatchSnapshot('lexer-diagnostics'); expect(importer.parserDiagnostics.errors).toMatchSnapshot('parser-diagnostics'); @@ -88,7 +88,7 @@ describe('AlphaTexImporterTest', () => { if (e instanceof UnsupportedFormatError) { throw new UnsupportedFormatError(withDiag.toString()); } else { - assert.fail(`${withDiag.toString()}`); + throw new Error(`${withDiag.toString()}`); } } throw e; @@ -119,53 +119,53 @@ describe('AlphaTexImporterTest', () => { 0.5.2 1.5.4 3.4.4 | 5.3.8 5.3.8 5.3.8 5.3.8 r.2`; const score = parseTex(tex); - expect(score.title).to.equal('Test'); - expect(score.words).to.equal('test'); - expect(score.music).to.equal('alphaTab'); - expect(score.copyright).to.equal('test'); - expect(score.tempo).to.equal(200); - expect(score.tracks.length).to.equal(1); - expect(score.tracks[0].playbackInfo.program).to.equal(30); - expect(score.tracks[0].staves[0].capo).to.equal(2); - expect(score.tracks[0].staves[0].tuning.join(',')).to.equal('55,38,43,47,50,69'); - expect(score.masterBars.length).to.equal(2); + expect(score.title).toBe('Test'); + expect(score.words).toBe('test'); + expect(score.music).toBe('alphaTab'); + expect(score.copyright).toBe('test'); + expect(score.tempo).toBe(200); + expect(score.tracks.length).toBe(1); + expect(score.tracks[0].playbackInfo.program).toBe(30); + expect(score.tracks[0].staves[0].capo).toBe(2); + expect(score.tracks[0].staves[0].tuning.join(',')).toBe('55,38,43,47,50,69'); + expect(score.masterBars.length).toBe(2); // bars[0] - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].duration).to.equal(Duration.Half); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].string).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].duration).to.equal(Duration.Quarter); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].string).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].duration).to.equal(Duration.Quarter); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].string).to.equal(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].duration).toBe(Duration.Half); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].string).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].duration).toBe(Duration.Quarter); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].string).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].duration).toBe(Duration.Quarter); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].string).toBe(3); // bars[1] - expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].string).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].string).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].string).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].string).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].notes.length).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].duration).to.equal(Duration.Half); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].isRest).to.equal(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].string).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].string).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].string).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].string).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].notes.length).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].duration).toBe(Duration.Half); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].isRest).toBe(true); }); it('tuning', () => { @@ -174,71 +174,71 @@ describe('AlphaTexImporterTest', () => { 0.5.1`; const score = parseTex(tex); - expect(score.tracks[0].staves[0].tuning.join(',')).to.equal(Tuning.getDefaultTuningFor(6)!.tunings.join(',')); + expect(score.tracks[0].staves[0].tuning.join(',')).toBe(Tuning.getDefaultTuningFor(6)!.tunings.join(',')); }); it('dead-notes1-issue79', () => { const tex: string = ':4 x.3'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isDead).to.equal(true); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isDead).toBe(true); }); it('dead-notes2-issue79', () => { const tex: string = ':4 3.3{x}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isDead).to.equal(true); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isDead).toBe(true); }); it('dead', () => { const tex: string = 'x.1 3.1{x}'; const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].string).to.equal(6); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].string).to.equal(6); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].string).toBe(6); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].string).toBe(6); }); it('trill-issue79', () => { const tex: string = ':4 3.3{tr 5 16}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isTrill).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillSpeed).to.equal(Duration.Sixteenth); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillFret).to.equal(5); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isTrill).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillSpeed).toBe(Duration.Sixteenth); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillFret).toBe(5); }); it('tremolo-issue79', () => { const tex: string = ':4 3.3{tr 5 16}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isTrill).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillSpeed).to.equal(Duration.Sixteenth); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillFret).to.equal(5); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isTrill).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillSpeed).toBe(Duration.Sixteenth); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillFret).toBe(5); }); it('tremolo-picking-issue79', () => { const tex: string = ':4 3.3{tp 16}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].isTremolo).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].tremoloPicking!.marks).to.equal(2); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].isTremolo).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].tremoloPicking!.marks).toBe(2); }); it('brushes-arpeggio', () => { @@ -248,67 +248,67 @@ describe('AlphaTexImporterTest', () => { (1.1 2.2 3.3 4.4).4{bd} (1.1 2.2 3.3 4.4).8{bu} (1.1 2.2 3.3 4.4).2{ad} (1.1 2.2 3.3 4.4).16{au} r `; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].brushType).to.equal(BrushType.BrushDown); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].playbackDuration).to.equal(960); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].brushDuration).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].brushType).to.equal(BrushType.BrushUp); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].playbackDuration).to.equal(480); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].brushDuration).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].brushType).to.equal(BrushType.ArpeggioDown); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].playbackDuration).to.equal(1920); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].brushDuration).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].brushType).to.equal(BrushType.ArpeggioUp); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].playbackDuration).to.equal(240); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].brushDuration).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].isRest).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].brushType).to.equal(BrushType.None); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].playbackDuration).to.equal(240); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].brushDuration).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].brushType).to.equal(BrushType.BrushDown); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].brushDuration).to.equal(120); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].brushType).to.equal(BrushType.BrushUp); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].brushDuration).to.equal(120); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].brushType).to.equal(BrushType.ArpeggioDown); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].brushDuration).to.equal(120); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].brushType).to.equal(BrushType.ArpeggioUp); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].brushDuration).to.equal(120); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].isRest).to.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].brushType).to.equal(BrushType.None); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].brushDuration).to.equal(0); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].brushType).to.equal(BrushType.BrushDown); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].brushDuration).to.equal(60); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].brushType).to.equal(BrushType.BrushUp); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].brushDuration).to.equal(30); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].brushType).to.equal(BrushType.ArpeggioDown); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].brushDuration).to.equal(480); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].brushType).to.equal(BrushType.ArpeggioUp); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].brushDuration).to.equal(60); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[4].isRest).to.equal(true); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[4].brushType).to.equal(BrushType.None); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[4].brushDuration).to.equal(0); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].brushType).toBe(BrushType.BrushDown); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].playbackDuration).toBe(960); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].brushDuration).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].brushType).toBe(BrushType.BrushUp); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].playbackDuration).toBe(480); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].brushDuration).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].brushType).toBe(BrushType.ArpeggioDown); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].playbackDuration).toBe(1920); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].brushDuration).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].brushType).toBe(BrushType.ArpeggioUp); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].playbackDuration).toBe(240); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].brushDuration).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].isRest).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].brushType).toBe(BrushType.None); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].playbackDuration).toBe(240); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].brushDuration).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].brushType).toBe(BrushType.BrushDown); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].brushDuration).toBe(120); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].brushType).toBe(BrushType.BrushUp); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].brushDuration).toBe(120); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].brushType).toBe(BrushType.ArpeggioDown); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].brushDuration).toBe(120); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].brushType).toBe(BrushType.ArpeggioUp); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].brushDuration).toBe(120); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].isRest).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].brushType).toBe(BrushType.None); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].brushDuration).toBe(0); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats.length).toBe(5); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].brushType).toBe(BrushType.BrushDown); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].brushDuration).toBe(60); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].brushType).toBe(BrushType.BrushUp); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].brushDuration).toBe(30); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].brushType).toBe(BrushType.ArpeggioDown); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].brushDuration).toBe(480); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].brushType).toBe(BrushType.ArpeggioUp); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].brushDuration).toBe(60); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[4].isRest).toBe(true); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[4].brushType).toBe(BrushType.None); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[4].brushDuration).toBe(0); testExportRoundtrip(score); }); it('hamonics-issue79', () => { const tex: string = ':8 3.3{nh} 3.3{ah} 3.3{th} 3.3{ph} 3.3{sh}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicType).to.equal( + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicType).toBe( HarmonicType.Natural ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicType).toBe( HarmonicType.Artificial ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicType).to.equal(HarmonicType.Tap); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicType).to.equal(HarmonicType.Pinch); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicType).to.equal(HarmonicType.Semi); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicType).toBe(HarmonicType.Tap); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicType).toBe(HarmonicType.Pinch); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicType).toBe(HarmonicType.Semi); }); it('hamonics-rendering-text-issue79', async () => { @@ -332,51 +332,51 @@ describe('AlphaTexImporterTest', () => { new RegExp(regexTemplate.replace('{0}', HarmonicsEffectInfo.harmonicToString(HarmonicType.Natural))).exec( svg ) - ).to.be.ok; + ).toBeTruthy(); expect( new RegExp( regexTemplate.replace('{0}', HarmonicsEffectInfo.harmonicToString(HarmonicType.Artificial)) ).exec(svg) - ).to.be.ok; + ).toBeTruthy(); expect( new RegExp(regexTemplate.replace('{0}', HarmonicsEffectInfo.harmonicToString(HarmonicType.Tap))).exec(svg) - ).to.be.ok; + ).toBeTruthy(); expect( new RegExp(regexTemplate.replace('{0}', HarmonicsEffectInfo.harmonicToString(HarmonicType.Pinch))).exec(svg) - ).to.be.ok; + ).toBeTruthy(); expect( new RegExp(regexTemplate.replace('{0}', HarmonicsEffectInfo.harmonicToString(HarmonicType.Semi))).exec(svg) - ).to.be.ok; + ).toBeTruthy(); }); it('grace-issue79', () => { const tex: string = ':8 3.3{gr} 3.3{gr ob}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].graceType).to.equal(GraceType.BeforeBeat); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].graceType).to.equal(GraceType.OnBeat); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].graceType).toBe(GraceType.BeforeBeat); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].graceType).toBe(GraceType.OnBeat); testExportRoundtrip(score); }); it('left-hand-finger-single-note', () => { const tex: string = ':8 3.3{lf 1} 3.3{lf 2} 3.3{lf 3} 3.3{lf 4} 3.3{lf 5}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].leftHandFinger).to.equal(Fingers.Thumb); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].leftHandFinger).to.equal( + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].leftHandFinger).toBe(Fingers.Thumb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].leftHandFinger).toBe( Fingers.IndexFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].leftHandFinger).toBe( Fingers.MiddleFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].leftHandFinger).toBe( Fingers.AnnularFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].leftHandFinger).toBe( Fingers.LittleFinger ); testExportRoundtrip(score); @@ -385,20 +385,20 @@ describe('AlphaTexImporterTest', () => { it('right-hand-finger-single-note', () => { const tex: string = ':8 3.3{rf 1} 3.3{rf 2} 3.3{rf 3} 3.3{rf 4} 3.3{rf 5}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].rightHandFinger).to.equal(Fingers.Thumb); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].rightHandFinger).to.equal( + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].rightHandFinger).toBe(Fingers.Thumb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].rightHandFinger).toBe( Fingers.IndexFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].rightHandFinger).toBe( Fingers.MiddleFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].rightHandFinger).toBe( Fingers.AnnularFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].rightHandFinger).toBe( Fingers.LittleFinger ); testExportRoundtrip(score); @@ -407,21 +407,21 @@ describe('AlphaTexImporterTest', () => { it('left-hand-finger-chord', () => { const tex: string = ':8 (3.1{lf 1} 3.2{lf 2} 3.3{lf 3} 3.4{lf 4} 3.5{lf 5})'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].leftHandFinger).to.equal(Fingers.Thumb); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[1].leftHandFinger).to.equal( + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].leftHandFinger).toBe(Fingers.Thumb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[1].leftHandFinger).toBe( Fingers.IndexFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[2].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[2].leftHandFinger).toBe( Fingers.MiddleFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[3].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[3].leftHandFinger).toBe( Fingers.AnnularFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[4].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[4].leftHandFinger).toBe( Fingers.LittleFinger ); testExportRoundtrip(score); @@ -430,21 +430,21 @@ describe('AlphaTexImporterTest', () => { it('right-hand-finger-chord', () => { const tex: string = ':8 (3.1{rf 1} 3.2{rf 2} 3.3{rf 3} 3.4{rf 4} 3.5{rf 5})'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].rightHandFinger).to.equal(Fingers.Thumb); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[1].rightHandFinger).to.equal( + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].rightHandFinger).toBe(Fingers.Thumb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[1].rightHandFinger).toBe( Fingers.IndexFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[2].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[2].rightHandFinger).toBe( Fingers.MiddleFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[3].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[3].rightHandFinger).toBe( Fingers.AnnularFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[4].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[4].rightHandFinger).toBe( Fingers.LittleFinger ); testExportRoundtrip(score); @@ -453,97 +453,97 @@ describe('AlphaTexImporterTest', () => { it('unstringed', () => { const tex: string = '\\instrument piano . c4 c#4 d4 d#4 | c4 db4 d4 eb4'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPiano).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].realValue).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPiano).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].realValue).to.equal(61); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPiano).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].realValue).to.equal(62); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPiano).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].realValue).to.equal(63); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPiano).to.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].realValue).to.equal(60); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPiano).to.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].realValue).to.equal(61); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPiano).to.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].realValue).to.equal(62); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPiano).to.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].realValue).to.equal(63); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPiano).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].realValue).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPiano).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].realValue).toBe(61); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPiano).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].realValue).toBe(62); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPiano).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].realValue).toBe(63); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPiano).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].realValue).toBe(60); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPiano).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].realValue).toBe(61); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPiano).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].realValue).toBe(62); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPiano).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].realValue).toBe(63); testExportRoundtrip(score); }); it('multi-staff-default-settings', () => { const tex: string = '1.1 | 1.1 | \\staff 2.1 | 2.1'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves.length).to.equal(2); - expect(score.tracks[0].staves[0].showTablature).to.be.equal(true); - expect(score.tracks[0].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); - expect(score.tracks[0].staves[1].showTablature).to.be.equal(true); // default settings used + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves.length).toBe(2); + expect(score.tracks[0].staves[0].showTablature).toBe(true); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[0].bars.length).toBe(2); + expect(score.tracks[0].staves[1].showTablature).toBe(true); // default settings used - expect(score.tracks[0].staves[1].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[1].bars.length).to.equal(2); + expect(score.tracks[0].staves[1].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[1].bars.length).toBe(2); testExportRoundtrip(score); }); it('multi-staff-default-settings-braces', () => { const tex: string = '1.1 | 1.1 | \\staff{} 2.1 | 2.1'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves.length).to.equal(2); - expect(score.tracks[0].staves[0].showTablature).to.be.equal(true); - expect(score.tracks[0].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); - expect(score.tracks[0].staves[1].showTablature).to.be.equal(true); // default settings used + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves.length).toBe(2); + expect(score.tracks[0].staves[0].showTablature).toBe(true); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[0].bars.length).toBe(2); + expect(score.tracks[0].staves[1].showTablature).toBe(true); // default settings used - expect(score.tracks[0].staves[1].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[1].bars.length).to.equal(2); + expect(score.tracks[0].staves[1].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[1].bars.length).toBe(2); testExportRoundtrip(score); }); it('single-staff-with-setting', () => { const tex: string = '\\staff{score} 1.1 | 1.1'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves.length).to.equal(1); - expect(score.tracks[0].staves[0].showTablature).to.be.equal(false); - expect(score.tracks[0].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves.length).toBe(1); + expect(score.tracks[0].staves[0].showTablature).toBe(false); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[0].bars.length).toBe(2); testExportRoundtrip(score); }); it('single-staff-with-slash', () => { const tex: string = '\\staff{slash} 1.1 | 1.1'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves.length).to.equal(1); - expect(score.tracks[0].staves[0].showSlash).to.be.equal(true); - expect(score.tracks[0].staves[0].showTablature).to.be.equal(false); - expect(score.tracks[0].staves[0].showStandardNotation).to.be.equal(false); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves.length).toBe(1); + expect(score.tracks[0].staves[0].showSlash).toBe(true); + expect(score.tracks[0].staves[0].showTablature).toBe(false); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(false); + expect(score.tracks[0].staves[0].bars.length).toBe(2); testExportRoundtrip(score); }); it('single-staff-with-score-and-slash', () => { const tex: string = '\\staff{score slash} 1.1 | 1.1'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves.length).to.equal(1); - expect(score.tracks[0].staves[0].showSlash).to.be.equal(true); - expect(score.tracks[0].staves[0].showTablature).to.be.equal(false); - expect(score.tracks[0].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves.length).toBe(1); + expect(score.tracks[0].staves[0].showSlash).toBe(true); + expect(score.tracks[0].staves[0].showTablature).toBe(false); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[0].bars.length).toBe(2); testExportRoundtrip(score); }); @@ -552,42 +552,42 @@ describe('AlphaTexImporterTest', () => { \\staff{tabs} \\capo 2 2.1 | 2.1 | \\staff{score tabs} \\tuning A1 D2 A2 D3 G3 B3 E4 3.1 | 3.1`; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves.length).to.equal(3); - expect(score.tracks[0].staves[0].showTablature).to.be.equal(false); - expect(score.tracks[0].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); - expect(score.tracks[0].staves[1].showTablature).to.be.equal(true); - expect(score.tracks[0].staves[1].showStandardNotation).to.be.equal(false); - expect(score.tracks[0].staves[1].bars.length).to.equal(2); - expect(score.tracks[0].staves[1].capo).to.equal(2); - expect(score.tracks[0].staves[2].showTablature).to.be.equal(true); - expect(score.tracks[0].staves[2].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[2].bars.length).to.equal(2); - expect(score.tracks[0].staves[2].tuning.length).to.equal(7); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves.length).toBe(3); + expect(score.tracks[0].staves[0].showTablature).toBe(false); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[0].bars.length).toBe(2); + expect(score.tracks[0].staves[1].showTablature).toBe(true); + expect(score.tracks[0].staves[1].showStandardNotation).toBe(false); + expect(score.tracks[0].staves[1].bars.length).toBe(2); + expect(score.tracks[0].staves[1].capo).toBe(2); + expect(score.tracks[0].staves[2].showTablature).toBe(true); + expect(score.tracks[0].staves[2].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[2].bars.length).toBe(2); + expect(score.tracks[0].staves[2].tuning.length).toBe(7); testExportRoundtrip(score); }); it('multi-track', () => { const tex: string = '\\track "First" 1.1 | 1.1 | \\track "Second" 2.2 | 2.2'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(2); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves.length).to.equal(1); - expect(score.tracks[0].name).to.equal('First'); - expect(score.tracks[0].playbackInfo.primaryChannel).to.equal(0); - expect(score.tracks[0].playbackInfo.secondaryChannel).to.equal(1); - expect(score.tracks[0].staves[0].showTablature).to.be.equal(true); - expect(score.tracks[0].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); - expect(score.tracks[1].staves.length).to.equal(1); - expect(score.tracks[1].name).to.equal('Second'); - expect(score.tracks[1].playbackInfo.primaryChannel).to.equal(2); - expect(score.tracks[1].playbackInfo.secondaryChannel).to.equal(3); - expect(score.tracks[1].staves[0].showTablature).to.be.equal(true); - expect(score.tracks[1].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[1].staves[0].bars.length).to.equal(2); + expect(score.tracks.length).toBe(2); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves.length).toBe(1); + expect(score.tracks[0].name).toBe('First'); + expect(score.tracks[0].playbackInfo.primaryChannel).toBe(0); + expect(score.tracks[0].playbackInfo.secondaryChannel).toBe(1); + expect(score.tracks[0].staves[0].showTablature).toBe(true); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[0].bars.length).toBe(2); + expect(score.tracks[1].staves.length).toBe(1); + expect(score.tracks[1].name).toBe('Second'); + expect(score.tracks[1].playbackInfo.primaryChannel).toBe(2); + expect(score.tracks[1].playbackInfo.secondaryChannel).toBe(3); + expect(score.tracks[1].staves[0].showTablature).toBe(true); + expect(score.tracks[1].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[1].staves[0].bars.length).toBe(2); testExportRoundtrip(score); }); @@ -595,32 +595,32 @@ describe('AlphaTexImporterTest', () => { const tex: string = '\\track 1.1 | 1.1 | \\track "Only Long Name" 2.2 | 2.2 | \\track "Very Long Name" "shrt" 3.3 | 3.3 '; const score = parseTex(tex); - expect(score.tracks.length).to.equal(3); - expect(score.masterBars.length).to.equal(2); - expect(score.tracks[0].staves.length).to.equal(1); - expect(score.tracks[0].name).to.equal(''); - expect(score.tracks[0].shortName).to.equal(''); - expect(score.tracks[0].playbackInfo.primaryChannel).to.equal(0); - expect(score.tracks[0].playbackInfo.secondaryChannel).to.equal(1); - expect(score.tracks[0].staves[0].showTablature).to.be.equal(true); - expect(score.tracks[0].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); - expect(score.tracks[1].staves.length).to.equal(1); - expect(score.tracks[1].name).to.equal('Only Long Name'); - expect(score.tracks[1].shortName).to.equal('Only Long '); - expect(score.tracks[1].playbackInfo.primaryChannel).to.equal(2); - expect(score.tracks[1].playbackInfo.secondaryChannel).to.equal(3); - expect(score.tracks[1].staves[0].showTablature).to.be.equal(true); - expect(score.tracks[1].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[1].staves[0].bars.length).to.equal(2); - expect(score.tracks[2].staves.length).to.equal(1); - expect(score.tracks[2].name).to.equal('Very Long Name'); - expect(score.tracks[2].shortName).to.equal('shrt'); - expect(score.tracks[2].playbackInfo.primaryChannel).to.equal(4); - expect(score.tracks[2].playbackInfo.secondaryChannel).to.equal(5); - expect(score.tracks[2].staves[0].showTablature).to.be.equal(true); - expect(score.tracks[2].staves[0].showStandardNotation).to.be.equal(true); - expect(score.tracks[2].staves[0].bars.length).to.equal(2); + expect(score.tracks.length).toBe(3); + expect(score.masterBars.length).toBe(2); + expect(score.tracks[0].staves.length).toBe(1); + expect(score.tracks[0].name).toBe(''); + expect(score.tracks[0].shortName).toBe(''); + expect(score.tracks[0].playbackInfo.primaryChannel).toBe(0); + expect(score.tracks[0].playbackInfo.secondaryChannel).toBe(1); + expect(score.tracks[0].staves[0].showTablature).toBe(true); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[0].staves[0].bars.length).toBe(2); + expect(score.tracks[1].staves.length).toBe(1); + expect(score.tracks[1].name).toBe('Only Long Name'); + expect(score.tracks[1].shortName).toBe('Only Long '); + expect(score.tracks[1].playbackInfo.primaryChannel).toBe(2); + expect(score.tracks[1].playbackInfo.secondaryChannel).toBe(3); + expect(score.tracks[1].staves[0].showTablature).toBe(true); + expect(score.tracks[1].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[1].staves[0].bars.length).toBe(2); + expect(score.tracks[2].staves.length).toBe(1); + expect(score.tracks[2].name).toBe('Very Long Name'); + expect(score.tracks[2].shortName).toBe('shrt'); + expect(score.tracks[2].playbackInfo.primaryChannel).toBe(4); + expect(score.tracks[2].playbackInfo.secondaryChannel).toBe(5); + expect(score.tracks[2].staves[0].showTablature).toBe(true); + expect(score.tracks[2].staves[0].showStandardNotation).toBe(true); + expect(score.tracks[2].staves[0].bars.length).toBe(2); testExportRoundtrip(score); }); @@ -640,62 +640,62 @@ describe('AlphaTexImporterTest', () => { 1.2 3.2 0.1 1.1 `; const score = parseTex(tex); - expect(score.tracks.length).to.equal(3); - expect(score.masterBars.length).to.equal(1); + expect(score.tracks.length).toBe(3); + expect(score.masterBars.length).toBe(1); { const track1: Track = score.tracks[0]; - expect(track1.name).to.equal('Piano'); - expect(track1.staves.length).to.equal(2); - expect(track1.playbackInfo.program).to.equal(0); - expect(track1.playbackInfo.primaryChannel).to.equal(0); - expect(track1.playbackInfo.secondaryChannel).to.equal(1); + expect(track1.name).toBe('Piano'); + expect(track1.staves.length).toBe(2); + expect(track1.playbackInfo.program).toBe(0); + expect(track1.playbackInfo.primaryChannel).toBe(0); + expect(track1.playbackInfo.secondaryChannel).toBe(1); { const staff1: Staff = track1.staves[0]; - expect(staff1.showTablature).to.be.equal(false); - expect(staff1.showStandardNotation).to.be.equal(true); - expect(staff1.tuning.length).to.equal(0); - expect(staff1.bars.length).to.equal(1); - expect(staff1.bars[0].clef).to.equal(Clef.G2); + expect(staff1.showTablature).toBe(false); + expect(staff1.showStandardNotation).toBe(true); + expect(staff1.tuning.length).toBe(0); + expect(staff1.bars.length).toBe(1); + expect(staff1.bars[0].clef).toBe(Clef.G2); } { const staff2: Staff = track1.staves[1]; - expect(staff2.showTablature).to.be.equal(false); - expect(staff2.showStandardNotation).to.be.equal(true); - expect(staff2.tuning.length).to.equal(0); - expect(staff2.bars.length).to.equal(1); - expect(staff2.bars[0].clef).to.equal(Clef.F4); + expect(staff2.showTablature).toBe(false); + expect(staff2.showStandardNotation).toBe(true); + expect(staff2.tuning.length).toBe(0); + expect(staff2.bars.length).toBe(1); + expect(staff2.bars[0].clef).toBe(Clef.F4); } } { const track2: Track = score.tracks[1]; - expect(track2.name).to.equal('Guitar'); - expect(track2.staves.length).to.equal(1); - expect(track2.playbackInfo.program).to.equal(25); - expect(track2.playbackInfo.primaryChannel).to.equal(2); - expect(track2.playbackInfo.secondaryChannel).to.equal(3); + expect(track2.name).toBe('Guitar'); + expect(track2.staves.length).toBe(1); + expect(track2.playbackInfo.program).toBe(25); + expect(track2.playbackInfo.primaryChannel).toBe(2); + expect(track2.playbackInfo.secondaryChannel).toBe(3); { const staff1: Staff = track2.staves[0]; - expect(staff1.showTablature).to.be.equal(true); - expect(staff1.showStandardNotation).to.be.equal(false); - expect(staff1.tuning.length).to.equal(6); - expect(staff1.bars.length).to.equal(1); - expect(staff1.bars[0].clef).to.equal(Clef.G2); + expect(staff1.showTablature).toBe(true); + expect(staff1.showStandardNotation).toBe(false); + expect(staff1.tuning.length).toBe(6); + expect(staff1.bars.length).toBe(1); + expect(staff1.bars[0].clef).toBe(Clef.G2); } } { const track3: Track = score.tracks[2]; - expect(track3.name).to.equal('Second Guitar'); - expect(track3.staves.length).to.equal(1); - expect(track3.playbackInfo.program).to.equal(25); - expect(track3.playbackInfo.primaryChannel).to.equal(4); - expect(track3.playbackInfo.secondaryChannel).to.equal(5); + expect(track3.name).toBe('Second Guitar'); + expect(track3.staves.length).toBe(1); + expect(track3.playbackInfo.program).toBe(25); + expect(track3.playbackInfo.primaryChannel).toBe(4); + expect(track3.playbackInfo.secondaryChannel).toBe(5); { const staff1: Staff = track3.staves[0]; - expect(staff1.showTablature).to.be.equal(true); - expect(staff1.showStandardNotation).to.be.equal(true); - expect(staff1.tuning.length).to.equal(6); - expect(staff1.bars.length).to.equal(1); - expect(staff1.bars[0].clef).to.equal(Clef.G2); + expect(staff1.showTablature).toBe(true); + expect(staff1.showStandardNotation).toBe(true); + expect(staff1.tuning.length).toBe(6); + expect(staff1.bars.length).toBe(1); + expect(staff1.bars[0].clef).toBe(Clef.G2); } } testExportRoundtrip(score); @@ -718,74 +718,74 @@ describe('AlphaTexImporterTest', () => { 1.2 3.2 0.1 1.1 `; const score = parseTex(tex); - expect(score.tracks.length).to.equal(3); - expect(score.masterBars.length).to.equal(3); + expect(score.tracks.length).toBe(3); + expect(score.masterBars.length).toBe(3); { const track1: Track = score.tracks[0]; - expect(track1.name).to.equal('Piano'); - expect(track1.staves.length).to.equal(2); - expect(track1.playbackInfo.program).to.equal(0); - expect(track1.playbackInfo.primaryChannel).to.equal(0); - expect(track1.playbackInfo.secondaryChannel).to.equal(1); + expect(track1.name).toBe('Piano'); + expect(track1.staves.length).toBe(2); + expect(track1.playbackInfo.program).toBe(0); + expect(track1.playbackInfo.primaryChannel).toBe(0); + expect(track1.playbackInfo.secondaryChannel).toBe(1); { const staff1: Staff = track1.staves[0]; - expect(staff1.showTablature).to.be.equal(false); - expect(staff1.showStandardNotation).to.be.equal(true); - expect(staff1.tuning.length).to.equal(0); - expect(staff1.bars.length).to.equal(3); - expect(staff1.bars[0].isEmpty).to.be.equal(false); - expect(staff1.bars[1].isEmpty).to.be.equal(true); - expect(staff1.bars[2].isEmpty).to.be.equal(true); - expect(staff1.bars[0].clef).to.equal(Clef.G2); + expect(staff1.showTablature).toBe(false); + expect(staff1.showStandardNotation).toBe(true); + expect(staff1.tuning.length).toBe(0); + expect(staff1.bars.length).toBe(3); + expect(staff1.bars[0].isEmpty).toBe(false); + expect(staff1.bars[1].isEmpty).toBe(true); + expect(staff1.bars[2].isEmpty).toBe(true); + expect(staff1.bars[0].clef).toBe(Clef.G2); } { const staff2: Staff = track1.staves[1]; - expect(staff2.showTablature).to.be.equal(false); - expect(staff2.showStandardNotation).to.be.equal(true); - expect(staff2.tuning.length).to.equal(0); - expect(staff2.bars.length).to.equal(3); - expect(staff2.bars[0].isEmpty).to.be.equal(false); - expect(staff2.bars[1].isEmpty).to.be.equal(false); - expect(staff2.bars[2].isEmpty).to.be.equal(false); - expect(staff2.bars[0].clef).to.equal(Clef.F4); + expect(staff2.showTablature).toBe(false); + expect(staff2.showStandardNotation).toBe(true); + expect(staff2.tuning.length).toBe(0); + expect(staff2.bars.length).toBe(3); + expect(staff2.bars[0].isEmpty).toBe(false); + expect(staff2.bars[1].isEmpty).toBe(false); + expect(staff2.bars[2].isEmpty).toBe(false); + expect(staff2.bars[0].clef).toBe(Clef.F4); } } { const track2: Track = score.tracks[1]; - expect(track2.name).to.equal('Guitar'); - expect(track2.staves.length).to.equal(1); - expect(track2.playbackInfo.program).to.equal(25); - expect(track2.playbackInfo.primaryChannel).to.equal(2); - expect(track2.playbackInfo.secondaryChannel).to.equal(3); + expect(track2.name).toBe('Guitar'); + expect(track2.staves.length).toBe(1); + expect(track2.playbackInfo.program).toBe(25); + expect(track2.playbackInfo.primaryChannel).toBe(2); + expect(track2.playbackInfo.secondaryChannel).toBe(3); { const staff1: Staff = track2.staves[0]; - expect(staff1.showTablature).to.be.equal(true); - expect(staff1.showStandardNotation).to.be.equal(false); - expect(staff1.tuning.length).to.equal(6); - expect(staff1.bars.length).to.equal(3); - expect(staff1.bars[0].isEmpty).to.be.equal(false); - expect(staff1.bars[1].isEmpty).to.be.equal(false); - expect(staff1.bars[2].isEmpty).to.be.equal(true); - expect(staff1.bars[0].clef).to.equal(Clef.G2); + expect(staff1.showTablature).toBe(true); + expect(staff1.showStandardNotation).toBe(false); + expect(staff1.tuning.length).toBe(6); + expect(staff1.bars.length).toBe(3); + expect(staff1.bars[0].isEmpty).toBe(false); + expect(staff1.bars[1].isEmpty).toBe(false); + expect(staff1.bars[2].isEmpty).toBe(true); + expect(staff1.bars[0].clef).toBe(Clef.G2); } } { const track3: Track = score.tracks[2]; - expect(track3.name).to.equal('Second Guitar'); - expect(track3.staves.length).to.equal(1); - expect(track3.playbackInfo.program).to.equal(25); - expect(track3.playbackInfo.primaryChannel).to.equal(4); - expect(track3.playbackInfo.secondaryChannel).to.equal(5); + expect(track3.name).toBe('Second Guitar'); + expect(track3.staves.length).toBe(1); + expect(track3.playbackInfo.program).toBe(25); + expect(track3.playbackInfo.primaryChannel).toBe(4); + expect(track3.playbackInfo.secondaryChannel).toBe(5); { const staff1: Staff = track3.staves[0]; - expect(staff1.showTablature).to.be.equal(true); - expect(staff1.showStandardNotation).to.be.equal(true); - expect(staff1.tuning.length).to.equal(6); - expect(staff1.bars.length).to.equal(3); - expect(staff1.bars[0].isEmpty).to.be.equal(false); - expect(staff1.bars[1].isEmpty).to.be.equal(true); - expect(staff1.bars[2].isEmpty).to.be.equal(true); - expect(staff1.bars[0].clef).to.equal(Clef.G2); + expect(staff1.showTablature).toBe(true); + expect(staff1.showStandardNotation).toBe(true); + expect(staff1.tuning.length).toBe(6); + expect(staff1.bars.length).toBe(3); + expect(staff1.bars[0].isEmpty).toBe(false); + expect(staff1.bars[1].isEmpty).toBe(true); + expect(staff1.bars[2].isEmpty).toBe(true); + expect(staff1.bars[0].clef).toBe(Clef.G2); } } testExportRoundtrip(score); @@ -794,32 +794,32 @@ describe('AlphaTexImporterTest', () => { it('slides', () => { const tex: string = '3.3{sl} 4.3 | 3.3{ss} 4.3 | 3.3{sib} 3.3{sia} 3.3{sou} 3.3{sod} | 3.3{psd} 3.3{psu}'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].slideOutType).to.equal( + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].slideOutType).toBe( SlideOutType.Legato ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].slideTarget!.id).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].slideTarget!.id).toBe( score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].id ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].slideOutType).to.equal(SlideOutType.Shift); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].slideTarget!.id).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].slideOutType).toBe(SlideOutType.Shift); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].slideTarget!.id).toBe( score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].id ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].slideInType).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].slideInType).toBe( SlideInType.IntoFromBelow ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].notes[0].slideInType).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].notes[0].slideInType).toBe( SlideInType.IntoFromAbove ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].notes[0].slideOutType).to.equal(SlideOutType.OutUp); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].notes[0].slideOutType).toBe(SlideOutType.OutUp); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].notes[0].slideOutType).toBe( SlideOutType.OutDown ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].notes[0].slideOutType).toBe( SlideOutType.PickSlideUp ); testExportRoundtrip(score); @@ -828,18 +828,18 @@ describe('AlphaTexImporterTest', () => { it('section', () => { const tex: string = '\\section Intro 1.1 | 1.1 | \\section "Chorus 01" 1.1 | \\section S Solo'; const score = parseTex(tex); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(4); - expect(score.masterBars[0].isSectionStart).to.be.equal(true); - expect(score.masterBars[0].section!.text).to.equal('Intro'); - expect(score.masterBars[0].section!.marker).to.equal(''); - expect(score.masterBars[1].isSectionStart).to.be.equal(false); - expect(score.masterBars[2].isSectionStart).to.be.equal(true); - expect(score.masterBars[2].section!.text).to.equal('Chorus 01'); - expect(score.masterBars[2].section!.marker).to.equal(''); - expect(score.masterBars[3].isSectionStart).to.be.equal(true); - expect(score.masterBars[3].section!.text).to.equal('Solo'); - expect(score.masterBars[3].section!.marker).to.equal('S'); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(4); + expect(score.masterBars[0].isSectionStart).toBe(true); + expect(score.masterBars[0].section!.text).toBe('Intro'); + expect(score.masterBars[0].section!.marker).toBe(''); + expect(score.masterBars[1].isSectionStart).toBe(false); + expect(score.masterBars[2].isSectionStart).toBe(true); + expect(score.masterBars[2].section!.text).toBe('Chorus 01'); + expect(score.masterBars[2].section!.marker).toBe(''); + expect(score.masterBars[3].isSectionStart).toBe(true); + expect(score.masterBars[3].section!.text).toBe('Solo'); + expect(score.masterBars[3].section!.marker).toBe('S'); testExportRoundtrip(score); }); @@ -870,8 +870,8 @@ describe('AlphaTexImporterTest', () => { ]; for (let i = 0; i < expected.length; i++) { - expect(bars[i].keySignature).to.equal(expected[i][0]); - expect(bars[i].keySignatureType).to.equal(expected[i][1]); + expect(bars[i].keySignature).toBe(expected[i][0]); + expect(bars[i].keySignatureType).toBe(expected[i][1]); } testExportRoundtrip(score); }); @@ -911,15 +911,15 @@ describe('AlphaTexImporterTest', () => { ]; for (let i = 0; i < expected.length; i++) { - expect(bars[i].keySignature).to.equal(expected[i][0]); - expect(bars[i].keySignatureType).to.equal(expected[i][1]); + expect(bars[i].keySignature).toBe(expected[i][0]); + expect(bars[i].keySignatureType).toBe(expected[i][1]); } bars = score.tracks[0].staves[1].bars; expected.reverse(); for (let i = 0; i < expected.length; i++) { - expect(bars[i].keySignature).to.equal(expected[i][0], `at ${i}`); - expect(bars[i].keySignatureType).to.equal(expected[i][1], `at ${i}`); + expect(bars[i].keySignature, `at ${i}`).toBe(expected[i][0]); + expect(bars[i].keySignatureType, `at ${i}`).toBe(expected[i][1]); } testExportRoundtrip(score); }); @@ -927,22 +927,22 @@ describe('AlphaTexImporterTest', () => { it('pop-slap-tap', () => { const tex: string = '3.3{p} 3.3{s} 3.3{tt} r'; const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].pop).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].slap).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tap).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].pop).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].slap).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tap).toBe(true); testExportRoundtrip(score); }); it('triplet-feel-numeric', () => { const tex: string = '\\tf 0 | \\tf 1 | \\tf 2 | \\tf 3 | \\tf 4 | \\tf 5 | \\tf 6'; const score = parseTex(tex); - expect(score.masterBars[0].tripletFeel).to.equal(TripletFeel.NoTripletFeel); - expect(score.masterBars[1].tripletFeel).to.equal(TripletFeel.Triplet16th); - expect(score.masterBars[2].tripletFeel).to.equal(TripletFeel.Triplet8th); - expect(score.masterBars[3].tripletFeel).to.equal(TripletFeel.Dotted16th); - expect(score.masterBars[4].tripletFeel).to.equal(TripletFeel.Dotted8th); - expect(score.masterBars[5].tripletFeel).to.equal(TripletFeel.Scottish16th); - expect(score.masterBars[6].tripletFeel).to.equal(TripletFeel.Scottish8th); + expect(score.masterBars[0].tripletFeel).toBe(TripletFeel.NoTripletFeel); + expect(score.masterBars[1].tripletFeel).toBe(TripletFeel.Triplet16th); + expect(score.masterBars[2].tripletFeel).toBe(TripletFeel.Triplet8th); + expect(score.masterBars[3].tripletFeel).toBe(TripletFeel.Dotted16th); + expect(score.masterBars[4].tripletFeel).toBe(TripletFeel.Dotted8th); + expect(score.masterBars[5].tripletFeel).toBe(TripletFeel.Scottish16th); + expect(score.masterBars[6].tripletFeel).toBe(TripletFeel.Scottish8th); testExportRoundtrip(score); }); @@ -950,41 +950,41 @@ describe('AlphaTexImporterTest', () => { const tex: string = '\\tf none | \\tf triplet-16th | \\tf triplet-8th | \\tf dotted-16th | \\tf dotted-8th | \\tf scottish-16th | \\tf scottish-8th'; const score = parseTex(tex); - expect(score.masterBars[0].tripletFeel).to.equal(TripletFeel.NoTripletFeel); - expect(score.masterBars[1].tripletFeel).to.equal(TripletFeel.Triplet16th); - expect(score.masterBars[2].tripletFeel).to.equal(TripletFeel.Triplet8th); - expect(score.masterBars[3].tripletFeel).to.equal(TripletFeel.Dotted16th); - expect(score.masterBars[4].tripletFeel).to.equal(TripletFeel.Dotted8th); - expect(score.masterBars[5].tripletFeel).to.equal(TripletFeel.Scottish16th); - expect(score.masterBars[6].tripletFeel).to.equal(TripletFeel.Scottish8th); + expect(score.masterBars[0].tripletFeel).toBe(TripletFeel.NoTripletFeel); + expect(score.masterBars[1].tripletFeel).toBe(TripletFeel.Triplet16th); + expect(score.masterBars[2].tripletFeel).toBe(TripletFeel.Triplet8th); + expect(score.masterBars[3].tripletFeel).toBe(TripletFeel.Dotted16th); + expect(score.masterBars[4].tripletFeel).toBe(TripletFeel.Dotted8th); + expect(score.masterBars[5].tripletFeel).toBe(TripletFeel.Scottish16th); + expect(score.masterBars[6].tripletFeel).toBe(TripletFeel.Scottish8th); testExportRoundtrip(score); }); it('triplet-feel-short-names', () => { const tex: string = '\\tf no | \\tf t16 | \\tf t8 | \\tf d16 | \\tf d8 | \\tf s16 | \\tf s8'; const score = parseTex(tex); - expect(score.masterBars[0].tripletFeel).to.equal(TripletFeel.NoTripletFeel); - expect(score.masterBars[1].tripletFeel).to.equal(TripletFeel.Triplet16th); - expect(score.masterBars[2].tripletFeel).to.equal(TripletFeel.Triplet8th); - expect(score.masterBars[3].tripletFeel).to.equal(TripletFeel.Dotted16th); - expect(score.masterBars[4].tripletFeel).to.equal(TripletFeel.Dotted8th); - expect(score.masterBars[5].tripletFeel).to.equal(TripletFeel.Scottish16th); - expect(score.masterBars[6].tripletFeel).to.equal(TripletFeel.Scottish8th); + expect(score.masterBars[0].tripletFeel).toBe(TripletFeel.NoTripletFeel); + expect(score.masterBars[1].tripletFeel).toBe(TripletFeel.Triplet16th); + expect(score.masterBars[2].tripletFeel).toBe(TripletFeel.Triplet8th); + expect(score.masterBars[3].tripletFeel).toBe(TripletFeel.Dotted16th); + expect(score.masterBars[4].tripletFeel).toBe(TripletFeel.Dotted8th); + expect(score.masterBars[5].tripletFeel).toBe(TripletFeel.Scottish16th); + expect(score.masterBars[6].tripletFeel).toBe(TripletFeel.Scottish8th); testExportRoundtrip(score); }); it('triplet-feel-multi-bar', () => { const tex: string = '\\tf t16 C4 | C4 | C4 | \\tf t8 C4 | C4 | C4 | \\tf no | C4 | C4 '; const score = parseTex(tex); - expect(score.masterBars[0].tripletFeel).to.equal(TripletFeel.Triplet16th); - expect(score.masterBars[1].tripletFeel).to.equal(TripletFeel.Triplet16th); - expect(score.masterBars[2].tripletFeel).to.equal(TripletFeel.Triplet16th); - expect(score.masterBars[3].tripletFeel).to.equal(TripletFeel.Triplet8th); - expect(score.masterBars[4].tripletFeel).to.equal(TripletFeel.Triplet8th); - expect(score.masterBars[5].tripletFeel).to.equal(TripletFeel.Triplet8th); - expect(score.masterBars[6].tripletFeel).to.equal(TripletFeel.NoTripletFeel); - expect(score.masterBars[7].tripletFeel).to.equal(TripletFeel.NoTripletFeel); - expect(score.masterBars[8].tripletFeel).to.equal(TripletFeel.NoTripletFeel); + expect(score.masterBars[0].tripletFeel).toBe(TripletFeel.Triplet16th); + expect(score.masterBars[1].tripletFeel).toBe(TripletFeel.Triplet16th); + expect(score.masterBars[2].tripletFeel).toBe(TripletFeel.Triplet16th); + expect(score.masterBars[3].tripletFeel).toBe(TripletFeel.Triplet8th); + expect(score.masterBars[4].tripletFeel).toBe(TripletFeel.Triplet8th); + expect(score.masterBars[5].tripletFeel).toBe(TripletFeel.Triplet8th); + expect(score.masterBars[6].tripletFeel).toBe(TripletFeel.NoTripletFeel); + expect(score.masterBars[7].tripletFeel).toBe(TripletFeel.NoTripletFeel); + expect(score.masterBars[8].tripletFeel).toBe(TripletFeel.NoTripletFeel); testExportRoundtrip(score); }); @@ -996,16 +996,16 @@ describe('AlphaTexImporterTest', () => { let i: number = 0; let b: Beat | null = score.tracks[0].staves[0].bars[0].voices[0].beats[0]; while (b) { - expect(b.duration).to.equal(durations[i], `Duration on beat ${i} was wrong`); + expect(b.duration, `Duration on beat ${i} was wrong`).toBe(durations[i]); if (tuplets[i] === 1) { - expect(b.hasTuplet).to.be.equal(false); + expect(b.hasTuplet).toBe(false); } else { - expect(b.tupletNumerator).to.equal(tuplets[i], `Tuplet on beat ${i} was wrong`); + expect(b.tupletNumerator, `Tuplet on beat ${i} was wrong`).toBe(tuplets[i]); } b = b.nextBeat; i++; } - expect(i).to.equal(durations.length); + expect(i).toBe(durations.length); testExportRoundtrip(score); }); @@ -1018,8 +1018,8 @@ describe('AlphaTexImporterTest', () => { let i: number = 0; let b: Beat | null = score.tracks[0].staves[0].bars[0].voices[0].beats[0]; while (b) { - expect(b.tupletNumerator).to.equal(tupletNumerators[i], `Tuplet on beat ${i} was wrong`); - expect(b.tupletDenominator).to.equal(tupletDenominators[i], `Tuplet on beat ${i} was wrong`); + expect(b.tupletNumerator, `Tuplet on beat ${i} was wrong`).toBe(tupletNumerators[i]); + expect(b.tupletDenominator, `Tuplet on beat ${i} was wrong`).toBe(tupletDenominators[i]); b = b.nextBeat; i++; } @@ -1029,34 +1029,34 @@ describe('AlphaTexImporterTest', () => { it('simple-anacrusis', () => { const tex: string = '\\ac 3.3 3.3 | 1.1 2.1 3.1 4.1'; const score = parseTex(tex); - expect(score.masterBars[0].isAnacrusis).to.be.equal(true); - expect(score.masterBars[0].calculateDuration()).to.equal(1920); - expect(score.masterBars[1].calculateDuration()).to.equal(3840); + expect(score.masterBars[0].isAnacrusis).toBe(true); + expect(score.masterBars[0].calculateDuration()).toBe(1920); + expect(score.masterBars[1].calculateDuration()).toBe(3840); testExportRoundtrip(score); }); it('multi-bar-anacrusis', () => { const tex: string = '\\ac 3.3 3.3 | \\ac 3.3 3.3 | 1.1 2.1 3.1 4.1'; const score = parseTex(tex); - expect(score.masterBars[0].isAnacrusis).to.be.equal(true); - expect(score.masterBars[1].isAnacrusis).to.be.equal(true); - expect(score.masterBars[0].calculateDuration()).to.equal(1920); - expect(score.masterBars[1].calculateDuration()).to.equal(1920); - expect(score.masterBars[2].calculateDuration()).to.equal(3840); + expect(score.masterBars[0].isAnacrusis).toBe(true); + expect(score.masterBars[1].isAnacrusis).toBe(true); + expect(score.masterBars[0].calculateDuration()).toBe(1920); + expect(score.masterBars[1].calculateDuration()).toBe(1920); + expect(score.masterBars[2].calculateDuration()).toBe(3840); testExportRoundtrip(score); }); it('random-anacrusis', () => { const tex: string = '\\ac 3.3 3.3 | 1.1 2.1 3.1 4.1 | \\ac 3.3 3.3 | 1.1 2.1 3.1 4.1'; const score = parseTex(tex); - expect(score.masterBars[0].isAnacrusis).to.be.equal(true); - expect(score.masterBars[1].isAnacrusis).to.be.equal(false); - expect(score.masterBars[2].isAnacrusis).to.be.equal(true); - expect(score.masterBars[3].isAnacrusis).to.be.equal(false); - expect(score.masterBars[0].calculateDuration()).to.equal(1920); - expect(score.masterBars[1].calculateDuration()).to.equal(3840); - expect(score.masterBars[2].calculateDuration()).to.equal(1920); - expect(score.masterBars[3].calculateDuration()).to.equal(3840); + expect(score.masterBars[0].isAnacrusis).toBe(true); + expect(score.masterBars[1].isAnacrusis).toBe(false); + expect(score.masterBars[2].isAnacrusis).toBe(true); + expect(score.masterBars[3].isAnacrusis).toBe(false); + expect(score.masterBars[0].calculateDuration()).toBe(1920); + expect(score.masterBars[1].calculateDuration()).toBe(3840); + expect(score.masterBars[2].calculateDuration()).toBe(1920); + expect(score.masterBars[3].calculateDuration()).toBe(3840); testExportRoundtrip(score); }); @@ -1064,29 +1064,29 @@ describe('AlphaTexImporterTest', () => { const tex: string = '\\ro 1.3 2.3 3.3 4.3 | 5.3 6.3 7.3 8.3 | \\rc 2 1.3 2.3 3.3 4.3 | \\ro \\rc 3 1.3 2.3 3.3 4.3 |'; const score = parseTex(tex); - expect(score.masterBars[0].isRepeatStart).to.be.equal(true); - expect(score.masterBars[1].isRepeatStart).to.be.equal(false); - expect(score.masterBars[2].isRepeatStart).to.be.equal(false); - expect(score.masterBars[3].isRepeatStart).to.be.equal(true); - expect(score.masterBars[0].repeatCount).to.equal(0); - expect(score.masterBars[1].repeatCount).to.equal(0); - expect(score.masterBars[2].repeatCount).to.equal(2); - expect(score.masterBars[3].repeatCount).to.equal(3); + expect(score.masterBars[0].isRepeatStart).toBe(true); + expect(score.masterBars[1].isRepeatStart).toBe(false); + expect(score.masterBars[2].isRepeatStart).toBe(false); + expect(score.masterBars[3].isRepeatStart).toBe(true); + expect(score.masterBars[0].repeatCount).toBe(0); + expect(score.masterBars[1].repeatCount).toBe(0); + expect(score.masterBars[2].repeatCount).toBe(2); + expect(score.masterBars[3].repeatCount).toBe(3); testExportRoundtrip(score); }); it('alternate-endings', () => { const tex: string = '\\ro 4.3*4 | \\ae (1 2 3) 6.3*4 | \\ae 4 \\rc 4 6.3 6.3 6.3 5.3 |'; const score = parseTex(tex); - expect(score.masterBars[0].isRepeatStart).to.be.equal(true); - expect(score.masterBars[1].isRepeatStart).to.be.equal(false); - expect(score.masterBars[2].isRepeatStart).to.be.equal(false); - expect(score.masterBars[0].repeatCount).to.equal(0); - expect(score.masterBars[1].repeatCount).to.equal(0); - expect(score.masterBars[2].repeatCount).to.equal(4); - expect(score.masterBars[0].alternateEndings).to.equal(0b0000); - expect(score.masterBars[1].alternateEndings).to.equal(0b0111); - expect(score.masterBars[2].alternateEndings).to.equal(0b1000); + expect(score.masterBars[0].isRepeatStart).toBe(true); + expect(score.masterBars[1].isRepeatStart).toBe(false); + expect(score.masterBars[2].isRepeatStart).toBe(false); + expect(score.masterBars[0].repeatCount).toBe(0); + expect(score.masterBars[1].repeatCount).toBe(0); + expect(score.masterBars[2].repeatCount).toBe(4); + expect(score.masterBars[0].alternateEndings).toBe(0b0000); + expect(score.masterBars[1].alternateEndings).toBe(0b0111); + expect(score.masterBars[2].alternateEndings).toBe(0b1000); testExportRoundtrip(score); }); @@ -1099,24 +1099,24 @@ describe('AlphaTexImporterTest', () => { \\ae (1 3) 1.1.1 | \\ae 2 \\rc 3 2.1 | `; const score = parseTex(tex); - expect(score.masterBars[0].isRepeatStart).to.be.equal(true); + expect(score.masterBars[0].isRepeatStart).toBe(true); for (let i = 1; i <= 9; i++) { - expect(score.masterBars[i].isRepeatStart).to.be.equal(false); + expect(score.masterBars[i].isRepeatStart).toBe(false); } for (let i = 0; i <= 8; i++) { - expect(score.masterBars[i].repeatCount).to.equal(0); + expect(score.masterBars[i].repeatCount).toBe(0); } - expect(score.masterBars[9].repeatCount).to.equal(3); - expect(score.masterBars[0].alternateEndings).to.equal(0b001); - expect(score.masterBars[1].alternateEndings).to.equal(0b010); - expect(score.masterBars[2].alternateEndings).to.equal(0b100); - expect(score.masterBars[3].alternateEndings).to.equal(0b000); - expect(score.masterBars[4].alternateEndings).to.equal(0b001); - expect(score.masterBars[5].alternateEndings).to.equal(0b010); - expect(score.masterBars[6].alternateEndings).to.equal(0b100); - expect(score.masterBars[7].alternateEndings).to.equal(0b000); - expect(score.masterBars[8].alternateEndings).to.equal(0b101); - expect(score.masterBars[9].alternateEndings).to.equal(0b010); + expect(score.masterBars[9].repeatCount).toBe(3); + expect(score.masterBars[0].alternateEndings).toBe(0b001); + expect(score.masterBars[1].alternateEndings).toBe(0b010); + expect(score.masterBars[2].alternateEndings).toBe(0b100); + expect(score.masterBars[3].alternateEndings).toBe(0b000); + expect(score.masterBars[4].alternateEndings).toBe(0b001); + expect(score.masterBars[5].alternateEndings).toBe(0b010); + expect(score.masterBars[6].alternateEndings).toBe(0b100); + expect(score.masterBars[7].alternateEndings).toBe(0b000); + expect(score.masterBars[8].alternateEndings).toBe(0b101); + expect(score.masterBars[9].alternateEndings).toBe(0b010); testExportRoundtrip(score); }); @@ -1133,101 +1133,101 @@ describe('AlphaTexImporterTest', () => { `; const score = parseTex(tex); - expect(score.tracks[0].staves[0].transpositionPitch).to.equal(0); - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(0); - expect(score.tracks[0].staves[1].transpositionPitch).to.equal(0); - expect(score.tracks[0].staves[1].displayTranspositionPitch).to.equal(0); - expect(score.tracks[1].staves[0].transpositionPitch).to.equal(0); - expect(score.tracks[1].staves[0].displayTranspositionPitch).to.equal(-12); + expect(score.tracks[0].staves[0].transpositionPitch).toBe(0); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(0); + expect(score.tracks[0].staves[1].transpositionPitch).toBe(0); + expect(score.tracks[0].staves[1].displayTranspositionPitch).toBe(0); + expect(score.tracks[1].staves[0].transpositionPitch).toBe(0); + expect(score.tracks[1].staves[0].displayTranspositionPitch).toBe(-12); testExportRoundtrip(score); }); it('dynamics', () => { const tex: string = '1.1.8{dy ppp} 1.1{dy pp} 1.1{dy p} 1.1{dy mp} 1.1{dy mf} 1.1{dy f} 1.1{dy ff} 1.1{dy fff}'; const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].dynamics).to.equal(DynamicValue.PPP); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].dynamics).to.equal(DynamicValue.PP); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].dynamics).to.equal(DynamicValue.P); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].dynamics).to.equal(DynamicValue.MP); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].dynamics).to.equal(DynamicValue.MF); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[5].dynamics).to.equal(DynamicValue.F); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[6].dynamics).to.equal(DynamicValue.FF); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[7].dynamics).to.equal(DynamicValue.FFF); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].dynamics).toBe(DynamicValue.PPP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].dynamics).toBe(DynamicValue.PP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].dynamics).toBe(DynamicValue.P); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].dynamics).toBe(DynamicValue.MP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].dynamics).toBe(DynamicValue.MF); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[5].dynamics).toBe(DynamicValue.F); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[6].dynamics).toBe(DynamicValue.FF); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[7].dynamics).toBe(DynamicValue.FFF); testExportRoundtrip(score); }); it('dynamics-auto', () => { const tex: string = '1.1.4{dy ppp} 1.1 1.1{dy mp} 1.1'; const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].dynamics).to.equal(DynamicValue.PPP); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].dynamics).to.equal(DynamicValue.PPP); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].dynamics).to.equal(DynamicValue.MP); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].dynamics).to.equal(DynamicValue.MP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].dynamics).toBe(DynamicValue.PPP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].dynamics).toBe(DynamicValue.PPP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].dynamics).toBe(DynamicValue.MP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].dynamics).toBe(DynamicValue.MP); testExportRoundtrip(score); }); it('dynamics-auto-reset-on-track', () => { const tex: string = '1.1.4{dy ppp} 1.1 \\track "Second" 1.1.4'; const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].dynamics).to.equal(DynamicValue.PPP); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].dynamics).to.equal(DynamicValue.PPP); - expect(score.tracks[1].staves[0].bars[0].voices[0].beats[0].dynamics).to.equal(DynamicValue.F); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].dynamics).toBe(DynamicValue.PPP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].dynamics).toBe(DynamicValue.PPP); + expect(score.tracks[1].staves[0].bars[0].voices[0].beats[0].dynamics).toBe(DynamicValue.F); testExportRoundtrip(score); }); it('dynamics-auto-reset-on-staff', () => { const tex: string = '1.1.4{dy ppp} 1.1 \\staff 1.1.4'; const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].dynamics).to.equal(DynamicValue.PPP); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].dynamics).to.equal(DynamicValue.PPP); - expect(score.tracks[0].staves[1].bars[0].voices[0].beats[0].dynamics).to.equal(DynamicValue.F); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].dynamics).toBe(DynamicValue.PPP); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].dynamics).toBe(DynamicValue.PPP); + expect(score.tracks[0].staves[1].bars[0].voices[0].beats[0].dynamics).toBe(DynamicValue.F); testExportRoundtrip(score); }); it('crescendo', () => { const tex: string = '1.1.4{dec} 1.1{dec} 1.1{cre} 1.1{cre}'; const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].crescendo).to.equal(CrescendoType.Decrescendo); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].crescendo).to.equal(CrescendoType.Decrescendo); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].crescendo).to.equal(CrescendoType.Crescendo); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].crescendo).to.equal(CrescendoType.Crescendo); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].crescendo).toBe(CrescendoType.Decrescendo); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].crescendo).toBe(CrescendoType.Decrescendo); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].crescendo).toBe(CrescendoType.Crescendo); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].crescendo).toBe(CrescendoType.Crescendo); testExportRoundtrip(score); }); it('left-hand-tapping', () => { const tex: string = ':4 1.1{lht} 1.1 1.1{lht} 1.1'; const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isLeftHandTapped).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isLeftHandTapped).to.equal(false); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isLeftHandTapped).to.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isLeftHandTapped).to.equal(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isLeftHandTapped).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isLeftHandTapped).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isLeftHandTapped).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isLeftHandTapped).toBe(false); testExportRoundtrip(score); }); it('expect-invalid-format-xml', () => { - expect(() => parseTex('')).to.throw(UnsupportedFormatError); + expect(() => parseTex('')).toThrow(UnsupportedFormatError); }); it('expect-invalid-format-other-text', () => { - expect(() => parseTex('This is not an alphaTex file')).to.throw(UnsupportedFormatError); + expect(() => parseTex('This is not an alphaTex file')).toThrow(UnsupportedFormatError); }); it('auto-detect-tuning-from-instrument', () => { let score = parseTex('\\instrument acousticguitarsteel . 3.3'); - expect(score.tracks[0].staves[0].tuning.length).to.equal(6); - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(-12); + expect(score.tracks[0].staves[0].tuning.length).toBe(6); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(-12); score = parseTex('\\instrument acousticbass . 3.3'); - expect(score.tracks[0].staves[0].tuning.length).to.equal(4); - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(-12); + expect(score.tracks[0].staves[0].tuning.length).toBe(4); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(-12); score = parseTex('\\instrument violin . 3.3'); - expect(score.tracks[0].staves[0].tuning.length).to.equal(4); - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(0); + expect(score.tracks[0].staves[0].tuning.length).toBe(4); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(0); score = parseTex('\\instrument acousticpiano . C4'); - expect(score.tracks[0].staves[0].tuning.length).to.equal(0); - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(0); + expect(score.tracks[0].staves[0].tuning.length).toBe(0); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(0); }); it('multibyte-encoding', () => { @@ -1238,20 +1238,20 @@ describe('AlphaTexImporterTest', () => { \\lyrics "Test Lyrics 🤘" (1.2 1.1).4 x.2.8 0.1 1.1 | 1.2 3.2 0.1 1.1`); - expect(score.title).to.equal(multiByteChars); - expect(score.tracks[0].name).to.equal('🎸'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics![0]).to.equal('🤘'); + expect(score.title).toBe(multiByteChars); + expect(score.tracks[0].name).toBe('🎸'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics![0]).toBe('🤘'); testExportRoundtrip(score); }); function runSectionNoteSymbolTest(noteSymbol: string) { const score = parseTex(`1.3.4 * 4 | \\section "Verse" ${noteSymbol}.1 | 2.3.4*4`); - expect(score.masterBars.length).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(4); - expect(score.masterBars[1].section!.text).to.equal('Verse'); - expect(score.masterBars[1].section!.marker).to.equal(''); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).to.equal(1); + expect(score.masterBars.length).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(4); + expect(score.masterBars[1].section!.text).toBe('Verse'); + expect(score.masterBars[1].section!.marker).toBe(''); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).toBe(1); } it('does-not-interpret-note-symbols-on-section', () => { @@ -1275,66 +1275,66 @@ describe('AlphaTexImporterTest', () => { for (const _i of [1, 2]) { importer.initFromString(tex, new Settings()); const score = importer.readScore(); - expect(score.title).to.equal('Test'); - expect(score.words).to.equal('test'); - expect(score.music).to.equal('alphaTab'); - expect(score.copyright).to.equal('test'); - expect(score.tempo).to.equal(200); - expect(score.tracks.length).to.equal(1); - expect(score.tracks[0].playbackInfo.program).to.equal(30); - expect(score.tracks[0].staves[0].capo).to.equal(2); - expect(score.tracks[0].staves[0].tuning.join(',')).to.equal('55,38,43,47,50,69'); - expect(score.masterBars.length).to.equal(2); + expect(score.title).toBe('Test'); + expect(score.words).toBe('test'); + expect(score.music).toBe('alphaTab'); + expect(score.copyright).toBe('test'); + expect(score.tempo).toBe(200); + expect(score.tracks.length).toBe(1); + expect(score.tracks[0].playbackInfo.program).toBe(30); + expect(score.tracks[0].staves[0].capo).toBe(2); + expect(score.tracks[0].staves[0].tuning.join(',')).toBe('55,38,43,47,50,69'); + expect(score.masterBars.length).toBe(2); // bars[0] - expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].duration).to.equal(Duration.Half); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].string).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].duration).to.equal(Duration.Quarter); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].string).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].duration).to.equal(Duration.Quarter); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].string).to.equal(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats.length).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].duration).toBe(Duration.Half); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].string).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].duration).toBe(Duration.Quarter); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].string).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].duration).toBe(Duration.Quarter); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].string).toBe(3); // bars[1] - expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].string).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].string).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].string).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].string).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].notes.length).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].duration).to.equal(Duration.Half); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].isRest).to.equal(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats.length).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].string).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].string).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].string).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes.length).toBe(1); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].string).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].notes.length).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].duration).toBe(Duration.Half); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].isRest).toBe(true); } }); it('tempo-as-float', () => { const score = parseTex('\\tempo 112.5 .'); - expect(score.tempo).to.equal(112.5); + expect(score.tempo).toBe(112.5); testExportRoundtrip(score); }); it('tempo-as-float-in-bar', () => { const score = parseTex('\\tempo 112 . 3.3.1 | \\tempo 333.3 3.3'); - expect(score.tempo).to.equal(112); - expect(score.tracks[0].staves[0].bars[1].masterBar.tempoAutomations[0]?.value).to.equal(333.3); + expect(score.tempo).toBe(112); + expect(score.tracks[0].staves[0].bars[1].masterBar.tempoAutomations[0]?.value).toBe(333.3); testExportRoundtrip(score); }); @@ -1344,16 +1344,16 @@ describe('AlphaTexImporterTest', () => { . 30 31 33 34 `); - expect(score.tracks[0].playbackInfo.primaryChannel).to.equal(9); - expect(score.tracks[0].staves[0].isPercussion).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).to.equal(0); - expect(score.tracks[0].percussionArticulations[0].outputMidiNumber).to.equal(49); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).to.equal(1); - expect(score.tracks[0].percussionArticulations[1].outputMidiNumber).to.equal(40); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).to.equal(2); - expect(score.tracks[0].percussionArticulations[2].outputMidiNumber).to.equal(37); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).to.equal(3); - expect(score.tracks[0].percussionArticulations[3].outputMidiNumber).to.equal(38); + expect(score.tracks[0].playbackInfo.primaryChannel).toBe(9); + expect(score.tracks[0].staves[0].isPercussion).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).toBe(0); + expect(score.tracks[0].percussionArticulations[0].outputMidiNumber).toBe(49); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).toBe(1); + expect(score.tracks[0].percussionArticulations[1].outputMidiNumber).toBe(40); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).toBe(2); + expect(score.tracks[0].percussionArticulations[2].outputMidiNumber).toBe(37); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).toBe(3); + expect(score.tracks[0].percussionArticulations[3].outputMidiNumber).toBe(38); testExportRoundtrip(score); }); @@ -1367,16 +1367,16 @@ describe('AlphaTexImporterTest', () => { . A B C D `); - expect(score.tracks[0].playbackInfo.primaryChannel).to.equal(9); - expect(score.tracks[0].staves[0].isPercussion).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).to.equal(0); - expect(score.tracks[0].percussionArticulations[0].outputMidiNumber).to.equal(49); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).to.equal(1); - expect(score.tracks[0].percussionArticulations[1].outputMidiNumber).to.equal(40); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).to.equal(2); - expect(score.tracks[0].percussionArticulations[2].outputMidiNumber).to.equal(37); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).to.equal(3); - expect(score.tracks[0].percussionArticulations[3].outputMidiNumber).to.equal(38); + expect(score.tracks[0].playbackInfo.primaryChannel).toBe(9); + expect(score.tracks[0].staves[0].isPercussion).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).toBe(0); + expect(score.tracks[0].percussionArticulations[0].outputMidiNumber).toBe(49); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).toBe(1); + expect(score.tracks[0].percussionArticulations[1].outputMidiNumber).toBe(40); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).toBe(2); + expect(score.tracks[0].percussionArticulations[2].outputMidiNumber).toBe(37); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).toBe(3); + expect(score.tracks[0].percussionArticulations[3].outputMidiNumber).toBe(38); testExportRoundtrip(score); }); @@ -1387,16 +1387,16 @@ describe('AlphaTexImporterTest', () => { . "Cymbal (hit)" "Snare (side stick)" "Snare (side stick) 2" "Snare (hit)" `); - expect(score.tracks[0].playbackInfo.primaryChannel).to.equal(9); - expect(score.tracks[0].staves[0].isPercussion).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).to.equal(0); - expect(score.tracks[0].percussionArticulations[0].outputMidiNumber).to.equal(49); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).to.equal(1); - expect(score.tracks[0].percussionArticulations[1].outputMidiNumber).to.equal(37); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).to.equal(2); - expect(score.tracks[0].percussionArticulations[2].outputMidiNumber).to.equal(40); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).to.equal(3); - expect(score.tracks[0].percussionArticulations[3].outputMidiNumber).to.equal(38); + expect(score.tracks[0].playbackInfo.primaryChannel).toBe(9); + expect(score.tracks[0].staves[0].isPercussion).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).toBe(0); + expect(score.tracks[0].percussionArticulations[0].outputMidiNumber).toBe(49); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).toBe(1); + expect(score.tracks[0].percussionArticulations[1].outputMidiNumber).toBe(37); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).toBe(2); + expect(score.tracks[0].percussionArticulations[2].outputMidiNumber).toBe(40); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).toBe(3); + expect(score.tracks[0].percussionArticulations[3].outputMidiNumber).toBe(38); testExportRoundtrip(score); }); @@ -1407,16 +1407,16 @@ describe('AlphaTexImporterTest', () => { . CymbalHit SnareSideStick SnareSideStick2 SnareHit `); - expect(score.tracks[0].playbackInfo.primaryChannel).to.equal(9); - expect(score.tracks[0].staves[0].isPercussion).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).to.equal(0); - expect(score.tracks[0].percussionArticulations[0].outputMidiNumber).to.equal(49); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).to.equal(1); - expect(score.tracks[0].percussionArticulations[1].outputMidiNumber).to.equal(37); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).to.equal(2); - expect(score.tracks[0].percussionArticulations[2].outputMidiNumber).to.equal(40); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).to.equal(3); - expect(score.tracks[0].percussionArticulations[3].outputMidiNumber).to.equal(38); + expect(score.tracks[0].playbackInfo.primaryChannel).toBe(9); + expect(score.tracks[0].staves[0].isPercussion).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].percussionArticulation).toBe(0); + expect(score.tracks[0].percussionArticulations[0].outputMidiNumber).toBe(49); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].percussionArticulation).toBe(1); + expect(score.tracks[0].percussionArticulations[1].outputMidiNumber).toBe(37); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].percussionArticulation).toBe(2); + expect(score.tracks[0].percussionArticulations[2].outputMidiNumber).toBe(40); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].percussionArticulation).toBe(3); + expect(score.tracks[0].percussionArticulations[3].outputMidiNumber).toBe(38); testExportRoundtrip(score); }); @@ -1424,11 +1424,11 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` . \\tempo 120 1.1.4 1.1 1.1{tempo 60} 1.1 | 1.1.4{tempo 100} 1.1 1.1{tempo 120} 1.1 `); - expect(score.masterBars[0].tempoAutomations.length).to.equal(2); - expect(score.masterBars[0].tempoAutomations[0].value).to.equal(120); - expect(score.masterBars[0].tempoAutomations[0].ratioPosition).to.equal(0); - expect(score.masterBars[0].tempoAutomations[1].value).to.equal(60); - expect(score.masterBars[0].tempoAutomations[1].ratioPosition).to.equal(0.5); + expect(score.masterBars[0].tempoAutomations.length).toBe(2); + expect(score.masterBars[0].tempoAutomations[0].value).toBe(120); + expect(score.masterBars[0].tempoAutomations[0].ratioPosition).toBe(0); + expect(score.masterBars[0].tempoAutomations[1].value).toBe(60); + expect(score.masterBars[0].tempoAutomations[1].ratioPosition).toBe(0.5); testExportRoundtrip(score); }); @@ -1452,41 +1452,41 @@ describe('AlphaTexImporterTest', () => { b = b.nextBeat; } - expect(actualAccidentalModes.join(',')).to.equal(expectedAccidentalModes.join(',')); + expect(actualAccidentalModes.join(',')).toBe(expectedAccidentalModes.join(',')); testExportRoundtrip(score); }); it('accidental-mode', () => { // song level let score = parseTex('\\accidentals auto . F##4'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).toBe( NoteAccidentalMode.Default ); // track level score = parseTex('\\track "T1" F##4 | \\track "T2" \\accidentals auto F##4'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).toBe( NoteAccidentalMode.ForceDoubleSharp ); - expect(score.tracks[1].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).to.equal( + expect(score.tracks[1].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).toBe( NoteAccidentalMode.Default ); // staff level score = parseTex('\\track "T1" \\staff F##4 \\staff \\accidentals auto F##4'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).toBe( NoteAccidentalMode.ForceDoubleSharp ); - expect(score.tracks[0].staves[1].bars[0].voices[0].beats[0].notes[0].accidentalMode).to.equal( + expect(score.tracks[0].staves[1].bars[0].voices[0].beats[0].notes[0].accidentalMode).toBe( NoteAccidentalMode.Default ); // bar level score = parseTex('F##4 | \\accidentals auto F##4'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].accidentalMode).toBe( NoteAccidentalMode.ForceDoubleSharp ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].accidentalMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].accidentalMode).toBe( NoteAccidentalMode.Default ); testExportRoundtrip(score); @@ -1494,47 +1494,47 @@ describe('AlphaTexImporterTest', () => { it('dead-slap', () => { const score = parseTex('r { ds }'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].isRest).to.be.false; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].deadSlapped).to.be.true; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].isRest).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].deadSlapped).toBe(true); testExportRoundtrip(score); }); it('golpe', () => { const score = parseTex('3.3 { glpf } 3.3 { glpt }'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].golpe).to.equal(GolpeType.Finger); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].golpe).to.equal(GolpeType.Thumb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].golpe).toBe(GolpeType.Finger); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].golpe).toBe(GolpeType.Thumb); testExportRoundtrip(score); }); it('fade', () => { const score = parseTex('3.3 { f } 3.3 { fo } 3.3 { vs } '); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].fade).to.equal(FadeType.FadeIn); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].fade).to.equal(FadeType.FadeOut); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].fade).to.equal(FadeType.VolumeSwell); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].fade).toBe(FadeType.FadeIn); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].fade).toBe(FadeType.FadeOut); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].fade).toBe(FadeType.VolumeSwell); testExportRoundtrip(score); }); it('barre', () => { const score = parseTex('3.3 { barre 5 } 3.3 { barre 14 half }'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].barreFret).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].barreShape).to.equal(BarreShape.Full); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].barreFret).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].barreShape).toBe(BarreShape.Full); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].barreFret).to.equal(14); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].barreShape).to.equal(BarreShape.Half); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].barreFret).toBe(14); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].barreShape).toBe(BarreShape.Half); testExportRoundtrip(score); testExportRoundtrip(score); }); it('ornaments', () => { const score = parseTex('3.3 { turn } 3.3 { iturn } 3.3 { umordent } 3.3 { lmordent }'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].ornament).to.equal(NoteOrnament.Turn); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].ornament).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].ornament).toBe(NoteOrnament.Turn); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].ornament).toBe( NoteOrnament.InvertedTurn ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].ornament).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].ornament).toBe( NoteOrnament.UpperMordent ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].ornament).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].ornament).toBe( NoteOrnament.LowerMordent ); testExportRoundtrip(score); @@ -1542,26 +1542,26 @@ describe('AlphaTexImporterTest', () => { it('rasgueado', () => { const score = parseTex('3.3 { rasg mi } 3.3 { rasg pmptriplet } 3.3 { rasg amianapaest }'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].rasgueado).to.equal(Rasgueado.Mi); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].hasRasgueado).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].rasgueado).to.equal(Rasgueado.PmpTriplet); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].hasRasgueado).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].rasgueado).to.equal(Rasgueado.AmiAnapaest); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].hasRasgueado).to.be.true; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].rasgueado).toBe(Rasgueado.Mi); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].hasRasgueado).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].rasgueado).toBe(Rasgueado.PmpTriplet); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].hasRasgueado).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].rasgueado).toBe(Rasgueado.AmiAnapaest); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].hasRasgueado).toBe(true); testExportRoundtrip(score); }); it('directions', () => { const score = parseTex('. \\jump Segno | | \\jump DaCapoAlCoda \\jump Coda \\jump SegnoSegno '); - expect(score.masterBars[0].directions).to.be.ok; - expect(score.masterBars[0].directions).to.contain(Direction.TargetSegno); + expect(score.masterBars[0].directions).toBeTruthy(); + expect(score.masterBars[0].directions).toContain(Direction.TargetSegno); - expect(score.masterBars[1].directions).to.not.be.ok; + expect(score.masterBars[1].directions).not.toBeTruthy(); - expect(score.masterBars[2].directions).to.be.ok; - expect(score.masterBars[2].directions).to.contain(Direction.JumpDaCapoAlCoda); - expect(score.masterBars[2].directions).to.contain(Direction.TargetCoda); - expect(score.masterBars[2].directions).to.contain(Direction.TargetSegnoSegno); + expect(score.masterBars[2].directions).toBeTruthy(); + expect(score.masterBars[2].directions).toContain(Direction.JumpDaCapoAlCoda); + expect(score.masterBars[2].directions).toContain(Direction.TargetCoda); + expect(score.masterBars[2].directions).toContain(Direction.TargetSegnoSegno); testExportRoundtrip(score); }); @@ -1575,11 +1575,11 @@ describe('AlphaTexImporterTest', () => { c3 d3 e3 f3 | c3 d3 e3 f3 `); - expect(score.masterBars.length).to.equal(2); + expect(score.masterBars.length).toBe(2); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[1].voices.length).to.equal(2); + expect(score.tracks[0].staves[0].bars.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices.length).toBe(2); + expect(score.tracks[0].staves[0].bars[1].voices.length).toBe(2); testExportRoundtrip(score); }); @@ -1591,11 +1591,11 @@ describe('AlphaTexImporterTest', () => { c3 d3 e3 f3 | c3 d3 e3 f3 `); - expect(score.masterBars.length).to.equal(2); + expect(score.masterBars.length).toBe(2); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[1].voices.length).to.equal(2); + expect(score.tracks[0].staves[0].bars.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices.length).toBe(2); + expect(score.tracks[0].staves[0].bars[1].voices.length).toBe(2); testExportRoundtrip(score); }); @@ -1606,11 +1606,11 @@ describe('AlphaTexImporterTest', () => { c3 d3 e3 f3 | c3 d3 e3 f3 `); - expect(score.masterBars.length).to.equal(2); + expect(score.masterBars.length).toBe(2); - expect(score.tracks[0].staves[0].bars.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[1].voices.length).to.equal(2); + expect(score.tracks[0].staves[0].bars.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices.length).toBe(2); + expect(score.tracks[0].staves[0].bars[1].voices.length).toBe(2); testExportRoundtrip(score); }); @@ -1618,7 +1618,7 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` \\staff { score 3 } `); - expect(score.tracks[0].staves[0].standardNotationLineCount).to.equal(3); + expect(score.tracks[0].staves[0].standardNotationLineCount).toBe(3); testExportRoundtrip(score); }); @@ -1628,8 +1628,8 @@ describe('AlphaTexImporterTest', () => { \\instructions "Line1\nLine2" . `); - expect(score.title).to.equal('Title\tTitle'); - expect(score.instructions).to.equal('Line1\nLine2'); + expect(score.title).toBe('Title\tTitle'); + expect(score.instructions).toBe('Line1\nLine2'); testExportRoundtrip(score); }); @@ -1638,8 +1638,8 @@ describe('AlphaTexImporterTest', () => { \\tempo (80 "Label") . `); - expect(score.tempo).to.equal(80); - expect(score.tempoLabel).to.equal('Label'); + expect(score.tempo).toBe(80); + expect(score.tempoLabel).toBe('Label'); testExportRoundtrip(score); }); @@ -1650,8 +1650,8 @@ describe('AlphaTexImporterTest', () => { \\transpose 6 . `); - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(-12); - expect(score.tracks[0].staves[0].transpositionPitch).to.equal(-6); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(-12); + expect(score.tracks[0].staves[0].transpositionPitch).toBe(-6); testExportRoundtrip(score); }); @@ -1659,8 +1659,8 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` 3.3.4{v} 3.3.4{vw} `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].vibrato).to.equal(VibratoType.Slight); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].vibrato).to.equal(VibratoType.Wide); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].vibrato).toBe(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].vibrato).toBe(VibratoType.Wide); testExportRoundtrip(score); }); @@ -1668,8 +1668,8 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` 3.3{v}.4 3.3{vw}.4 `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].vibrato).to.equal(VibratoType.Slight); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].vibrato).to.equal(VibratoType.Wide); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].vibrato).toBe(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].vibrato).toBe(VibratoType.Wide); testExportRoundtrip(score); }); @@ -1678,16 +1678,16 @@ describe('AlphaTexImporterTest', () => { 3.3.4{ tb dive (0 -12.5) } | 3.3.4{ tb dive gradual (0 -12.5) } | `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarType).to.equal(WhammyType.Dive); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints!.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].value).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-12.5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarType).toBe(WhammyType.Dive); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints!.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].value).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].value).toBe(-12.5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarType).to.equal(WhammyType.Dive); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyStyle).to.equal(BendStyle.Gradual); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints!.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].value).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-12.5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarType).toBe(WhammyType.Dive); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyStyle).toBe(BendStyle.Gradual); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints!.length).toBe(2); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].value).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].value).toBe(-12.5); testExportRoundtrip(score); }); @@ -1695,8 +1695,8 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` 3.3.4{ ot 15ma } 3.3.4{ ot 8vb } `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].ottava).to.equal(Ottavia._15ma); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].ottava).to.equal(Ottavia._8vb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].ottava).toBe(Ottavia._15ma); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].ottava).toBe(Ottavia._8vb); testExportRoundtrip(score); }); @@ -1704,8 +1704,8 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` 3.3.4{ txt "Hello World" } 3.3.4{ txt Hello } `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].text).to.equal('Hello World'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].text).to.equal('Hello'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].text).toBe('Hello World'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].text).toBe('Hello'); testExportRoundtrip(score); }); @@ -1713,8 +1713,8 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` 3.3.4{ legatoOrigin } 4.3.4 `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].isLegatoOrigin).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].isLegatoDestination).to.be.true; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].isLegatoOrigin).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].isLegatoDestination).toBe(true); testExportRoundtrip(score); }); @@ -1723,12 +1723,12 @@ describe('AlphaTexImporterTest', () => { \\instrument acousticgrandpiano G4 G4 G4 { instrument brightacousticpiano } `); - expect(score.tracks[0].playbackInfo.program).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].type).to.equal( + expect(score.tracks[0].playbackInfo.program).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].type).toBe( AutomationType.Instrument ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].value).to.equal(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].value).toBe(1); testExportRoundtrip(score); }); @@ -1736,9 +1736,9 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` G4 G4 G4 { fermata medium 4 } `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].fermata).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].fermata!.type).to.equal(FermataType.Medium); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].fermata!.length).to.equal(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].fermata).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].fermata!.type).toBe(FermataType.Medium); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].fermata!.length).toBe(4); testExportRoundtrip(score); }); @@ -1746,9 +1746,9 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` 3.3{ b bend gradual (0 4)} `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendType).to.equal(BendType.Bend); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendStyle).to.equal(BendStyle.Gradual); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints!.length).to.equal(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendType).toBe(BendType.Bend); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendStyle).toBe(BendStyle.Gradual); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints!.length).toBe(2); testExportRoundtrip(score); }); @@ -1756,48 +1756,48 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` 2.3{nh} 2.3{ah} 2.3{ah 7} 2.3{th} 2.3{th 7} 2.3{ph} 2.3{ph 7} 2.3{sh} 2.3{sh 7} 2.3{fh} 2.3{fh 7} `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicType).toBe( HarmonicType.Natural ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicValue).to.equal(2.4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicValue).toBe(2.4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicType).toBe( HarmonicType.Artificial ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicValue).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicValue).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicType).toBe( HarmonicType.Artificial ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicValue).to.equal(7); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicValue).toBe(7); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicType).to.equal(HarmonicType.Tap); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicValue).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicType).toBe(HarmonicType.Tap); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicValue).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicType).to.equal(HarmonicType.Tap); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicValue).to.equal(7); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicType).toBe(HarmonicType.Tap); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicValue).toBe(7); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[5].notes[0].harmonicType).to.equal(HarmonicType.Pinch); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[5].notes[0].harmonicValue).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[5].notes[0].harmonicType).toBe(HarmonicType.Pinch); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[5].notes[0].harmonicValue).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[6].notes[0].harmonicType).to.equal(HarmonicType.Pinch); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[6].notes[0].harmonicValue).to.equal(7); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[6].notes[0].harmonicType).toBe(HarmonicType.Pinch); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[6].notes[0].harmonicValue).toBe(7); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[7].notes[0].harmonicType).to.equal(HarmonicType.Semi); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[7].notes[0].harmonicValue).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[7].notes[0].harmonicType).toBe(HarmonicType.Semi); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[7].notes[0].harmonicValue).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[8].notes[0].harmonicType).to.equal(HarmonicType.Semi); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[8].notes[0].harmonicValue).to.equal(7); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[8].notes[0].harmonicType).toBe(HarmonicType.Semi); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[8].notes[0].harmonicValue).toBe(7); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[9].notes[0].harmonicType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[9].notes[0].harmonicType).toBe( HarmonicType.Feedback ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[9].notes[0].harmonicValue).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[9].notes[0].harmonicValue).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[10].notes[0].harmonicType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[10].notes[0].harmonicType).toBe( HarmonicType.Feedback ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[10].notes[0].harmonicValue).to.equal(7); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[10].notes[0].harmonicValue).toBe(7); testExportRoundtrip(score); }); @@ -1805,9 +1805,9 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` \\ts common `); - expect(score.masterBars[0].timeSignatureNumerator).to.equal(4); - expect(score.masterBars[0].timeSignatureDenominator).to.equal(4); - expect(score.masterBars[0].timeSignatureCommon).to.be.true; + expect(score.masterBars[0].timeSignatureNumerator).toBe(4); + expect(score.masterBars[0].timeSignatureDenominator).toBe(4); + expect(score.masterBars[0].timeSignatureCommon).toBe(true); testExportRoundtrip(score); }); @@ -1815,7 +1815,7 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` \\ottava 15ma `); - expect(score.tracks[0].staves[0].bars[0].clefOttava).to.equal(Ottavia._15ma); + expect(score.tracks[0].staves[0].bars[0].clefOttava).toBe(Ottavia._15ma); testExportRoundtrip(score); }); @@ -1823,7 +1823,7 @@ describe('AlphaTexImporterTest', () => { const score = parseTex(` \\simile simple `); - expect(score.tracks[0].staves[0].bars[0].simileMark).to.equal(SimileMark.Simple); + expect(score.tracks[0].staves[0].bars[0].simileMark).toBe(SimileMark.Simple); testExportRoundtrip(score); }); @@ -1833,19 +1833,19 @@ describe('AlphaTexImporterTest', () => { . 3.3.4 * 4 | \\tempo (80 "T2") 4.3.4*4 `); - expect(score.tempo).to.equal(100); - expect(score.tempoLabel).to.equal('T1'); + expect(score.tempo).toBe(100); + expect(score.tempoLabel).toBe('T1'); - expect(score.masterBars[1].tempoAutomations.length).to.equal(1); - expect(score.masterBars[1].tempoAutomations[0].value).to.equal(80); - expect(score.masterBars[1].tempoAutomations[0].text).to.equal('T2'); + expect(score.masterBars[1].tempoAutomations.length).toBe(1); + expect(score.masterBars[1].tempoAutomations[0].value).toBe(80); + expect(score.masterBars[1].tempoAutomations[0].text).toBe('T2'); testExportRoundtrip(score); }); it('double-bar', () => { const tex: string = '3.3 3.3 3.3 3.3 | \\db 1.1 2.1 3.1 4.1'; const score = parseTex(tex); - expect(score.masterBars[1].isDoubleBar).to.be.equal(true); + expect(score.masterBars[1].isDoubleBar).toBe(true); testExportRoundtrip(score); }); @@ -1865,20 +1865,20 @@ describe('AlphaTexImporterTest', () => { . `); - expect(score.defaultSystemsLayout).to.equal(5); - expect(score.systemsLayout.length).to.equal(3); - expect(score.systemsLayout[0]).to.equal(3); - expect(score.systemsLayout[1]).to.equal(2); - expect(score.systemsLayout[2]).to.equal(3); - expect(score.stylesheet.hideDynamics).to.be.true; - expect(score.stylesheet.bracketExtendMode).to.equal(BracketExtendMode.NoBrackets); - expect(score.stylesheet.useSystemSignSeparator).to.be.true; - expect(score.stylesheet.singleTrackTrackNamePolicy).to.equal(TrackNamePolicy.AllSystems); - expect(score.stylesheet.multiTrackTrackNamePolicy).to.equal(TrackNamePolicy.Hidden); - expect(score.stylesheet.firstSystemTrackNameMode).to.equal(TrackNameMode.FullName); - expect(score.stylesheet.otherSystemsTrackNameMode).to.equal(TrackNameMode.FullName); - expect(score.stylesheet.firstSystemTrackNameOrientation).to.equal(TrackNameOrientation.Horizontal); - expect(score.stylesheet.otherSystemsTrackNameOrientation).to.equal(TrackNameOrientation.Horizontal); + expect(score.defaultSystemsLayout).toBe(5); + expect(score.systemsLayout.length).toBe(3); + expect(score.systemsLayout[0]).toBe(3); + expect(score.systemsLayout[1]).toBe(2); + expect(score.systemsLayout[2]).toBe(3); + expect(score.stylesheet.hideDynamics).toBe(true); + expect(score.stylesheet.bracketExtendMode).toBe(BracketExtendMode.NoBrackets); + expect(score.stylesheet.useSystemSignSeparator).toBe(true); + expect(score.stylesheet.singleTrackTrackNamePolicy).toBe(TrackNamePolicy.AllSystems); + expect(score.stylesheet.multiTrackTrackNamePolicy).toBe(TrackNamePolicy.Hidden); + expect(score.stylesheet.firstSystemTrackNameMode).toBe(TrackNameMode.FullName); + expect(score.stylesheet.otherSystemsTrackNameMode).toBe(TrackNameMode.FullName); + expect(score.stylesheet.firstSystemTrackNameOrientation).toBe(TrackNameOrientation.Horizontal); + expect(score.stylesheet.otherSystemsTrackNameOrientation).toBe(TrackNameOrientation.Horizontal); testExportRoundtrip(score); }); @@ -1887,8 +1887,8 @@ describe('AlphaTexImporterTest', () => { 3.3.4 | \\scale 0.5 3.3.4 | \\width 300 3.3.4 `); - expect(score.masterBars[1].displayScale).to.equal(0.5); - expect(score.masterBars[2].displayWidth).to.equal(300); + expect(score.masterBars[1].displayScale).toBe(0.5); + expect(score.masterBars[2].displayWidth).toBe(300); testExportRoundtrip(score); }); @@ -1905,16 +1905,16 @@ describe('AlphaTexImporterTest', () => { } `); - expect(score.tracks[0].color.rgba).to.equal('#FF0000'); - expect(score.tracks[0].defaultSystemsLayout).to.equal(6); - expect(score.tracks[0].systemsLayout.length).to.equal(3); - expect(score.tracks[0].systemsLayout[0]).to.equal(3); - expect(score.tracks[0].systemsLayout[1]).to.equal(2); - expect(score.tracks[0].systemsLayout[0]).to.equal(3); - expect(score.tracks[0].playbackInfo.volume).to.equal(7); - expect(score.tracks[0].playbackInfo.balance).to.equal(3); - expect(score.tracks[0].playbackInfo.isMute).to.be.true; - expect(score.tracks[0].playbackInfo.isSolo).to.be.true; + expect(score.tracks[0].color.rgba).toBe('#FF0000'); + expect(score.tracks[0].defaultSystemsLayout).toBe(6); + expect(score.tracks[0].systemsLayout.length).toBe(3); + expect(score.tracks[0].systemsLayout[0]).toBe(3); + expect(score.tracks[0].systemsLayout[1]).toBe(2); + expect(score.tracks[0].systemsLayout[0]).toBe(3); + expect(score.tracks[0].playbackInfo.volume).toBe(7); + expect(score.tracks[0].playbackInfo.balance).toBe(3); + expect(score.tracks[0].playbackInfo.isMute).toBe(true); + expect(score.tracks[0].playbackInfo.isSolo).toBe(true); testExportRoundtrip(score); }); @@ -1928,16 +1928,16 @@ describe('AlphaTexImporterTest', () => { 3.3{ beam merge } 3.3 | `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].invertBeamDirection).to.be.true; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].preferredBeamDirection).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].invertBeamDirection).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].preferredBeamDirection).toBe( BeamDirection.Down ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceMergeWithNext ); testExportRoundtrip(score); @@ -1948,7 +1948,7 @@ describe('AlphaTexImporterTest', () => { :8 3.3{ string } `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].showStringNumber).to.be.true; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].showStringNumber).toBe(true); testExportRoundtrip(score); }); @@ -1957,7 +1957,7 @@ describe('AlphaTexImporterTest', () => { :8 3.3{ hide } `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isVisible).to.be.false; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isVisible).toBe(false); }); it('note-slur', () => { @@ -1965,8 +1965,8 @@ describe('AlphaTexImporterTest', () => { :8 (3.3{ slur s1 } 3.4 3.5) (10.3 {slur s1} 17.4 15.5) `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isSlurOrigin).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isSlurDestination).to.be.true; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isSlurOrigin).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isSlurDestination).toBe(true); testExportRoundtrip(score); }); @@ -1978,10 +1978,10 @@ describe('AlphaTexImporterTest', () => { \\tuning A1 D2 A2 D3 G3 B3 E4 hide 4.1 3.1 2.1 1.1`); - expect(score.tracks[1].staves[0].stringTuning.tunings[0]).to.equal(33); - expect(score.stylesheet.perTrackDisplayTuning).to.be.ok; - expect(score.stylesheet.perTrackDisplayTuning!.has(1)).to.be.true; - expect(score.stylesheet.perTrackDisplayTuning!.get(1)).to.be.false; + expect(score.tracks[1].staves[0].stringTuning.tunings[0]).toBe(33); + expect(score.stylesheet.perTrackDisplayTuning).toBeTruthy(); + expect(score.stylesheet.perTrackDisplayTuning!.has(1)).toBe(true); + expect(score.stylesheet.perTrackDisplayTuning!.get(1)).toBe(false); testExportRoundtrip(score); }); @@ -1995,31 +1995,26 @@ describe('AlphaTexImporterTest', () => { \\clef "n" | \\clef "alto" | \\clef "tenor" | \\clef "bass" | \\clef "treble" `); let barIndex = 0; - expect(score.tracks[0].staves[0].bars[barIndex].clef).to.equal(Clef.C4); - expect(score.tracks[0].staves[0].bars[barIndex++].clefOttava).to.equal(Ottavia._15ma); - expect(score.tracks[0].staves[0].bars[barIndex].clef).to.equal(Clef.C4); - expect(score.tracks[0].staves[0].bars[barIndex++].clefOttava).to.equal(Ottavia._15ma); + expect(score.tracks[0].staves[0].bars[barIndex].clef).toBe(Clef.C4); + expect(score.tracks[0].staves[0].bars[barIndex++].clefOttava).toBe(Ottavia._15ma); + expect(score.tracks[0].staves[0].bars[barIndex].clef).toBe(Clef.C4); + expect(score.tracks[0].staves[0].bars[barIndex++].clefOttava).toBe(Ottavia._15ma); for (let i = 0; i < 5; i++) { - expect(score.tracks[0].staves[0].bars[barIndex++].clef).to.equal( - Clef.Neutral, - `Invalid clef at index ${barIndex - 1}` + expect(score.tracks[0].staves[0].bars[barIndex++].clef, `Invalid clef at index ${barIndex - 1}`).toBe( + Clef.Neutral ); - expect(score.tracks[0].staves[0].bars[barIndex++].clef).to.equal( - Clef.C3, - `Invalid clef at index ${barIndex - 1}` + expect(score.tracks[0].staves[0].bars[barIndex++].clef, `Invalid clef at index ${barIndex - 1}`).toBe( + Clef.C3 ); - expect(score.tracks[0].staves[0].bars[barIndex++].clef).to.equal( - Clef.C4, - `Invalid clef at index ${barIndex - 1}` + expect(score.tracks[0].staves[0].bars[barIndex++].clef, `Invalid clef at index ${barIndex - 1}`).toBe( + Clef.C4 ); - expect(score.tracks[0].staves[0].bars[barIndex++].clef).to.equal( - Clef.F4, - `Invalid clef at index ${barIndex - 1}` + expect(score.tracks[0].staves[0].bars[barIndex++].clef, `Invalid clef at index ${barIndex - 1}`).toBe( + Clef.F4 ); - expect(score.tracks[0].staves[0].bars[barIndex++].clef).to.equal( - Clef.G2, - `Invalid clef at index ${barIndex - 1}` + expect(score.tracks[0].staves[0].bars[barIndex++].clef, `Invalid clef at index ${barIndex - 1}`).toBe( + Clef.G2 ); } @@ -2036,10 +2031,10 @@ describe('AlphaTexImporterTest', () => { 3.3 `); - expect(score.stylesheet.multiTrackMultiBarRest).to.be.true; - expect(score.stylesheet.perTrackMultiBarRest).to.be.ok; - expect(score.stylesheet.perTrackMultiBarRest!.has(0)).to.be.true; - expect(score.stylesheet.perTrackMultiBarRest!.has(1)).to.be.false; + expect(score.stylesheet.multiTrackMultiBarRest).toBe(true); + expect(score.stylesheet.perTrackMultiBarRest).toBeTruthy(); + expect(score.stylesheet.perTrackMultiBarRest!.has(0)).toBe(true); + expect(score.stylesheet.perTrackMultiBarRest!.has(1)).toBe(false); testExportRoundtrip(score); }); @@ -2058,63 +2053,63 @@ describe('AlphaTexImporterTest', () => { . `); - expect(score.style).to.be.ok; + expect(score.style).toBeTruthy(); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Title)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.template).to.equal('Title: %TITLE%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.textAlign).to.equal(TextAlign.Left); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Title)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.template).toBe('Title: %TITLE%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.textAlign).toBe(TextAlign.Left); - expect(score.style!.headerAndFooter.has(ScoreSubElement.SubTitle)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.template).to.equal('Subtitle: %SUBTITLE%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.has(ScoreSubElement.SubTitle)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.template).toBe('Subtitle: %SUBTITLE%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Artist)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.template).to.equal('Artist: %ARTIST%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.textAlign).to.equal(TextAlign.Right); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Artist)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.template).toBe('Artist: %ARTIST%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.textAlign).toBe(TextAlign.Right); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Album)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.template).to.equal('Album: %ALBUM%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.textAlign).to.equal(TextAlign.Left); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Album)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.template).toBe('Album: %ALBUM%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.textAlign).toBe(TextAlign.Left); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Words)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.template).to.equal('Words: %WORDS%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Words)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.template).toBe('Words: %WORDS%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Music)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.template).to.equal('Music: %MUSIC%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.textAlign).to.equal(TextAlign.Right); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Music)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.template).toBe('Music: %MUSIC%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.textAlign).toBe(TextAlign.Right); - expect(score.style!.headerAndFooter.has(ScoreSubElement.WordsAndMusic)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.template).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.WordsAndMusic)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.template).toBe( 'Words & Music: %MUSIC%' ); - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.textAlign).to.equal(TextAlign.Left); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.textAlign).toBe(TextAlign.Left); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Transcriber)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.template).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.Transcriber)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.template).toBe( 'Transcriber: %TABBER%' ); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Copyright)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.template).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.Copyright)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.template).toBe( 'Copyright: %COPYRIGHT%' ); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.textAlign).to.equal(TextAlign.Right); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.textAlign).toBe(TextAlign.Right); - expect(score.style!.headerAndFooter.has(ScoreSubElement.CopyrightSecondLine)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.template).to.equal('Copyright2'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.textAlign).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.CopyrightSecondLine)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.template).toBe('Copyright2'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.textAlign).toBe( TextAlign.Right ); testExportRoundtrip(score); @@ -2203,10 +2198,10 @@ describe('AlphaTexImporterTest', () => { \\tuning E4 B3 G3 D3 A2 E2 "Default" `); - expect(score.tracks[0].staves[0].stringTuning.tunings.join(',')).to.equal( + expect(score.tracks[0].staves[0].stringTuning.tunings.join(',')).toBe( Tuning.getDefaultTuningFor(6)!.tunings.join(',') ); - expect(score.tracks[0].staves[0].stringTuning.name).to.equal('Default'); + expect(score.tracks[0].staves[0].stringTuning.name).toBe('Default'); testExportRoundtrip(score); }); @@ -2218,19 +2213,19 @@ describe('AlphaTexImporterTest', () => { G4 G4 { volume 8 } G4 { volume 9 } `); - expect(score.tracks[0].playbackInfo.volume).to.equal(7); + expect(score.tracks[0].playbackInfo.volume).toBe(7); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations[0].type).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations[0].type).toBe( AutomationType.Volume ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations[0].value).to.equal(8); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations[0].value).toBe(8); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].type).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].type).toBe( AutomationType.Volume ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].value).to.equal(9); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].value).toBe(9); testExportRoundtrip(score); }); @@ -2242,19 +2237,19 @@ describe('AlphaTexImporterTest', () => { G4 G4 { balance 8 } G4 { balance 9 } `); - expect(score.tracks[0].playbackInfo.balance).to.equal(7); + expect(score.tracks[0].playbackInfo.balance).toBe(7); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations[0].type).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations[0].type).toBe( AutomationType.Balance ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations[0].value).to.equal(8); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].automations[0].value).toBe(8); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].type).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].type).toBe( AutomationType.Balance ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].value).to.equal(9); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].automations[0].value).toBe(9); testExportRoundtrip(score); }); @@ -2263,8 +2258,8 @@ describe('AlphaTexImporterTest', () => { 3.3.4 { barre 5 half } `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].barreFret).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].barreShape).to.equal(BarreShape.Half); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].barreFret).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].barreShape).toBe(BarreShape.Half); testExportRoundtrip(score); }); @@ -2273,8 +2268,8 @@ describe('AlphaTexImporterTest', () => { ().16 {ds} `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].deadSlapped).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].deadSlapped).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(0); testExportRoundtrip(score); }); @@ -2284,13 +2279,13 @@ describe('AlphaTexImporterTest', () => { . `); - expect(score.title).to.equal('😸'); + expect(score.title).toBe('😸'); }); it('utf16', () => { const score = parseTex(`\\title "🤘🏻" .`); - expect(score.title).to.equal('🤘🏻'); + expect(score.title).toBe('🤘🏻'); }); it('beat-lyrics', () => { @@ -2302,21 +2297,21 @@ describe('AlphaTexImporterTest', () => { 3.3.4 {lyrics 0 "E" lyrics 1 "F" lyrics 2 "G"} `); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].lyrics).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].lyrics).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].lyrics).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].lyrics!.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].lyrics![0]).to.equal('A'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].lyrics).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].lyrics!.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].lyrics![0]).toBe('A'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics!.length).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics![0]).to.equal('B C D'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics!.length).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics![0]).toBe('B C D'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics!.length).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics![0]).to.equal('E'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics![1]).to.equal('F'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics![2]).to.equal('G'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics!.length).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics![0]).toBe('E'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics![1]).toBe('F'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics![2]).toBe('G'); testExportRoundtrip(score); }); @@ -2330,11 +2325,11 @@ describe('AlphaTexImporterTest', () => { c4 d4 e4 f4 `); - expect(score.tracks[0].playbackInfo.program).to.equal(4); - expect(score.tracks[0].playbackInfo.bank).to.equal(0); + expect(score.tracks[0].playbackInfo.program).toBe(4); + expect(score.tracks[0].playbackInfo.bank).toBe(0); - expect(score.tracks[1].playbackInfo.program).to.equal(4); - expect(score.tracks[1].playbackInfo.bank).to.equal(2); + expect(score.tracks[1].playbackInfo.program).toBe(4); + expect(score.tracks[1].playbackInfo.bank).toBe(2); testExportRoundtrip(score); }); @@ -2442,7 +2437,7 @@ describe('AlphaTexImporterTest', () => { const importer = new AlphaTexImporter(); importer.initFromString(tex, new Settings()); const s = importer.readScore(); - expect(importer.getStaffNoteKind(s.tracks[0].staves[0])).to.equal(type); + expect(importer.getStaffNoteKind(s.tracks[0].staves[0])).toBe(type); } // - direct values @@ -2488,7 +2483,7 @@ describe('AlphaTexImporterTest', () => { 0.3.4 2.3.4 5.3.4 7.3.4 `); - expect(score.stylesheet.extendBarLines).to.be.true; + expect(score.stylesheet.extendBarLines).toBe(true); testExportRoundtrip(score); }); @@ -2537,21 +2532,21 @@ describe('AlphaTexImporterTest', () => { \\chord ("E" 0 0 1 2 2 0) (0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} `); - expect(score.stylesheet.globalDisplayChordDiagramsInScore).to.be.true; + expect(score.stylesheet.globalDisplayChordDiagramsInScore).toBe(true); score = parseTex(` \\chordDiagramsInScore true \\chord ("E" 0 0 1 2 2 0) (0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} `); - expect(score.stylesheet.globalDisplayChordDiagramsInScore).to.be.true; + expect(score.stylesheet.globalDisplayChordDiagramsInScore).toBe(true); score = parseTex(` \\chordDiagramsInScore false \\chord ("E" 0 0 1 2 2 0) (0.1 0.2 1.3 2.4 2.5 0.6){ch "E"} `); - expect(score.stylesheet.globalDisplayChordDiagramsInScore).to.be.false; + expect(score.stylesheet.globalDisplayChordDiagramsInScore).toBe(false); }); it('empty-staff-options', () => { @@ -2559,29 +2554,29 @@ describe('AlphaTexImporterTest', () => { \\hideEmptyStaves C4 `); - expect(score.stylesheet.hideEmptyStaves).to.be.true; - expect(score.stylesheet.hideEmptyStavesInFirstSystem).to.be.false; - expect(score.stylesheet.showSingleStaffBrackets).to.be.false; + expect(score.stylesheet.hideEmptyStaves).toBe(true); + expect(score.stylesheet.hideEmptyStavesInFirstSystem).toBe(false); + expect(score.stylesheet.showSingleStaffBrackets).toBe(false); score = parseTex(` \\hideEmptyStaves \\hideEmptyStavesInFirstSystem `); - expect(score.stylesheet.hideEmptyStaves).to.be.true; - expect(score.stylesheet.hideEmptyStavesInFirstSystem).to.be.true; + expect(score.stylesheet.hideEmptyStaves).toBe(true); + expect(score.stylesheet.hideEmptyStavesInFirstSystem).toBe(true); score = parseTex(` \\hideEmptyStavesInFirstSystem C4 `); - expect(score.stylesheet.hideEmptyStaves).to.be.false; - expect(score.stylesheet.hideEmptyStavesInFirstSystem).to.be.true; + expect(score.stylesheet.hideEmptyStaves).toBe(false); + expect(score.stylesheet.hideEmptyStavesInFirstSystem).toBe(true); score = parseTex(` \\showSingleStaffBrackets C4 `); - expect(score.stylesheet.showSingleStaffBrackets).to.be.true; + expect(score.stylesheet.showSingleStaffBrackets).toBe(true); }); describe('tremolos', () => { @@ -2623,7 +2618,7 @@ describe('AlphaTexImporterTest', () => { describe('defaultBarNumberDisplay', () => { function test(tex: string, mode: BarNumberDisplay) { const score = parseTex(tex); - expect(score.stylesheet.barNumberDisplay).to.equal(mode); + expect(score.stylesheet.barNumberDisplay).toBe(mode); testExportRoundtrip(score); } @@ -2636,8 +2631,8 @@ describe('AlphaTexImporterTest', () => { describe('barNumberDisplay', () => { function test(tex: string, mode: BarNumberDisplay | undefined) { const score = parseTex(tex); - expect(score.tracks[0].staves[0].bars[0].barNumberDisplay).to.be.undefined; - expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).to.equal(mode); + expect(score.tracks[0].staves[0].bars[0].barNumberDisplay).toBeUndefined(); + expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).toBe(mode); testExportRoundtrip(score); } diff --git a/packages/alphatab/test/importer/AlphaTexLexer.test.ts b/packages/alphatab/test/importer/AlphaTexLexer.test.ts index bf97f0ddd..ace725e35 100644 --- a/packages/alphatab/test/importer/AlphaTexLexer.test.ts +++ b/packages/alphatab/test/importer/AlphaTexLexer.test.ts @@ -1,6 +1,6 @@ +import { describe, expect, it } from 'vitest'; import { type AlphaTexAstNode, AlphaTexNodeType, type AlphaTexNumberLiteral } from '@coderline/alphatab/importer/alphaTex/AlphaTexAst'; import { AlphaTexLexer } from '@coderline/alphatab/importer/alphaTex/AlphaTexLexer'; -import { expect } from 'chai'; describe('AlphaTexLexerTest', () => { function lexerTest(source: string, diagnostics: boolean = false) { diff --git a/packages/alphatab/test/importer/AlphaTexParameter.test.ts b/packages/alphatab/test/importer/AlphaTexParameter.test.ts index d20fb79a1..4da92df88 100644 --- a/packages/alphatab/test/importer/AlphaTexParameter.test.ts +++ b/packages/alphatab/test/importer/AlphaTexParameter.test.ts @@ -1,7 +1,7 @@ +import { describe, expect, it } from 'vitest'; import { AlphaTexParseMode, AlphaTexParser } from '@coderline/alphatab/importer/alphaTex/AlphaTexParser'; import { AlphaTexImporter } from '@coderline/alphatab/importer/AlphaTexImporter'; import { Settings } from '@coderline/alphatab/Settings'; -import { expect } from 'chai'; describe('AlphaTexParameterTests', () => { describe('parser', () => { @@ -9,7 +9,7 @@ describe('AlphaTexParameterTests', () => { const parser = new AlphaTexParser(tex); parser.mode = AlphaTexParseMode.Full; const node = parser.read(); - expect(node).to.be.ok; + expect(node).toBeTruthy(); expect(node).toMatchSnapshot(); expect(parser.lexerDiagnostics.errors).toMatchSnapshot('lexer-diagnostics'); expect(parser.parserDiagnostics.errors).toMatchSnapshot('parser-diagnostics'); @@ -132,7 +132,7 @@ describe('AlphaTexParameterTests', () => { // ignore } - expect(importer.scoreNode).to.be.ok; + expect(importer.scoreNode).toBeTruthy(); expect(importer.scoreNode).toMatchSnapshot(); expect(importer.lexerDiagnostics.errors).toMatchSnapshot('lexer-diagnostics'); expect(importer.parserDiagnostics.errors).toMatchSnapshot('parser-diagnostics'); diff --git a/packages/alphatab/test/importer/AlphaTexParser.test.ts b/packages/alphatab/test/importer/AlphaTexParser.test.ts index c94d939e1..d7d6bf94a 100644 --- a/packages/alphatab/test/importer/AlphaTexParser.test.ts +++ b/packages/alphatab/test/importer/AlphaTexParser.test.ts @@ -1,12 +1,12 @@ import { AlphaTexParseMode, AlphaTexParser } from '@coderline/alphatab/importer/alphaTex/AlphaTexParser'; -import { expect } from 'chai'; +import { describe, expect, it } from 'vitest'; describe('AlphaTexParserTest', () => { function parserTest(source: string) { const parser = new AlphaTexParser(source); parser.mode = AlphaTexParseMode.Full; const node = parser.read(); - expect(node).to.be.ok; + expect(node).toBeTruthy(); expect(node).toMatchSnapshot(); expect(parser.lexerDiagnostics.errors).toMatchSnapshot('lexer-diagnostics'); expect(parser.parserDiagnostics.errors).toMatchSnapshot('parser-diagnostics'); diff --git a/packages/alphatab/test/importer/BinaryStylesheet.test.ts b/packages/alphatab/test/importer/BinaryStylesheet.test.ts index da809f79f..a732ff8e5 100644 --- a/packages/alphatab/test/importer/BinaryStylesheet.test.ts +++ b/packages/alphatab/test/importer/BinaryStylesheet.test.ts @@ -1,212 +1,211 @@ +import { describe, expect, it } from 'vitest'; import { BinaryStylesheet } from '@coderline/alphatab/importer/BinaryStylesheet'; import type { Color } from '@coderline/alphatab/model/Color'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; - describe('BinaryStylesheetParserTest', () => { it('testRead', async () => { const data = await TestPlatform.loadFile('test-data/guitarpro7/BinaryStylesheet'); const stylesheet: BinaryStylesheet = new BinaryStylesheet(data); - expect(stylesheet.raw.has('Global/chordNameStyle')).to.be.true; - expect(stylesheet.raw.get('Global/chordNameStyle')).to.equal(2); + expect(stylesheet.raw.has('Global/chordNameStyle')).toBe(true); + expect(stylesheet.raw.get('Global/chordNameStyle')).toBe(2); - expect(stylesheet.raw.has('StandardNotation/deadNoteSymbol')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/deadNoteSymbol')).to.equal(0); + expect(stylesheet.raw.has('StandardNotation/deadNoteSymbol')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/deadNoteSymbol')).toBe(0); - expect(stylesheet.raw.has('Header/WordsAndMusic')).to.be.true; - expect(stylesheet.raw.get('Header/WordsAndMusic')).to.equal('Words & Music by %MUSIC%'); + expect(stylesheet.raw.has('Header/WordsAndMusic')).toBe(true); + expect(stylesheet.raw.get('Header/WordsAndMusic')).toBe('Words & Music by %MUSIC%'); - expect(stylesheet.raw.has('Global/PickStrokePriority')).to.be.true; - expect(stylesheet.raw.get('Global/PickStrokePriority')).to.equal(1100); + expect(stylesheet.raw.has('Global/PickStrokePriority')).toBe(true); + expect(stylesheet.raw.get('Global/PickStrokePriority')).toBe(1100); - expect(stylesheet.raw.has('Odd/drawOddFooter')).to.be.true; - expect(stylesheet.raw.get('Odd/drawOddFooter')).to.equal(true); + expect(stylesheet.raw.has('Odd/drawOddFooter')).toBe(true); + expect(stylesheet.raw.get('Odd/drawOddFooter')).toBe(true); - expect(stylesheet.raw.has('TablatureNotation/tabRhythmPlacementVoice3')).to.be.true; - expect(stylesheet.raw.get('TablatureNotation/tabRhythmPlacementVoice3')).to.equal(2); + expect(stylesheet.raw.has('TablatureNotation/tabRhythmPlacementVoice3')).toBe(true); + expect(stylesheet.raw.get('TablatureNotation/tabRhythmPlacementVoice3')).toBe(2); - expect(stylesheet.raw.has('Global/HideTupletBracket')).to.be.true; - expect(stylesheet.raw.get('Global/HideTupletBracket')).to.equal(true); + expect(stylesheet.raw.has('Global/HideTupletBracket')).toBe(true); + expect(stylesheet.raw.get('Global/HideTupletBracket')).toBe(true); - expect(stylesheet.raw.has('Global/DrawChords')).to.be.true; - expect(stylesheet.raw.get('Global/DrawChords')).to.equal(true); + expect(stylesheet.raw.has('Global/DrawChords')).toBe(true); + expect(stylesheet.raw.get('Global/DrawChords')).toBe(true); - expect(stylesheet.raw.has('System/codaSplitWidth')).to.be.true; - expect(stylesheet.raw.get('System/codaSplitWidth') as number).to.be.closeTo(6.0, 0.0001); + expect(stylesheet.raw.has('System/codaSplitWidth')).toBe(true); + expect(stylesheet.raw.get('System/codaSplitWidth') as number).toBeCloseTo(6.0, 3); - expect(stylesheet.raw.has('Global/HarmonicPriority')).to.be.true; - expect(stylesheet.raw.get('Global/HarmonicPriority')).to.equal(2200); + expect(stylesheet.raw.has('Global/HarmonicPriority')).toBe(true); + expect(stylesheet.raw.get('Global/HarmonicPriority')).toBe(2200); - expect(stylesheet.raw.has('Global/LetRingThroughoutPriority')).to.be.true; - expect(stylesheet.raw.get('Global/LetRingThroughoutPriority')).to.equal(2500); + expect(stylesheet.raw.has('Global/LetRingThroughoutPriority')).toBe(true); + expect(stylesheet.raw.get('Global/LetRingThroughoutPriority')).toBe(2500); - expect(stylesheet.raw.has('Global/stretchFactor')).to.be.true; - expect(stylesheet.raw.get('Global/stretchFactor') as number).to.be.closeTo(1, 0.0001); + expect(stylesheet.raw.has('Global/stretchFactor')).toBe(true); + expect(stylesheet.raw.get('Global/stretchFactor') as number).toBeCloseTo(1, 3); - expect(stylesheet.raw.has('StandardNotation/bendHeight')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/bendHeight') as number).to.be.closeTo(2.0, 0.0001); + expect(stylesheet.raw.has('StandardNotation/bendHeight')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/bendHeight') as number).toBeCloseTo(2.0, 3); - expect(stylesheet.raw.has('Global/ChordDiagramPriority')).to.be.true; - expect(stylesheet.raw.get('Global/ChordDiagramPriority')).to.equal(3000); + expect(stylesheet.raw.has('Global/ChordDiagramPriority')).toBe(true); + expect(stylesheet.raw.get('Global/ChordDiagramPriority')).toBe(3000); - expect(stylesheet.raw.has('Global/AlternateEndingPriority')).to.be.true; - expect(stylesheet.raw.get('Global/AlternateEndingPriority')).to.equal(2800); + expect(stylesheet.raw.has('Global/AlternateEndingPriority')).toBe(true); + expect(stylesheet.raw.get('Global/AlternateEndingPriority')).toBe(2800); - expect(stylesheet.raw.has('StandardNotation/tieOffsetX')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/tieOffsetX') as number).to.be.closeTo(0.07999999, 0.0001); + expect(stylesheet.raw.has('StandardNotation/tieOffsetX')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/tieOffsetX') as number).toBeCloseTo(0.07999999, 3); - expect(stylesheet.raw.has('Global/PalmMutePriority')).to.be.true; - expect(stylesheet.raw.get('Global/PalmMutePriority')).to.equal(1200); + expect(stylesheet.raw.has('Global/PalmMutePriority')).toBe(true); + expect(stylesheet.raw.get('Global/PalmMutePriority')).toBe(1200); - expect(stylesheet.raw.has('System/hideLyrics')).to.be.true; - expect(stylesheet.raw.get('System/hideLyrics')).to.equal(false); + expect(stylesheet.raw.has('System/hideLyrics')).toBe(true); + expect(stylesheet.raw.get('System/hideLyrics')).toBe(false); - expect(stylesheet.raw.has('Global/drawArpeggioArrow')).to.be.true; - expect(stylesheet.raw.get('Global/drawArpeggioArrow')).to.equal(true); + expect(stylesheet.raw.has('Global/drawArpeggioArrow')).toBe(true); + expect(stylesheet.raw.get('Global/drawArpeggioArrow')).toBe(true); - expect(stylesheet.raw.has('Global/HoPoPriority')).to.be.true; - expect(stylesheet.raw.get('Global/HoPoPriority')).to.equal(800); + expect(stylesheet.raw.has('Global/HoPoPriority')).toBe(true); + expect(stylesheet.raw.get('Global/HoPoPriority')).toBe(800); - expect(stylesheet.raw.has('Staff/repeatWidth')).to.be.true; - expect(stylesheet.raw.get('Staff/repeatWidth') as number).to.be.closeTo(0.5, 0.0001); + expect(stylesheet.raw.has('Staff/repeatWidth')).toBe(true); + expect(stylesheet.raw.get('Staff/repeatWidth') as number).toBeCloseTo(0.5, 3); - expect(stylesheet.raw.has('System/bracketWidth')).to.be.true; - expect(stylesheet.raw.get('System/bracketWidth') as number).to.be.closeTo(0.5, 0.0001); + expect(stylesheet.raw.has('System/bracketWidth')).toBe(true); + expect(stylesheet.raw.get('System/bracketWidth') as number).toBeCloseTo(0.5, 3); - expect(stylesheet.raw.has('Global/TuningSpaceInFrontOfStaff')).to.be.true; - expect(stylesheet.raw.get('Global/TuningSpaceInFrontOfStaff') as number).to.be.closeTo(2.0, 0.0001); + expect(stylesheet.raw.has('Global/TuningSpaceInFrontOfStaff')).toBe(true); + expect(stylesheet.raw.get('Global/TuningSpaceInFrontOfStaff') as number).toBeCloseTo(2.0, 3); - expect(stylesheet.raw.has('StandardNotation/drawWholeRestOnEmptyBars')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/drawWholeRestOnEmptyBars')).to.equal(false); + expect(stylesheet.raw.has('StandardNotation/drawWholeRestOnEmptyBars')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/drawWholeRestOnEmptyBars')).toBe(false); - expect(stylesheet.raw.has('Global/miniBrowserPosition')).to.be.true; - expect(stylesheet.raw.get('Global/miniBrowserPosition')).to.equal(0); + expect(stylesheet.raw.has('Global/miniBrowserPosition')).toBe(true); + expect(stylesheet.raw.get('Global/miniBrowserPosition')).toBe(0); - expect(stylesheet.raw.has('StandardNotation/hideUselessRests')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/hideUselessRests')).to.equal(true); + expect(stylesheet.raw.has('StandardNotation/hideUselessRests')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/hideUselessRests')).toBe(true); - expect(stylesheet.raw.has('Global/SpacingAffectFontsSize')).to.be.true; - expect(stylesheet.raw.get('Global/SpacingAffectFontsSize')).to.equal(true); + expect(stylesheet.raw.has('Global/SpacingAffectFontsSize')).toBe(true); + expect(stylesheet.raw.get('Global/SpacingAffectFontsSize')).toBe(true); - expect(stylesheet.raw.has('Even/drawEvenCopyright')).to.be.true; - expect(stylesheet.raw.get('Even/drawEvenCopyright')).to.equal(true); + expect(stylesheet.raw.has('Even/drawEvenCopyright')).toBe(true); + expect(stylesheet.raw.get('Even/drawEvenCopyright')).toBe(true); - expect(stylesheet.raw.has('Global/RepeatTargetPriority')).to.be.true; - expect(stylesheet.raw.get('Global/RepeatTargetPriority')).to.equal(3300); + expect(stylesheet.raw.has('Global/RepeatTargetPriority')).toBe(true); + expect(stylesheet.raw.get('Global/RepeatTargetPriority')).toBe(3300); - expect(stylesheet.raw.has('Global/SVGFont')).to.be.true; - expect(stylesheet.raw.get('Global/SVGFont')).to.equal(':/renderer/resources/notes.svg'); + expect(stylesheet.raw.has('Global/SVGFont')).toBe(true); + expect(stylesheet.raw.get('Global/SVGFont')).toBe(':/renderer/resources/notes.svg'); - expect(stylesheet.raw.has('Footer/PageNumberAlignment')).to.be.true; - expect(stylesheet.raw.get('Footer/PageNumberAlignment')).to.equal(2); + expect(stylesheet.raw.has('Footer/PageNumberAlignment')).toBe(true); + expect(stylesheet.raw.get('Footer/PageNumberAlignment')).toBe(2); - expect(stylesheet.raw.has('Global/graceFlatScaleFactor')).to.be.true; - expect(stylesheet.raw.get('Global/graceFlatScaleFactor') as number).to.be.closeTo(0.58333, 0.0001); + expect(stylesheet.raw.has('Global/graceFlatScaleFactor')).toBe(true); + expect(stylesheet.raw.get('Global/graceFlatScaleFactor') as number).toBeCloseTo(0.58333, 3); - expect(stylesheet.raw.has('Global/shadowColorEnd')).to.be.true; - expect((stylesheet.raw.get('Global/shadowColorEnd') as Color).r).to.equal(90); - expect((stylesheet.raw.get('Global/shadowColorEnd') as Color).g).to.equal(90); - expect((stylesheet.raw.get('Global/shadowColorEnd') as Color).b).to.equal(90); - expect((stylesheet.raw.get('Global/shadowColorEnd') as Color).a).to.equal(10); + expect(stylesheet.raw.has('Global/shadowColorEnd')).toBe(true); + expect((stylesheet.raw.get('Global/shadowColorEnd') as Color).r).toBe(90); + expect((stylesheet.raw.get('Global/shadowColorEnd') as Color).g).toBe(90); + expect((stylesheet.raw.get('Global/shadowColorEnd') as Color).b).toBe(90); + expect((stylesheet.raw.get('Global/shadowColorEnd') as Color).a).toBe(10); - expect(stylesheet.raw.has('Even/EvenCopyright')).to.be.true; - expect(stylesheet.raw.get('Even/EvenCopyright')).to.equal('%COPYRIGHT%'); + expect(stylesheet.raw.has('Even/EvenCopyright')).toBe(true); + expect(stylesheet.raw.get('Even/EvenCopyright')).toBe('%COPYRIGHT%'); - expect(stylesheet.raw.has('Global/GolpePriority')).to.be.true; - expect(stylesheet.raw.get('Global/GolpePriority')).to.equal(350); + expect(stylesheet.raw.has('Global/GolpePriority')).toBe(true); + expect(stylesheet.raw.get('Global/GolpePriority')).toBe(350); - expect(stylesheet.raw.has('Global/spaceSizeMM')).to.be.true; - expect(stylesheet.raw.get('Global/spaceSizeMM') as number).to.be.closeTo(1.5, 0.0001); + expect(stylesheet.raw.has('Global/spaceSizeMM')).toBe(true); + expect(stylesheet.raw.get('Global/spaceSizeMM') as number).toBeCloseTo(1.5, 3); - expect(stylesheet.raw.has('TablatureNotation/drawSecondNoteTrill')).to.be.true; - expect(stylesheet.raw.get('TablatureNotation/drawSecondNoteTrill')).to.equal(true); + expect(stylesheet.raw.has('TablatureNotation/drawSecondNoteTrill')).toBe(true); + expect(stylesheet.raw.get('TablatureNotation/drawSecondNoteTrill')).toBe(true); - expect(stylesheet.raw.has('System/insertSize')).to.be.true; - expect(stylesheet.raw.get('System/insertSize')).to.equal(2); + expect(stylesheet.raw.has('System/insertSize')).toBe(true); + expect(stylesheet.raw.get('System/insertSize')).toBe(2); - expect(stylesheet.raw.has('TablatureNotation/minimalInformationForHarmonic')).to.be.true; - expect(stylesheet.raw.get('TablatureNotation/minimalInformationForHarmonic')).to.equal(true); + expect(stylesheet.raw.has('TablatureNotation/minimalInformationForHarmonic')).toBe(true); + expect(stylesheet.raw.get('TablatureNotation/minimalInformationForHarmonic')).toBe(true); - expect(stylesheet.raw.has('PageSetup/pageTopMargin')).to.be.true; - expect(stylesheet.raw.get('PageSetup/pageTopMargin') as number).to.be.closeTo(15, 0.0001); + expect(stylesheet.raw.has('PageSetup/pageTopMargin')).toBe(true); + expect(stylesheet.raw.get('PageSetup/pageTopMargin') as number).toBeCloseTo(15, 3); - expect(stylesheet.raw.has('StandardNotation/augmentationDotRadius')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/augmentationDotRadius') as number).to.be.closeTo(0.25, 0.0001); + expect(stylesheet.raw.has('StandardNotation/augmentationDotRadius')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/augmentationDotRadius') as number).toBeCloseTo(0.25, 3); - expect(stylesheet.raw.has('Odd/drawOddCopyright')).to.be.true; - expect(stylesheet.raw.get('Odd/drawOddCopyright')).to.equal(false); + expect(stylesheet.raw.has('Odd/drawOddCopyright')).toBe(true); + expect(stylesheet.raw.get('Odd/drawOddCopyright')).toBe(false); - expect(stylesheet.raw.has('TablatureNotation/forceRhythmicBand')).to.be.true; - expect(stylesheet.raw.get('TablatureNotation/forceRhythmicBand')).to.equal(false); + expect(stylesheet.raw.has('TablatureNotation/forceRhythmicBand')).toBe(true); + expect(stylesheet.raw.get('TablatureNotation/forceRhythmicBand')).toBe(false); - expect(stylesheet.raw.has('System/codaSplit')).to.be.true; - expect(stylesheet.raw.get('System/codaSplit')).to.equal(true); + expect(stylesheet.raw.has('System/codaSplit')).toBe(true); + expect(stylesheet.raw.get('System/codaSplit')).toBe(true); - expect(stylesheet.raw.has('StandardNotation/tieMaxHeight')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/tieMaxHeight') as number).to.be.closeTo(2.5, 0.0001); + expect(stylesheet.raw.has('StandardNotation/tieMaxHeight')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/tieMaxHeight') as number).toBeCloseTo(2.5, 3); - expect(stylesheet.raw.has('Header/WordsAndMusicAlignment')).to.be.true; - expect(stylesheet.raw.get('Header/WordsAndMusicAlignment')).to.equal(2); + expect(stylesheet.raw.has('Header/WordsAndMusicAlignment')).toBe(true); + expect(stylesheet.raw.get('Header/WordsAndMusicAlignment')).toBe(2); - expect(stylesheet.raw.has('Even/drawEvenFooter')).to.be.true; - expect(stylesheet.raw.get('Even/drawEvenFooter')).to.equal(true); + expect(stylesheet.raw.has('Even/drawEvenFooter')).toBe(true); + expect(stylesheet.raw.get('Even/drawEvenFooter')).toBe(true); - expect(stylesheet.raw.has('StandardNotation/rightFingeringPositionSN')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/rightFingeringPositionSN')).to.equal(1); + expect(stylesheet.raw.has('StandardNotation/rightFingeringPositionSN')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/rightFingeringPositionSN')).toBe(1); - expect(stylesheet.raw.has('System/bracketCurveHeight')).to.be.true; - expect(stylesheet.raw.get('System/bracketCurveHeight') as number).to.be.closeTo(0.8, 0.0001); + expect(stylesheet.raw.has('System/bracketCurveHeight')).toBe(true); + expect(stylesheet.raw.get('System/bracketCurveHeight') as number).toBeCloseTo(0.8, 3); - expect(stylesheet.raw.has('Global/FreeTimePriority')).to.be.true; - expect(stylesheet.raw.get('Global/FreeTimePriority')).to.equal(2700); + expect(stylesheet.raw.has('Global/FreeTimePriority')).toBe(true); + expect(stylesheet.raw.get('Global/FreeTimePriority')).toBe(2700); - expect(stylesheet.raw.has('Global/ChordSpacingMillimeter')).to.be.true; - expect(stylesheet.raw.get('Global/ChordSpacingMillimeter') as number).to.be.closeTo(3.0, 0.0001); + expect(stylesheet.raw.has('Global/ChordSpacingMillimeter')).toBe(true); + expect(stylesheet.raw.get('Global/ChordSpacingMillimeter') as number).toBeCloseTo(3.0, 3); - expect(stylesheet.raw.has('Header/drawAlbum')).to.be.true; - expect(stylesheet.raw.get('Header/drawAlbum')).to.equal(true); + expect(stylesheet.raw.has('Header/drawAlbum')).toBe(true); + expect(stylesheet.raw.get('Header/drawAlbum')).toBe(true); - expect(stylesheet.raw.has('System/trackNameModeMulti')).to.be.true; - expect(stylesheet.raw.get('System/trackNameModeMulti')).to.equal(1); + expect(stylesheet.raw.has('System/trackNameModeMulti')).toBe(true); + expect(stylesheet.raw.get('System/trackNameModeMulti')).toBe(1); - expect(stylesheet.raw.has('System/insertSizeSameTrack')).to.be.true; - expect(stylesheet.raw.get('System/insertSizeSameTrack')).to.equal(1); + expect(stylesheet.raw.has('System/insertSizeSameTrack')).toBe(true); + expect(stylesheet.raw.get('System/insertSizeSameTrack')).toBe(1); - expect(stylesheet.raw.has('System/marginMinimalBeforeFirstNote')).to.be.true; - expect(stylesheet.raw.get('System/marginMinimalBeforeFirstNote') as number).to.be.closeTo(1.5, 0.0001); + expect(stylesheet.raw.has('System/marginMinimalBeforeFirstNote')).toBe(true); + expect(stylesheet.raw.get('System/marginMinimalBeforeFirstNote') as number).toBeCloseTo(1.5, 3); - expect(stylesheet.raw.has('Header/Subtitle')).to.be.true; - expect(stylesheet.raw.get('Header/Subtitle')).to.equal('%SUBTITLE%'); + expect(stylesheet.raw.has('Header/Subtitle')).toBe(true); + expect(stylesheet.raw.get('Header/Subtitle')).toBe('%SUBTITLE%'); - expect(stylesheet.raw.has('Global/alphaSuggested')).to.be.true; - expect(stylesheet.raw.get('Global/alphaSuggested') as number).to.be.closeTo(0.5, 0.0001); + expect(stylesheet.raw.has('Global/alphaSuggested')).toBe(true); + expect(stylesheet.raw.get('Global/alphaSuggested') as number).toBeCloseTo(0.5, 3); - expect(stylesheet.raw.has('Even/EvenHeaderAlignment')).to.be.true; - expect(stylesheet.raw.get('Even/EvenHeaderAlignment')).to.equal(0); + expect(stylesheet.raw.has('Even/EvenHeaderAlignment')).toBe(true); + expect(stylesheet.raw.get('Even/EvenHeaderAlignment')).toBe(0); - expect(stylesheet.raw.has('Global/TechniqueSymbol')).to.be.true; - expect(stylesheet.raw.get('Global/TechniqueSymbol')).to.equal(25); + expect(stylesheet.raw.has('Global/TechniqueSymbol')).toBe(true); + expect(stylesheet.raw.get('Global/TechniqueSymbol')).toBe(25); - expect(stylesheet.raw.has('Global/tuningBoxed')).to.be.true; - expect(stylesheet.raw.get('Global/tuningBoxed')).to.equal(false); + expect(stylesheet.raw.has('Global/tuningBoxed')).toBe(true); + expect(stylesheet.raw.get('Global/tuningBoxed')).toBe(false); - expect(stylesheet.raw.has('StandardNotation/drawBends')).to.be.true; - expect(stylesheet.raw.get('StandardNotation/drawBends')).to.equal(true); + expect(stylesheet.raw.has('StandardNotation/drawBends')).toBe(true); + expect(stylesheet.raw.get('StandardNotation/drawBends')).toBe(true); - expect(stylesheet.raw.has('Global/mouseClickMaxTime')).to.be.true; - expect(stylesheet.raw.get('Global/mouseClickMaxTime')).to.equal(200); + expect(stylesheet.raw.has('Global/mouseClickMaxTime')).toBe(true); + expect(stylesheet.raw.get('Global/mouseClickMaxTime')).toBe(200); - expect(stylesheet.raw.has('Global/graceSharpScaleFactor')).to.be.true; - expect(stylesheet.raw.get('Global/graceSharpScaleFactor') as number).to.be.closeTo(0.6666, 0.0001); + expect(stylesheet.raw.has('Global/graceSharpScaleFactor')).toBe(true); + expect(stylesheet.raw.get('Global/graceSharpScaleFactor') as number).toBeCloseTo(0.6666, 3); - expect(stylesheet.raw.has('Global/GrayedOpacity')).to.be.true; - expect(stylesheet.raw.get('Global/GrayedOpacity') as number).to.be.closeTo(0.2, 0.0001); + expect(stylesheet.raw.has('Global/GrayedOpacity')).toBe(true); + expect(stylesheet.raw.get('Global/GrayedOpacity') as number).toBeCloseTo(0.2, 3); - expect(stylesheet.raw.has('Global/WhammyBarVibratoPriority')).to.be.true; - expect(stylesheet.raw.get('Global/WhammyBarVibratoPriority')).to.equal(1400); + expect(stylesheet.raw.has('Global/WhammyBarVibratoPriority')).toBe(true); + expect(stylesheet.raw.get('Global/WhammyBarVibratoPriority')).toBe(1400); - expect(stylesheet.raw.has('TablatureNotation/noStaffLineForSlashs')).to.be.true; - expect(stylesheet.raw.get('TablatureNotation/noStaffLineForSlashs')).to.equal(false); + expect(stylesheet.raw.has('TablatureNotation/noStaffLineForSlashs')).toBe(true); + expect(stylesheet.raw.get('TablatureNotation/noStaffLineForSlashs')).toBe(false); }); }); diff --git a/packages/alphatab/test/importer/Gp3Importer.test.ts b/packages/alphatab/test/importer/Gp3Importer.test.ts index 61e84c68e..4aa18346c 100644 --- a/packages/alphatab/test/importer/Gp3Importer.test.ts +++ b/packages/alphatab/test/importer/Gp3Importer.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { AutomationType } from '@coderline/alphatab/model/Automation'; import { BrushType } from '@coderline/alphatab/model/BrushType'; import { DynamicValue } from '@coderline/alphatab/model/DynamicValue'; @@ -5,26 +6,24 @@ import type { Score } from '@coderline/alphatab/model/Score'; import { SlideOutType } from '@coderline/alphatab/model/SlideOutType'; import { GpImporterTestHelper } from 'test/importer/GpImporterTestHelper'; import { HarmonicType } from '@coderline/alphatab/model/HarmonicType'; -import { expect } from 'chai'; - describe('Gp3ImporterTest', () => { it('score-info', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro3/score-info.gp3'); const score: Score = reader.readScore(); - expect(score.title).to.equal('Title'); - expect(score.subTitle).to.equal('Subtitle'); - expect(score.artist).to.equal('Artist'); - expect(score.album).to.equal('Album'); - expect(score.words).to.equal('Music'); // no words in gp4 + expect(score.title).toBe('Title'); + expect(score.subTitle).toBe('Subtitle'); + expect(score.artist).toBe('Artist'); + expect(score.album).toBe('Album'); + expect(score.words).toBe('Music'); // no words in gp4 - expect(score.music).to.equal('Music'); - expect(score.copyright).to.equal('Copyright'); - expect(score.tab).to.equal('Tab'); - expect(score.instructions).to.equal('Instructions'); - expect(score.notices).to.equal('Notice1\r\nNotice2'); - expect(score.masterBars.length).to.equal(5); - expect(score.tracks.length).to.equal(1); - expect(score.tracks[0].name).to.equal('Track 1'); + expect(score.music).toBe('Music'); + expect(score.copyright).toBe('Copyright'); + expect(score.tab).toBe('Tab'); + expect(score.instructions).toBe('Instructions'); + expect(score.notices).toBe('Notice1\r\nNotice2'); + expect(score.masterBars.length).toBe(5); + expect(score.tracks.length).toBe(1); + expect(score.tracks[0].name).toBe('Track 1'); }); it('notes', async () => { @@ -48,28 +47,28 @@ describe('Gp3ImporterTest', () => { it('accentuations', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro3/accentuations.gp3'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isGhost).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isGhost).toBe(true); // it seems accentuation is handled as Forte Fortissimo - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].dynamics).to.equal(DynamicValue.FFF); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isLetRing).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].dynamics).toBe(DynamicValue.FFF); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isLetRing).toBe(true); }); it('harmonics', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro3/harmonics.gp3'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicType).to.be.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicType).toBe( HarmonicType.Natural ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicType).to.be.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicType).toBe( HarmonicType.Artificial ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicType).to.be.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicType).toBe( HarmonicType.Artificial ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicType).to.be.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicType).toBe( HarmonicType.Artificial ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicType).to.be.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicType).toBe( HarmonicType.Artificial ); }); @@ -89,10 +88,10 @@ describe('Gp3ImporterTest', () => { it('slides', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro3/slides.gp3'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(5)!.slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(5)!.slideOutType).toBe( SlideOutType.Shift ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].getNoteOnString(2)!.slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].getNoteOnString(2)!.slideOutType).toBe( SlideOutType.Shift ); }); @@ -106,28 +105,28 @@ describe('Gp3ImporterTest', () => { it('other-effects', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro3/other-effects.gp3'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tap).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].slap).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].pop).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].fadeIn).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].hasChord).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].chord!.name).to.equal('C'); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].text).to.equal('Text'); - expect(score.tracks[0].staves[0].bars[4].masterBar.tempoAutomations.length).to.equal(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tap).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].slap).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].pop).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].fadeIn).toBe(true); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].hasChord).toBe(true); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].chord!.name).toBe('C'); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].text).toBe('Text'); + expect(score.tracks[0].staves[0].bars[4].masterBar.tempoAutomations.length).toBe(1); expect( score.tracks[0].staves[0].bars[4].masterBar.tempoAutomations[0]!.value - ).to.equal(120); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].getAutomation(AutomationType.Instrument)).to.be.ok; + ).toBe(120); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].getAutomation(AutomationType.Instrument)).toBeTruthy(); expect( score.tracks[0].staves[0].bars[4].voices[0].beats[0].getAutomation(AutomationType.Instrument)!.value - ).to.equal(25); + ).toBe(25); }); it('strokes', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro3/strokes.gp3'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].brushType).to.equal(BrushType.BrushDown); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].brushType).to.equal(BrushType.BrushUp); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].brushType).toBe(BrushType.BrushDown); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].brushType).toBe(BrushType.BrushUp); }); it('tuplets', async () => { @@ -139,10 +138,10 @@ describe('Gp3ImporterTest', () => { it('ranges', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro3/ranges.gp3'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].isLetRing).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].isLetRing).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].isLetRing).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].isLetRing).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].isLetRing).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].isLetRing).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].isLetRing).toBe(true); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].isLetRing).toBe(true); }); it('effects', async () => { diff --git a/packages/alphatab/test/importer/Gp4Importer.test.ts b/packages/alphatab/test/importer/Gp4Importer.test.ts index 325ee1d3a..fae97f8f1 100644 --- a/packages/alphatab/test/importer/Gp4Importer.test.ts +++ b/packages/alphatab/test/importer/Gp4Importer.test.ts @@ -1,25 +1,24 @@ +import { describe, expect, it } from 'vitest'; import type { Score } from '@coderline/alphatab/model/Score'; import { GpImporterTestHelper } from 'test/importer/GpImporterTestHelper'; -import { expect } from 'chai'; - describe('Gp4ImporterTest', () => { it('score-info', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro4/score-info.gp4'); const score: Score = reader.readScore(); - expect(score.title).to.equal('Title'); - expect(score.subTitle).to.equal('Subtitle'); - expect(score.artist).to.equal('Artist'); - expect(score.album).to.equal('Album'); - expect(score.words).to.equal('Music'); // no words in gp4 - - expect(score.music).to.equal('Music'); - expect(score.copyright).to.equal('Copyright'); - expect(score.tab).to.equal('Tab'); - expect(score.instructions).to.equal('Instructions'); - expect(score.notices).to.equal('Notice1\r\nNotice2'); - expect(score.masterBars.length).to.equal(5); - expect(score.tracks.length).to.equal(1); - expect(score.tracks[0].name).to.equal('Track 1'); + expect(score.title).toBe('Title'); + expect(score.subTitle).toBe('Subtitle'); + expect(score.artist).toBe('Artist'); + expect(score.album).toBe('Album'); + expect(score.words).toBe('Music'); // no words in gp4 + + expect(score.music).toBe('Music'); + expect(score.copyright).toBe('Copyright'); + expect(score.tab).toBe('Tab'); + expect(score.instructions).toBe('Instructions'); + expect(score.notices).toBe('Notice1\r\nNotice2'); + expect(score.masterBars.length).toBe(5); + expect(score.tracks.length).toBe(1); + expect(score.tracks[0].name).toBe('Track 1'); }); it('notes', async () => { diff --git a/packages/alphatab/test/importer/Gp5Importer.test.ts b/packages/alphatab/test/importer/Gp5Importer.test.ts index 4ef957e89..d114b0d88 100644 --- a/packages/alphatab/test/importer/Gp5Importer.test.ts +++ b/packages/alphatab/test/importer/Gp5Importer.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { Settings } from '@coderline/alphatab/Settings'; import { type Beat, BeatBeamingMode } from '@coderline/alphatab/model/Beat'; import { Direction } from '@coderline/alphatab/model/Direction'; @@ -7,7 +8,6 @@ import { WahPedal } from '@coderline/alphatab/model/WahPedal'; import { TextAlign } from '@coderline/alphatab/platform/ICanvas'; import { BeamDirection } from '@coderline/alphatab/rendering/utils/BeamDirection'; import { GpImporterTestHelper } from 'test/importer/GpImporterTestHelper'; -import { expect } from 'chai'; import { Clef } from '@coderline/alphatab/model/Clef'; import { PercussionMapper } from '@coderline/alphatab/model/PercussionMapper'; @@ -15,20 +15,20 @@ describe('Gp5ImporterTest', () => { it('score-info', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/score-info.gp5'); const score: Score = reader.readScore(); - expect(score.title).to.equal('Title'); - expect(score.subTitle).to.equal('Subtitle'); - expect(score.artist).to.equal('Artist'); - expect(score.album).to.equal('Album'); - expect(score.words).to.equal('Words'); - expect(score.music).to.equal('Music'); - expect(score.copyright).to.equal('Copyright'); - expect(score.tab).to.equal('Tab'); - expect(score.instructions).to.equal('Instructions'); - expect(score.notices).to.equal('Notice1\r\nNotice2'); - expect(score.masterBars.length).to.equal(5); - expect(score.tracks.length).to.equal(2); - expect(score.tracks[0].name).to.equal('Track 1'); - expect(score.tracks[1].name).to.equal('Track 2'); + expect(score.title).toBe('Title'); + expect(score.subTitle).toBe('Subtitle'); + expect(score.artist).toBe('Artist'); + expect(score.album).toBe('Album'); + expect(score.words).toBe('Words'); + expect(score.music).toBe('Music'); + expect(score.copyright).toBe('Copyright'); + expect(score.tab).toBe('Tab'); + expect(score.instructions).toBe('Instructions'); + expect(score.notices).toBe('Notice1\r\nNotice2'); + expect(score.masterBars.length).toBe(5); + expect(score.tracks.length).toBe(2); + expect(score.tracks[0].name).toBe('Track 1'); + expect(score.tracks[1].name).toBe('Track 2'); }); it('notes', async () => { @@ -174,36 +174,36 @@ describe('Gp5ImporterTest', () => { 'guitarpro5/alternate-endings-section-error.gp5' ); const score: Score = reader.readScore(); - expect(score.masterBars.length).to.be.equal(2); - expect(score.masterBars[1].alternateEndings).to.be.equal(4); - expect(score.masterBars[1].section).to.be.ok; - expect(score.masterBars[1].section?.text).to.be.equal('Outro'); + expect(score.masterBars.length).toBe(2); + expect(score.masterBars[1].alternateEndings).toBe(4); + expect(score.masterBars[1].section).toBeTruthy(); + expect(score.masterBars[1].section?.text).toBe('Outro'); }); it('canon', async () => { const reader = await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/canon.gp5'); const score: Score = reader.readScore(); - expect(score.title).to.equal('Canon Rock'); - expect(score.subTitle).to.equal(''); - expect(score.artist).to.equal('JerryC'); - expect(score.album).to.equal(''); - expect(score.words).to.equal(''); - expect(score.music).to.equal('JerryC'); - expect(score.copyright).to.equal(''); - expect(score.tab).to.equal(''); - expect(score.instructions).to.equal(''); - expect(score.notices).to.equal(''); - expect(score.masterBars.length).to.equal(224); - expect(score.tracks.length).to.equal(9); - expect(score.tracks[0].name).to.equal('Guitar Player'); - expect(score.tracks[1].name).to.equal('Low Bassy Sound'); - expect(score.tracks[2].name).to.equal('High Soundy Thing'); - expect(score.tracks[3].name).to.equal('Second Guitar'); - expect(score.tracks[4].name).to.equal('Drums'); - expect(score.tracks[5].name).to.equal('Harmonizer'); - expect(score.tracks[6].name).to.equal('The clean guitar'); - expect(score.tracks[7].name).to.equal('Track 8'); - expect(score.tracks[8].name).to.equal('Percussion'); + expect(score.title).toBe('Canon Rock'); + expect(score.subTitle).toBe(''); + expect(score.artist).toBe('JerryC'); + expect(score.album).toBe(''); + expect(score.words).toBe(''); + expect(score.music).toBe('JerryC'); + expect(score.copyright).toBe(''); + expect(score.tab).toBe(''); + expect(score.instructions).toBe(''); + expect(score.notices).toBe(''); + expect(score.masterBars.length).toBe(224); + expect(score.tracks.length).toBe(9); + expect(score.tracks[0].name).toBe('Guitar Player'); + expect(score.tracks[1].name).toBe('Low Bassy Sound'); + expect(score.tracks[2].name).toBe('High Soundy Thing'); + expect(score.tracks[3].name).toBe('Second Guitar'); + expect(score.tracks[4].name).toBe('Drums'); + expect(score.tracks[5].name).toBe('Harmonizer'); + expect(score.tracks[6].name).toBe('The clean guitar'); + expect(score.tracks[7].name).toBe('Track 8'); + expect(score.tracks[8].name).toBe('Percussion'); }); it('beat-text-lyrics', async () => { const settings = new Settings(); @@ -272,7 +272,7 @@ describe('Gp5ImporterTest', () => { beat = beat.nextBeat; } - expect(actualChunks.join(';')).to.equal(expectedChunks.join(';')); + expect(actualChunks.join(';')).toBe(expectedChunks.join(';')); }); it('layout-configuration', async () => { @@ -295,42 +295,42 @@ describe('Gp5ImporterTest', () => { it('hide-tuning', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/hide-tuning.gp5')).readScore(); - expect(score.stylesheet.perTrackDisplayTuning).to.be.ok; - expect(score.stylesheet.perTrackDisplayTuning!.has(0)).to.be.true; - expect(score.stylesheet.perTrackDisplayTuning!.get(0)).to.equal(false); + expect(score.stylesheet.perTrackDisplayTuning).toBeTruthy(); + expect(score.stylesheet.perTrackDisplayTuning!.has(0)).toBe(true); + expect(score.stylesheet.perTrackDisplayTuning!.get(0)).toBe(false); - expect(score.stylesheet.perTrackDisplayTuning!.has(1)).to.be.true; - expect(score.stylesheet.perTrackDisplayTuning!.get(1)).to.equal(true); + expect(score.stylesheet.perTrackDisplayTuning!.has(1)).toBe(true); + expect(score.stylesheet.perTrackDisplayTuning!.get(1)).toBe(true); }); it('staves', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/staves.gp5')).readScore(); - expect(score.tracks[0].staves[0].showNumbered).to.be.false; - expect(score.tracks[0].staves[0].showSlash).to.be.false; - expect(score.tracks[0].staves[0].showTablature).to.be.true; - expect(score.tracks[0].staves[0].showStandardNotation).to.be.true; + expect(score.tracks[0].staves[0].showNumbered).toBe(false); + expect(score.tracks[0].staves[0].showSlash).toBe(false); + expect(score.tracks[0].staves[0].showTablature).toBe(true); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); - expect(score.tracks[1].staves[0].showNumbered).to.be.false; - expect(score.tracks[1].staves[0].showSlash).to.be.false; - expect(score.tracks[1].staves[0].showTablature).to.be.false; - expect(score.tracks[1].staves[0].showStandardNotation).to.be.true; + expect(score.tracks[1].staves[0].showNumbered).toBe(false); + expect(score.tracks[1].staves[0].showSlash).toBe(false); + expect(score.tracks[1].staves[0].showTablature).toBe(false); + expect(score.tracks[1].staves[0].showStandardNotation).toBe(true); - expect(score.tracks[2].staves[0].showNumbered).to.be.false; - expect(score.tracks[2].staves[0].showSlash).to.be.false; - expect(score.tracks[2].staves[0].showTablature).to.be.true; - expect(score.tracks[2].staves[0].showStandardNotation).to.be.false; + expect(score.tracks[2].staves[0].showNumbered).toBe(false); + expect(score.tracks[2].staves[0].showSlash).toBe(false); + expect(score.tracks[2].staves[0].showTablature).toBe(true); + expect(score.tracks[2].staves[0].showStandardNotation).toBe(false); }); it('hide-diagram', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/hide-diagrams.gp5')).readScore(); - expect(score.stylesheet.perTrackChordDiagramsOnTop).to.be.ok; - expect(score.stylesheet.perTrackChordDiagramsOnTop!.has(0)).to.be.true; - expect(score.stylesheet.perTrackChordDiagramsOnTop!.get(0)).to.equal(false); + expect(score.stylesheet.perTrackChordDiagramsOnTop).toBeTruthy(); + expect(score.stylesheet.perTrackChordDiagramsOnTop!.has(0)).toBe(true); + expect(score.stylesheet.perTrackChordDiagramsOnTop!.get(0)).toBe(false); - expect(score.stylesheet.perTrackChordDiagramsOnTop!.has(1)).to.be.true; - expect(score.stylesheet.perTrackChordDiagramsOnTop!.get(1)).to.equal(true); + expect(score.stylesheet.perTrackChordDiagramsOnTop!.has(1)).toBe(true); + expect(score.stylesheet.perTrackChordDiagramsOnTop!.get(1)).toBe(true); }); it('directions', async () => { @@ -366,8 +366,8 @@ describe('Gp5ImporterTest', () => { ]; for (let i = 0; i < expectedDirections.length; i++) { - expect(score.masterBars[i].directions).to.be.ok; - expect(score.masterBars[i].directions!.has(expectedDirections[i])).to.be.true; + expect(score.masterBars[i].directions).toBeTruthy(); + expect(score.masterBars[i].directions!.has(expectedDirections[i])).toBe(true); } }); @@ -375,164 +375,164 @@ describe('Gp5ImporterTest', () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/beaming-mode.gp5')).readScore(); // auto - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].preferredBeamDirection).not.toBeTruthy(); // force - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.Auto // already has beam, no need to force ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].beamingMode).toBe( BeatBeamingMode.ForceMergeWithNext ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].beamingMode).toBe( BeatBeamingMode.Auto // already has beam, no need to force ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].preferredBeamDirection).not.toBeTruthy(); // break - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].beamingMode).toBe( BeatBeamingMode.Auto // already has no beam, no need to break ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].preferredBeamDirection).not.toBeTruthy(); // break secondary - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceSplitOnSecondaryToNext ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].preferredBeamDirection).not.toBeTruthy(); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].preferredBeamDirection).to.not.be.ok; + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].preferredBeamDirection).not.toBeTruthy(); // invert to down - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].preferredBeamDirection).to.equal( + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].preferredBeamDirection).toBe( BeamDirection.Down ); // invert to up - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); }); it('ottavia', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/ottavia.gp5')).readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].ottava).to.equal(Ottavia._8va); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].ottava).to.equal(Ottavia._8vb); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].ottava).to.equal(Ottavia._15ma); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].ottava).to.equal(Ottavia._15mb); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].ottava).to.equal(Ottavia.Regular); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].ottava).toBe(Ottavia._8va); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].ottava).toBe(Ottavia._8vb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].ottava).toBe(Ottavia._15ma); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].ottava).toBe(Ottavia._15mb); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].ottava).toBe(Ottavia.Regular); }); it('wah-wah', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/wah-wah.gp5')).readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].wahPedal).to.equal(WahPedal.None); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].wahPedal).to.equal(WahPedal.Open); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].wahPedal).to.equal(WahPedal.Closed); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].wahPedal).to.equal(WahPedal.Open); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].wahPedal).to.equal(WahPedal.Closed); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].wahPedal).to.equal(WahPedal.None); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].wahPedal).toBe(WahPedal.None); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].wahPedal).toBe(WahPedal.Open); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].wahPedal).toBe(WahPedal.Closed); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].wahPedal).toBe(WahPedal.Open); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].wahPedal).toBe(WahPedal.Closed); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].wahPedal).toBe(WahPedal.None); }); it('header-footer', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/header-footer.gp5')).readScore(); - expect(score.style).to.be.ok; + expect(score.style).toBeTruthy(); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Title)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.template).to.equal('Title: %TITLE%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Title)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.template).toBe('Title: %TITLE%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.SubTitle)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.template).to.equal('Subtitle: %SUBTITLE%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.has(ScoreSubElement.SubTitle)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.template).toBe('Subtitle: %SUBTITLE%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Artist)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.template).to.equal('Artist: %ARTIST%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Artist)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.template).toBe('Artist: %ARTIST%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Album)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.template).to.equal('Album: %ALBUM%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Album)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.template).toBe('Album: %ALBUM%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Words)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.template).to.equal('Words: %WORDS%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.textAlign).to.equal(TextAlign.Left); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Words)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.template).toBe('Words: %WORDS%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.textAlign).toBe(TextAlign.Left); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Music)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.template).to.equal('Music: %MUSIC%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.textAlign).to.equal(TextAlign.Right); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Music)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.template).toBe('Music: %MUSIC%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.textAlign).toBe(TextAlign.Right); - expect(score.style!.headerAndFooter.has(ScoreSubElement.WordsAndMusic)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.template).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.WordsAndMusic)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.template).toBe( 'Words & Music: %WORDSMUSIC%' ); - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.textAlign).to.equal(TextAlign.Right); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.textAlign).toBe(TextAlign.Right); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Transcriber)).to.be.false; + expect(score.style!.headerAndFooter.has(ScoreSubElement.Transcriber)).toBe(false); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Copyright)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.template).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.Copyright)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.template).toBe( 'Copyright: %COPYRIGHT%' ); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.CopyrightSecondLine)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.template).to.equal('Copyright2'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.textAlign).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.CopyrightSecondLine)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.template).toBe('Copyright2'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.textAlign).toBe( TextAlign.Center ); }); @@ -540,19 +540,19 @@ describe('Gp5ImporterTest', () => { it('bank', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/bank.gp5')).readScore(); - expect(score.tracks[0].playbackInfo.program).to.equal(25); - expect(score.tracks[0].playbackInfo.bank).to.equal(0); + expect(score.tracks[0].playbackInfo.program).toBe(25); + expect(score.tracks[0].playbackInfo.bank).toBe(0); - expect(score.tracks[1].playbackInfo.program).to.equal(25); - expect(score.tracks[1].playbackInfo.bank).to.equal(77); + expect(score.tracks[1].playbackInfo.program).toBe(25); + expect(score.tracks[1].playbackInfo.bank).toBe(77); }); it('tuning-bass-clef', async () => { const score = (await GpImporterTestHelper.prepareImporterWithFile('guitarpro5/bass-tuning.gp5')).readScore(); - expect(score.tracks[0].staves[0].bars[0].clef).to.equal(Clef.G2); - expect(score.tracks[1].staves[0].bars[0].clef).to.equal(Clef.F4); - expect(score.tracks[2].staves[0].bars[0].clef).to.equal(Clef.F4); - expect(score.tracks[3].staves[0].bars[0].clef).to.equal(Clef.F4); + expect(score.tracks[0].staves[0].bars[0].clef).toBe(Clef.G2); + expect(score.tracks[1].staves[0].bars[0].clef).toBe(Clef.F4); + expect(score.tracks[2].staves[0].bars[0].clef).toBe(Clef.F4); + expect(score.tracks[3].staves[0].bars[0].clef).toBe(Clef.F4); }); it('percusson', async () => { @@ -564,7 +564,7 @@ describe('Gp5ImporterTest', () => { if (beat.notes.length === 1) { const articulationName = PercussionMapper.getArticulationName(beat.notes[0]); const hasArticulation = PercussionMapper.instrumentArticulationNames.has(articulationName); - expect(hasArticulation).to.be.true; + expect(hasArticulation).toBe(true); beat = beat.nextBeat; } } diff --git a/packages/alphatab/test/importer/Gp7Importer.test.ts b/packages/alphatab/test/importer/Gp7Importer.test.ts index beac718d4..e81669f19 100644 --- a/packages/alphatab/test/importer/Gp7Importer.test.ts +++ b/packages/alphatab/test/importer/Gp7Importer.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { MidiUtils } from '@coderline/alphatab/midi/MidiUtils'; import { Gp7To8Importer } from '@coderline/alphatab/importer/Gp7To8Importer'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; @@ -17,7 +18,6 @@ import { Settings } from '@coderline/alphatab/Settings'; import { GpImporterTestHelper } from 'test/importer/GpImporterTestHelper'; import { TestPlatform } from 'test/TestPlatform'; import { AutomationType } from '@coderline/alphatab/model/Automation'; -import { expect } from 'chai'; import { BeamDirection } from '@coderline/alphatab/rendering/utils/BeamDirection'; describe('Gp7ImporterTest', () => { @@ -35,20 +35,20 @@ describe('Gp7ImporterTest', () => { it('score-info', async () => { const reader = await prepareImporterWithFile('guitarpro7/score-info.gp'); const score: Score = reader.readScore(); - expect(score.title).to.equal('Title'); - expect(score.subTitle).to.equal('Subtitle'); - expect(score.artist).to.equal('Artist'); - expect(score.album).to.equal('Album'); - expect(score.words).to.equal('Words'); - expect(score.music).to.equal('Music'); - expect(score.copyright).to.equal('Copyright'); - expect(score.tab).to.equal('Tab'); - expect(score.instructions).to.equal('Instructions'); - expect(score.notices).to.equal('Notice1\nNotice2'); - expect(score.masterBars.length).to.equal(5); - expect(score.tracks.length).to.equal(2); - expect(score.tracks[0].name).to.equal('Track 1'); - expect(score.tracks[1].name).to.equal('Track 2'); + expect(score.title).toBe('Title'); + expect(score.subTitle).toBe('Subtitle'); + expect(score.artist).toBe('Artist'); + expect(score.album).toBe('Album'); + expect(score.words).toBe('Words'); + expect(score.music).toBe('Music'); + expect(score.copyright).toBe('Copyright'); + expect(score.tab).toBe('Tab'); + expect(score.instructions).toBe('Instructions'); + expect(score.notices).toBe('Notice1\nNotice2'); + expect(score.masterBars.length).toBe(5); + expect(score.tracks.length).toBe(2); + expect(score.tracks[0].name).toBe('Track 1'); + expect(score.tracks[1].name).toBe('Track 2'); }); it('notes', async () => { @@ -96,28 +96,28 @@ describe('Gp7ImporterTest', () => { it('bend', async () => { const reader = await prepareImporterWithFile('guitarpro7/bends.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendType).to.equal(BendType.Bend); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints!.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].offset).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].value).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].offset).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].value).to.equal(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendType).to.equal(BendType.Bend); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints!.length).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].offset).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].value).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].offset).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].value).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendType).to.equal(BendType.BendRelease); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints!.length).to.equal(4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].offset).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].value).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![1].offset).to.equal(30); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![1].value).to.equal(12); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![2].offset).to.equal(30); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![2].value).to.equal(12); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![3].offset).to.equal(60); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![3].value).to.equal(6); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendType).toBe(BendType.Bend); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints!.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].offset).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].value).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].offset).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].value).toBe(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendType).toBe(BendType.Bend); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints!.length).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].offset).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].value).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].offset).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].value).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendType).toBe(BendType.BendRelease); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints!.length).toBe(4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].offset).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].value).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![1].offset).toBe(30); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![1].value).toBe(12); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![2].offset).toBe(30); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![2].value).toBe(12); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![3].offset).toBe(60); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![3].value).toBe(6); }); it('bends-advanced', async () => { @@ -128,293 +128,293 @@ describe('Gp7ImporterTest', () => { // // Bar 1 let note: Note = score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.BendRelease); - expect(note.bendPoints!.length).to.equal(4); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(10.2, 0.001); - expect(note.bendPoints![1].value).to.equal(4); - expect(note.bendPoints![2].offset).to.be.closeTo(20.4, 0.001); - expect(note.bendPoints![2].value).to.equal(4); - expect(note.bendPoints![3].offset).to.be.closeTo(30, 0.001); - expect(note.bendPoints![3].value).to.equal(0); + expect(note.bendType).toBe(BendType.BendRelease); + expect(note.bendPoints!.length).toBe(4); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(10.2, 3); + expect(note.bendPoints![1].value).toBe(4); + expect(note.bendPoints![2].offset).toBeCloseTo(20.4, 3); + expect(note.bendPoints![2].value).toBe(4); + expect(note.bendPoints![3].offset).toBeCloseTo(30, 3); + expect(note.bendPoints![3].value).toBe(0); // // Bar 2 note = score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(59.4, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(59.4, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.BendRelease); - expect(note.bendPoints!.length).to.equal(4); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(10.2, 0.001); - expect(note.bendPoints![1].value).to.equal(4); - expect(note.bendPoints![2].offset).to.be.closeTo(45.6, 0.001); - expect(note.bendPoints![2].value).to.equal(4); - expect(note.bendPoints![3].offset).to.be.closeTo(59.4, 0.001); - expect(note.bendPoints![3].value).to.equal(0); + expect(note.bendType).toBe(BendType.BendRelease); + expect(note.bendPoints!.length).toBe(4); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(10.2, 3); + expect(note.bendPoints![1].value).toBe(4); + expect(note.bendPoints![2].offset).toBeCloseTo(45.6, 3); + expect(note.bendPoints![2].value).toBe(4); + expect(note.bendPoints![3].offset).toBeCloseTo(59.4, 3); + expect(note.bendPoints![3].value).toBe(0); // // Bar 3 note = score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Prebend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.be.closeTo(60, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Prebend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBeCloseTo(60, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[2].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.PrebendBend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(6); + expect(note.bendType).toBe(BendType.PrebendBend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(6); // // Bar 4 note = score.tracks[0].staves[0].bars[3].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.PrebendRelease); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(0); + expect(note.bendType).toBe(BendType.PrebendRelease); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(0); // // Bar 5 note = score.tracks[0].staves[0].bars[4].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(14.4, 0.001); - expect(note.bendPoints![1].value).to.equal(8); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(14.4, 3); + expect(note.bendPoints![1].value).toBe(8); note = score.tracks[0].staves[0].bars[4].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.BendRelease); - expect(note.bendPoints!.length).to.equal(4); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(9, 0.001); - expect(note.bendPoints![1].value).to.equal(8); - expect(note.bendPoints![2].offset).to.be.closeTo(20.4, 0.001); - expect(note.bendPoints![2].value).to.equal(8); - expect(note.bendPoints![3].offset).to.be.closeTo(31.2, 0.001); - expect(note.bendPoints![3].value).to.equal(4); + expect(note.bendType).toBe(BendType.BendRelease); + expect(note.bendPoints!.length).toBe(4); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(9, 3); + expect(note.bendPoints![1].value).toBe(8); + expect(note.bendPoints![2].offset).toBeCloseTo(20.4, 3); + expect(note.bendPoints![2].value).toBe(8); + expect(note.bendPoints![3].offset).toBeCloseTo(31.2, 3); + expect(note.bendPoints![3].value).toBe(4); // // Bar 6 note = score.tracks[0].staves[0].bars[5].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Prebend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(8); - expect(note.bendPoints![1].offset).to.be.closeTo(60, 0.001); - expect(note.bendPoints![1].value).to.equal(8); + expect(note.bendType).toBe(BendType.Prebend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(8); + expect(note.bendPoints![1].offset).toBeCloseTo(60, 3); + expect(note.bendPoints![1].value).toBe(8); note = score.tracks[0].staves[0].bars[5].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.PrebendBend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(8); - expect(note.bendPoints![1].offset).to.be.closeTo(16.2, 0.001); - expect(note.bendPoints![1].value).to.equal(12); + expect(note.bendType).toBe(BendType.PrebendBend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(8); + expect(note.bendPoints![1].offset).toBeCloseTo(16.2, 3); + expect(note.bendPoints![1].value).toBe(12); // // Bar 7 note = score.tracks[0].staves[0].bars[6].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.PrebendRelease); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(8); - expect(note.bendPoints![1].offset).to.be.closeTo(14.4, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.PrebendRelease); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(8); + expect(note.bendPoints![1].offset).toBeCloseTo(14.4, 3); + expect(note.bendPoints![1].value).toBe(4); // // Bar 8 note = score.tracks[0].staves[0].bars[7].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); // // Bar 9 note = score.tracks[0].staves[0].bars[8].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.BendRelease); - expect(note.bendPoints!.length).to.equal(4); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(10.2, 0.001); - expect(note.bendPoints![1].value).to.equal(4); - expect(note.bendPoints![2].offset).to.be.closeTo(20.4, 0.001); - expect(note.bendPoints![2].value).to.equal(4); - expect(note.bendPoints![3].offset).to.be.closeTo(30, 0.001); - expect(note.bendPoints![3].value).to.equal(0); + expect(note.bendType).toBe(BendType.BendRelease); + expect(note.bendPoints!.length).toBe(4); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(10.2, 3); + expect(note.bendPoints![1].value).toBe(4); + expect(note.bendPoints![2].offset).toBeCloseTo(20.4, 3); + expect(note.bendPoints![2].value).toBe(4); + expect(note.bendPoints![3].offset).toBeCloseTo(30, 3); + expect(note.bendPoints![3].value).toBe(0); // Combined Bends // // Bar 10 note = score.tracks[0].staves[0].bars[9].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[9].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.Release); - expect(note.isContinuedBend).to.be.equal(true); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(0); + expect(note.bendType).toBe(BendType.Release); + expect(note.isContinuedBend).toBe(true); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(0); note = score.tracks[0].staves[0].bars[9].voices[0].beats[2].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.isContinuedBend).to.be.equal(false); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Bend); + expect(note.isContinuedBend).toBe(false); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); // // Bar 11 note = score.tracks[0].staves[0].bars[10].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[10].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.isContinuedBend).to.be.equal(true); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(8); + expect(note.bendType).toBe(BendType.Bend); + expect(note.isContinuedBend).toBe(true); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(8); note = score.tracks[0].staves[0].bars[10].voices[0].beats[2].notes[0]; - expect(note.bendType).to.equal(BendType.Release); - expect(note.isContinuedBend).to.be.equal(true); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(8); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Release); + expect(note.isContinuedBend).toBe(true); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(8); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[10].voices[0].beats[3].notes[0]; - expect(note.bendType).to.equal(BendType.Release); - expect(note.isContinuedBend).to.be.equal(true); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(0); + expect(note.bendType).toBe(BendType.Release); + expect(note.isContinuedBend).toBe(true); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(0); // Grace Bends // // Bar 12 note = score.tracks[0].staves[0].bars[11].voices[0].beats[0].notes[0]; - expect(note.beat.graceType).to.equal(GraceType.BeforeBeat); - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.beat.graceType).toBe(GraceType.BeforeBeat); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); // // Bar 13 note = score.tracks[0].staves[0].bars[12].voices[0].beats[0].notes[0]; - expect(note.beat.graceType).to.equal(GraceType.BeforeBeat); - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.beat.graceType).toBe(GraceType.BeforeBeat); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[12].voices[0].beats[1].notes[0]; - expect(note.isContinuedBend).to.be.equal(true); - expect(note.bendType).to.equal(BendType.Hold); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.be.closeTo(60, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.isContinuedBend).toBe(true); + expect(note.bendType).toBe(BendType.Hold); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBeCloseTo(60, 3); + expect(note.bendPoints![1].value).toBe(4); // // Bar 14 note = score.tracks[0].staves[0].bars[13].voices[0].beats[0].notes[0]; - expect(note.beat.graceType).to.equal(GraceType.OnBeat); - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(18, 0.001); - expect(note.bendPoints![1].value).to.equal(1); + expect(note.beat.graceType).toBe(GraceType.OnBeat); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(18, 3); + expect(note.bendPoints![1].value).toBe(1); note = score.tracks[0].staves[0].bars[13].voices[0].beats[1].notes[0]; - expect(note.isContinuedBend).to.be.equal(true); - expect(note.bendType).to.equal(BendType.Hold); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(1); - expect(note.bendPoints![1].offset).to.be.closeTo(60, 0.001); - expect(note.bendPoints![1].value).to.equal(1); + expect(note.isContinuedBend).toBe(true); + expect(note.bendType).toBe(BendType.Hold); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(1); + expect(note.bendPoints![1].offset).toBeCloseTo(60, 3); + expect(note.bendPoints![1].value).toBe(1); // // Bar 15 note = score.tracks[0].staves[0].bars[14].voices[0].beats[0].notes[0]; - expect(note.beat.graceType).to.equal(GraceType.BeforeBeat); - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.beat.graceType).toBe(GraceType.BeforeBeat); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[14].voices[0].beats[1].notes[0]; - expect(note.fret).to.equal(12); - expect(note.isTieDestination).to.be.equal(true); - expect(note.isContinuedBend).to.be.equal(true); - expect(note.bendType).to.equal(BendType.Hold); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.be.closeTo(60, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.fret).toBe(12); + expect(note.isTieDestination).toBe(true); + expect(note.isContinuedBend).toBe(true); + expect(note.bendType).toBe(BendType.Hold); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBeCloseTo(60, 3); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[14].voices[0].beats[1].notes[1]; - expect(note.fret).to.equal(10); - expect(note.isContinuedBend).to.be.equal(false); - expect(note.hasBend).to.be.equal(false); - expect(note.bendType).to.equal(BendType.None); + expect(note.fret).toBe(10); + expect(note.isContinuedBend).toBe(false); + expect(note.hasBend).toBe(false); + expect(note.bendType).toBe(BendType.None); note = score.tracks[0].staves[0].bars[15].voices[0].beats[0].notes[0]; - expect(note.fret).to.equal(10); - expect(note.bendType).to.equal(BendType.None); + expect(note.fret).toBe(10); + expect(note.bendType).toBe(BendType.None); // // Bar 16 note = score.tracks[0].staves[0].bars[15].voices[0].beats[0].notes[1]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.be.closeTo(0, 0.001); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.be.closeTo(15, 0.001); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBeCloseTo(0, 3); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBeCloseTo(15, 3); + expect(note.bendPoints![1].value).toBe(4); }); it('whammy-advanced', async () => { @@ -423,235 +423,208 @@ describe('Gp7ImporterTest', () => { // Bar 1 let beat: Beat = score.tracks[0].staves[0].bars[0].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.Dive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(0); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(45, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-4); + expect(beat.whammyBarType).toBe(WhammyType.Dive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(0); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(45, 3); + expect(beat.whammyBarPoints![1].value).toBe(-4); beat = score.tracks[0].staves[0].bars[0].voices[0].beats[2]; - expect(beat.whammyBarType).to.equal(WhammyType.PrediveDive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(-4); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(60, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-16); + expect(beat.whammyBarType).toBe(WhammyType.PrediveDive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(-4); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(60, 3); + expect(beat.whammyBarPoints![1].value).toBe(-16); // Bar 2 beat = score.tracks[0].staves[0].bars[1].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.Dip); - expect(beat.whammyBarPoints!.length).to.equal(3); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(0); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(15, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-16); - expect(beat.whammyBarPoints![2].offset).to.be.closeTo(30, 0.001); - expect(beat.whammyBarPoints![2].value).to.equal(0); + expect(beat.whammyBarType).toBe(WhammyType.Dip); + expect(beat.whammyBarPoints!.length).toBe(3); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(0); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(15, 3); + expect(beat.whammyBarPoints![1].value).toBe(-16); + expect(beat.whammyBarPoints![2].offset).toBeCloseTo(30, 3); + expect(beat.whammyBarPoints![2].value).toBe(0); beat = score.tracks[0].staves[0].bars[1].voices[0].beats[2]; - expect(beat.whammyBarType).to.equal(WhammyType.Dip); - expect(beat.whammyBarPoints!.length).to.equal(4); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(0); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(14.4, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-12); - expect(beat.whammyBarPoints![2].offset).to.be.closeTo(31.8, 0.001); - expect(beat.whammyBarPoints![2].value).to.equal(-12); - expect(beat.whammyBarPoints![3].offset).to.be.closeTo(53.4, 0.001); - expect(beat.whammyBarPoints![3].value).to.equal(0); + expect(beat.whammyBarType).toBe(WhammyType.Dip); + expect(beat.whammyBarPoints!.length).toBe(4); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(0); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(14.4, 3); + expect(beat.whammyBarPoints![1].value).toBe(-12); + expect(beat.whammyBarPoints![2].offset).toBeCloseTo(31.8, 3); + expect(beat.whammyBarPoints![2].value).toBe(-12); + expect(beat.whammyBarPoints![3].offset).toBeCloseTo(53.4, 3); + expect(beat.whammyBarPoints![3].value).toBe(0); // Bar 3 beat = score.tracks[0].staves[0].bars[2].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.Dip); - expect(beat.whammyBarPoints!.length).to.equal(3); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(0); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(15, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-16); - expect(beat.whammyBarPoints![2].offset).to.be.closeTo(30, 0.001); - expect(beat.whammyBarPoints![2].value).to.equal(0); + expect(beat.whammyBarType).toBe(WhammyType.Dip); + expect(beat.whammyBarPoints!.length).toBe(3); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(0); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(15, 3); + expect(beat.whammyBarPoints![1].value).toBe(-16); + expect(beat.whammyBarPoints![2].offset).toBeCloseTo(30, 3); + expect(beat.whammyBarPoints![2].value).toBe(0); beat = score.tracks[0].staves[0].bars[2].voices[0].beats[2]; - expect(beat.whammyBarType).to.equal(WhammyType.Dip); - expect(beat.whammyBarPoints!.length).to.equal(4); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(0); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(14.4, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-12); - expect(beat.whammyBarPoints![2].offset).to.be.closeTo(31.8, 0.001); - expect(beat.whammyBarPoints![2].value).to.equal(-12); - expect(beat.whammyBarPoints![3].offset).to.be.closeTo(53.4, 0.001); - expect(beat.whammyBarPoints![3].value).to.equal(0); + expect(beat.whammyBarType).toBe(WhammyType.Dip); + expect(beat.whammyBarPoints!.length).toBe(4); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(0); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(14.4, 3); + expect(beat.whammyBarPoints![1].value).toBe(-12); + expect(beat.whammyBarPoints![2].offset).toBeCloseTo(31.8, 3); + expect(beat.whammyBarPoints![2].value).toBe(-12); + expect(beat.whammyBarPoints![3].offset).toBeCloseTo(53.4, 3); + expect(beat.whammyBarPoints![3].value).toBe(0); // Bar 4 beat = score.tracks[0].staves[0].bars[3].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.Predive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(-8); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(60, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-8); + expect(beat.whammyBarType).toBe(WhammyType.Predive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(-8); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(60, 3); + expect(beat.whammyBarPoints![1].value).toBe(-8); // Bar 5 beat = score.tracks[0].staves[0].bars[4].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.PrediveDive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(-4); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(30, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(0); + expect(beat.whammyBarType).toBe(WhammyType.PrediveDive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(-4); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(30, 3); + expect(beat.whammyBarPoints![1].value).toBe(0); // Bar 6 beat = score.tracks[0].staves[0].bars[5].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.PrediveDive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(-4); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(29.4, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-12); + expect(beat.whammyBarType).toBe(WhammyType.PrediveDive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(-4); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(29.4, 3); + expect(beat.whammyBarPoints![1].value).toBe(-12); beat = score.tracks[0].staves[0].bars[5].voices[0].beats[1]; - expect(beat.whammyBarType).to.equal(WhammyType.Dive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(-12); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(45.6, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(0); + expect(beat.whammyBarType).toBe(WhammyType.Dive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(-12); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(45.6, 3); + expect(beat.whammyBarPoints![1].value).toBe(0); // Bar 7 beat = score.tracks[0].staves[0].bars[6].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.Dive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(0); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(45, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-4); + expect(beat.whammyBarType).toBe(WhammyType.Dive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(0); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(45, 3); + expect(beat.whammyBarPoints![1].value).toBe(-4); beat = score.tracks[0].staves[0].bars[6].voices[0].beats[1]; - expect(beat.whammyBarType).to.equal(WhammyType.Hold); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(-4); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(60, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-4); + expect(beat.whammyBarType).toBe(WhammyType.Hold); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(-4); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(60, 3); + expect(beat.whammyBarPoints![1].value).toBe(-4); // Bar 8 beat = score.tracks[0].staves[0].bars[7].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.Dive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(-4); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(46.2, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-12); + expect(beat.whammyBarType).toBe(WhammyType.Dive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(-4); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(46.2, 3); + expect(beat.whammyBarPoints![1].value).toBe(-12); beat = score.tracks[0].staves[0].bars[7].voices[0].beats[1]; - expect(beat.whammyBarType).to.equal(WhammyType.Dive); - expect(beat.whammyBarPoints!.length).to.equal(2); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(-12); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(44.4, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(8); + expect(beat.whammyBarType).toBe(WhammyType.Dive); + expect(beat.whammyBarPoints!.length).toBe(2); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(-12); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(44.4, 3); + expect(beat.whammyBarPoints![1].value).toBe(8); // Bar 9 beat = score.tracks[0].staves[0].bars[8].voices[0].beats[0]; - expect(beat.whammyBarType).to.equal(WhammyType.Dip); - expect(beat.whammyBarPoints!.length).to.equal(3); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(8); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(15, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(12); - expect(beat.whammyBarPoints![2].offset).to.be.closeTo(30, 0.001); - expect(beat.whammyBarPoints![2].value).to.equal(0); + expect(beat.whammyBarType).toBe(WhammyType.Dip); + expect(beat.whammyBarPoints!.length).toBe(3); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(8); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(15, 3); + expect(beat.whammyBarPoints![1].value).toBe(12); + expect(beat.whammyBarPoints![2].offset).toBeCloseTo(30, 3); + expect(beat.whammyBarPoints![2].value).toBe(0); beat = score.tracks[0].staves[0].bars[8].voices[0].beats[1]; - expect(beat.whammyBarType).to.equal(WhammyType.Dip); - expect(beat.whammyBarPoints!.length).to.equal(3); - expect(beat.whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(beat.whammyBarPoints![0].value).to.equal(0); - expect(beat.whammyBarPoints![1].offset).to.be.closeTo(15, 0.001); - expect(beat.whammyBarPoints![1].value).to.equal(-4); - expect(beat.whammyBarPoints![2].offset).to.be.closeTo(30, 0.001); - expect(beat.whammyBarPoints![2].value).to.equal(0); + expect(beat.whammyBarType).toBe(WhammyType.Dip); + expect(beat.whammyBarPoints!.length).toBe(3); + expect(beat.whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(beat.whammyBarPoints![0].value).toBe(0); + expect(beat.whammyBarPoints![1].offset).toBeCloseTo(15, 3); + expect(beat.whammyBarPoints![1].value).toBe(-4); + expect(beat.whammyBarPoints![2].offset).toBeCloseTo(30, 3); + expect(beat.whammyBarPoints![2].value).toBe(0); }); it('tremolo', async () => { const reader = await prepareImporterWithFile('guitarpro7/tremolo.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints!.length).to.equal(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints!.length).toBe(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].value).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].offset).to.be.closeTo( - 30, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].offset).toBeCloseTo(30, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].value).toBe(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints!.length).to.equal(2); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints!.length).toBe(2); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].value).toBe(0); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints!.length).to.equal(4); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints!.length).toBe(4); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].value).toBe(0); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].offset).to.be.closeTo( - 30, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].offset).toBeCloseTo(30, 3); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].offset).to.be.closeTo( - 30, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].offset).toBeCloseTo(30, 3); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![3].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![3].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![3].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![3].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints!.length).to.equal(4); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints!.length).toBe(4); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![0].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![0].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![1].offset).to.be.closeTo( - 15, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-12); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![1].offset).toBeCloseTo(15, 3); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![1].value).toBe(-12); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![2].offset).to.be.closeTo( - 30.6, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![2].value).to.equal(-12); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![2].offset).toBeCloseTo(30.6, 3); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![2].value).toBe(-12); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![3].offset).to.be.closeTo( - 45, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![3].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![3].offset).toBeCloseTo(45, 3); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![3].value).toBe(0); }); it('slides', async () => { @@ -741,62 +714,62 @@ describe('Gp7ImporterTest', () => { it('tremolo-vibrato', async () => { const reader = await prepareImporterWithFile('guitarpro7/tremolo-vibrato.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].vibrato).to.equal(VibratoType.Slight); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].vibrato).to.equal(VibratoType.Wide); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[1].vibrato).to.equal(VibratoType.Slight); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].vibrato).to.equal(VibratoType.Slight); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].vibrato).to.equal(VibratoType.Wide); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].vibrato).to.equal(VibratoType.Wide); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].vibrato).toBe(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].vibrato).toBe(VibratoType.Wide); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[1].vibrato).toBe(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].vibrato).toBe(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].vibrato).toBe(VibratoType.Wide); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].vibrato).toBe(VibratoType.Wide); }); it('ottavia', async () => { const reader = await prepareImporterWithFile('guitarpro7/ottavia.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].clefOttava).to.equal(Ottavia._8va); - expect(score.tracks[0].staves[0].bars[1].clefOttava).to.equal(Ottavia._8vb); - expect(score.tracks[0].staves[0].bars[2].clefOttava).to.equal(Ottavia._15ma); - expect(score.tracks[0].staves[0].bars[3].clefOttava).to.equal(Ottavia._15mb); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].ottava).to.equal(Ottavia._8va); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[1].ottava).to.equal(Ottavia._8vb); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[2].ottava).to.equal(Ottavia._15ma); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[3].ottava).to.equal(Ottavia._15mb); + expect(score.tracks[0].staves[0].bars[0].clefOttava).toBe(Ottavia._8va); + expect(score.tracks[0].staves[0].bars[1].clefOttava).toBe(Ottavia._8vb); + expect(score.tracks[0].staves[0].bars[2].clefOttava).toBe(Ottavia._15ma); + expect(score.tracks[0].staves[0].bars[3].clefOttava).toBe(Ottavia._15mb); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].ottava).toBe(Ottavia._8va); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[1].ottava).toBe(Ottavia._8vb); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[2].ottava).toBe(Ottavia._15ma); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[3].ottava).toBe(Ottavia._15mb); }); it('simile-mark', async () => { const reader = await prepareImporterWithFile('guitarpro7/simile-mark.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].simileMark).to.equal(SimileMark.None); - expect(score.tracks[0].staves[0].bars[1].simileMark).to.equal(SimileMark.Simple); - expect(score.tracks[0].staves[0].bars[2].simileMark).to.equal(SimileMark.None); - expect(score.tracks[0].staves[0].bars[3].simileMark).to.equal(SimileMark.None); - expect(score.tracks[0].staves[0].bars[4].simileMark).to.equal(SimileMark.FirstOfDouble); - expect(score.tracks[0].staves[0].bars[5].simileMark).to.equal(SimileMark.SecondOfDouble); + expect(score.tracks[0].staves[0].bars[0].simileMark).toBe(SimileMark.None); + expect(score.tracks[0].staves[0].bars[1].simileMark).toBe(SimileMark.Simple); + expect(score.tracks[0].staves[0].bars[2].simileMark).toBe(SimileMark.None); + expect(score.tracks[0].staves[0].bars[3].simileMark).toBe(SimileMark.None); + expect(score.tracks[0].staves[0].bars[4].simileMark).toBe(SimileMark.FirstOfDouble); + expect(score.tracks[0].staves[0].bars[5].simileMark).toBe(SimileMark.SecondOfDouble); }); it('anacrusis', async () => { const reader = await prepareImporterWithFile('guitarpro7/anacrusis.gp'); const score: Score = reader.readScore(); - expect(score.masterBars[0].isAnacrusis).to.be.equal(true); - expect(score.masterBars[0].calculateDuration()).to.equal(1920); - expect(score.masterBars[1].calculateDuration()).to.equal(3840); + expect(score.masterBars[0].isAnacrusis).toBe(true); + expect(score.masterBars[0].calculateDuration()).toBe(1920); + expect(score.masterBars[1].calculateDuration()).toBe(3840); }); it('left-hand-tap', async () => { const reader = await prepareImporterWithFile('guitarpro7/left-hand-tap.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isLeftHandTapped).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].isLeftHandTapped).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].notes[0].isLeftHandTapped).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[6].notes[0].isLeftHandTapped).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[9].notes[0].isLeftHandTapped).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isLeftHandTapped).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].isLeftHandTapped).toBe(true); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].notes[0].isLeftHandTapped).toBe(true); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[6].notes[0].isLeftHandTapped).toBe(true); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[9].notes[0].isLeftHandTapped).toBe(true); }); it('fermata', async () => { const reader = await prepareImporterWithFile('guitarpro7/fermata.gp'); const score: Score = reader.readScore(); - expect(score.masterBars[0].fermata!.size).to.equal(5); - expect(score.masterBars[1].fermata!.size).to.equal(5); - expect(score.masterBars[2].fermata!.size).to.equal(5); // Short + expect(score.masterBars[0].fermata!.size).toBe(5); + expect(score.masterBars[1].fermata!.size).toBe(5); + expect(score.masterBars[2].fermata!.size).toBe(5); // Short const offsets = [ 0, (MidiUtils.QuarterTime * (1 / 2)) | 0, @@ -807,20 +780,20 @@ describe('Gp7ImporterTest', () => { const types: FermataType[] = [FermataType.Short, FermataType.Medium, FermataType.Long]; for (let i: number = 0; i < 3; i++) { const masterBar: MasterBar = score.masterBars[i]; - expect(masterBar.fermata!.size).to.equal(5); + expect(masterBar.fermata!.size).toBe(5); for (const offset of offsets) { const fermata = masterBar.fermata!.get(offset); - expect(fermata).to.be.ok; - expect(fermata!.type).to.equal(types[i]); + expect(fermata).toBeTruthy(); + expect(fermata!.type).toBe(types[i]); } const beats: Beat[] = score.tracks[0].staves[0].bars[i].voices[0].beats; for (const beat of beats) { const fermata = masterBar.fermata!.get(beat.playbackStart); const beatFermata = beat.fermata; - expect(beatFermata).to.be.ok; - expect(fermata).to.be.ok; - expect(beatFermata!.type).to.equal(types[i]); - expect(fermata!.type).to.equal(types[i]); + expect(beatFermata).toBeTruthy(); + expect(fermata).toBeTruthy(); + expect(beatFermata!.type).toBe(types[i]); + expect(fermata!.type).toBe(types[i]); } } }); @@ -829,112 +802,112 @@ describe('Gp7ImporterTest', () => { const reader = await prepareImporterWithFile('guitarpro7/pick-slide.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].slideOutType).toBe( SlideOutType.PickSlideUp ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(10); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).to.equal(10); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(10); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).toBe(10); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].fret).to.equal(10); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].fret).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].fret).toBe(10); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].fret).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].slideOutType).toBe( SlideOutType.PickSlideUp ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].fret).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].fret).to.equal(10); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].fret).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].fret).toBe(10); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].fret).to.equal(10); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].fret).toBe(10); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].fret).to.equal(20); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].fret).toBe(20); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].notes[0].fret).to.equal(12); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].notes[0].fret).toBe(12); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].notes[0].fret).to.equal(0); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].notes[0].fret).toBe(0); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].notes[0].fret).to.equal(20); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].notes[0].fret).toBe(20); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].notes[0].fret).to.equal(12); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].notes[0].fret).toBe(12); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].notes[0].slideOutType).toBe( SlideOutType.PickSlideUp ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].notes[0].fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[3].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].notes[0].fret).toBe(5); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[3].notes[0].slideOutType).toBe( SlideOutType.PickSlideUp ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[3].notes[0].fret).to.equal(10); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].notes[0].slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[3].notes[0].fret).toBe(10); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].notes[0].slideOutType).toBe( SlideOutType.PickSlideDown ); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].notes[0].fret).to.equal(20); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].notes[0].fret).toBe(20); }); it('beat-lyrics', async () => { const reader = await prepareImporterWithFile('guitarpro7/beat-lyrics.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].lyrics![0]).to.be.equal('This'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].lyrics![0]).to.be.equal('is'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics![0]).to.be.equal('a'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics![0]).to.be.equal('test file'); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].lyrics![0]).to.be.equal('for'); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].lyrics![0]).to.be.equal('lyrics'); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].lyrics).to.be.equal(null); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].lyrics).to.be.equal(null); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].lyrics![0]).toBe('This'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].lyrics![0]).toBe('is'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics![0]).toBe('a'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].lyrics![0]).toBe('test file'); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].lyrics![0]).toBe('for'); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].lyrics![0]).toBe('lyrics'); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].lyrics).toBe(null); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].lyrics).toBe(null); }); it('track-volume', async () => { const reader = await prepareImporterWithFile('guitarpro7/track-volume.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].playbackInfo.volume).to.be.equal(16); - expect(score.tracks[1].playbackInfo.volume).to.be.equal(14); - expect(score.tracks[2].playbackInfo.volume).to.be.equal(12); - expect(score.tracks[3].playbackInfo.volume).to.be.equal(10); - expect(score.tracks[4].playbackInfo.volume).to.be.equal(7); - expect(score.tracks[5].playbackInfo.volume).to.be.equal(3); - expect(score.tracks[6].playbackInfo.volume).to.be.equal(0); + expect(score.tracks[0].playbackInfo.volume).toBe(16); + expect(score.tracks[1].playbackInfo.volume).toBe(14); + expect(score.tracks[2].playbackInfo.volume).toBe(12); + expect(score.tracks[3].playbackInfo.volume).toBe(10); + expect(score.tracks[4].playbackInfo.volume).toBe(7); + expect(score.tracks[5].playbackInfo.volume).toBe(3); + expect(score.tracks[6].playbackInfo.volume).toBe(0); }); it('track-balance', async () => { const reader = await prepareImporterWithFile('guitarpro7/track-balance.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].playbackInfo.balance).to.be.equal(0); - expect(score.tracks[1].playbackInfo.balance).to.be.equal(4); - expect(score.tracks[2].playbackInfo.balance).to.be.equal(8); - expect(score.tracks[3].playbackInfo.balance).to.be.equal(12); - expect(score.tracks[4].playbackInfo.balance).to.be.equal(16); + expect(score.tracks[0].playbackInfo.balance).toBe(0); + expect(score.tracks[1].playbackInfo.balance).toBe(4); + expect(score.tracks[2].playbackInfo.balance).toBe(8); + expect(score.tracks[3].playbackInfo.balance).toBe(12); + expect(score.tracks[4].playbackInfo.balance).toBe(16); }); it('program-change', async () => { const reader = await prepareImporterWithFile('guitarpro7/program-change.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].playbackInfo.program).to.be.equal(25); + expect(score.tracks[0].playbackInfo.program).toBe(25); const automation = score.tracks[0].staves[0].bars[2].voices[0].beats[0].getAutomation( AutomationType.Instrument ); - expect(automation).to.be.ok; + expect(automation).toBeTruthy(); if (automation) { - expect(automation.value).to.be.equal(29); + expect(automation.value).toBe(29); } }); @@ -942,9 +915,9 @@ describe('Gp7ImporterTest', () => { const reader = await prepareImporterWithFile('guitarpro7/chord-no-diagram.gp'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.name).to.be.equal('C'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings.length).to.be.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.name).toBe('C'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings.length).toBe(0); }); it('layout-configuration', async () => { @@ -969,85 +942,85 @@ describe('Gp7ImporterTest', () => { const score = (await prepareImporterWithFile('guitarpro7/beaming-mode.gp')).readScore(); // auto - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].preferredBeamDirection).toBe(BeamDirection.Up); // force - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceMergeWithNext ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].beamingMode).toBe( BeatBeamingMode.ForceMergeWithNext ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].beamingMode).toBe( BeatBeamingMode.ForceMergeWithNext ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].preferredBeamDirection).toBe(BeamDirection.Up); // break - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].preferredBeamDirection).toBe(BeamDirection.Up); // break secondary - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceSplitOnSecondaryToNext ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].preferredBeamDirection).toBe(BeamDirection.Up); // invert to down - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].preferredBeamDirection).to.equal( + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].preferredBeamDirection).toBe( BeamDirection.Down ); // invert to up - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); }); }); diff --git a/packages/alphatab/test/importer/Gp8Importer.test.ts b/packages/alphatab/test/importer/Gp8Importer.test.ts index 0ef7ffa1d..3b6ce94bd 100644 --- a/packages/alphatab/test/importer/Gp8Importer.test.ts +++ b/packages/alphatab/test/importer/Gp8Importer.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { Gp7To8Importer } from '@coderline/alphatab/importer/Gp7To8Importer'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; import { AutomationType } from '@coderline/alphatab/model/Automation'; @@ -16,7 +17,6 @@ import { TextAlign } from '@coderline/alphatab/platform/ICanvas'; import { BeamDirection } from '@coderline/alphatab/rendering/utils/BeamDirection'; import { Settings } from '@coderline/alphatab/Settings'; import { SynthConstants } from '@coderline/alphatab/synth/SynthConstants'; -import { expect } from 'chai'; import { GpImporterTestHelper } from 'test/importer/GpImporterTestHelper'; import { TestPlatform } from 'test/TestPlatform'; @@ -53,318 +53,318 @@ describe('Gp8ImporterTest', () => { it('beat-tempo-change', async () => { const score = (await prepareImporterWithFile('guitarpro8/beat-tempo-change.gp')).readScore(); - expect(score.masterBars[0].tempoAutomations.length).to.equal(2); - expect(score.masterBars[0].tempoAutomations[0].value).to.have.equal(120); - expect(score.masterBars[0].tempoAutomations[0].ratioPosition).to.equal(0); - expect(score.masterBars[0].tempoAutomations[1].value).to.equal(60); - expect(score.masterBars[0].tempoAutomations[1].ratioPosition).to.equal(0.5); - - expect(score.masterBars[1].tempoAutomations.length).to.equal(2); - expect(score.masterBars[1].tempoAutomations[0].value).to.equal(100); - expect(score.masterBars[1].tempoAutomations[0].ratioPosition).to.equal(0); - expect(score.masterBars[1].tempoAutomations[1].value).to.equal(120); - expect(score.masterBars[1].tempoAutomations[1].ratioPosition).to.equal(0.6375); + expect(score.masterBars[0].tempoAutomations.length).toBe(2); + expect(score.masterBars[0].tempoAutomations[0].value).toBe(120); + expect(score.masterBars[0].tempoAutomations[0].ratioPosition).toBe(0); + expect(score.masterBars[0].tempoAutomations[1].value).toBe(60); + expect(score.masterBars[0].tempoAutomations[1].ratioPosition).toBe(0.5); + + expect(score.masterBars[1].tempoAutomations.length).toBe(2); + expect(score.masterBars[1].tempoAutomations[0].value).toBe(100); + expect(score.masterBars[1].tempoAutomations[0].ratioPosition).toBe(0); + expect(score.masterBars[1].tempoAutomations[1].value).toBe(120); + expect(score.masterBars[1].tempoAutomations[1].ratioPosition).toBe(0.6375); }); it('bracket-braces', async () => { const noBrackets = (await prepareImporterWithFile('visual-tests/layout/brackets-braces-none.gp')).readScore(); - expect(noBrackets.stylesheet.bracketExtendMode).to.equal(BracketExtendMode.NoBrackets); + expect(noBrackets.stylesheet.bracketExtendMode).toBe(BracketExtendMode.NoBrackets); const groupStaves = ( await prepareImporterWithFile('visual-tests/layout/brackets-braces-staves.gp') ).readScore(); - expect(groupStaves.stylesheet.bracketExtendMode).to.equal(BracketExtendMode.GroupStaves); + expect(groupStaves.stylesheet.bracketExtendMode).toBe(BracketExtendMode.GroupStaves); const groupSimilarInstruments = ( await prepareImporterWithFile('visual-tests/layout/brackets-braces-similar.gp') ).readScore(); - expect(groupSimilarInstruments.stylesheet.bracketExtendMode).to.equal( + expect(groupSimilarInstruments.stylesheet.bracketExtendMode).toBe( BracketExtendMode.GroupSimilarInstruments ); }); it('system-separator', async () => { const noBrackets = (await prepareImporterWithFile('visual-tests/layout/system-divider.gp')).readScore(); - expect(noBrackets.stylesheet.useSystemSignSeparator).to.be.true; + expect(noBrackets.stylesheet.useSystemSignSeparator).toBe(true); }); it('directions', async () => { const directions = (await prepareImporterWithFile('guitarpro8/directions.gp')).readScore(); - expect(directions.masterBars[0].directions).to.be.ok; - expect(directions.masterBars[0].directions).to.contain(Direction.TargetFine); - expect(directions.masterBars[0].directions).to.contain(Direction.TargetSegno); - expect(directions.masterBars[0].directions).to.contain(Direction.TargetSegnoSegno); - expect(directions.masterBars[0].directions).to.contain(Direction.TargetCoda); - expect(directions.masterBars[0].directions).to.contain(Direction.TargetDoubleCoda); - - expect(directions.masterBars[1]).to.be.ok; - expect(directions.masterBars[1].directions).to.contain(Direction.JumpDaCapo); - expect(directions.masterBars[1].directions).to.contain(Direction.JumpDalSegno); - expect(directions.masterBars[1].directions).to.contain(Direction.JumpDalSegnoSegno); - expect(directions.masterBars[1].directions).to.contain(Direction.JumpDaCoda); - expect(directions.masterBars[1].directions).to.contain(Direction.JumpDaDoubleCoda); - - expect(directions.masterBars[2].directions).to.be.ok; - expect(directions.masterBars[2].directions).to.contain(Direction.JumpDaCapoAlCoda); - expect(directions.masterBars[2].directions).to.contain(Direction.JumpDalSegnoAlCoda); - expect(directions.masterBars[2].directions).to.contain(Direction.JumpDalSegnoSegnoAlCoda); - - expect(directions.masterBars[3].directions).to.be.ok; - expect(directions.masterBars[3].directions).to.contain(Direction.JumpDaCapoAlDoubleCoda); - expect(directions.masterBars[3].directions).to.contain(Direction.JumpDalSegnoAlDoubleCoda); - expect(directions.masterBars[3].directions).to.contain(Direction.JumpDalSegnoSegnoAlDoubleCoda); - - expect(directions.masterBars[4].directions).to.be.ok; - expect(directions.masterBars[4].directions).to.contain(Direction.JumpDaCapoAlFine); - expect(directions.masterBars[4].directions).to.contain(Direction.JumpDalSegnoAlFine); - expect(directions.masterBars[4].directions).to.contain(Direction.JumpDalSegnoSegnoAlFine); - - expect(directions.masterBars[5].directions).to.not.be.ok; + expect(directions.masterBars[0].directions).toBeTruthy(); + expect(directions.masterBars[0].directions).toContain(Direction.TargetFine); + expect(directions.masterBars[0].directions).toContain(Direction.TargetSegno); + expect(directions.masterBars[0].directions).toContain(Direction.TargetSegnoSegno); + expect(directions.masterBars[0].directions).toContain(Direction.TargetCoda); + expect(directions.masterBars[0].directions).toContain(Direction.TargetDoubleCoda); + + expect(directions.masterBars[1]).toBeTruthy(); + expect(directions.masterBars[1].directions).toContain(Direction.JumpDaCapo); + expect(directions.masterBars[1].directions).toContain(Direction.JumpDalSegno); + expect(directions.masterBars[1].directions).toContain(Direction.JumpDalSegnoSegno); + expect(directions.masterBars[1].directions).toContain(Direction.JumpDaCoda); + expect(directions.masterBars[1].directions).toContain(Direction.JumpDaDoubleCoda); + + expect(directions.masterBars[2].directions).toBeTruthy(); + expect(directions.masterBars[2].directions).toContain(Direction.JumpDaCapoAlCoda); + expect(directions.masterBars[2].directions).toContain(Direction.JumpDalSegnoAlCoda); + expect(directions.masterBars[2].directions).toContain(Direction.JumpDalSegnoSegnoAlCoda); + + expect(directions.masterBars[3].directions).toBeTruthy(); + expect(directions.masterBars[3].directions).toContain(Direction.JumpDaCapoAlDoubleCoda); + expect(directions.masterBars[3].directions).toContain(Direction.JumpDalSegnoAlDoubleCoda); + expect(directions.masterBars[3].directions).toContain(Direction.JumpDalSegnoSegnoAlDoubleCoda); + + expect(directions.masterBars[4].directions).toBeTruthy(); + expect(directions.masterBars[4].directions).toContain(Direction.JumpDaCapoAlFine); + expect(directions.masterBars[4].directions).toContain(Direction.JumpDalSegnoAlFine); + expect(directions.masterBars[4].directions).toContain(Direction.JumpDalSegnoSegnoAlFine); + + expect(directions.masterBars[5].directions).not.toBeTruthy(); }); it('hide-tuning', async () => { const hide = (await prepareImporterWithFile('guitarpro8/hide-tuning.gp')).readScore(); - expect(hide.stylesheet.globalDisplayTuning).to.be.false; + expect(hide.stylesheet.globalDisplayTuning).toBe(false); const show = (await prepareImporterWithFile('guitarpro8/directions.gp')).readScore(); - expect(show.stylesheet.globalDisplayTuning).to.be.true; + expect(show.stylesheet.globalDisplayTuning).toBe(true); }); it('hide-chord-diagram-list', async () => { const hide = (await prepareImporterWithFile('guitarpro8/hide-diagrams.gp')).readScore(); - expect(hide.stylesheet.globalDisplayChordDiagramsOnTop).to.be.false; + expect(hide.stylesheet.globalDisplayChordDiagramsOnTop).toBe(false); const show = (await prepareImporterWithFile('guitarpro8/directions.gp')).readScore(); - expect(show.stylesheet.globalDisplayChordDiagramsOnTop).to.be.true; + expect(show.stylesheet.globalDisplayChordDiagramsOnTop).toBe(true); }); it('show-chord-diagrams-in-score', async () => { const hide = (await prepareImporterWithFile('guitarpro8/show-diagrams-in-score.gp')).readScore(); - expect(hide.stylesheet.globalDisplayChordDiagramsInScore).to.be.true; + expect(hide.stylesheet.globalDisplayChordDiagramsInScore).toBe(true); const show = (await prepareImporterWithFile('guitarpro8/directions.gp')).readScore(); - expect(show.stylesheet.globalDisplayChordDiagramsInScore).to.be.false; + expect(show.stylesheet.globalDisplayChordDiagramsInScore).toBe(false); }); it('beaming-mode', async () => { const score = (await prepareImporterWithFile('guitarpro8/beaming-mode.gp')).readScore(); // auto - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].preferredBeamDirection).toBe(BeamDirection.Up); // force - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceMergeWithNext ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].beamingMode).toBe( BeatBeamingMode.ForceMergeWithNext ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].beamingMode).toBe( BeatBeamingMode.ForceMergeWithNext ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].preferredBeamDirection).toBe(BeamDirection.Up); // break - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].beamingMode).toBe( BeatBeamingMode.ForceSplitToNext ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].preferredBeamDirection).toBe(BeamDirection.Up); // break secondary - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].beamingMode).to.equal( + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].beamingMode).toBe( BeatBeamingMode.ForceSplitOnSecondaryToNext ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].preferredBeamDirection).toBe(BeamDirection.Up); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[2].preferredBeamDirection).toBe(BeamDirection.Up); // invert to down - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].preferredBeamDirection).to.equal( + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].preferredBeamDirection).toBe( BeamDirection.Down ); // invert to up - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].beamingMode).to.equal(BeatBeamingMode.Auto); - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].invertBeamDirection).to.be.false; - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].preferredBeamDirection).to.equal(BeamDirection.Up); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].beamingMode).toBe(BeatBeamingMode.Auto); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].invertBeamDirection).toBe(false); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].preferredBeamDirection).toBe(BeamDirection.Up); }); it('track-names-hidden', async () => { const hide = (await prepareImporterWithFile('guitarpro8/track-names-hidden.gp')).readScore(); - expect(hide.stylesheet.singleTrackTrackNamePolicy).to.equal(TrackNamePolicy.Hidden); - expect(hide.stylesheet.multiTrackTrackNamePolicy).to.equal(TrackNamePolicy.Hidden); + expect(hide.stylesheet.singleTrackTrackNamePolicy).toBe(TrackNamePolicy.Hidden); + expect(hide.stylesheet.multiTrackTrackNamePolicy).toBe(TrackNamePolicy.Hidden); }); it('track-names-adjusted', async () => { const hide = (await prepareImporterWithFile('guitarpro8/track-names.gp')).readScore(); - expect(hide.stylesheet.singleTrackTrackNamePolicy).to.equal(TrackNamePolicy.AllSystems); - expect(hide.stylesheet.multiTrackTrackNamePolicy).to.equal(TrackNamePolicy.AllSystems); + expect(hide.stylesheet.singleTrackTrackNamePolicy).toBe(TrackNamePolicy.AllSystems); + expect(hide.stylesheet.multiTrackTrackNamePolicy).toBe(TrackNamePolicy.AllSystems); - expect(hide.stylesheet.firstSystemTrackNameMode).to.equal(TrackNameMode.FullName); - expect(hide.stylesheet.otherSystemsTrackNameMode).to.equal(TrackNameMode.FullName); + expect(hide.stylesheet.firstSystemTrackNameMode).toBe(TrackNameMode.FullName); + expect(hide.stylesheet.otherSystemsTrackNameMode).toBe(TrackNameMode.FullName); - expect(hide.stylesheet.firstSystemTrackNameOrientation).to.equal(TrackNameOrientation.Horizontal); - expect(hide.stylesheet.otherSystemsTrackNameOrientation).to.equal(TrackNameOrientation.Vertical); + expect(hide.stylesheet.firstSystemTrackNameOrientation).toBe(TrackNameOrientation.Horizontal); + expect(hide.stylesheet.otherSystemsTrackNameOrientation).toBe(TrackNameOrientation.Vertical); }); it('timer', async () => { const score = (await prepareImporterWithFile('guitarpro8/timer.gp')).readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].showTimer).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].timer).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].showTimer).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].timer).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].showTimer).toBe(false); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].showTimer).to.be.true; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].timer).to.equal(2000); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].showTimer).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].timer).toBe(2000); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].showTimer).toBe(false); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].showTimer).to.be.true; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].timer).to.equal(4000); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].showTimer).toBe(true); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].timer).toBe(4000); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[1].showTimer).toBe(false); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].showTimer).to.be.true; - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].timer).to.equal(6000); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].showTimer).toBe(true); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].timer).toBe(6000); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].showTimer).toBe(false); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].showTimer).to.be.true; - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].timer).to.equal(8000); - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].showTimer).toBe(true); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].timer).toBe(8000); + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[1].showTimer).toBe(false); - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].showTimer).to.be.true; - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].timer).to.equal(16000); - expect(score.tracks[0].staves[0].bars[5].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].showTimer).toBe(true); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[0].timer).toBe(16000); + expect(score.tracks[0].staves[0].bars[5].voices[0].beats[1].showTimer).toBe(false); - expect(score.tracks[0].staves[0].bars[6].voices[0].beats[0].showTimer).to.be.true; + expect(score.tracks[0].staves[0].bars[6].voices[0].beats[0].showTimer).toBe(true); // inprecision bug in guitar pro, should actually be 26000 - expect(score.tracks[0].staves[0].bars[6].voices[0].beats[0].timer).to.equal(25999); - expect(score.tracks[0].staves[0].bars[6].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[6].voices[0].beats[0].timer).toBe(25999); + expect(score.tracks[0].staves[0].bars[6].voices[0].beats[1].showTimer).toBe(false); - expect(score.tracks[0].staves[0].bars[7].voices[0].beats[0].showTimer).to.be.true; - expect(score.tracks[0].staves[0].bars[7].voices[0].beats[0].timer).to.equal(28000); - expect(score.tracks[0].staves[0].bars[7].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[7].voices[0].beats[0].showTimer).toBe(true); + expect(score.tracks[0].staves[0].bars[7].voices[0].beats[0].timer).toBe(28000); + expect(score.tracks[0].staves[0].bars[7].voices[0].beats[1].showTimer).toBe(false); - expect(score.tracks[0].staves[0].bars[8].voices[0].beats[0].showTimer).to.be.true; - expect(score.tracks[0].staves[0].bars[8].voices[0].beats[0].timer).to.equal(0); - expect(score.tracks[0].staves[0].bars[8].voices[0].beats[1].showTimer).to.be.false; + expect(score.tracks[0].staves[0].bars[8].voices[0].beats[0].showTimer).toBe(true); + expect(score.tracks[0].staves[0].bars[8].voices[0].beats[0].timer).toBe(0); + expect(score.tracks[0].staves[0].bars[8].voices[0].beats[1].showTimer).toBe(false); }); it('multibar-rest', async () => { const enabled = (await prepareImporterWithFile('guitarpro8/multibar-rest.gp')).readScore(); const disabled = (await prepareImporterWithFile('guitarpro8/timer.gp')).readScore(); - expect(disabled.stylesheet.multiTrackMultiBarRest).to.be.false; - expect(disabled.stylesheet.perTrackMultiBarRest).to.equal(null); - expect(enabled.stylesheet.multiTrackMultiBarRest).to.be.true; - expect(enabled.stylesheet.perTrackMultiBarRest).to.be.ok; - expect(enabled.stylesheet.perTrackMultiBarRest!.has(0)).to.be.false; - expect(enabled.stylesheet.perTrackMultiBarRest!.has(1)).to.be.true; - expect(enabled.stylesheet.perTrackMultiBarRest!.has(2)).to.be.true; + expect(disabled.stylesheet.multiTrackMultiBarRest).toBe(false); + expect(disabled.stylesheet.perTrackMultiBarRest).toBe(null); + expect(enabled.stylesheet.multiTrackMultiBarRest).toBe(true); + expect(enabled.stylesheet.perTrackMultiBarRest).toBeTruthy(); + expect(enabled.stylesheet.perTrackMultiBarRest!.has(0)).toBe(false); + expect(enabled.stylesheet.perTrackMultiBarRest!.has(1)).toBe(true); + expect(enabled.stylesheet.perTrackMultiBarRest!.has(2)).toBe(true); }); it('header-footer', async () => { const score = (await prepareImporterWithFile('guitarpro8/header-footer.gp')).readScore(); - expect(score.style).to.be.ok; + expect(score.style).toBeTruthy(); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Title)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.template).to.equal('Title: %TITLE%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.textAlign).to.equal(TextAlign.Left); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Title)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.template).toBe('Title: %TITLE%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Title)!.textAlign).toBe(TextAlign.Left); - expect(score.style!.headerAndFooter.has(ScoreSubElement.SubTitle)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.template).to.equal('Subtitle: %SUBTITLE%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.has(ScoreSubElement.SubTitle)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.template).toBe('Subtitle: %SUBTITLE%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.SubTitle)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Artist)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.template).to.equal('Artist: %ARTIST%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.textAlign).to.equal(TextAlign.Right); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Artist)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.template).toBe('Artist: %ARTIST%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Artist)!.textAlign).toBe(TextAlign.Right); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Album)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.template).to.equal('Album: %ALBUM%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.textAlign).to.equal(TextAlign.Left); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Album)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.template).toBe('Album: %ALBUM%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Album)!.textAlign).toBe(TextAlign.Left); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Words)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.template).to.equal('Words: %WORDS%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Words)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.template).toBe('Words: %WORDS%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Words)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Music)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.template).to.equal('Music: %MUSIC%'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.textAlign).to.equal(TextAlign.Right); + expect(score.style!.headerAndFooter.has(ScoreSubElement.Music)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.template).toBe('Music: %MUSIC%'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Music)!.textAlign).toBe(TextAlign.Right); - expect(score.style!.headerAndFooter.has(ScoreSubElement.WordsAndMusic)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.template).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.WordsAndMusic)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.template).toBe( 'Words & Music: %MUSIC%' ); - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.textAlign).to.equal(TextAlign.Left); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.WordsAndMusic)!.textAlign).toBe(TextAlign.Left); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Transcriber)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.template).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.Transcriber)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.template).toBe( 'Transcriber: %TABBER%' ); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.textAlign).to.equal(TextAlign.Center); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Transcriber)!.textAlign).toBe(TextAlign.Center); - expect(score.style!.headerAndFooter.has(ScoreSubElement.Copyright)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.template).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.Copyright)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.template).toBe( 'Copyright: %COPYRIGHT%' ); - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.isVisible).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.textAlign).to.equal(TextAlign.Right); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.isVisible).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.Copyright)!.textAlign).toBe(TextAlign.Right); - expect(score.style!.headerAndFooter.has(ScoreSubElement.CopyrightSecondLine)).to.be.true; - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.template).to.equal('Copyright2'); - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.isVisible).to.be.false; - expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.textAlign).to.equal( + expect(score.style!.headerAndFooter.has(ScoreSubElement.CopyrightSecondLine)).toBe(true); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.template).toBe('Copyright2'); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.isVisible).toBe(false); + expect(score.style!.headerAndFooter.get(ScoreSubElement.CopyrightSecondLine)!.textAlign).toBe( TextAlign.Right ); }); @@ -390,12 +390,12 @@ describe('Gp8ImporterTest', () => { const usedChannels = new Set(); for (const t of score.tracks) { - expect(Number.isNaN(t.playbackInfo.primaryChannel)).to.be.false; - expect(Number.isNaN(t.playbackInfo.secondaryChannel)).to.be.false; + expect(Number.isNaN(t.playbackInfo.primaryChannel)).toBe(false); + expect(Number.isNaN(t.playbackInfo.secondaryChannel)).toBe(false); if (t.playbackInfo.primaryChannel !== SynthConstants.PercussionChannel) { - expect(usedChannels.has(t.playbackInfo.primaryChannel)).to.be.false; - expect(usedChannels.has(t.playbackInfo.secondaryChannel)).to.be.false; + expect(usedChannels.has(t.playbackInfo.primaryChannel)).toBe(false); + expect(usedChannels.has(t.playbackInfo.secondaryChannel)).toBe(false); usedChannels.add(t.playbackInfo.primaryChannel); usedChannels.add(t.playbackInfo.secondaryChannel); @@ -409,39 +409,39 @@ describe('Gp8ImporterTest', () => { // track data not relevant for snapshots score.tracks = []; - expect(score).to.toMatchSnapshot(); + expect(score).toMatchSnapshot(); }); it('bank', async () => { const score = (await prepareImporterWithFile('guitarpro8/bank.gp')).readScore(); - expect(score.tracks[0].playbackInfo.program).to.equal(25); - expect(score.tracks[0].playbackInfo.bank).to.equal(0); + expect(score.tracks[0].playbackInfo.program).toBe(25); + expect(score.tracks[0].playbackInfo.bank).toBe(0); - expect(score.tracks[1].playbackInfo.program).to.equal(25); - expect(score.tracks[1].playbackInfo.bank).to.equal(77); + expect(score.tracks[1].playbackInfo.program).toBe(25); + expect(score.tracks[1].playbackInfo.bank).toBe(77); - expect(score.tracks[2].playbackInfo.program).to.equal(25); - expect(score.tracks[2].playbackInfo.bank).to.equal(256); + expect(score.tracks[2].playbackInfo.program).toBe(25); + expect(score.tracks[2].playbackInfo.bank).toBe(256); }); it('bank-change', async () => { const score = (await prepareImporterWithFile('guitarpro8/bank-change.gp')).readScore(); - expect(score.tracks[0].playbackInfo.program).to.equal(25); - expect(score.tracks[0].playbackInfo.bank).to.equal(0); + expect(score.tracks[0].playbackInfo.program).toBe(25); + expect(score.tracks[0].playbackInfo.bank).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].automations.length).to.equal(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].automations.length).toBe(1); expect( score.tracks[0].staves[0].bars[0].voices[0].beats[0].getAutomation(AutomationType.Instrument)?.value - ).to.equal(25); - // expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getAutomation(AutomationType.Bank)?.value).to.equal(0); skipped + ).toBe(25); + // expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getAutomation(AutomationType.Bank)?.value).toBe(0); skipped - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].automations.length).to.equal(2); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].automations.length).toBe(2); expect( score.tracks[0].staves[0].bars[1].voices[0].beats[0].getAutomation(AutomationType.Instrument)?.value - ).to.equal(25); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].getAutomation(AutomationType.Bank)?.value).to.equal( + ).toBe(25); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].getAutomation(AutomationType.Bank)?.value).toBe( 256 ); }); @@ -449,21 +449,21 @@ describe('Gp8ImporterTest', () => { it('extend-bar-lines', async () => { const score = (await prepareImporterWithFile('guitarpro8/extended-barlines.gp')).readScore(); - expect(score.stylesheet.extendBarLines).to.be.true; + expect(score.stylesheet.extendBarLines).toBe(true); }); describe('barnumbers', () => { it('all', async () => { const score = (await prepareImporterWithFile('guitarpro8/barnumbers-all.gp')).readScore(); - expect(score.stylesheet.barNumberDisplay).to.equal(BarNumberDisplay.AllBars); + expect(score.stylesheet.barNumberDisplay).toBe(BarNumberDisplay.AllBars); }); it('hide', async () => { const score = (await prepareImporterWithFile('guitarpro8/barnumbers-hide.gp')).readScore(); - expect(score.stylesheet.barNumberDisplay).to.equal(BarNumberDisplay.Hide); + expect(score.stylesheet.barNumberDisplay).toBe(BarNumberDisplay.Hide); }); it('first', async () => { const score = (await prepareImporterWithFile('guitarpro8/barnumbers-first.gp')).readScore(); - expect(score.stylesheet.barNumberDisplay).to.equal(BarNumberDisplay.FirstOfSystem); + expect(score.stylesheet.barNumberDisplay).toBe(BarNumberDisplay.FirstOfSystem); }); }); @@ -472,37 +472,33 @@ describe('Gp8ImporterTest', () => { // NOTE: no need to verify all details, we'll have a visual test for that. - expect(score.masterBars[0].beamingRules).to.be.ok; - expect(score.masterBars[0].beamingRules!.groups.has(Duration.Eighth)).to.be.true; - expect(score.masterBars[0].beamingRules!.groups.get(Duration.Eighth)!.join(',')).to.be.equal('2,2,2,2'); + expect(score.masterBars[0].beamingRules).toBeTruthy(); + expect(score.masterBars[0].beamingRules!.groups.has(Duration.Eighth)).toBe(true); + expect(score.masterBars[0].beamingRules!.groups.get(Duration.Eighth)!.join(',')).toBe('2,2,2,2'); // equal to previous - expect(score.masterBars[1].beamingRules === undefined, 'expected beamingRules of bar 1 to be undefined').to.be - .true; + expect(score.masterBars[1].beamingRules === undefined, 'expected beamingRules of bar 1 to be undefined').toBe(true); expect( score.masterBars[1].actualBeamingRules === score.masterBars[0].beamingRules, 'actualBeamingRules of bar 1 incorrect' - ).to.be.true; - expect(score.masterBars[2].beamingRules === undefined, 'expected beamingRules of bar 2 to be undefined').to.be - .true; + ).toBe(true); + expect(score.masterBars[2].beamingRules === undefined, 'expected beamingRules of bar 2 to be undefined').toBe(true); expect( score.masterBars[2].actualBeamingRules === score.masterBars[0].beamingRules, 'actualBeamingRules of bar 1 incorrect' - ).to.be.true; - expect(score.masterBars[3].beamingRules === undefined, 'expected beamingRules of bar 3 to be undefined').to.be - .true; + ).toBe(true); + expect(score.masterBars[3].beamingRules === undefined, 'expected beamingRules of bar 3 to be undefined').toBe(true); expect( score.masterBars[3].actualBeamingRules === score.masterBars[0].beamingRules, 'actualBeamingRules of bar 1 incorrect' - ).to.be.true; - expect(score.masterBars[4].beamingRules === undefined, 'expected beamingRules of bar 4 to be undefined').to.be - .true; + ).toBe(true); + expect(score.masterBars[4].beamingRules === undefined, 'expected beamingRules of bar 4 to be undefined').toBe(true); expect( score.masterBars[4].actualBeamingRules === score.masterBars[0].beamingRules, 'actualBeamingRules of bar 1 incorrect' - ).to.be.true; + ).toBe(true); - expect(score.masterBars[5].beamingRules!.groups.has(Duration.Eighth)).to.be.true; - expect(score.masterBars[5].beamingRules!.groups.get(Duration.Eighth)!.join(',')).to.be.equal('4,4'); + expect(score.masterBars[5].beamingRules!.groups.has(Duration.Eighth)).toBe(true); + expect(score.masterBars[5].beamingRules!.groups.get(Duration.Eighth)!.join(',')).toBe('4,4'); }); it('harmonics-lowercase', async () => { diff --git a/packages/alphatab/test/importer/GpImporterTestHelper.ts b/packages/alphatab/test/importer/GpImporterTestHelper.ts index 269796297..0a5ab94ad 100644 --- a/packages/alphatab/test/importer/GpImporterTestHelper.ts +++ b/packages/alphatab/test/importer/GpImporterTestHelper.ts @@ -1,3 +1,4 @@ +import { expect } from 'vitest'; import { Gp3To5Importer } from '@coderline/alphatab/importer/Gp3To5Importer'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; import { AccentuationType } from '@coderline/alphatab/model/AccentuationType'; @@ -19,8 +20,6 @@ import type { Track } from '@coderline/alphatab/model/Track'; import { VibratoType } from '@coderline/alphatab/model/VibratoType'; import { Settings } from '@coderline/alphatab/Settings'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; - /** * @internal */ @@ -53,418 +52,417 @@ export class GpImporterTestHelper { Duration.SixtyFourth ]; for (const duration of durationsInFile) { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].fret).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].string).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).to.equal(duration); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].fret).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].string).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).toBe(duration); beat++; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].fret).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].string).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).to.equal(duration); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].fret).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].string).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).toBe(duration); beat++; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].string).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).to.equal(duration); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].string).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).toBe(duration); beat++; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].fret).to.equal(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].string).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).to.equal(duration); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].fret).toBe(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].notes[0].string).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).toBe(duration); beat++; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].isRest).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).to.equal(duration); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].isRest).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[beat].duration).toBe(duration); beat++; } } public static checkTimeSignatures(score: Score): void { - expect(score.masterBars[0].timeSignatureNumerator).to.equal(4); - expect(score.masterBars[0].timeSignatureDenominator).to.equal(4); + expect(score.masterBars[0].timeSignatureNumerator).toBe(4); + expect(score.masterBars[0].timeSignatureDenominator).toBe(4); - expect(score.masterBars[1].timeSignatureNumerator).to.equal(3); - expect(score.masterBars[1].timeSignatureDenominator).to.equal(4); + expect(score.masterBars[1].timeSignatureNumerator).toBe(3); + expect(score.masterBars[1].timeSignatureDenominator).toBe(4); - expect(score.masterBars[2].timeSignatureNumerator).to.equal(2); - expect(score.masterBars[2].timeSignatureDenominator).to.equal(4); + expect(score.masterBars[2].timeSignatureNumerator).toBe(2); + expect(score.masterBars[2].timeSignatureDenominator).toBe(4); - expect(score.masterBars[3].timeSignatureNumerator).to.equal(1); - expect(score.masterBars[3].timeSignatureDenominator).to.equal(4); + expect(score.masterBars[3].timeSignatureNumerator).toBe(1); + expect(score.masterBars[3].timeSignatureDenominator).toBe(4); - expect(score.masterBars[4].timeSignatureNumerator).to.equal(20); - expect(score.masterBars[4].timeSignatureDenominator).to.equal(32); + expect(score.masterBars[4].timeSignatureNumerator).toBe(20); + expect(score.masterBars[4].timeSignatureDenominator).toBe(32); } public static checkDead(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isDead).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].string).to.equal(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isDead).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].string).toBe(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isDead).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].string).to.equal(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isDead).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].string).toBe(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isDead).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].string).to.equal(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isDead).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].string).toBe(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isDead).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].string).to.equal(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isDead).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].string).toBe(4); } public static checkGrace(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].graceType).to.equal(GraceType.BeforeBeat); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].duration).to.equal(Duration.Quarter); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].graceType).to.equal(GraceType.BeforeBeat); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].fret).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].duration).to.equal(Duration.Eighth); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].fret).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].duration).to.equal(Duration.Quarter); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].graceType).toBe(GraceType.BeforeBeat); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].fret).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].duration).toBe(Duration.Quarter); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].graceType).toBe(GraceType.BeforeBeat); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].fret).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].duration).toBe(Duration.Eighth); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].fret).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].duration).toBe(Duration.Quarter); } public static checkAccentuations(score: Score, includeHeavy: boolean): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isGhost).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].accentuated).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isGhost).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].accentuated).toBe( AccentuationType.Normal ); if (includeHeavy) { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].accentuated).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].accentuated).toBe( AccentuationType.Heavy ); } - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isLetRing).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isLetRing).toBe(true); } public static checkHarmonics(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].harmonicType).toBe( HarmonicType.Natural ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].harmonicType).toBe( HarmonicType.Artificial ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicType).to.equal(HarmonicType.Tap); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicType).to.equal(HarmonicType.Semi); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicType).to.equal(HarmonicType.Pinch); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].harmonicType).toBe(HarmonicType.Tap); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].harmonicType).toBe(HarmonicType.Semi); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].harmonicType).toBe(HarmonicType.Pinch); // TODO: Harmonic Values } public static checkHammer(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isHammerPullOrigin).to.equal(false); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[1].isHammerPullOrigin).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[2].isHammerPullOrigin).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[3].isHammerPullOrigin).to.be.equal(true); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].hammerPullOrigin).to.not.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[1].hammerPullOrigin).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[2].hammerPullOrigin).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[3].hammerPullOrigin).to.be.ok; - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isHammerPullOrigin).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].isHammerPullOrigin).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].hammerPullOrigin).to.be.ok; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isHammerPullOrigin).toBe(false); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[1].isHammerPullOrigin).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[2].isHammerPullOrigin).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[3].isHammerPullOrigin).toBe(true); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].hammerPullOrigin).not.toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[1].hammerPullOrigin).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[2].hammerPullOrigin).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[3].hammerPullOrigin).toBeTruthy(); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isHammerPullOrigin).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].isHammerPullOrigin).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].hammerPullOrigin).toBeTruthy(); } public static checkBend(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints!.length).to.equal(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints!.length).toBe(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].offset).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].offset).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].value).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].offset).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].value).to.equal(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].offset).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].value).toBe(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints!.length).to.equal(7); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints!.length).toBe(7); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].offset).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].offset).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].value).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].offset).to.equal(10); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].value).to.equal(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].offset).toBe(10); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].value).toBe(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![2].offset).to.equal(20); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![2].value).to.equal(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![2].offset).toBe(20); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![2].value).toBe(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![3].offset).to.equal(30); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![3].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![3].offset).toBe(30); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![3].value).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![4].offset).to.equal(40); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![4].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![4].offset).toBe(40); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![4].value).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![5].offset).to.equal(50); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![5].value).to.equal(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![5].offset).toBe(50); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![5].value).toBe(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![6].offset).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![6].value).to.equal(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![6].offset).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![6].value).toBe(4); } public static checkTremolo(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints!.length).to.equal(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints!.length).toBe(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].offset).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].offset).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].value).toBe(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].offset).to.equal(30); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].offset).toBe(30); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].offset).to.equal(60); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].offset).toBe(60); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].value).toBe(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints!.length).to.equal(3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints!.length).toBe(3); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].offset).to.equal(0); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].offset).toBe(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].offset).to.equal(45); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].offset).toBe(45); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![2].offset).to.equal(60); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![2].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![2].offset).toBe(60); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![2].value).toBe(0); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints!.length).to.equal(3); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints!.length).toBe(3); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].offset).to.equal(0); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].offset).toBe(0); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].value).toBe(0); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].offset).to.equal(45); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].offset).toBe(45); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].value).toBe(-4); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].offset).to.equal(60); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].value).to.equal(-4); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].offset).toBe(60); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].value).toBe(-4); } public static checkSlides(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(5)!.slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(5)!.slideOutType).toBe( SlideOutType.Legato ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].getNoteOnString(2)!.slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].getNoteOnString(2)!.slideOutType).toBe( SlideOutType.Shift ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].getNoteOnString(5)!.slideInType).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].getNoteOnString(5)!.slideInType).toBe( SlideInType.IntoFromBelow ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].getNoteOnString(5)!.slideInType).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].getNoteOnString(5)!.slideInType).toBe( SlideInType.IntoFromAbove ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].getNoteOnString(5)!.slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].getNoteOnString(5)!.slideOutType).toBe( SlideOutType.OutDown ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].getNoteOnString(5)!.slideOutType).to.equal( + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].getNoteOnString(5)!.slideOutType).toBe( SlideOutType.OutUp ); } public static checkStrings(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).to.equal(6); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(1)!.fret).to.equal(6); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(2)!.fret).to.equal(5); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(3)!.fret).to.equal(4); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(4)!.fret).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(5)!.fret).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(6)!.fret).to.equal(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes.length).toBe(6); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(1)!.fret).toBe(6); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(2)!.fret).toBe(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(3)!.fret).toBe(4); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(4)!.fret).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(5)!.fret).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].getNoteOnString(6)!.fret).toBe(1); } public static checkVibrato(score: Score, checkNotes: boolean): void { if (checkNotes) { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].vibrato).to.equal(VibratoType.Slight); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].vibrato).to.equal(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].vibrato).toBe(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].vibrato).toBe(VibratoType.Slight); } - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].vibrato).to.equal(VibratoType.Slight); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].vibrato).to.equal(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].vibrato).toBe(VibratoType.Slight); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].vibrato).toBe(VibratoType.Slight); } public static checkTrills(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillFret).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillSpeed).to.equal(Duration.Sixteenth); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillFret).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].trillSpeed).toBe(Duration.Sixteenth); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].isTremolo).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].tremoloPicking!.marks).to.equal(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].isTremolo).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].tremoloPicking!.marks).toBe(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].isTremolo).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tremoloPicking!.marks).to.equal(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].isTremolo).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tremoloPicking!.marks).toBe(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].isTremolo).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].tremoloPicking!.marks).to.equal(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].isTremolo).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].tremoloPicking!.marks).toBe(1); } public static checkOtherEffects(score: Score, skipInstrumentCheck: boolean = false): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPalmMute).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isStaccato).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tap).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].slap).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPalmMute).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isStaccato).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tap).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].slap).toBe(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].pop).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].fadeIn).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].pop).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].fadeIn).toBe(true); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].hasChord).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].chord!.name).to.equal('C'); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].text).to.equal('Text'); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].hasChord).toBe(true); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].chord!.name).toBe('C'); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[1].text).toBe('Text'); - expect(score.masterBars[4].isDoubleBar).to.be.equal(true); - expect(score.masterBars[4].tempoAutomations.length).to.equal(1); - expect(score.masterBars[4].tempoAutomations[0]!.value).to.equal(120.0); + expect(score.masterBars[4].isDoubleBar).toBe(true); + expect(score.masterBars[4].tempoAutomations.length).toBe(1); + expect(score.masterBars[4].tempoAutomations[0]!.value).toBe(120.0); if (!skipInstrumentCheck) { - expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].getAutomation(AutomationType.Instrument)).to.be - .ok; + expect(score.tracks[0].staves[0].bars[4].voices[0].beats[0].getAutomation(AutomationType.Instrument)).toBeTruthy(); expect( score.tracks[0].staves[0].bars[4].voices[0].beats[0].getAutomation(AutomationType.Instrument)!.value - ).to.equal(25); + ).toBe(25); } } public static checkFingering(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isFingering).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].leftHandFinger).to.equal(Fingers.Thumb); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isFingering).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].leftHandFinger).toBe(Fingers.Thumb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].leftHandFinger).toBe( Fingers.IndexFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].leftHandFinger).toBe( Fingers.MiddleFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].leftHandFinger).toBe( Fingers.AnnularFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].leftHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0].leftHandFinger).toBe( Fingers.LittleFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[5].notes[0].rightHandFinger).to.equal(Fingers.Thumb); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[6].notes[0].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[5].notes[0].rightHandFinger).toBe(Fingers.Thumb); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[6].notes[0].rightHandFinger).toBe( Fingers.IndexFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[7].notes[0].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[7].notes[0].rightHandFinger).toBe( Fingers.MiddleFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[8].notes[0].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[8].notes[0].rightHandFinger).toBe( Fingers.AnnularFinger ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[9].notes[0].rightHandFinger).to.equal( + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[9].notes[0].rightHandFinger).toBe( Fingers.LittleFinger ); } public static checkStroke(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].brushType).to.equal(BrushType.BrushDown); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].brushType).to.equal(BrushType.BrushUp); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].pickStroke).to.equal(PickStroke.Up); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].pickStroke).to.equal(PickStroke.Down); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].brushType).toBe(BrushType.BrushDown); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].brushType).toBe(BrushType.BrushUp); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].pickStroke).toBe(PickStroke.Up); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].pickStroke).toBe(PickStroke.Down); } public static checkTuplets(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].tupletNumerator).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].tupletNumerator).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tupletNumerator).to.equal(3); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].tupletNumerator).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].tupletNumerator).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].tupletNumerator).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].tupletNumerator).to.equal(5); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].tupletNumerator).to.equal(5); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].tupletNumerator).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].tupletNumerator).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].tupletNumerator).toBe(3); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].tupletNumerator).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].tupletNumerator).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].tupletNumerator).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].tupletNumerator).toBe(5); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[4].tupletNumerator).toBe(5); } public static checkRanges(score: Score): void { - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPalmMute).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isPalmMute).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isPalmMute).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isPalmMute).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPalmMute).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPalmMute).to.be.equal(true); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].isLetRing).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].isLetRing).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].isLetRing).to.be.equal(true); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].isLetRing).to.be.equal(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].isPalmMute).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isPalmMute).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isPalmMute).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0].isPalmMute).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPalmMute).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].isPalmMute).toBe(true); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0].isLetRing).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0].isLetRing).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0].isLetRing).toBe(true); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].notes[0].isLetRing).toBe(true); } public static checkEffects(_score: Score): void { // just check if reading works - expect(true).to.be.equal(true); + expect(true).toBe(true); } public static checkKeySignatures(score: Score): void { const bars = score.tracks[0].staves[0].bars; // major - flats - expect(bars[0].keySignature).to.equal(KeySignature.C); - expect(bars[0].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[1].keySignature).to.equal(KeySignature.F); - expect(bars[1].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[2].keySignature).to.equal(KeySignature.Bb); - expect(bars[2].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[3].keySignature).to.equal(KeySignature.Eb); - expect(bars[3].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[4].keySignature).to.equal(KeySignature.Ab); - expect(bars[4].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[5].keySignature).to.equal(KeySignature.Db); - expect(bars[5].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[6].keySignature).to.equal(KeySignature.Gb); - expect(bars[6].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[7].keySignature).to.equal(KeySignature.Cb); - expect(bars[7].keySignatureType).to.equal(KeySignatureType.Major); + expect(bars[0].keySignature).toBe(KeySignature.C); + expect(bars[0].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[1].keySignature).toBe(KeySignature.F); + expect(bars[1].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[2].keySignature).toBe(KeySignature.Bb); + expect(bars[2].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[3].keySignature).toBe(KeySignature.Eb); + expect(bars[3].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[4].keySignature).toBe(KeySignature.Ab); + expect(bars[4].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[5].keySignature).toBe(KeySignature.Db); + expect(bars[5].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[6].keySignature).toBe(KeySignature.Gb); + expect(bars[6].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[7].keySignature).toBe(KeySignature.Cb); + expect(bars[7].keySignatureType).toBe(KeySignatureType.Major); // major - sharps - expect(bars[8].keySignature).to.equal(KeySignature.C); - expect(bars[8].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[9].keySignature).to.equal(KeySignature.G); - expect(bars[9].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[10].keySignature).to.equal(KeySignature.D); - expect(bars[10].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[11].keySignature).to.equal(KeySignature.A); - expect(bars[11].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[12].keySignature).to.equal(KeySignature.E); - expect(bars[12].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[13].keySignature).to.equal(KeySignature.B); - expect(bars[13].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[14].keySignature).to.equal(KeySignature.FSharp); - expect(bars[14].keySignatureType).to.equal(KeySignatureType.Major); - expect(bars[15].keySignature).to.equal(KeySignature.CSharp); - expect(bars[15].keySignatureType).to.equal(KeySignatureType.Major); + expect(bars[8].keySignature).toBe(KeySignature.C); + expect(bars[8].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[9].keySignature).toBe(KeySignature.G); + expect(bars[9].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[10].keySignature).toBe(KeySignature.D); + expect(bars[10].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[11].keySignature).toBe(KeySignature.A); + expect(bars[11].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[12].keySignature).toBe(KeySignature.E); + expect(bars[12].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[13].keySignature).toBe(KeySignature.B); + expect(bars[13].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[14].keySignature).toBe(KeySignature.FSharp); + expect(bars[14].keySignatureType).toBe(KeySignatureType.Major); + expect(bars[15].keySignature).toBe(KeySignature.CSharp); + expect(bars[15].keySignatureType).toBe(KeySignatureType.Major); // minor flats - expect(bars[16].keySignature).to.equal(KeySignature.C); - expect(bars[16].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[17].keySignature).to.equal(KeySignature.F); - expect(bars[17].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[18].keySignature).to.equal(KeySignature.Bb); - expect(bars[18].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[19].keySignature).to.equal(KeySignature.Eb); - expect(bars[19].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[20].keySignature).to.equal(KeySignature.Ab); - expect(bars[20].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[21].keySignature).to.equal(KeySignature.Db); - expect(bars[21].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[22].keySignature).to.equal(KeySignature.Gb); - expect(bars[22].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[23].keySignature).to.equal(KeySignature.Cb); - expect(bars[23].keySignatureType).to.equal(KeySignatureType.Minor); + expect(bars[16].keySignature).toBe(KeySignature.C); + expect(bars[16].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[17].keySignature).toBe(KeySignature.F); + expect(bars[17].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[18].keySignature).toBe(KeySignature.Bb); + expect(bars[18].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[19].keySignature).toBe(KeySignature.Eb); + expect(bars[19].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[20].keySignature).toBe(KeySignature.Ab); + expect(bars[20].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[21].keySignature).toBe(KeySignature.Db); + expect(bars[21].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[22].keySignature).toBe(KeySignature.Gb); + expect(bars[22].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[23].keySignature).toBe(KeySignature.Cb); + expect(bars[23].keySignatureType).toBe(KeySignatureType.Minor); // minor sharps - expect(bars[24].keySignature).to.equal(KeySignature.C); - expect(bars[24].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[25].keySignature).to.equal(KeySignature.G); - expect(bars[25].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[26].keySignature).to.equal(KeySignature.D); - expect(bars[26].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[27].keySignature).to.equal(KeySignature.A); - expect(bars[27].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[28].keySignature).to.equal(KeySignature.E); - expect(bars[28].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[29].keySignature).to.equal(KeySignature.B); - expect(bars[29].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[30].keySignature).to.equal(KeySignature.FSharp); - expect(bars[30].keySignatureType).to.equal(KeySignatureType.Minor); - expect(bars[31].keySignature).to.equal(KeySignature.CSharp); - expect(bars[31].keySignatureType).to.equal(KeySignatureType.Minor); + expect(bars[24].keySignature).toBe(KeySignature.C); + expect(bars[24].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[25].keySignature).toBe(KeySignature.G); + expect(bars[25].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[26].keySignature).toBe(KeySignature.D); + expect(bars[26].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[27].keySignature).toBe(KeySignature.A); + expect(bars[27].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[28].keySignature).toBe(KeySignature.E); + expect(bars[28].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[29].keySignature).toBe(KeySignature.B); + expect(bars[29].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[30].keySignature).toBe(KeySignature.FSharp); + expect(bars[30].keySignatureType).toBe(KeySignatureType.Minor); + expect(bars[31].keySignature).toBe(KeySignature.CSharp); + expect(bars[31].keySignatureType).toBe(KeySignatureType.Minor); } public static checkColors(score: Score): void { - expect(score.tracks[0].name).to.equal('Red'); - expect(score.tracks[0].color.rgba).to.equal('#FF0000'); - expect(score.tracks[1].name).to.equal('Green'); - expect(score.tracks[1].color.rgba).to.equal('#00FF00'); - expect(score.tracks[2].name).to.equal('Yellow'); - expect(score.tracks[2].color.rgba).to.equal('#FFFF00'); - expect(score.tracks[3].name).to.equal('Blue'); - expect(score.tracks[3].color.rgba).to.equal('#0000FF'); + expect(score.tracks[0].name).toBe('Red'); + expect(score.tracks[0].color.rgba).toBe('#FF0000'); + expect(score.tracks[1].name).toBe('Green'); + expect(score.tracks[1].color.rgba).toBe('#00FF00'); + expect(score.tracks[2].name).toBe('Yellow'); + expect(score.tracks[2].color.rgba).toBe('#FFFF00'); + expect(score.tracks[3].name).toBe('Blue'); + expect(score.tracks[3].color.rgba).toBe('#0000FF'); } private static _createChord(name: string, firstFret: number, strings: number[], barreFrets?: number[]) { @@ -481,7 +479,7 @@ export class GpImporterTestHelper { public static checkChords(score: Score): void { const track: Track = score.tracks[0]; const staff: Staff = track.staves[0]; - expect(staff.chords!.size).to.equal(8); + expect(staff.chords!.size).toBe(8); GpImporterTestHelper.checkChord( GpImporterTestHelper._createChord('C', 1, [0, 1, 0, 2, 3, -1]), @@ -519,13 +517,13 @@ export class GpImporterTestHelper { } public static checkChord(expected: Chord | null, actual: Chord | null): void { - expect(actual === null).to.equal(expected === null); + expect(actual === null).toBe(expected === null); if (expected && actual) { - expect(actual.name).to.equal(expected.name); - expect(actual.firstFret).to.equal(expected.firstFret); - expect(actual.strings.length).to.equal(expected.strings.length); - expect(actual.strings.join(',')).to.equal(expected.strings.join(',')); - expect(actual.barreFrets.join(',')).to.equal(expected.barreFrets.join(',')); + expect(actual.name).toBe(expected.name); + expect(actual.firstFret).toBe(expected.firstFret); + expect(actual.strings.length).toBe(expected.strings.length); + expect(actual.strings.join(',')).toBe(expected.strings.join(',')); + expect(actual.barreFrets.join(',')).toBe(expected.barreFrets.join(',')); } } @@ -535,33 +533,33 @@ export class GpImporterTestHelper { trackAll: Score, track1And3: Score ): void { - expect(track1.tracks[0].isVisibleOnMultiTrack).to.be.true; - expect(track1.tracks[1].isVisibleOnMultiTrack).to.be.false; - expect(track1.tracks[2].isVisibleOnMultiTrack).to.be.false; + expect(track1.tracks[0].isVisibleOnMultiTrack).toBe(true); + expect(track1.tracks[1].isVisibleOnMultiTrack).toBe(false); + expect(track1.tracks[2].isVisibleOnMultiTrack).toBe(false); - expect(track2.tracks[0].isVisibleOnMultiTrack).to.be.false; - expect(track2.tracks[1].isVisibleOnMultiTrack).to.be.true; - expect(track2.tracks[2].isVisibleOnMultiTrack).to.be.false; + expect(track2.tracks[0].isVisibleOnMultiTrack).toBe(false); + expect(track2.tracks[1].isVisibleOnMultiTrack).toBe(true); + expect(track2.tracks[2].isVisibleOnMultiTrack).toBe(false); - expect(trackAll.tracks[0].isVisibleOnMultiTrack).to.be.true; - expect(trackAll.tracks[1].isVisibleOnMultiTrack).to.be.true; - expect(trackAll.tracks[2].isVisibleOnMultiTrack).to.be.true; + expect(trackAll.tracks[0].isVisibleOnMultiTrack).toBe(true); + expect(trackAll.tracks[1].isVisibleOnMultiTrack).toBe(true); + expect(trackAll.tracks[2].isVisibleOnMultiTrack).toBe(true); - expect(track1And3.tracks[0].isVisibleOnMultiTrack).to.be.true; - expect(track1And3.tracks[1].isVisibleOnMultiTrack).to.be.false; - expect(track1And3.tracks[2].isVisibleOnMultiTrack).to.be.true; + expect(track1And3.tracks[0].isVisibleOnMultiTrack).toBe(true); + expect(track1And3.tracks[1].isVisibleOnMultiTrack).toBe(false); + expect(track1And3.tracks[2].isVisibleOnMultiTrack).toBe(true); } public static checkSlash(score: Score): void { - expect(score.tracks.length).to.equal(2); + expect(score.tracks.length).toBe(2); - expect(score.tracks[0].staves.length).to.equal(1); - expect(score.tracks[0].staves[0].showSlash).to.equal(true); - expect(score.tracks[0].staves[0].showTablature).to.equal(true); - expect(score.tracks[0].staves[0].showStandardNotation).to.equal(true); + expect(score.tracks[0].staves.length).toBe(1); + expect(score.tracks[0].staves[0].showSlash).toBe(true); + expect(score.tracks[0].staves[0].showTablature).toBe(true); + expect(score.tracks[0].staves[0].showStandardNotation).toBe(true); - expect(score.tracks[1].staves.length).to.equal(1); - expect(score.tracks[1].staves[0].showSlash).to.equal(false); - expect(score.tracks[1].staves[0].showTablature).to.equal(true); - expect(score.tracks[1].staves[0].showStandardNotation).to.equal(true); + expect(score.tracks[1].staves.length).toBe(1); + expect(score.tracks[1].staves[0].showSlash).toBe(false); + expect(score.tracks[1].staves[0].showTablature).toBe(true); + expect(score.tracks[1].staves[0].showStandardNotation).toBe(true); } } diff --git a/packages/alphatab/test/importer/GpxImporter.test.ts b/packages/alphatab/test/importer/GpxImporter.test.ts index d4c4be0c9..a2c8bc070 100644 --- a/packages/alphatab/test/importer/GpxImporter.test.ts +++ b/packages/alphatab/test/importer/GpxImporter.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { type GpxFile, GpxFileSystem } from '@coderline/alphatab/importer/GpxFileSystem'; import { GpxImporter } from '@coderline/alphatab/importer/GpxImporter'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; @@ -6,8 +7,6 @@ import { Settings } from '@coderline/alphatab/Settings'; import { Logger } from '@coderline/alphatab/Logger'; import { GpImporterTestHelper } from 'test/importer/GpImporterTestHelper'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; - describe('GpxImporterTest', () => { async function prepareImporterWithFile(name: string): Promise { const data = await TestPlatform.loadFile(`test-data/${name}`); @@ -35,28 +34,28 @@ describe('GpxImporterTest', () => { for (let i: number = 0; i < fileSystem.files.length; i++) { const file: GpxFile = fileSystem.files[i]; Logger.info('Test', `${file.fileName} - ${file.fileSize}`); - expect(file.fileName).to.equal(names[i]); - expect(file.fileSize).to.equal(sizes[i]); + expect(file.fileName).toBe(names[i]); + expect(file.fileSize).toBe(sizes[i]); } }); it('score-info', async () => { const reader = await prepareImporterWithFile('guitarpro6/score-info.gpx'); const score: Score = reader.readScore(); - expect(score.title).to.equal('Title'); - expect(score.subTitle).to.equal('Subtitle'); - expect(score.artist).to.equal('Artist'); - expect(score.album).to.equal('Album'); - expect(score.words).to.equal('Words'); - expect(score.music).to.equal('Music'); - expect(score.copyright).to.equal('Copyright'); - expect(score.tab).to.equal('Tab'); - expect(score.instructions).to.equal('Instructions'); - expect(score.notices).to.equal('Notice1\nNotice2'); - expect(score.masterBars.length).to.equal(5); - expect(score.tracks.length).to.equal(2); - expect(score.tracks[0].name).to.equal('Track 1'); - expect(score.tracks[1].name).to.equal('Track 2'); + expect(score.title).toBe('Title'); + expect(score.subTitle).toBe('Subtitle'); + expect(score.artist).toBe('Artist'); + expect(score.album).toBe('Album'); + expect(score.words).toBe('Words'); + expect(score.music).toBe('Music'); + expect(score.copyright).toBe('Copyright'); + expect(score.tab).toBe('Tab'); + expect(score.instructions).toBe('Instructions'); + expect(score.notices).toBe('Notice1\nNotice2'); + expect(score.masterBars.length).toBe(5); + expect(score.tracks.length).toBe(2); + expect(score.tracks[0].name).toBe('Track 1'); + expect(score.tracks[1].name).toBe('Track 2'); }); it('notes', async () => { @@ -104,138 +103,87 @@ describe('GpxImporterTest', () => { it('bends', async () => { const reader = await prepareImporterWithFile('guitarpro6/bends.gpx'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints!.length).to.equal(2); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].offset).to.be.closeTo( - 0, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].value).to.equal(0); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].value).to.equal(4); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints!.length).to.equal(2); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].offset).to.be.closeTo( - 0, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].value).to.equal(0); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].value).to.equal(4); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints!.length).to.equal(4); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].offset).to.be.closeTo( - 0, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].value).to.equal(0); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].offset).to.be.closeTo( - 0, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].value).to.equal(0); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![1].offset).to.be.closeTo( - 30, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![1].value).to.equal(12); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![2].offset).to.be.closeTo( - 30, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![2].value).to.equal(12); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![3].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![3].value).to.equal(6); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints!.length).toBe(2); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![0].value).toBe(0); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0].bendPoints![1].value).toBe(4); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints!.length).toBe(2); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![0].value).toBe(0); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].bendPoints![1].value).toBe(4); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints!.length).toBe(4); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].value).toBe(0); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![0].value).toBe(0); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![1].offset).toBeCloseTo(30, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![1].value).toBe(12); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![2].offset).toBeCloseTo(30, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![2].value).toBe(12); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![3].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0].bendPoints![3].value).toBe(6); }); it('tremolo', async () => { const reader = await prepareImporterWithFile('guitarpro6/tremolo.gpx'); const score: Score = reader.readScore(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints!.length).to.equal(3); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].value).to.equal(0); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].offset).to.be.closeTo( - 30, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-4); - - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].value).to.equal(0); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints!.length).to.equal(2); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].value).to.equal(-4); - - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].value).to.equal(0); - - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints!.length).to.equal(3); - - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].value).to.equal(0); - - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].offset).to.be.closeTo( - 30, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-4); - - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].offset).to.be.closeTo( - 60, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].value).to.equal(-4); - - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints!.length).to.equal(4); - - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![0].offset).to.be.closeTo(0, 0.001); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![0].value).to.equal(-4); - - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![1].offset).to.be.closeTo( - 15, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![1].value).to.equal(-12); - - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![2].offset).to.be.closeTo( - 30.6, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![2].value).to.equal(-12); - - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![3].offset).to.be.closeTo( - 45, - 0.001 - ); - expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![3].value).to.equal(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints!.length).toBe(3); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![0].value).toBe(0); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].offset).toBeCloseTo(30, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![1].value).toBe(-4); + + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].whammyBarPoints![2].value).toBe(0); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints!.length).toBe(2); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![0].value).toBe(-4); + + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].whammyBarPoints![1].value).toBe(0); + + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints!.length).toBe(3); + + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![0].value).toBe(0); + + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].offset).toBeCloseTo(30, 3); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![1].value).toBe(-4); + + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].offset).toBeCloseTo(60, 3); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].whammyBarPoints![2].value).toBe(-4); + + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints!.length).toBe(4); + + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![0].offset).toBeCloseTo(0, 3); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![0].value).toBe(-4); + + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![1].offset).toBeCloseTo(15, 3); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![1].value).toBe(-12); + + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![2].offset).toBeCloseTo(30.6, 3); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![2].value).toBe(-12); + + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![3].offset).toBeCloseTo(45, 3); + expect(score.tracks[0].staves[0].bars[3].voices[0].beats[0].whammyBarPoints![3].value).toBe(0); }); it('slides', async () => { diff --git a/packages/alphatab/test/importer/MusicXmlImporter.test.ts b/packages/alphatab/test/importer/MusicXmlImporter.test.ts index d5fb108f7..d405dee12 100644 --- a/packages/alphatab/test/importer/MusicXmlImporter.test.ts +++ b/packages/alphatab/test/importer/MusicXmlImporter.test.ts @@ -1,8 +1,8 @@ +import { describe, expect, it } from 'vitest'; import { BendType } from '@coderline/alphatab/model/BendType'; import { JsonConverter } from '@coderline/alphatab/model/JsonConverter'; import { BarNumberDisplay } from '@coderline/alphatab/model/RenderStylesheet'; import type { Score } from '@coderline/alphatab/model/Score'; -import { expect } from 'chai'; import { MusicXmlImporterTestHelper } from 'test/importer/MusicXmlImporterTestHelper'; describe('MusicXmlImporterTests', () => { @@ -11,11 +11,11 @@ describe('MusicXmlImporterTests', () => { 'test-data/musicxml3/track-volume-balance.musicxml' ); - expect(score.tracks[0].playbackInfo.volume).to.be.equal(16); - expect(score.tracks[1].playbackInfo.volume).to.be.equal(12); - expect(score.tracks[2].playbackInfo.volume).to.be.equal(8); - expect(score.tracks[3].playbackInfo.volume).to.be.equal(4); - expect(score.tracks[4].playbackInfo.volume).to.be.equal(0); + expect(score.tracks[0].playbackInfo.volume).toBe(16); + expect(score.tracks[1].playbackInfo.volume).toBe(12); + expect(score.tracks[2].playbackInfo.volume).toBe(8); + expect(score.tracks[3].playbackInfo.volume).toBe(4); + expect(score.tracks[4].playbackInfo.volume).toBe(0); }); it('track-balance', async () => { @@ -23,11 +23,11 @@ describe('MusicXmlImporterTests', () => { 'test-data/musicxml3/track-volume-balance.musicxml' ); - expect(score.tracks[0].playbackInfo.balance).to.be.equal(0); - expect(score.tracks[1].playbackInfo.balance).to.be.equal(4); - expect(score.tracks[2].playbackInfo.balance).to.be.equal(8); - expect(score.tracks[3].playbackInfo.balance).to.be.equal(12); - expect(score.tracks[4].playbackInfo.balance).to.be.equal(16); + expect(score.tracks[0].playbackInfo.balance).toBe(0); + expect(score.tracks[1].playbackInfo.balance).toBe(4); + expect(score.tracks[2].playbackInfo.balance).toBe(8); + expect(score.tracks[3].playbackInfo.balance).toBe(12); + expect(score.tracks[4].playbackInfo.balance).toBe(16); }); it('full-bar-rest', async () => { @@ -35,9 +35,9 @@ describe('MusicXmlImporterTests', () => { 'test-data/musicxml3/full-bar-rest.musicxml' ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].isFullBarRest).to.be.true; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].isFullBarRest).to.be.true; - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].isFullBarRest).to.be.true; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].isFullBarRest).toBe(true); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].isFullBarRest).toBe(true); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[0].isFullBarRest).toBe(true); }); it('first-bar-tempo', async () => { @@ -45,179 +45,179 @@ describe('MusicXmlImporterTests', () => { 'test-data/musicxml3/first-bar-tempo.musicxml' ); - expect(score.tempo).to.be.equal(60); - expect(score.masterBars[0].tempoAutomations.length).to.equal(1); - expect(score.masterBars[0].tempoAutomations[0]?.value).to.be.equal(60); - expect(score.masterBars[1].tempoAutomations.length).to.equal(1); - expect(score.masterBars[1].tempoAutomations[0].value).to.be.equal(60); + expect(score.tempo).toBe(60); + expect(score.masterBars[0].tempoAutomations.length).toBe(1); + expect(score.masterBars[0].tempoAutomations[0]?.value).toBe(60); + expect(score.masterBars[1].tempoAutomations.length).toBe(1); + expect(score.masterBars[1].tempoAutomations[0].value).toBe(60); }); it('tie-destination', async () => { let score: Score = await MusicXmlImporterTestHelper.testReferenceFile( 'test-data/musicxml3/tie-destination.musicxml' ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isTieOrigin).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].tieDestination).to.be.ok; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isTieOrigin).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].tieDestination).toBeTruthy(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isTieDestination).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].tieOrigin).to.be.ok; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isTieDestination).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].tieOrigin).toBeTruthy(); score = JsonConverter.jsObjectToScore(JsonConverter.scoreToJsObject(score)); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isTieOrigin).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].tieDestination).to.be.ok; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].isTieOrigin).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0].tieDestination).toBeTruthy(); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isTieDestination).to.be.true; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].tieOrigin).to.be.ok; + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].isTieDestination).toBe(true); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0].tieOrigin).toBeTruthy(); }); it('chord-diagram', async () => { let score: Score = await MusicXmlImporterTestHelper.testReferenceFile( 'test-data/musicxml3/chord-diagram.musicxml' ); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.name).to.equal('C'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[0]).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[1]).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[2]).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[3]).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[4]).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[5]).to.equal(-1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.name).toBe('C'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[0]).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[1]).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[2]).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[3]).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[4]).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[5]).toBe(-1); score = JsonConverter.jsObjectToScore(JsonConverter.scoreToJsObject(score)); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord).to.be.ok; - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.name).to.equal('C'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[0]).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[1]).to.equal(1); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[2]).to.equal(0); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[3]).to.equal(2); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[4]).to.equal(3); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[5]).to.equal(-1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord).toBeTruthy(); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.name).toBe('C'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[0]).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[1]).toBe(1); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[2]).toBe(0); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[3]).toBe(2); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[4]).toBe(3); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[0].chord!.strings[5]).toBe(-1); }); it('compressed', async () => { const score: Score = await MusicXmlImporterTestHelper.testReferenceFile('test-data/musicxml3/compressed.mxl'); - expect(score.title).to.equal('Title'); - expect(score.tracks.length).to.equal(1); - expect(score.masterBars.length).to.equal(1); + expect(score.title).toBe('Title'); + expect(score.tracks.length).toBe(1); + expect(score.masterBars.length).toBe(1); }); it('bend', async () => { const score: Score = await MusicXmlImporterTestHelper.testReferenceFile('test-data/musicxml4/bends.xml'); let note = score.tracks[0].staves[0].bars[0].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.equal(60); - expect(note.bendPoints![1].value).to.equal(2); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBe(60); + expect(note.bendPoints![1].value).toBe(2); note = score.tracks[0].staves[0].bars[0].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.Prebend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(4); - expect(note.bendPoints![1].offset).to.equal(60); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.Prebend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(4); + expect(note.bendPoints![1].offset).toBe(60); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[0].voices[0].beats[2].notes[0]; - expect(note.bendType).to.equal(BendType.BendRelease); - expect(note.bendPoints!.length).to.equal(4); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.equal(30); - expect(note.bendPoints![1].value).to.equal(4); - expect(note.bendPoints![2].offset).to.equal(30); - expect(note.bendPoints![2].value).to.equal(4); - expect(note.bendPoints![3].offset).to.equal(60); - expect(note.bendPoints![3].value).to.equal(0); + expect(note.bendType).toBe(BendType.BendRelease); + expect(note.bendPoints!.length).toBe(4); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBe(30); + expect(note.bendPoints![1].value).toBe(4); + expect(note.bendPoints![2].offset).toBe(30); + expect(note.bendPoints![2].value).toBe(4); + expect(note.bendPoints![3].offset).toBe(60); + expect(note.bendPoints![3].value).toBe(0); note = score.tracks[0].staves[0].bars[0].voices[0].beats[3].notes[0]; - expect(note.bendType).to.equal(BendType.PrebendRelease); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(2); - expect(note.bendPoints![1].offset).to.equal(60); - expect(note.bendPoints![1].value).to.equal(0); + expect(note.bendType).toBe(BendType.PrebendRelease); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(2); + expect(note.bendPoints![1].offset).toBe(60); + expect(note.bendPoints![1].value).toBe(0); note = score.tracks[0].staves[0].bars[0].voices[0].beats[4].notes[0]; - expect(note.bendType).to.equal(BendType.PrebendBend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(2); - expect(note.bendPoints![1].offset).to.equal(60); - expect(note.bendPoints![1].value).to.equal(4); + expect(note.bendType).toBe(BendType.PrebendBend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(2); + expect(note.bendPoints![1].offset).toBe(60); + expect(note.bendPoints![1].value).toBe(4); note = score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[0]; - expect(note.bendType).to.equal(BendType.BendRelease); - expect(note.bendPoints!.length).to.equal(4); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.equal(30); - expect(note.bendPoints![1].value).to.equal(2); - expect(note.bendPoints![2].offset).to.equal(30); - expect(note.bendPoints![2].value).to.equal(2); - expect(note.bendPoints![3].offset).to.equal(60); - expect(note.bendPoints![3].value).to.equal(0); + expect(note.bendType).toBe(BendType.BendRelease); + expect(note.bendPoints!.length).toBe(4); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBe(30); + expect(note.bendPoints![1].value).toBe(2); + expect(note.bendPoints![2].offset).toBe(30); + expect(note.bendPoints![2].value).toBe(2); + expect(note.bendPoints![3].offset).toBe(60); + expect(note.bendPoints![3].value).toBe(0); note = score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[1]; - expect(note.bendType).to.equal(BendType.BendRelease); - expect(note.bendPoints!.length).to.equal(4); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.equal(30); - expect(note.bendPoints![1].value).to.equal(2); - expect(note.bendPoints![2].offset).to.equal(30); - expect(note.bendPoints![2].value).to.equal(2); - expect(note.bendPoints![3].offset).to.equal(60); - expect(note.bendPoints![3].value).to.equal(0); + expect(note.bendType).toBe(BendType.BendRelease); + expect(note.bendPoints!.length).toBe(4); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBe(30); + expect(note.bendPoints![1].value).toBe(2); + expect(note.bendPoints![2].offset).toBe(30); + expect(note.bendPoints![2].value).toBe(2); + expect(note.bendPoints![3].offset).toBe(60); + expect(note.bendPoints![3].value).toBe(0); note = score.tracks[0].staves[0].bars[1].voices[0].beats[0].notes[2]; - expect(note.bendType).to.equal(BendType.None); + expect(note.bendType).toBe(BendType.None); note = score.tracks[0].staves[0].bars[1].voices[0].beats[1].notes[0]; - expect(note.bendType).to.equal(BendType.Custom); - expect(note.bendPoints!.length).to.equal(12); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(1); - expect(note.bendPoints![1].offset).to.equal(10); - expect(note.bendPoints![1].value).to.equal(1); - expect(note.bendPoints![2].offset).to.equal(10); - expect(note.bendPoints![2].value).to.equal(1); - expect(note.bendPoints![3].offset).to.equal(20); - expect(note.bendPoints![3].value).to.equal(3); - expect(note.bendPoints![4].offset).to.equal(20); - expect(note.bendPoints![4].value).to.equal(3); - expect(note.bendPoints![5].offset).to.equal(30); - expect(note.bendPoints![5].value).to.equal(4); - expect(note.bendPoints![6].offset).to.equal(30); - expect(note.bendPoints![6].value).to.equal(4); - expect(note.bendPoints![7].offset).to.equal(40); - expect(note.bendPoints![7].value).to.equal(8); - expect(note.bendPoints![8].offset).to.equal(40); - expect(note.bendPoints![8].value).to.equal(8); - expect(note.bendPoints![9].offset).to.equal(50); - expect(note.bendPoints![9].value).to.equal(4); - expect(note.bendPoints![10].offset).to.equal(50); - expect(note.bendPoints![10].value).to.equal(4); - expect(note.bendPoints![11].offset).to.equal(60); - expect(note.bendPoints![11].value).to.equal(8); + expect(note.bendType).toBe(BendType.Custom); + expect(note.bendPoints!.length).toBe(12); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(1); + expect(note.bendPoints![1].offset).toBe(10); + expect(note.bendPoints![1].value).toBe(1); + expect(note.bendPoints![2].offset).toBe(10); + expect(note.bendPoints![2].value).toBe(1); + expect(note.bendPoints![3].offset).toBe(20); + expect(note.bendPoints![3].value).toBe(3); + expect(note.bendPoints![4].offset).toBe(20); + expect(note.bendPoints![4].value).toBe(3); + expect(note.bendPoints![5].offset).toBe(30); + expect(note.bendPoints![5].value).toBe(4); + expect(note.bendPoints![6].offset).toBe(30); + expect(note.bendPoints![6].value).toBe(4); + expect(note.bendPoints![7].offset).toBe(40); + expect(note.bendPoints![7].value).toBe(8); + expect(note.bendPoints![8].offset).toBe(40); + expect(note.bendPoints![8].value).toBe(8); + expect(note.bendPoints![9].offset).toBe(50); + expect(note.bendPoints![9].value).toBe(4); + expect(note.bendPoints![10].offset).toBe(50); + expect(note.bendPoints![10].value).toBe(4); + expect(note.bendPoints![11].offset).toBe(60); + expect(note.bendPoints![11].value).toBe(8); note = score.tracks[0].staves[0].bars[1].voices[0].beats[2].notes[0]; - expect(note.bendType).to.equal(BendType.PrebendRelease); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(8); - expect(note.bendPoints![1].offset).to.equal(60); - expect(note.bendPoints![1].value).to.equal(0); + expect(note.bendType).toBe(BendType.PrebendRelease); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(8); + expect(note.bendPoints![1].offset).toBe(60); + expect(note.bendPoints![1].value).toBe(0); note = score.tracks[0].staves[0].bars[1].voices[0].beats[3].notes[0]; - expect(note.bendType).to.equal(BendType.Bend); - expect(note.bendPoints!.length).to.equal(2); - expect(note.bendPoints![0].offset).to.equal(0); - expect(note.bendPoints![0].value).to.equal(0); - expect(note.bendPoints![1].offset).to.equal(30); - expect(note.bendPoints![1].value).to.equal(2); + expect(note.bendType).toBe(BendType.Bend); + expect(note.bendPoints!.length).toBe(2); + expect(note.bendPoints![0].offset).toBe(0); + expect(note.bendPoints![0].value).toBe(0); + expect(note.bendPoints![1].offset).toBe(30); + expect(note.bendPoints![1].value).toBe(2); }); it('partwise-basic', async () => { @@ -263,11 +263,11 @@ describe('MusicXmlImporterTests', () => { it('bank', async () => { const score = await MusicXmlImporterTestHelper.loadFile('test-data/musicxml4/midi-bank.xml'); - expect(score.tracks[0].playbackInfo.program).to.equal(0); - expect(score.tracks[0].playbackInfo.bank).to.equal(0); + expect(score.tracks[0].playbackInfo.program).toBe(0); + expect(score.tracks[0].playbackInfo.bank).toBe(0); - expect(score.tracks[1].playbackInfo.program).to.equal(1); - expect(score.tracks[1].playbackInfo.bank).to.equal(77); + expect(score.tracks[1].playbackInfo.program).toBe(1); + expect(score.tracks[1].playbackInfo.bank).toBe(77); }); it('buzzroll', async () => { @@ -278,14 +278,14 @@ describe('MusicXmlImporterTests', () => { describe('barnumberdisplay', async () => { async function testPartwise(filename: string, display: BarNumberDisplay) { const score = await MusicXmlImporterTestHelper.loadFile(`test-data/musicxml4/${filename}`); - expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).to.equal(display); - expect(score.tracks[1].staves[0].bars[2].barNumberDisplay).to.equal(display); + expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).toBe(display); + expect(score.tracks[1].staves[0].bars[2].barNumberDisplay).toBe(display); } async function testTimewise(filename: string, display: BarNumberDisplay) { const score = await MusicXmlImporterTestHelper.loadFile(`test-data/musicxml4/${filename}`); - expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).to.equal(display); - expect(score.tracks[1].staves[0].bars[1].barNumberDisplay).to.equal(display); + expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).toBe(display); + expect(score.tracks[1].staves[0].bars[1].barNumberDisplay).toBe(display); } it('partwise-none', async () => @@ -296,12 +296,12 @@ describe('MusicXmlImporterTests', () => { await testPartwise('partwise-measure-numbering-system.xml', BarNumberDisplay.FirstOfSystem)); it('partwise-implicit', async () => { const score = await MusicXmlImporterTestHelper.loadFile('test-data/musicxml4/partwise-anacrusis.xml'); - expect(score.tracks[0].staves[0].bars[0].barNumberDisplay).to.equal(BarNumberDisplay.Hide); - expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).to.be.undefined; - expect(score.tracks[0].staves[0].bars[3].barNumberDisplay).to.equal(BarNumberDisplay.Hide); - expect(score.tracks[1].staves[0].bars[0].barNumberDisplay).to.equal(BarNumberDisplay.Hide); - expect(score.tracks[1].staves[0].bars[1].barNumberDisplay).to.be.undefined; - expect(score.tracks[1].staves[0].bars[3].barNumberDisplay).to.equal(BarNumberDisplay.Hide); + expect(score.tracks[0].staves[0].bars[0].barNumberDisplay).toBe(BarNumberDisplay.Hide); + expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).toBeUndefined(); + expect(score.tracks[0].staves[0].bars[3].barNumberDisplay).toBe(BarNumberDisplay.Hide); + expect(score.tracks[1].staves[0].bars[0].barNumberDisplay).toBe(BarNumberDisplay.Hide); + expect(score.tracks[1].staves[0].bars[1].barNumberDisplay).toBeUndefined(); + expect(score.tracks[1].staves[0].bars[3].barNumberDisplay).toBe(BarNumberDisplay.Hide); }); it('timewise-none', async () => @@ -312,12 +312,12 @@ describe('MusicXmlImporterTests', () => { await testTimewise('timewise-measure-numbering-system.xml', BarNumberDisplay.FirstOfSystem)); it('timewise-implicit', async () => { const score = await MusicXmlImporterTestHelper.loadFile('test-data/musicxml4/timewise-anacrusis.xml'); - expect(score.tracks[0].staves[0].bars[0].barNumberDisplay).to.equal(BarNumberDisplay.Hide); - expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).to.be.undefined; - expect(score.tracks[0].staves[0].bars[3].barNumberDisplay).to.equal(BarNumberDisplay.Hide); - expect(score.tracks[1].staves[0].bars[0].barNumberDisplay).to.equal(BarNumberDisplay.Hide); - expect(score.tracks[1].staves[0].bars[1].barNumberDisplay).to.be.undefined; - expect(score.tracks[1].staves[0].bars[3].barNumberDisplay).to.equal(BarNumberDisplay.Hide); + expect(score.tracks[0].staves[0].bars[0].barNumberDisplay).toBe(BarNumberDisplay.Hide); + expect(score.tracks[0].staves[0].bars[1].barNumberDisplay).toBeUndefined(); + expect(score.tracks[0].staves[0].bars[3].barNumberDisplay).toBe(BarNumberDisplay.Hide); + expect(score.tracks[1].staves[0].bars[0].barNumberDisplay).toBe(BarNumberDisplay.Hide); + expect(score.tracks[1].staves[0].bars[1].barNumberDisplay).toBeUndefined(); + expect(score.tracks[1].staves[0].bars[3].barNumberDisplay).toBe(BarNumberDisplay.Hide); }); }); }); diff --git a/packages/alphatab/test/importer/MusicXmlImporterSamples.test.ts b/packages/alphatab/test/importer/MusicXmlImporterSamples.test.ts index ce9880bf3..9aa1ea2da 100644 --- a/packages/alphatab/test/importer/MusicXmlImporterSamples.test.ts +++ b/packages/alphatab/test/importer/MusicXmlImporterSamples.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { MusicXmlImporterTestHelper } from 'test/importer/MusicXmlImporterTestHelper'; describe('MusicXmlImporterSamplesTests', () => { diff --git a/packages/alphatab/test/importer/MusicXmlImporterTestHelper.ts b/packages/alphatab/test/importer/MusicXmlImporterTestHelper.ts index 055823d79..6a6f3610f 100644 --- a/packages/alphatab/test/importer/MusicXmlImporterTestHelper.ts +++ b/packages/alphatab/test/importer/MusicXmlImporterTestHelper.ts @@ -12,7 +12,6 @@ import { Staff } from '@coderline/alphatab/model/Staff'; import { Track } from '@coderline/alphatab/model/Track'; import { Voice } from '@coderline/alphatab/model/Voice'; import { Settings } from '@coderline/alphatab/Settings'; -import { assert } from 'chai'; import { ComparisonHelpers } from 'test/model/ComparisonHelpers'; import { TestPlatform } from 'test/TestPlatform'; import { VisualTestHelper, VisualTestOptions, VisualTestRun } from 'test/visualTests/VisualTestHelper'; @@ -48,7 +47,7 @@ export class MusicXmlImporterTestHelper { score = importer.readScore(); } catch (e) { if (e instanceof UnsupportedFormatError) { - assert.fail(`Failed to load file ${file}: ${e}`); + throw new Error(`Failed to load file ${file}: ${e}`); } throw e; } @@ -62,7 +61,7 @@ export class MusicXmlImporterTestHelper { ComparisonHelpers.expectJsonEqual(expectedJson, actualJson, `<${file}>`, null); } catch (e) { - assert.fail((e as Error).message + (e as Error).stack); + throw new Error((e as Error).message + (e as Error).stack); } if (render) { diff --git a/packages/alphatab/test/importer/MusicXmlImporterTestSuite.test.ts b/packages/alphatab/test/importer/MusicXmlImporterTestSuite.test.ts index 3fcc5460d..2c37a3eeb 100644 --- a/packages/alphatab/test/importer/MusicXmlImporterTestSuite.test.ts +++ b/packages/alphatab/test/importer/MusicXmlImporterTestSuite.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { MusicXmlImporterTestHelper } from 'test/importer/MusicXmlImporterTestHelper'; describe('MusicXmlImporterTestSuiteTests', () => { diff --git a/packages/alphatab/test/importer/__snapshots__/AlphaTexImporter.test.ts.snap b/packages/alphatab/test/importer/__snapshots__/AlphaTexImporter.test.ts.snap index b70ee1495..26a102a43 100644 --- a/packages/alphatab/test/importer/__snapshots__/AlphaTexImporter.test.ts.snap +++ b/packages/alphatab/test/importer/__snapshots__/AlphaTexImporter.test.ts.snap @@ -1,12 +1,12 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-staff 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-staff 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -18,27 +18,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -60,7 +60,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -80,13 +80,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-staff-staff 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-staff-staff 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -98,27 +98,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -140,7 +140,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -152,15 +152,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, @@ -177,7 +177,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -197,13 +197,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-staff-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-staff-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -215,27 +215,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -257,7 +257,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -277,13 +277,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-staff-voice-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-staff-voice-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -295,27 +295,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -333,7 +333,7 @@ Map { Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, @@ -350,7 +350,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -370,13 +370,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -388,27 +388,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -430,7 +430,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -452,13 +452,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track-staff 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track-staff 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -470,27 +470,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -512,7 +512,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -534,13 +534,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track-staff-staff 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track-staff-staff 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -552,27 +552,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -594,7 +594,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -606,15 +606,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, @@ -631,7 +631,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -653,13 +653,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track-staff-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track-staff-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -671,27 +671,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -713,7 +713,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -735,13 +735,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track-staff-voice-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track-staff-voice-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -753,27 +753,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -791,7 +791,7 @@ Map { Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, @@ -808,7 +808,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -830,13 +830,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track-track 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track-track 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -848,27 +848,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -890,7 +890,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -910,23 +910,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -948,7 +948,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -971,13 +971,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track-track-meta 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track-track-meta 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -989,27 +989,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1031,7 +1031,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1051,24 +1051,24 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 1, "clef" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1090,7 +1090,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1113,13 +1113,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1131,27 +1131,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1173,7 +1173,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1195,13 +1195,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-track-voice-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-track-voice-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1213,27 +1213,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1251,7 +1251,7 @@ Map { Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, @@ -1268,7 +1268,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1290,13 +1290,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1308,27 +1308,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1350,7 +1350,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1370,13 +1370,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving initial meta-voice-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > initial > meta-voice-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1388,27 +1388,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1426,7 +1426,7 @@ Map { Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, @@ -1443,7 +1443,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1463,13 +1463,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-staff 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-staff 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1489,25 +1489,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -1515,7 +1515,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1535,15 +1535,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -1562,11 +1562,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -1583,15 +1583,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -1606,11 +1606,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -1625,11 +1625,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -1646,7 +1646,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1666,13 +1666,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-staff-staff 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-staff-staff 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1692,25 +1692,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -1718,7 +1718,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1738,15 +1738,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -1765,11 +1765,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -1786,15 +1786,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -1809,11 +1809,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -1828,11 +1828,11 @@ Map { Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -1849,7 +1849,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1861,15 +1861,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -1884,11 +1884,11 @@ Map { Map { "__kind" => "Bar", "id" => 7, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -1903,11 +1903,11 @@ Map { Map { "__kind" => "Bar", "id" => 8, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -1924,7 +1924,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -1944,13 +1944,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-staff-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-staff-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1970,25 +1970,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -1996,7 +1996,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -2016,15 +2016,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -2043,11 +2043,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -2064,15 +2064,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -2087,11 +2087,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -2106,11 +2106,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -2127,7 +2127,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -2147,13 +2147,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-staff-voice-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-staff-voice-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -2173,25 +2173,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -2199,7 +2199,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -2219,15 +2219,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -2246,11 +2246,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -2267,15 +2267,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -2288,7 +2288,7 @@ Map { Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -2303,11 +2303,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -2320,7 +2320,7 @@ Map { Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -2335,11 +2335,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -2352,7 +2352,7 @@ Map { Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -2369,7 +2369,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -2389,13 +2389,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -2415,25 +2415,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -2441,7 +2441,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -2461,15 +2461,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -2488,11 +2488,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -2515,23 +2515,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -2551,11 +2551,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -2570,11 +2570,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -2591,7 +2591,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -2614,13 +2614,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track-staff 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track-staff 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -2640,25 +2640,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -2666,7 +2666,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -2686,15 +2686,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -2713,11 +2713,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -2740,23 +2740,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -2776,11 +2776,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -2795,11 +2795,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -2816,7 +2816,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -2839,13 +2839,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track-staff-staff 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track-staff-staff 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -2865,25 +2865,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -2891,7 +2891,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -2911,15 +2911,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -2938,11 +2938,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -2965,23 +2965,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3001,11 +3001,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -3020,11 +3020,11 @@ Map { Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -3041,7 +3041,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -3053,15 +3053,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -3076,11 +3076,11 @@ Map { Map { "__kind" => "Bar", "id" => 7, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -3095,11 +3095,11 @@ Map { Map { "__kind" => "Bar", "id" => 8, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -3116,7 +3116,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -3139,13 +3139,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track-staff-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track-staff-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -3165,25 +3165,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -3191,7 +3191,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3211,15 +3211,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -3238,11 +3238,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -3265,23 +3265,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3301,11 +3301,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -3320,11 +3320,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -3341,7 +3341,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -3364,13 +3364,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track-staff-voice-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track-staff-voice-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -3390,25 +3390,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -3416,7 +3416,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3436,15 +3436,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -3463,11 +3463,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -3490,23 +3490,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3524,7 +3524,7 @@ Map { Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -3539,11 +3539,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -3556,7 +3556,7 @@ Map { Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -3571,11 +3571,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -3588,7 +3588,7 @@ Map { Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -3605,7 +3605,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -3628,13 +3628,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track-track 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track-track 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -3654,25 +3654,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -3680,7 +3680,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3700,15 +3700,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -3727,11 +3727,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -3754,23 +3754,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3790,11 +3790,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -3809,11 +3809,11 @@ Map { Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -3830,7 +3830,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -3851,23 +3851,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3887,11 +3887,11 @@ Map { Map { "__kind" => "Bar", "id" => 7, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -3906,11 +3906,11 @@ Map { Map { "__kind" => "Bar", "id" => 8, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -3927,7 +3927,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -3950,13 +3950,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track-track-meta 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track-track-meta 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -3976,25 +3976,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -4002,7 +4002,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -4022,15 +4022,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -4049,11 +4049,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -4076,23 +4076,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -4112,11 +4112,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -4131,11 +4131,11 @@ Map { Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -4152,7 +4152,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -4173,24 +4173,24 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, "clef" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -4211,11 +4211,11 @@ Map { "__kind" => "Bar", "id" => 7, "clef" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -4231,11 +4231,11 @@ Map { "__kind" => "Bar", "id" => 8, "clef" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -4252,7 +4252,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -4275,13 +4275,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -4301,25 +4301,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -4327,7 +4327,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -4347,15 +4347,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -4374,11 +4374,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -4401,23 +4401,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -4437,11 +4437,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -4456,11 +4456,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -4477,7 +4477,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -4500,13 +4500,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-track-voice-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-track-voice-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -4518,27 +4518,27 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -4556,7 +4556,7 @@ Map { Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, @@ -4573,7 +4573,7 @@ Map { "stringtuning" => Map { "isstandard" => true, "name" => "Guitar Standard Tuning", - "tunings" => Array [ + "tunings" => [ 64, 59, 55, @@ -4595,13 +4595,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -4621,25 +4621,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -4647,7 +4647,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -4665,7 +4665,7 @@ Map { Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -4680,15 +4680,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -4704,7 +4704,7 @@ Map { Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -4720,11 +4720,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -4737,7 +4737,7 @@ Map { Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -4762,13 +4762,13 @@ Map { } `; -exports[`AlphaTexImporterTest bar-meta-interweaving with-previous-bars meta-voice-voice 1`] = ` +exports[`AlphaTexImporterTest > bar-meta-interweaving > with-previous-bars > meta-voice-voice 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -4788,25 +4788,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -4814,7 +4814,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -4832,7 +4832,7 @@ Map { Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -4845,7 +4845,7 @@ Map { Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -4860,15 +4860,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -4884,7 +4884,7 @@ Map { Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -4897,7 +4897,7 @@ Map { Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -4913,11 +4913,11 @@ Map { "__kind" => "Bar", "id" => 2, "clef" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -4930,7 +4930,7 @@ Map { Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -4943,7 +4943,7 @@ Map { Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -4968,13 +4968,13 @@ Map { } `; -exports[`AlphaTexImporterTest barlines 1`] = ` +exports[`AlphaTexImporterTest > barlines 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -4990,26 +4990,26 @@ Map { "start" => 3840, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -5031,11 +5031,11 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -5054,15 +5054,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, @@ -5079,11 +5079,11 @@ Map { Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -5111,15 +5111,15 @@ Map { } `; -exports[`AlphaTexImporterTest custom-beaming 1`] = ` +exports[`AlphaTexImporterTest > custom-beaming 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", "beamingrules" => Map { "groups" => Map { - "8" => Array [ + "8" => [ 2, 2, 2, @@ -5127,7 +5127,7 @@ Map { ], }, }, - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -5146,7 +5146,7 @@ Map { "__kind" => "MasterBar", "beamingrules" => Map { "groups" => Map { - "8" => Array [ + "8" => [ 4, 4, ], @@ -5155,25 +5155,25 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -5182,7 +5182,7 @@ Map { }, ], "duration" => 8, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -5198,7 +5198,7 @@ Map { Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -5215,7 +5215,7 @@ Map { Map { "__kind" => "Beat", "id" => 2, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 2, @@ -5232,7 +5232,7 @@ Map { Map { "__kind" => "Beat", "id" => 3, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 3, @@ -5249,7 +5249,7 @@ Map { Map { "__kind" => "Beat", "id" => 4, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 4, @@ -5266,7 +5266,7 @@ Map { Map { "__kind" => "Beat", "id" => 5, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 5, @@ -5283,7 +5283,7 @@ Map { Map { "__kind" => "Beat", "id" => 6, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 6, @@ -5300,7 +5300,7 @@ Map { Map { "__kind" => "Beat", "id" => 7, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 7, @@ -5321,15 +5321,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 8, @@ -5344,7 +5344,7 @@ Map { Map { "__kind" => "Beat", "id" => 9, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 9, @@ -5361,7 +5361,7 @@ Map { Map { "__kind" => "Beat", "id" => 10, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 10, @@ -5378,7 +5378,7 @@ Map { Map { "__kind" => "Beat", "id" => 11, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 11, @@ -5395,7 +5395,7 @@ Map { Map { "__kind" => "Beat", "id" => 12, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 12, @@ -5412,7 +5412,7 @@ Map { Map { "__kind" => "Beat", "id" => 13, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 13, @@ -5429,7 +5429,7 @@ Map { Map { "__kind" => "Beat", "id" => 14, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 14, @@ -5446,7 +5446,7 @@ Map { Map { "__kind" => "Beat", "id" => 15, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 15, @@ -5467,15 +5467,15 @@ Map { Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 16, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 16, @@ -5490,7 +5490,7 @@ Map { Map { "__kind" => "Beat", "id" => 17, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 17, @@ -5507,7 +5507,7 @@ Map { Map { "__kind" => "Beat", "id" => 18, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 18, @@ -5524,7 +5524,7 @@ Map { Map { "__kind" => "Beat", "id" => 19, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 19, @@ -5541,7 +5541,7 @@ Map { Map { "__kind" => "Beat", "id" => 20, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 20, @@ -5558,7 +5558,7 @@ Map { Map { "__kind" => "Beat", "id" => 21, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 21, @@ -5575,7 +5575,7 @@ Map { Map { "__kind" => "Beat", "id" => 22, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 22, @@ -5592,7 +5592,7 @@ Map { Map { "__kind" => "Beat", "id" => 23, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 23, @@ -5609,7 +5609,7 @@ Map { Map { "__kind" => "Beat", "id" => 24, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 24, @@ -5626,7 +5626,7 @@ Map { Map { "__kind" => "Beat", "id" => 25, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 25, @@ -5643,7 +5643,7 @@ Map { Map { "__kind" => "Beat", "id" => 26, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 26, @@ -5660,7 +5660,7 @@ Map { Map { "__kind" => "Beat", "id" => 27, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 27, @@ -5677,7 +5677,7 @@ Map { Map { "__kind" => "Beat", "id" => 28, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 28, @@ -5694,7 +5694,7 @@ Map { Map { "__kind" => "Beat", "id" => 29, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 29, @@ -5711,7 +5711,7 @@ Map { Map { "__kind" => "Beat", "id" => 30, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 30, @@ -5728,7 +5728,7 @@ Map { Map { "__kind" => "Beat", "id" => 31, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 31, @@ -5759,31 +5759,12 @@ Map { } `; -exports[`AlphaTexImporterTest errors at209 accidentalmode: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > articulation > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 accidentalmode: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > articulation > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 accidentalmode: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected accidental mode value 'invalid', expected: auto,explicit", - "start" => Map { - "col" => 21, - "line" => 1, - "offset" => 20, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 articulation: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 articulation: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 articulation: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at209 > articulation > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -5797,98 +5778,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at209 bar optional: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > beat tuplet > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 bar optional: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > beat tuplet > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 bar optional: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected additional value 'Number', expected: required(String|Ident),optional(String|Ident)", - "start" => Map { - "col" => 18, - "line" => 1, - "offset" => 17, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 bar required: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 bar required: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 bar required: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected required value 'String', expected: required(Number)", - "start" => Map { - "col" => 10, - "line" => 1, - "offset" => 9, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 barre: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 barre: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 barre: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected additional value 'Ident', expected: required(Number),optional(String|Ident)", - "start" => Map { - "col" => 21, - "line" => 1, - "offset" => 20, - }, - }, - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected barre shape value 'invalid', expected: none,full,half", - "start" => Map { - "col" => 21, - "line" => 1, - "offset" => 20, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 beam: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 beam: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 beam: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected beam value 'invalid', expected: invert,up,down,auto,split,merge,splitsecondary", - "start" => Map { - "col" => 19, - "line" => 1, - "offset" => 18, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 beat tuplet: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 beat tuplet: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 beat tuplet: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at209 > beat tuplet > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -5902,69 +5797,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at209 bendstyle: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > duration tuplet > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 bendstyle: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > duration tuplet > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 bendstyle: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected bend style value 'invalid', expected: default,gradual,fast", - "start" => Map { - "col" => 19, - "line" => 1, - "offset" => 18, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 bendtype: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 bendtype: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 bendtype: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected bend type value 'invalid', expected: none,custom,bend,release,bendrelease,hold,prebend,prebendbend,prebendrelease", - "start" => Map { - "col" => 14, - "line" => 1, - "offset" => 13, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 bracketextendmode: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 bracketextendmode: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 bracketextendmode: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected bracket extend mode value 'invalid', expected: nobrackets,groupstaves,groupsimilarinstruments", - "start" => Map { - "col" => 27, - "line" => 1, - "offset" => 26, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 duration tuplet: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 duration tuplet: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 duration tuplet: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at209 > duration tuplet > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -5978,279 +5816,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at209 dynamic: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 dynamic: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 dynamic: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected dynamic value 'invalid', expected: ppp,pp,p,mp,mf,f,ff,fff,pppp,ppppp,pppppp,ffff,fffff,ffffff,sf,sfp,sfpp,fp,rf,rfz,sfz,sffz,fz,n,pf,sfzp", - "start" => Map { - "col" => 15, - "line" => 1, - "offset" => 14, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 fermata: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 fermata: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 fermata: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected additional value 'Ident', expected: optional(String|Ident),optional(Number)", - "start" => Map { - "col" => 21, - "line" => 1, - "offset" => 20, - }, - }, - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected fermata value 'invalid', expected: short,medium,long", - "start" => Map { - "col" => 21, - "line" => 1, - "offset" => 20, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 firstsystemtracknamemode: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 firstsystemtracknamemode: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 firstsystemtracknamemode: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected track name mode value 'invalid', expected: fullname,shortname", - "start" => Map { - "col" => 34, - "line" => 1, - "offset" => 33, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 firstsystemtracknameorientation: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 firstsystemtracknameorientation: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 firstsystemtracknameorientation: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected track name orientation value 'invalid', expected: horizontal,vertical", - "start" => Map { - "col" => 41, - "line" => 1, - "offset" => 40, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 gracetype: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 gracetype: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 gracetype: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected additional value 'Ident', expected: optional(String|Ident)", - "start" => Map { - "col" => 16, - "line" => 1, - "offset" => 15, - }, - }, - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected whammy style value 'invalid', expected: ob,b,bb", - "start" => Map { - "col" => 16, - "line" => 1, - "offset" => 15, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 multitracktracknamepolicy: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > textalign > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 multitracktracknamepolicy: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > textalign > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 multitracktracknamepolicy: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected track name policy value 'invalid', expected: hidden,firstsystem,allsystems", - "start" => Map { - "col" => 35, - "line" => 1, - "offset" => 34, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 othersystemstracknamemode: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 othersystemstracknamemode: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 othersystemstracknamemode: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected track name mode value 'invalid', expected: fullname,shortname", - "start" => Map { - "col" => 35, - "line" => 1, - "offset" => 34, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 othersystemstracknameorientation: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 othersystemstracknameorientation: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 othersystemstracknameorientation: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected track name orientation value 'invalid', expected: horizontal,vertical", - "start" => Map { - "col" => 41, - "line" => 1, - "offset" => 40, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 ottava: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 ottava: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 ottava: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected ottava value 'invalid', expected: 15ma,8va,regular,8vb,15mb", - "start" => Map { - "col" => 15, - "line" => 1, - "offset" => 14, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 rasg: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 rasg: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 rasg: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected rasgueado pattern value 'invalid', expected: none,ii,mi,miitriplet,miianapaest,pmptriplet,pmpanapaest,peitriplet,peianapaest,paitriplet,paianapaest,amitriplet,amianapaest,ppp,amii,amip,eami,eamii,peami", - "start" => Map { - "col" => 17, - "line" => 1, - "offset" => 16, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 score optional: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 score optional: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 score optional: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected additional value 'Number', expected: required(String|Ident),optional(String),optional(String|Ident)", - "start" => Map { - "col" => 18, - "line" => 1, - "offset" => 17, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 score required: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 score required: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 score required: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected required value 'Number', expected: required(String|Ident)", - "start" => Map { - "col" => 10, - "line" => 1, - "offset" => 9, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 singletracktracknamepolicy: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 singletracktracknamepolicy: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 singletracktracknamepolicy: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected track name policy value 'invalid', expected: hidden,firstsystem,allsystems", - "start" => Map { - "col" => 36, - "line" => 1, - "offset" => 35, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 textalign: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 textalign: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 textalign: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at209 > textalign > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -6264,12 +5835,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at209 tremolo speed: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > tremolo speed > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 tremolo speed: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > tremolo speed > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 tremolo speed: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at209 > tremolo speed > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -6283,12 +5854,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at209 trill: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > trill > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 trill: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > trill > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 trill: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at209 > trill > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -6302,12 +5873,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at209 tuning: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > tuning > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 tuning: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at209 > tuning > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at209 tuning: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at209 > tuning > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -6321,105 +5892,10 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at209 whammybarstyle: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 whammybarstyle: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 whammybarstyle: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected whammy style value 'invalid', expected: default,gradual,fast", - "start" => Map { - "col" => 20, - "line" => 1, - "offset" => 19, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at209 whammybartype: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 whammybartype: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at209 whammybartype: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 209, - "severity" => 2, - "message" => "Unexpected whammy type value 'invalid', expected: none,custom,dive,dip,hold,predive,predivedive", - "start" => Map { - "col" => 15, - "line" => 1, - "offset" => 14, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at210 bar empty: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at210 bar empty: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at210 bar empty: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 210, - "severity" => 2, - "message" => "Missing arguments. Expected following arguments: required(Number)", - "start" => Map { - "col" => 9, - "line" => 1, - "offset" => 8, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at210 bar missing: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at210 bar missing: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at210 bar missing: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 210, - "severity" => 2, - "message" => "Missing arguments. Expected following arguments: required(Number)", - "start" => Map { - "col" => 10, - "line" => 1, - "offset" => 9, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at210 score empty: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at210 score empty: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexImporterTest errors at210 score empty: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 210, - "severity" => 2, - "message" => "Missing arguments. Expected following arguments: required(String|Ident)", - "start" => Map { - "col" => 10, - "line" => 1, - "offset" => 9, - }, - }, -] -`; - -exports[`AlphaTexImporterTest errors at219 accidentalmode: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > accidentalmode > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 accidentalmode: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > accidentalmode > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6434,14 +5910,14 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 accidentalmode: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > accidentalmode > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar empty: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > bar empty > semantic-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6457,12 +5933,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 bar missing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar missing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar missing: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar missing > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar missing: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > bar missing > semantic-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6478,18 +5954,18 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 bar optional: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar optional > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar optional: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar optional > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar optional: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar optional > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar required: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar required > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar required: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bar required > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bar required: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > bar required > semantic-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6504,12 +5980,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 barre: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > barre > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 barre: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > barre > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 barre: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > barre > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -6523,10 +5999,10 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 beam: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > beam > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 beam: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > beam > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6551,24 +6027,24 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 beam: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > beam > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bendstyle: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bendstyle > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bendstyle: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bendstyle > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bendstyle: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bendstyle > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bendtype: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bendtype > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bendtype: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bendtype > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bendtype: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bendtype > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bracketextendmode: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bracketextendmode > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 bracketextendmode: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > bracketextendmode > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6583,12 +6059,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 bracketextendmode: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > bracketextendmode > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 dynamic: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > dynamic > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 dynamic: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > dynamic > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6613,14 +6089,14 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 dynamic: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > dynamic > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 fermata: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > fermata > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 fermata: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > fermata > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 fermata: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > fermata > semantic-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6635,10 +6111,10 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 firstsystemtracknamemode: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > firstsystemtracknamemode > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 firstsystemtracknamemode: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > firstsystemtracknamemode > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6653,12 +6129,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 firstsystemtracknamemode: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > firstsystemtracknamemode > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 firstsystemtracknameorientation: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > firstsystemtracknameorientation > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 firstsystemtracknameorientation: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > firstsystemtracknameorientation > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6673,14 +6149,14 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 firstsystemtracknameorientation: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > firstsystemtracknameorientation > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 gracetype: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > gracetype > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 gracetype: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > gracetype > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 gracetype: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > gracetype > semantic-diagnostics 1`] = ` +[ Map { "code" => 209, "severity" => 2, @@ -6694,10 +6170,10 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 multitracktracknamepolicy: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > multitracktracknamepolicy > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 multitracktracknamepolicy: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > multitracktracknamepolicy > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6712,12 +6188,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 multitracktracknamepolicy: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > multitracktracknamepolicy > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 othersystemstracknamemode: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > othersystemstracknamemode > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 othersystemstracknamemode: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > othersystemstracknamemode > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6732,12 +6208,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 othersystemstracknamemode: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > othersystemstracknamemode > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 othersystemstracknameorientation: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > othersystemstracknameorientation > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 othersystemstracknameorientation: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > othersystemstracknameorientation > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6752,12 +6228,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 othersystemstracknameorientation: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > othersystemstracknameorientation > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 ottava: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > ottava > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 ottava: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > ottava > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6782,12 +6258,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 ottava: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > ottava > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 rasg: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > rasg > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 rasg: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > rasg > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6812,14 +6288,14 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 rasg: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > rasg > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 score empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > score empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 score empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > score empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 score empty: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > score empty > semantic-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6834,18 +6310,18 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 score optional: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > score optional > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 score optional: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > score optional > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 score optional: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > score optional > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 score required: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > score required > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 score required: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > score required > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 score required: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > score required > semantic-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6860,10 +6336,10 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 singletracktracknamepolicy: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > singletracktracknamepolicy > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 singletracktracknamepolicy: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > singletracktracknamepolicy > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -6878,12 +6354,12 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 singletracktracknamepolicy: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > singletracktracknamepolicy > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 whammybarstyle: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > whammybarstyle > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 whammybarstyle: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexImporterTest > errors > at219 > whammybarstyle > parser-diagnostics 1`] = ` +[ Map { "code" => 205, "severity" => 2, @@ -6897,21 +6373,21 @@ Array [ ] `; -exports[`AlphaTexImporterTest errors at219 whammybarstyle: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > whammybarstyle > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 whammybartype: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > whammybartype > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 whammybartype: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > whammybartype > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest errors at219 whammybartype: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexImporterTest > errors > at219 > whammybartype > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexImporterTest sync 1`] = ` +exports[`AlphaTexImporterTest > sync 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -6921,7 +6397,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -6950,7 +6426,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -6973,7 +6449,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -7012,7 +6488,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -7032,17 +6508,17 @@ Map { } `; -exports[`AlphaTexImporterTest sync-expect-dot 1`] = ` +exports[`AlphaTexImporterTest > sync-expect-dot 1`] = ` Map { "__kind" => "Score", "artist" => "J.S. Bach (1685-1750)", "copyright" => "Public Domain", "title" => "Prelude in D Minor", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", "timesignaturenumerator" => 3, - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -7052,7 +6528,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -7082,7 +6558,7 @@ Map { Map { "__kind" => "MasterBar", "timesignaturenumerator" => 3, - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -7101,7 +6577,7 @@ Map { Map { "__kind" => "MasterBar", "timesignaturenumerator" => 3, - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -7120,7 +6596,7 @@ Map { Map { "__kind" => "MasterBar", "timesignaturenumerator" => 3, - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -7140,139 +6616,139 @@ Map { } `; -exports[`AlphaTexImporterTest tremolos buzzroll-default1 1`] = ` +exports[`AlphaTexImporterTest > tremolos > buzzroll-default1 1`] = ` Map { "marks" => 1, "style" => 1, } `; -exports[`AlphaTexImporterTest tremolos buzzroll-default2 1`] = ` +exports[`AlphaTexImporterTest > tremolos > buzzroll-default2 1`] = ` Map { "marks" => 2, "style" => 1, } `; -exports[`AlphaTexImporterTest tremolos buzzroll-default3 1`] = ` +exports[`AlphaTexImporterTest > tremolos > buzzroll-default3 1`] = ` Map { "marks" => 3, "style" => 1, } `; -exports[`AlphaTexImporterTest tremolos buzzroll-default4 1`] = ` +exports[`AlphaTexImporterTest > tremolos > buzzroll-default4 1`] = ` Map { "marks" => 4, "style" => 1, } `; -exports[`AlphaTexImporterTest tremolos buzzroll-default5 1`] = ` +exports[`AlphaTexImporterTest > tremolos > buzzroll-default5 1`] = ` Map { "marks" => 5, "style" => 1, } `; -exports[`AlphaTexImporterTest tremolos tremolo-default1 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo-default1 1`] = ` Map { "marks" => 1, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo-default2 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo-default2 1`] = ` Map { "marks" => 2, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo-default3 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo-default3 1`] = ` Map { "marks" => 3, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo-default4 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo-default4 1`] = ` Map { "marks" => 4, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo-default5 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo-default5 1`] = ` Map { "marks" => 5, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo1 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo1 1`] = ` Map { "marks" => 1, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo2 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo2 1`] = ` Map { "marks" => 2, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo3 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo3 1`] = ` Map { "marks" => 3, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo4 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo4 1`] = ` Map { "marks" => 4, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo5 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo5 1`] = ` Map { "marks" => 5, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo8 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo8 1`] = ` Map { "marks" => 1, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo16 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo16 1`] = ` Map { "marks" => 2, "style" => 0, } `; -exports[`AlphaTexImporterTest tremolos tremolo32 1`] = ` +exports[`AlphaTexImporterTest > tremolos > tremolo32 1`] = ` Map { "marks" => 3, "style" => 0, } `; -exports[`AlphaTexImporterTest voice-mode barWise 1`] = ` +exports[`AlphaTexImporterTest > voice-mode > barWise 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -7288,25 +6764,25 @@ Map { "start" => 3840, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -7314,7 +6790,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -7332,11 +6808,11 @@ Map { Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -7354,15 +6830,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 2, @@ -7378,11 +6854,11 @@ Map { Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 3, @@ -7410,13 +6886,13 @@ Map { } `; -exports[`AlphaTexImporterTest voice-mode default 1`] = ` +exports[`AlphaTexImporterTest > voice-mode > default 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -7432,25 +6908,25 @@ Map { "start" => 3840, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -7458,7 +6934,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -7476,11 +6952,11 @@ Map { Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 2, @@ -7498,15 +6974,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -7522,11 +6998,11 @@ Map { Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 3, @@ -7554,13 +7030,13 @@ Map { } `; -exports[`AlphaTexImporterTest voice-mode staffWise 1`] = ` +exports[`AlphaTexImporterTest > voice-mode > staffWise 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -7576,25 +7052,25 @@ Map { "start" => 3840, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -7602,7 +7078,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -7620,11 +7096,11 @@ Map { Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 2, @@ -7642,15 +7118,15 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -7666,11 +7142,11 @@ Map { Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 3, diff --git a/packages/alphatab/test/importer/__snapshots__/AlphaTexLexer.test.ts.snap b/packages/alphatab/test/importer/__snapshots__/AlphaTexLexer.test.ts.snap index 6bf901c10..b4f8b8d62 100644 --- a/packages/alphatab/test/importer/__snapshots__/AlphaTexLexer.test.ts.snap +++ b/packages/alphatab/test/importer/__snapshots__/AlphaTexLexer.test.ts.snap @@ -1,57 +1,57 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`AlphaTexLexerTest basic-tokens 1`] = ` -Array [ +exports[`AlphaTexLexerTest > basic-tokens 1`] = ` +[ Dot (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest basic-tokens 2`] = ` -Array [ +exports[`AlphaTexLexerTest > basic-tokens 2`] = ` +[ Colon (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest basic-tokens 3`] = ` -Array [ +exports[`AlphaTexLexerTest > basic-tokens 3`] = ` +[ LParen (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest basic-tokens 4`] = ` -Array [ +exports[`AlphaTexLexerTest > basic-tokens 4`] = ` +[ RParen (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest basic-tokens 5`] = ` -Array [ +exports[`AlphaTexLexerTest > basic-tokens 5`] = ` +[ LBrace (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest basic-tokens 6`] = ` -Array [ +exports[`AlphaTexLexerTest > basic-tokens 6`] = ` +[ RBrace (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest basic-tokens 7`] = ` -Array [ +exports[`AlphaTexLexerTest > basic-tokens 7`] = ` +[ Pipe (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest basic-tokens 8`] = ` -Array [ +exports[`AlphaTexLexerTest > basic-tokens 8`] = ` +[ Asterisk (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest errors at001 1`] = `Array []`; +exports[`AlphaTexLexerTest > errors > at001 1`] = `[]`; -exports[`AlphaTexLexerTest errors at001 2`] = ` -Array [ +exports[`AlphaTexLexerTest > errors > at001 2`] = ` +[ Map { "code" => 1, "severity" => 2, @@ -65,14 +65,14 @@ Array [ ] `; -exports[`AlphaTexLexerTest errors at002 1`] = ` -Array [ +exports[`AlphaTexLexerTest > errors > at002 1`] = ` +[ String "Test" (1,3) -> (1,8), ] `; -exports[`AlphaTexLexerTest errors at002 2`] = ` -Array [ +exports[`AlphaTexLexerTest > errors > at002 2`] = ` +[ Map { "code" => 2, "severity" => 2, @@ -86,14 +86,14 @@ Array [ ] `; -exports[`AlphaTexLexerTest errors at003 1`] = `Array []`; +exports[`AlphaTexLexerTest > errors > at003 1`] = `[]`; -exports[`AlphaTexLexerTest errors at003 2`] = ` -Array [ +exports[`AlphaTexLexerTest > errors > at003 2`] = ` +[ Map { "code" => 3, "severity" => 2, - "message" => "Unexpected end of file. Need 4 hex characters on a \\\\uXXXX escape sequence", + "message" => "Unexpected end of file. Need 4 hex characters on a \\uXXXX escape sequence", "start" => Map { "col" => 7, "line" => 1, @@ -103,14 +103,14 @@ Array [ ] `; -exports[`AlphaTexLexerTest errors at004 1`] = `Array []`; +exports[`AlphaTexLexerTest > errors > at004 1`] = `[]`; -exports[`AlphaTexLexerTest errors at004 2`] = ` -Array [ +exports[`AlphaTexLexerTest > errors > at004 2`] = ` +[ Map { "code" => 4, "severity" => 2, - "message" => "Invalid unicode value. Need 4 hex characters on a \\\\uXXXX escape sequence.", + "message" => "Invalid unicode value. Need 4 hex characters on a \\uXXXX escape sequence.", "start" => Map { "col" => 7, "line" => 1, @@ -120,14 +120,14 @@ Array [ ] `; -exports[`AlphaTexLexerTest errors at005 1`] = `Array []`; +exports[`AlphaTexLexerTest > errors > at005 1`] = `[]`; -exports[`AlphaTexLexerTest errors at005 2`] = ` -Array [ +exports[`AlphaTexLexerTest > errors > at005 2`] = ` +[ Map { "code" => 5, "severity" => 2, - "message" => "Unsupported escape sequence. Expected '\\\\n', '\\\\r', '\\\\t', or '\\\\uXXXX' but found '\\\\b'.", + "message" => "Unsupported escape sequence. Expected '\\n', '\\r', '\\t', or '\\uXXXX' but found '\\b'.", "start" => Map { "col" => 3, "line" => 1, @@ -137,10 +137,10 @@ Array [ ] `; -exports[`AlphaTexLexerTest errors at006 1`] = `Array []`; +exports[`AlphaTexLexerTest > errors > at006 1`] = `[]`; -exports[`AlphaTexLexerTest errors at006 2`] = ` -Array [ +exports[`AlphaTexLexerTest > errors > at006 2`] = ` +[ Map { "code" => 6, "severity" => 2, @@ -154,10 +154,10 @@ Array [ ] `; -exports[`AlphaTexLexerTest errors at006 3`] = `Array []`; +exports[`AlphaTexLexerTest > errors > at006 3`] = `[]`; -exports[`AlphaTexLexerTest errors at006 4`] = ` -Array [ +exports[`AlphaTexLexerTest > errors > at006 4`] = ` +[ Map { "code" => 6, "severity" => 2, @@ -171,96 +171,96 @@ Array [ ] `; -exports[`AlphaTexLexerTest floats 1`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 1`] = ` +[ Number "1.1" (1,1) -> (1,4), ] `; -exports[`AlphaTexLexerTest floats 2`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 2`] = ` +[ Number "11.22" (1,1) -> (1,6), Number "33.44" (1,7) -> (1,12), ] `; -exports[`AlphaTexLexerTest floats 3`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 3`] = ` +[ Number "1.1" (1,1) -> (1,4), Dot (1,4) -> (1,5), Number "4" (1,5) -> (1,6), ] `; -exports[`AlphaTexLexerTest floats 4`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 4`] = ` +[ Number "1.1" (1,1) -> (1,4), Dot (1,5) -> (1,6), Number "4" (1,6) -> (1,7), ] `; -exports[`AlphaTexLexerTest floats 5`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 5`] = ` +[ Number "1" (1,1) -> (1,2), Dot (1,3) -> (1,4), Number "1.4" (1,4) -> (1,7), ] `; -exports[`AlphaTexLexerTest floats 6`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 6`] = ` +[ Number "-1.1" (1,1) -> (1,5), ] `; -exports[`AlphaTexLexerTest floats 7`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 7`] = ` +[ Ident "-" (1,1) -> (1,2), Dot (1,2) -> (1,3), Number "1" (1,3) -> (1,4), ] `; -exports[`AlphaTexLexerTest floats 8`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 8`] = ` +[ Number "1.1" (1,1) -> (1,4), LParen (1,4) -> (1,5), ] `; -exports[`AlphaTexLexerTest floats 9`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 9`] = ` +[ Number "1.1" (1,1) -> (1,4), LBrace (1,4) -> (1,5), ] `; -exports[`AlphaTexLexerTest floats 10`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 10`] = ` +[ Number "1.1" (1,1) -> (1,4), Pipe (1,4) -> (1,5), ] `; -exports[`AlphaTexLexerTest floats 11`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 11`] = ` +[ Number "1" (1,1) -> (1,2), Dot (1,2) -> (1,3), Ident "1a" (1,3) -> (1,5), ] `; -exports[`AlphaTexLexerTest floats 12`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 12`] = ` +[ Ident "1a" (1,1) -> (1,3), Dot (1,3) -> (1,4), Number "1" (1,4) -> (1,5), ] `; -exports[`AlphaTexLexerTest floats 13`] = ` -Array [ +exports[`AlphaTexLexerTest > floats 13`] = ` +[ Number "1.1" (1,1) -> (1,4), Tag "test" (1,4) -> (1,9) { prefix: Backslash (1,4) -> (1,5), @@ -269,79 +269,79 @@ Array [ ] `; -exports[`AlphaTexLexerTest identifiers 1`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 1`] = ` +[ Ident "true" (1,1) -> (1,5), ] `; -exports[`AlphaTexLexerTest identifiers 2`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 2`] = ` +[ Ident "false" (1,1) -> (1,6), ] `; -exports[`AlphaTexLexerTest identifiers 3`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 3`] = ` +[ Ident "HelloWorld" (1,1) -> (1,11), ] `; -exports[`AlphaTexLexerTest identifiers 4`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 4`] = ` +[ Ident "C4" (1,1) -> (1,3), ] `; -exports[`AlphaTexLexerTest identifiers 5`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 5`] = ` +[ Ident "C#4" (1,1) -> (1,4), ] `; -exports[`AlphaTexLexerTest identifiers 6`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 6`] = ` +[ Ident "Cb4" (1,1) -> (1,4), ] `; -exports[`AlphaTexLexerTest identifiers 7`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 7`] = ` +[ Ident "electricpiano1" (1,1) -> (1,15), ] `; -exports[`AlphaTexLexerTest identifiers 8`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 8`] = ` +[ Ident "Unicodeöäü" (1,1) -> (1,11), Ident "Unicode😸" (1,12) -> (1,20), Ident "Utf16🤘🏻" (1,21) -> (1,28), ] `; -exports[`AlphaTexLexerTest identifiers 9`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 9`] = ` +[ Ident "dashed-identifier" (1,1) -> (1,18), ] `; -exports[`AlphaTexLexerTest identifiers 10`] = ` -Array [ +exports[`AlphaTexLexerTest > identifiers 10`] = ` +[ Ident "HelloWorld" (1,1) -> (1,11), Ident "Multiple" (1,12) -> (1,20), Ident "Identifiers" (1,21) -> (1,32), ] `; -exports[`AlphaTexLexerTest leading-comments 1`] = ` -Array [ +exports[`AlphaTexLexerTest > leading-comments 1`] = ` +[ Ident "true" (3,9) -> (3,13) { - leadingComments: Array [ + leadingComments: [ "// Single", ], }, Ident "false" (7,9) -> (7,14) { - leadingComments: Array [ + leadingComments: [ "/** Multi **/", "/** Multi2 **/", "// Single", @@ -350,8 +350,8 @@ Array [ ] `; -exports[`AlphaTexLexerTest meta-command 1`] = ` -Array [ +exports[`AlphaTexLexerTest > meta-command 1`] = ` +[ Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), @@ -359,8 +359,8 @@ Array [ ] `; -exports[`AlphaTexLexerTest meta-command 2`] = ` -Array [ +exports[`AlphaTexLexerTest > meta-command 2`] = ` +[ Tag "double" (1,1) -> (1,9) { prefix: DoubleBackslash (1,1) -> (1,3), tag: Ident "double" (1,3) -> (1,9), @@ -368,8 +368,8 @@ Array [ ] `; -exports[`AlphaTexLexerTest meta-command 3`] = ` -Array [ +exports[`AlphaTexLexerTest > meta-command 3`] = ` +[ Tag "withNumber123" (1,1) -> (1,15) { prefix: Backslash (1,1) -> (1,2), tag: Ident "withNumber123" (1,2) -> (1,15), @@ -377,8 +377,8 @@ Array [ ] `; -exports[`AlphaTexLexerTest meta-command 4`] = ` -Array [ +exports[`AlphaTexLexerTest > meta-command 4`] = ` +[ Tag "withUnicode😼" (1,1) -> (1,14) { prefix: Backslash (1,1) -> (1,2), tag: Ident "withUnicode😼" (1,2) -> (1,14), @@ -386,8 +386,8 @@ Array [ ] `; -exports[`AlphaTexLexerTest meta-command 5`] = ` -Array [ +exports[`AlphaTexLexerTest > meta-command 5`] = ` +[ Tag "withUnicode😼" (1,1) -> (1,14) { prefix: Backslash (1,1) -> (1,2), tag: Ident "withUnicode😼" (1,2) -> (1,14), @@ -400,122 +400,122 @@ Array [ ] `; -exports[`AlphaTexLexerTest numbers 1`] = ` -Array [ +exports[`AlphaTexLexerTest > numbers 1`] = ` +[ Number "1" (1,1) -> (1,2), ] `; -exports[`AlphaTexLexerTest numbers 2`] = ` -Array [ +exports[`AlphaTexLexerTest > numbers 2`] = ` +[ Number "1234" (1,1) -> (1,5), ] `; -exports[`AlphaTexLexerTest numbers 3`] = ` -Array [ +exports[`AlphaTexLexerTest > numbers 3`] = ` +[ Number "-1" (1,1) -> (1,3), ] `; -exports[`AlphaTexLexerTest numbers 4`] = ` -Array [ +exports[`AlphaTexLexerTest > numbers 4`] = ` +[ Number "-1234" (1,1) -> (1,6), ] `; -exports[`AlphaTexLexerTest numbers 5`] = ` -Array [ +exports[`AlphaTexLexerTest > numbers 5`] = ` +[ Number "1234" (1,1) -> (1,5), Number "5678" (1,6) -> (1,10), ] `; -exports[`AlphaTexLexerTest strings 1`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 1`] = ` +[ String "Double Quoted" (1,1) -> (1,15), ] `; -exports[`AlphaTexLexerTest strings 2`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 2`] = ` +[ String "Single Quoted" (1,1) -> (1,15), ] `; -exports[`AlphaTexLexerTest strings 3`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 3`] = ` +[ String "Multiple" (1,1) -> (1,10), String "Strings" (1,12) -> (1,20), ] `; -exports[`AlphaTexLexerTest strings 4`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 4`] = ` +[ String "Double \\"Quoted\\"" (1,1) -> (1,19), ] `; -exports[`AlphaTexLexerTest strings 5`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 5`] = ` +[ String "Single 'Quoted'" (1,1) -> (1,19), ] `; -exports[`AlphaTexLexerTest strings 6`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 6`] = ` +[ String "\\r\\n\\t" (1,1) -> (1,8), ] `; -exports[`AlphaTexLexerTest strings 7`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 7`] = ` +[ String "\\r\\n\\t" (1,1) -> (1,8), ] `; -exports[`AlphaTexLexerTest strings 8`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 8`] = ` +[ String "😸" (1,1) -> (1,14), ] `; -exports[`AlphaTexLexerTest strings 9`] = ` -Array [ +exports[`AlphaTexLexerTest > strings 9`] = ` +[ String "😸🤘🏻" (1,1) -> (1,5), ] `; -exports[`AlphaTexLexerTest trailing-comments 1`] = ` -Array [ +exports[`AlphaTexLexerTest > trailing-comments 1`] = ` +[ Ident "true" (2,9) -> (2,13) { - trailingComments: Array [ + trailingComments: [ "// Single After", ], }, Ident "false" (3,9) -> (3,14) { - trailingComments: Array [ + trailingComments: [ "/** Multi After **/", ], }, Ident "true" (4,22) -> (4,26) { - leadingComments: Array [ + leadingComments: [ "/** before **/", ], - trailingComments: Array [ + trailingComments: [ "/** middle **/", ], }, Ident "false" (4,40) -> (4,45) { - trailingComments: Array [ + trailingComments: [ "// after", ], }, ] `; -exports[`AlphaTexLexerTest whitespace 1`] = ` -Array [ +exports[`AlphaTexLexerTest > whitespace 1`] = ` +[ Dot (1,3) -> (1,4), Dot (2,7) -> (2,8), ] diff --git a/packages/alphatab/test/importer/__snapshots__/AlphaTexParameter.test.ts.snap b/packages/alphatab/test/importer/__snapshots__/AlphaTexParameter.test.ts.snap index 58e202661..395d10e4a 100644 --- a/packages/alphatab/test/importer/__snapshots__/AlphaTexParameter.test.ts.snap +++ b/packages/alphatab/test/importer/__snapshots__/AlphaTexParameter.test.ts.snap @@ -1,10 +1,16 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`AlphaTexParameterTests handler-validation metadata empty signature empty 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > empty signature > empty > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParameterTests > handler-validation > metadata > empty signature > empty > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParameterTests > handler-validation > metadata > empty signature > empty > semantic-diagnostics 1`] = `[]`; + +exports[`AlphaTexParameterTests > handler-validation > metadata > empty signature > empty 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,9) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -12,18 +18,18 @@ Score (1,1) -> (1,12) { }, arguments: Arguments (1,7) -> (1,9) { openParenthesis: LParen (1,7) -> (1,8), - arguments: Array [], + arguments: [], closeParenthesis: RParen (1,8) -> (1,9), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, }, ], - beats: Array [ + beats: [ Beat (1,10) -> (1,12) { notes: NoteList (1,10) -> (1,12) { - notes: Array [ + notes: [ Note (1,10) -> (1,12) { noteValue: Ident "C4" (1,10) -> (1,12), }, @@ -36,17 +42,17 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParameterTests handler-validation metadata empty signature empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > list > multi > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata empty signature empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > list > multi > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata empty signature empty: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > list > multi > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata list multi 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > list > multi 1`] = ` Score (1,1) -> (1,23) { - bars: Array [ + bars: [ Bar (1,1) -> (1,23) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,23) { tag: Tag "systemslayout" (1,1) -> (1,15) { prefix: Backslash (1,1) -> (1,2), @@ -54,7 +60,7 @@ Score (1,1) -> (1,23) { }, arguments: Arguments (1,16) -> (1,23) { openParenthesis: LParen (1,16) -> (1,17), - arguments: Array [ + arguments: [ Number "3" (1,17) -> (1,18) { parameterIndices: Map { 0 => 0, @@ -72,7 +78,7 @@ Score (1,1) -> (1,23) { }, ], closeParenthesis: RParen (1,22) -> (1,23), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -83,17 +89,17 @@ Score (1,1) -> (1,23) { } `; -exports[`AlphaTexParameterTests handler-validation metadata list multi: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > list > single > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata list multi: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > list > single > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata list multi: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > list > single > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata list single 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > list > single 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,19) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,19) { tag: Tag "systemslayout" (1,1) -> (1,15) { prefix: Backslash (1,1) -> (1,2), @@ -101,7 +107,7 @@ Score (1,1) -> (1,19) { }, arguments: Arguments (1,16) -> (1,19) { openParenthesis: LParen (1,16) -> (1,17), - arguments: Array [ + arguments: [ Number "3" (1,17) -> (1,18) { parameterIndices: Map { 0 => 0, @@ -109,7 +115,7 @@ Score (1,1) -> (1,19) { }, ], closeParenthesis: RParen (1,18) -> (1,19), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -120,17 +126,17 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParameterTests handler-validation metadata list single: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > multi > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata list single: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > multi > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata list single: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > multi > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads multi 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > multi 1`] = ` Score (1,1) -> (1,28) { - bars: Array [ + bars: [ Bar (1,1) -> (1,28) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,28) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -138,7 +144,7 @@ Score (1,1) -> (1,28) { }, arguments: Arguments (1,8) -> (1,28) { openParenthesis: LParen (1,8) -> (1,9), - arguments: Array [ + arguments: [ String "Name" (1,9) -> (1,14) { parameterIndices: Map { 0 => 0, @@ -151,7 +157,7 @@ Score (1,1) -> (1,28) { }, ], closeParenthesis: RParen (1,27) -> (1,28), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -162,17 +168,17 @@ Score (1,1) -> (1,28) { } `; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads multi: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > none > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads multi: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > none > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads multi: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > none > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads none 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > none 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,10) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -180,9 +186,9 @@ Score (1,1) -> (1,10) { }, arguments: Arguments (1,8) -> (1,10) { openParenthesis: LParen (1,8) -> (1,9), - arguments: Array [], + arguments: [], closeParenthesis: RParen (1,9) -> (1,10), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -193,17 +199,17 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads none: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > single > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads none: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > single > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads none: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > single > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads single 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > optional overloads > single 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,16) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,16) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -211,7 +217,7 @@ Score (1,1) -> (1,16) { }, arguments: Arguments (1,8) -> (1,16) { openParenthesis: LParen (1,8) -> (1,9), - arguments: Array [ + arguments: [ String "Name" (1,9) -> (1,14) { parameterIndices: Map { 0 => 0, @@ -219,7 +225,7 @@ Score (1,1) -> (1,16) { }, ], closeParenthesis: RParen (1,15) -> (1,16), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -230,17 +236,17 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads single: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > required overloads > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads single: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > required overloads > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata optional overloads single: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > required overloads > overload1 > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata required overloads overload1 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > required overloads > overload1 1`] = ` Score (1,1) -> (1,18) { - bars: Array [ + bars: [ Bar (1,1) -> (1,18) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,18) { tag: Tag "section" (1,1) -> (1,9) { prefix: Backslash (1,1) -> (1,2), @@ -248,7 +254,7 @@ Score (1,1) -> (1,18) { }, arguments: Arguments (1,10) -> (1,18) { openParenthesis: LParen (1,10) -> (1,11), - arguments: Array [ + arguments: [ String "Text" (1,11) -> (1,16) { parameterIndices: Map { 0 => 0, @@ -257,7 +263,7 @@ Score (1,1) -> (1,18) { }, ], closeParenthesis: RParen (1,17) -> (1,18), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, 1, ], @@ -269,17 +275,17 @@ Score (1,1) -> (1,18) { } `; -exports[`AlphaTexParameterTests handler-validation metadata required overloads overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > required overloads > overload2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata required overloads overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > required overloads > overload2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata required overloads overload1: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > required overloads > overload2 > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata required overloads overload2 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > required overloads > overload2 1`] = ` Score (1,1) -> (1,22) { - bars: Array [ + bars: [ Bar (1,1) -> (1,22) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,22) { tag: Tag "section" (1,1) -> (1,9) { prefix: Backslash (1,1) -> (1,2), @@ -287,7 +293,7 @@ Score (1,1) -> (1,22) { }, arguments: Arguments (1,10) -> (1,22) { openParenthesis: LParen (1,10) -> (1,11), - arguments: Array [ + arguments: [ String "T" (1,11) -> (1,13) { parameterIndices: Map { 0 => 0, @@ -301,7 +307,7 @@ Score (1,1) -> (1,22) { }, ], closeParenthesis: RParen (1,21) -> (1,22), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], }, @@ -312,17 +318,17 @@ Score (1,1) -> (1,22) { } `; -exports[`AlphaTexParameterTests handler-validation metadata required overloads overload2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > correct > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata required overloads overload2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > correct > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata required overloads overload2: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > correct > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload correct 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > correct 1`] = ` Score (1,1) -> (1,17) { - bars: Array [ + bars: [ Bar (1,1) -> (1,17) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -330,7 +336,7 @@ Score (1,1) -> (1,17) { }, arguments: Arguments (1,7) -> (1,14) { openParenthesis: LParen (1,7) -> (1,8), - arguments: Array [ + arguments: [ Ident "Segno" (1,8) -> (1,13) { parameterIndices: Map { 0 => 0, @@ -338,16 +344,16 @@ Score (1,1) -> (1,17) { }, ], closeParenthesis: RParen (1,13) -> (1,14), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, }, ], - beats: Array [ + beats: [ Beat (1,15) -> (1,17) { notes: NoteList (1,15) -> (1,17) { - notes: Array [ + notes: [ Note (1,15) -> (1,17) { noteValue: Ident "C4" (1,15) -> (1,17), }, @@ -360,17 +366,31 @@ Score (1,1) -> (1,17) { } `; -exports[`AlphaTexParameterTests handler-validation metadata single overload correct: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > missing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload correct: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > missing > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload correct: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > missing > semantic-diagnostics 1`] = ` +[ + Map { + "code" => 219, + "severity" => 2, + "message" => "Error parsing arguments: no overload matched arguments (). Signatures: +(Ident|String)", + "start" => Map { + "col" => 9, + "line" => 1, + "offset" => 8, + }, + }, +] +`; -exports[`AlphaTexParameterTests handler-validation metadata single overload missing 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > missing 1`] = ` Score (1,1) -> (1,13) { - bars: Array [ + bars: [ Bar (1,1) -> (1,13) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,9) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -378,9 +398,9 @@ Score (1,1) -> (1,13) { }, arguments: Arguments (1,7) -> (1,9) { openParenthesis: LParen (1,7) -> (1,8), - arguments: Array [], + arguments: [], closeParenthesis: RParen (1,8) -> (1,9), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -397,31 +417,31 @@ Score (1,1) -> (1,13) { } `; -exports[`AlphaTexParameterTests handler-validation metadata single overload missing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > wrong identifier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload missing: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > wrong identifier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload missing: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > wrong identifier > semantic-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, - "message" => "Error parsing arguments: no overload matched arguments (). Signatures: + "message" => "Error parsing arguments: no overload matched arguments (Ident). Signatures: (Ident|String)", "start" => Map { - "col" => 9, + "col" => 11, "line" => 1, - "offset" => 8, + "offset" => 10, }, }, ] `; -exports[`AlphaTexParameterTests handler-validation metadata single overload wrong identifier 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > wrong identifier 1`] = ` Score (1,1) -> (1,11) { - bars: Array [ + bars: [ Bar (1,1) -> (1,11) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,11) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -429,11 +449,11 @@ Score (1,1) -> (1,11) { }, arguments: Arguments (1,7) -> (1,11) { openParenthesis: LParen (1,7) -> (1,8), - arguments: Array [ + arguments: [ Ident "C4" (1,8) -> (1,10), ], closeParenthesis: RParen (1,10) -> (1,11), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -444,31 +464,31 @@ Score (1,1) -> (1,11) { } `; -exports[`AlphaTexParameterTests handler-validation metadata single overload wrong identifier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > wrong type > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload wrong identifier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > wrong type > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload wrong identifier: semantic-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > wrong type > semantic-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, - "message" => "Error parsing arguments: no overload matched arguments (Ident). Signatures: + "message" => "Error parsing arguments: no overload matched arguments (Number). Signatures: (Ident|String)", "start" => Map { - "col" => 11, + "col" => 10, "line" => 1, - "offset" => 10, + "offset" => 9, }, }, ] `; -exports[`AlphaTexParameterTests handler-validation metadata single overload wrong type 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > single overload > wrong type 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,10) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -476,11 +496,11 @@ Score (1,1) -> (1,10) { }, arguments: Arguments (1,7) -> (1,10) { openParenthesis: LParen (1,7) -> (1,8), - arguments: Array [ + arguments: [ Number "3" (1,8) -> (1,9), ], closeParenthesis: RParen (1,9) -> (1,10), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -491,31 +511,17 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests handler-validation metadata single overload wrong type: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload1-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload wrong type: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload1-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata single overload wrong type: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 219, - "severity" => 2, - "message" => "Error parsing arguments: no overload matched arguments (Number). Signatures: -(Ident|String)", - "start" => Map { - "col" => 10, - "line" => 1, - "offset" => 9, - }, - }, -] -`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload1-ident > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload1-ident 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload1-ident 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,1) -> (1,25) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,25) { tag: Tag "articulation" (1,1) -> (1,14) { prefix: Backslash (1,1) -> (1,2), @@ -523,7 +529,7 @@ Score (1,1) -> (1,25) { }, arguments: Arguments (1,15) -> (1,25) { openParenthesis: LParen (1,15) -> (1,16), - arguments: Array [ + arguments: [ Ident "defaults" (1,16) -> (1,24) { parameterIndices: Map { 0 => 0, @@ -532,7 +538,7 @@ Score (1,1) -> (1,25) { }, ], closeParenthesis: RParen (1,24) -> (1,25), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, 1, ], @@ -544,17 +550,17 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload1-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload2-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload1-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload2-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload1-ident: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload2-ident > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload2-ident 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload2-ident 1`] = ` Score (1,1) -> (1,21) { - bars: Array [ + bars: [ Bar (1,1) -> (1,21) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,21) { tag: Tag "articulation" (1,1) -> (1,14) { prefix: Backslash (1,1) -> (1,2), @@ -562,7 +568,7 @@ Score (1,1) -> (1,21) { }, arguments: Arguments (1,15) -> (1,21) { openParenthesis: LParen (1,15) -> (1,16), - arguments: Array [ + arguments: [ Ident "A" (1,16) -> (1,17) { parameterIndices: Map { 1 => 0, @@ -575,7 +581,7 @@ Score (1,1) -> (1,21) { }, ], closeParenthesis: RParen (1,20) -> (1,21), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], }, @@ -586,17 +592,17 @@ Score (1,1) -> (1,21) { } `; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload2-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload2-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload2-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload2-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload2-ident: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload2-string > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload2-string 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > type overloads > overload2-string 1`] = ` Score (1,1) -> (1,23) { - bars: Array [ + bars: [ Bar (1,1) -> (1,23) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,23) { tag: Tag "articulation" (1,1) -> (1,14) { prefix: Backslash (1,1) -> (1,2), @@ -604,7 +610,7 @@ Score (1,1) -> (1,23) { }, arguments: Arguments (1,15) -> (1,23) { openParenthesis: LParen (1,15) -> (1,16), - arguments: Array [ + arguments: [ String "A" (1,16) -> (1,18) { parameterIndices: Map { 1 => 0, @@ -617,7 +623,7 @@ Score (1,1) -> (1,23) { }, ], closeParenthesis: RParen (1,22) -> (1,23), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], }, @@ -628,17 +634,17 @@ Score (1,1) -> (1,23) { } `; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload2-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > value overloads > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload2-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > value overloads > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata type overloads overload2-string: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > value overloads > overload1 > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata value overloads overload1 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > value overloads > overload1 1`] = ` Score (1,1) -> (1,13) { - bars: Array [ + bars: [ Bar (1,1) -> (1,13) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,13) { tag: Tag "ts" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), @@ -646,7 +652,7 @@ Score (1,1) -> (1,13) { }, arguments: Arguments (1,5) -> (1,13) { openParenthesis: LParen (1,5) -> (1,6), - arguments: Array [ + arguments: [ Ident "common" (1,6) -> (1,12) { parameterIndices: Map { 0 => 0, @@ -654,7 +660,7 @@ Score (1,1) -> (1,13) { }, ], closeParenthesis: RParen (1,12) -> (1,13), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -665,17 +671,17 @@ Score (1,1) -> (1,13) { } `; -exports[`AlphaTexParameterTests handler-validation metadata value overloads overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > value overloads > overload2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata value overloads overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > value overloads > overload2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata value overloads overload1: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > metadata > value overloads > overload2 > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata value overloads overload2 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > metadata > value overloads > overload2 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,10) { tag: Tag "ts" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), @@ -683,7 +689,7 @@ Score (1,1) -> (1,10) { }, arguments: Arguments (1,5) -> (1,10) { openParenthesis: LParen (1,5) -> (1,6), - arguments: Array [ + arguments: [ Number "3" (1,6) -> (1,7) { parameterIndices: Map { 1 => 0, @@ -696,7 +702,7 @@ Score (1,1) -> (1,10) { }, ], closeParenthesis: RParen (1,9) -> (1,10), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], }, @@ -707,30 +713,30 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests handler-validation metadata value overloads overload2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > ambiguous > incomplete > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata value overloads overload2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > ambiguous > incomplete > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation metadata value overloads overload2: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > ambiguous > incomplete > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props ambiguous incomplete 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > ambiguous > incomplete 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - beats: Array [ + beats: [ Beat (1,1) -> (1,14) { notes: NoteList (1,1) -> (1,14) { - notes: Array [ + notes: [ Note (1,1) -> (1,14) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,14) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,12) { property: Ident "tu" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,12) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ Number "3" (1,10) -> (1,11) { parameterIndices: Map { 0 => 0, @@ -739,7 +745,7 @@ Score (1,1) -> (1,14) { }, ], closeParenthesis: RParen (1,11) -> (1,12), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, 1, ], @@ -758,30 +764,30 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParameterTests handler-validation props ambiguous incomplete: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > empty signature > empty1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props ambiguous incomplete: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > empty signature > empty1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props ambiguous incomplete: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > empty signature > empty1 > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props empty signature empty1 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > empty signature > empty1 1`] = ` Score (1,1) -> (1,9) { - bars: Array [ + bars: [ Bar (1,1) -> (1,9) { - beats: Array [ + beats: [ Beat (1,1) -> (1,9) { notes: NoteList (1,1) -> (1,9) { - notes: Array [ + notes: [ Note (1,1) -> (1,9) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,9) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,8) { property: Ident "v" (1,5) -> (1,6), properties: Arguments (1,6) -> (1,8) { openParenthesis: LParen (1,6) -> (1,7), - arguments: Array [], + arguments: [], closeParenthesis: RParen (1,7) -> (1,8), }, }, @@ -798,30 +804,30 @@ Score (1,1) -> (1,9) { } `; -exports[`AlphaTexParameterTests handler-validation props empty signature empty1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > empty signature > empty2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props empty signature empty1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > empty signature > empty2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props empty signature empty1: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > empty signature > empty2 > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props empty signature empty2 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > empty signature > empty2 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - beats: Array [ + beats: [ Beat (1,1) -> (1,12) { notes: NoteList (1,1) -> (1,12) { - notes: Array [ + notes: [ Note (1,1) -> (1,12) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,12) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,8) { property: Ident "v" (1,5) -> (1,6), properties: Arguments (1,6) -> (1,8) { openParenthesis: LParen (1,6) -> (1,7), - arguments: Array [], + arguments: [], closeParenthesis: RParen (1,7) -> (1,8), }, }, @@ -841,30 +847,30 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParameterTests handler-validation props empty signature empty2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > correct > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props empty signature empty2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > correct > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props empty signature empty2: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > correct > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload correct 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > correct 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - beats: Array [ + beats: [ Beat (1,1) -> (1,14) { notes: NoteList (1,1) -> (1,14) { - notes: Array [ + notes: [ Note (1,1) -> (1,14) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,14) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,13) { property: Ident "ad" (1,5) -> (1,7), properties: Arguments (1,8) -> (1,13) { openParenthesis: LParen (1,8) -> (1,9), - arguments: Array [ + arguments: [ Number "100" (1,9) -> (1,12) { parameterIndices: Map { 0 => 0, @@ -872,7 +878,7 @@ Score (1,1) -> (1,14) { }, ], closeParenthesis: RParen (1,12) -> (1,13), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -890,32 +896,32 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParameterTests handler-validation props optional overload correct: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > missing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload correct: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > missing > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload correct: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > missing > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload missing 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > missing 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - beats: Array [ + beats: [ Beat (1,1) -> (1,10) { notes: NoteList (1,1) -> (1,10) { - notes: Array [ + notes: [ Note (1,1) -> (1,10) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,10) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,9) { property: Ident "ad" (1,5) -> (1,7), properties: Arguments (1,7) -> (1,9) { openParenthesis: LParen (1,7) -> (1,8), - arguments: Array [], + arguments: [], closeParenthesis: RParen (1,8) -> (1,9), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -933,34 +939,48 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests handler-validation props optional overload missing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > wrong identifier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload missing: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > wrong identifier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload missing: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > wrong identifier > semantic-diagnostics 1`] = ` +[ + Map { + "code" => 219, + "severity" => 2, + "message" => "Error parsing arguments: no overload matched arguments (Ident). Signatures: +(Ident|String)", + "start" => Map { + "col" => 19, + "line" => 1, + "offset" => 18, + }, + }, +] +`; -exports[`AlphaTexParameterTests handler-validation props optional overload wrong identifier 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > wrong identifier 1`] = ` Score (1,1) -> (1,20) { - bars: Array [ + bars: [ Bar (1,1) -> (1,20) { - beats: Array [ + beats: [ Beat (1,1) -> (1,20) { notes: NoteList (1,1) -> (1,20) { - notes: Array [ + notes: [ Note (1,1) -> (1,20) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,20) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,19) { property: Ident "beam" (1,5) -> (1,9), properties: Arguments (1,10) -> (1,19) { openParenthesis: LParen (1,10) -> (1,11), - arguments: Array [ + arguments: [ Ident "invalid" (1,11) -> (1,18), ], closeParenthesis: RParen (1,18) -> (1,19), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -978,48 +998,34 @@ Score (1,1) -> (1,20) { } `; -exports[`AlphaTexParameterTests handler-validation props optional overload wrong identifier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > wrong type > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload wrong identifier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > wrong type > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload wrong identifier: semantic-diagnostics 1`] = ` -Array [ - Map { - "code" => 219, - "severity" => 2, - "message" => "Error parsing arguments: no overload matched arguments (Ident). Signatures: -(Ident|String)", - "start" => Map { - "col" => 19, - "line" => 1, - "offset" => 18, - }, - }, -] -`; +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > wrong type > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload wrong type 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > optional overload > wrong type 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - beats: Array [ + beats: [ Beat (1,1) -> (1,14) { notes: NoteList (1,1) -> (1,14) { - notes: Array [ + notes: [ Note (1,1) -> (1,14) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,14) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,13) { property: Ident "ad" (1,5) -> (1,7), properties: Arguments (1,8) -> (1,13) { openParenthesis: LParen (1,8) -> (1,9), - arguments: Array [ + arguments: [ String "1" (1,9) -> (1,11), ], closeParenthesis: RParen (1,12) -> (1,13), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -1037,17 +1043,17 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParameterTests handler-validation props optional overload wrong type: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload1-number > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload wrong type: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload1-number > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props optional overload wrong type: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload1-number > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload1-number 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload1-number 1`] = ` Score (1,1) -> (1,27) { - bars: Array [ + bars: [ Bar (1,1) -> (1,27) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,27) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -1055,12 +1061,12 @@ Score (1,1) -> (1,27) { }, properties: Props (1,8) -> (1,27) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,25) { property: Ident "instrument" (1,10) -> (1,20), properties: Arguments (1,21) -> (1,25) { openParenthesis: LParen (1,21) -> (1,22), - arguments: Array [ + arguments: [ Number "20" (1,22) -> (1,24) { parameterIndices: Map { 0 => 0, @@ -1068,7 +1074,7 @@ Score (1,1) -> (1,27) { }, ], closeParenthesis: RParen (1,24) -> (1,25), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -1083,17 +1089,17 @@ Score (1,1) -> (1,27) { } `; -exports[`AlphaTexParameterTests handler-validation props type overloads overload1-number: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload2-identifier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload1-number: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload2-identifier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload1-number: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload2-identifier > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload2-identifier 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload2-identifier 1`] = ` Score (1,1) -> (1,43) { - bars: Array [ + bars: [ Bar (1,1) -> (1,43) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,43) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -1101,12 +1107,12 @@ Score (1,1) -> (1,43) { }, properties: Props (1,8) -> (1,43) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,41) { property: Ident "instrument" (1,10) -> (1,20), properties: Arguments (1,21) -> (1,41) { openParenthesis: LParen (1,21) -> (1,22), - arguments: Array [ + arguments: [ Ident "AcousticGrandPiano" (1,22) -> (1,40) { parameterIndices: Map { 1 => 0, @@ -1114,7 +1120,7 @@ Score (1,1) -> (1,43) { }, ], closeParenthesis: RParen (1,40) -> (1,41), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], }, @@ -1129,17 +1135,17 @@ Score (1,1) -> (1,43) { } `; -exports[`AlphaTexParameterTests handler-validation props type overloads overload2-identifier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload2-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload2-identifier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload2-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload2-identifier: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload2-string > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload2-string 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload2-string 1`] = ` Score (1,1) -> (1,46) { - bars: Array [ + bars: [ Bar (1,1) -> (1,46) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,46) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -1147,12 +1153,12 @@ Score (1,1) -> (1,46) { }, properties: Props (1,8) -> (1,46) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,45) { property: Ident "instrument" (1,10) -> (1,20), properties: Arguments (1,21) -> (1,45) { openParenthesis: LParen (1,21) -> (1,22), - arguments: Array [ + arguments: [ String "Acoustic Grand Piano" (1,22) -> (1,43) { parameterIndices: Map { 1 => 0, @@ -1160,7 +1166,7 @@ Score (1,1) -> (1,46) { }, ], closeParenthesis: RParen (1,44) -> (1,45), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], }, @@ -1175,17 +1181,17 @@ Score (1,1) -> (1,46) { } `; -exports[`AlphaTexParameterTests handler-validation props type overloads overload2-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload3-percussion > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload2-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload3-percussion > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload2-string: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload3-percussion > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload3-percussion 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > type overloads > overload3-percussion 1`] = ` Score (1,1) -> (1,35) { - bars: Array [ + bars: [ Bar (1,1) -> (1,35) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,35) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -1193,12 +1199,12 @@ Score (1,1) -> (1,35) { }, properties: Props (1,8) -> (1,35) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,33) { property: Ident "instrument" (1,10) -> (1,20), properties: Arguments (1,21) -> (1,33) { openParenthesis: LParen (1,21) -> (1,22), - arguments: Array [ + arguments: [ Ident "percussion" (1,22) -> (1,32) { parameterIndices: Map { 1 => 0, @@ -1207,7 +1213,7 @@ Score (1,1) -> (1,35) { }, ], closeParenthesis: RParen (1,32) -> (1,33), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, 1, ], @@ -1223,30 +1229,30 @@ Score (1,1) -> (1,35) { } `; -exports[`AlphaTexParameterTests handler-validation props type overloads overload3-percussion: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload3-percussion: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props type overloads overload3-percussion: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload1 > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload1 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload1 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,16) { - beats: Array [ + beats: [ Beat (1,1) -> (1,16) { notes: NoteList (1,1) -> (1,16) { - notes: Array [ + notes: [ Note (1,1) -> (1,16) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,16) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,14) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,14) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ Number "0" (1,10) -> (1,11) { parameterIndices: Map { 0 => 0, @@ -1259,7 +1265,7 @@ Score (1,1) -> (1,16) { }, ], closeParenthesis: RParen (1,13) -> (1,14), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -1277,30 +1283,30 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload2-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload2-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload1: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload2-ident > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload2-ident 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload2-ident 1`] = ` Score (1,1) -> (1,23) { - bars: Array [ + bars: [ Bar (1,1) -> (1,23) { - beats: Array [ + beats: [ Beat (1,1) -> (1,23) { notes: NoteList (1,1) -> (1,23) { - notes: Array [ + notes: [ Note (1,1) -> (1,23) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,23) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,21) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,21) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ Ident "custom" (1,10) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -1319,7 +1325,7 @@ Score (1,1) -> (1,23) { }, ], closeParenthesis: RParen (1,20) -> (1,21), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], }, @@ -1337,30 +1343,30 @@ Score (1,1) -> (1,23) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload2-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload2-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload2-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload2-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload2-ident: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload2-string > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload2-string 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload2-string 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,1) -> (1,25) { - beats: Array [ + beats: [ Beat (1,1) -> (1,25) { notes: NoteList (1,1) -> (1,25) { - notes: Array [ + notes: [ Note (1,1) -> (1,25) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,25) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,23) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,23) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ String "custom" (1,10) -> (1,17) { parameterIndices: Map { 1 => 0, @@ -1379,7 +1385,7 @@ Score (1,1) -> (1,25) { }, ], closeParenthesis: RParen (1,22) -> (1,23), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], }, @@ -1397,30 +1403,30 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload2-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload3-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload2-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload3-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload2-string: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload3-ident > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload3-ident 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload3-ident 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - beats: Array [ + beats: [ Beat (1,1) -> (1,24) { notes: NoteList (1,1) -> (1,24) { - notes: Array [ + notes: [ Note (1,1) -> (1,24) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,24) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,22) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,22) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ Ident "gradual" (1,10) -> (1,17) { parameterIndices: Map { 2 => 0, @@ -1438,7 +1444,7 @@ Score (1,1) -> (1,24) { }, ], closeParenthesis: RParen (1,21) -> (1,22), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, ], }, @@ -1456,30 +1462,30 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload3-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload3-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload3-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload3-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload3-ident: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload3-string > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload3-string 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload3-string 1`] = ` Score (1,1) -> (1,26) { - bars: Array [ + bars: [ Bar (1,1) -> (1,26) { - beats: Array [ + beats: [ Beat (1,1) -> (1,26) { notes: NoteList (1,1) -> (1,26) { - notes: Array [ + notes: [ Note (1,1) -> (1,26) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,26) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,24) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,24) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ String "gradual" (1,10) -> (1,18) { parameterIndices: Map { 2 => 0, @@ -1497,7 +1503,7 @@ Score (1,1) -> (1,26) { }, ], closeParenthesis: RParen (1,23) -> (1,24), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, ], }, @@ -1515,30 +1521,30 @@ Score (1,1) -> (1,26) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload3-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload4-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload3-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload4-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload3-string: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload4-ident > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload4-ident 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload4-ident 1`] = ` Score (1,1) -> (1,31) { - bars: Array [ + bars: [ Bar (1,1) -> (1,31) { - beats: Array [ + beats: [ Beat (1,1) -> (1,31) { notes: NoteList (1,1) -> (1,31) { - notes: Array [ + notes: [ Note (1,1) -> (1,31) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,31) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,29) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,29) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ Ident "custom" (1,10) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -1562,7 +1568,7 @@ Score (1,1) -> (1,31) { }, ], closeParenthesis: RParen (1,28) -> (1,29), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 3, ], }, @@ -1580,30 +1586,30 @@ Score (1,1) -> (1,31) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload4-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload4-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload4-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload4-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload4-ident: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload4-string > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload4-string 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > flat > overload4-string 1`] = ` Score (1,1) -> (1,35) { - bars: Array [ + bars: [ Bar (1,1) -> (1,35) { - beats: Array [ + beats: [ Beat (1,1) -> (1,35) { notes: NoteList (1,1) -> (1,35) { - notes: Array [ + notes: [ Note (1,1) -> (1,35) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,35) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,33) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,33) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ String "custom" (1,10) -> (1,17) { parameterIndices: Map { 1 => 0, @@ -1627,7 +1633,7 @@ Score (1,1) -> (1,35) { }, ], closeParenthesis: RParen (1,32) -> (1,33), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 3, ], }, @@ -1645,30 +1651,30 @@ Score (1,1) -> (1,35) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload4-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload4-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads flat overload4-string: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload1 > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload1 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload1 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,16) { - beats: Array [ + beats: [ Beat (1,1) -> (1,16) { notes: NoteList (1,1) -> (1,16) { - notes: Array [ + notes: [ Note (1,1) -> (1,16) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,16) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,14) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,14) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ Number "0" (1,10) -> (1,11) { parameterIndices: Map { 0 => 0, @@ -1681,7 +1687,7 @@ Score (1,1) -> (1,16) { }, ], closeParenthesis: RParen (1,13) -> (1,14), - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -1699,29 +1705,29 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload2-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload2-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload1: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload2-ident > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload2-ident 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload2-ident 1`] = ` Score (1,1) -> (1,23) { - bars: Array [ + bars: [ Bar (1,1) -> (1,23) { - beats: Array [ + beats: [ Beat (1,1) -> (1,23) { notes: NoteList (1,1) -> (1,23) { - notes: Array [ + notes: [ Note (1,1) -> (1,23) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,23) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,21) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,21) { - arguments: Array [ + arguments: [ Ident "custom" (1,9) -> (1,15) { parameterIndices: Map { 1 => 0, @@ -1739,7 +1745,7 @@ Score (1,1) -> (1,23) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -1758,29 +1764,29 @@ Score (1,1) -> (1,23) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload2-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload2-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload2-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload2-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload2-ident: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload2-string > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload2-string 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload2-string 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,1) -> (1,25) { - beats: Array [ + beats: [ Beat (1,1) -> (1,25) { notes: NoteList (1,1) -> (1,25) { - notes: Array [ + notes: [ Note (1,1) -> (1,25) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,25) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,23) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,23) { - arguments: Array [ + arguments: [ String "custom" (1,9) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -1798,7 +1804,7 @@ Score (1,1) -> (1,25) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -1817,29 +1823,29 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload2-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload3-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload2-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload3-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload2-string: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload3-ident > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload3-ident 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload3-ident 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - beats: Array [ + beats: [ Beat (1,1) -> (1,24) { notes: NoteList (1,1) -> (1,24) { - notes: Array [ + notes: [ Note (1,1) -> (1,24) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,24) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,22) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,22) { - arguments: Array [ + arguments: [ Ident "gradual" (1,9) -> (1,16) { parameterIndices: Map { 2 => 0, @@ -1856,7 +1862,7 @@ Score (1,1) -> (1,24) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, ], validated: true, @@ -1875,29 +1881,29 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload3-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload3-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload3-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload3-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload3-ident: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload3-string > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload3-string 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload3-string 1`] = ` Score (1,1) -> (1,26) { - bars: Array [ + bars: [ Bar (1,1) -> (1,26) { - beats: Array [ + beats: [ Beat (1,1) -> (1,26) { notes: NoteList (1,1) -> (1,26) { - notes: Array [ + notes: [ Note (1,1) -> (1,26) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,26) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,24) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,24) { - arguments: Array [ + arguments: [ String "gradual" (1,9) -> (1,17) { parameterIndices: Map { 2 => 0, @@ -1914,7 +1920,7 @@ Score (1,1) -> (1,26) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, ], validated: true, @@ -1933,29 +1939,29 @@ Score (1,1) -> (1,26) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload3-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload4-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload3-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload4-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload3-string: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload4-ident > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload4-ident 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload4-ident 1`] = ` Score (1,1) -> (1,31) { - bars: Array [ + bars: [ Bar (1,1) -> (1,31) { - beats: Array [ + beats: [ Beat (1,1) -> (1,31) { notes: NoteList (1,1) -> (1,31) { - notes: Array [ + notes: [ Note (1,1) -> (1,31) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,31) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,29) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,29) { - arguments: Array [ + arguments: [ Ident "custom" (1,9) -> (1,15) { parameterIndices: Map { 1 => 0, @@ -1978,7 +1984,7 @@ Score (1,1) -> (1,31) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 3, ], validated: true, @@ -1997,29 +2003,29 @@ Score (1,1) -> (1,31) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload4-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload4-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload4-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload4-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload4-ident: semantic-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload4-string > semantic-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload4-string 1`] = ` +exports[`AlphaTexParameterTests > handler-validation > props > vararg overloads > parenthesis > overload4-string 1`] = ` Score (1,1) -> (1,35) { - bars: Array [ + bars: [ Bar (1,1) -> (1,35) { - beats: Array [ + beats: [ Beat (1,1) -> (1,35) { notes: NoteList (1,1) -> (1,35) { - notes: Array [ + notes: [ Note (1,1) -> (1,35) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,35) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,33) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,33) { - arguments: Array [ + arguments: [ String "custom" (1,9) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -2042,7 +2048,7 @@ Score (1,1) -> (1,35) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 3, ], validated: true, @@ -2061,17 +2067,15 @@ Score (1,1) -> (1,35) { } `; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload4-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > empty signature > empty1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload4-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > empty signature > empty1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests handler-validation props vararg overloads parenthesis overload4-string: semantic-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParameterTests parser metadata empty signature empty1 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > empty signature > empty1 1`] = ` Score (1,1) -> (1,7) { - bars: Array [ + bars: [ Bar (1,1) -> (1,7) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,4) { tag: Tag "ac" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), @@ -2079,10 +2083,10 @@ Score (1,1) -> (1,7) { }, }, ], - beats: Array [ + beats: [ Beat (1,5) -> (1,7) { notes: NoteList (1,5) -> (1,7) { - notes: Array [ + notes: [ Note (1,5) -> (1,7) { noteValue: Ident "C4" (1,5) -> (1,7), }, @@ -2095,15 +2099,15 @@ Score (1,1) -> (1,7) { } `; -exports[`AlphaTexParameterTests parser metadata empty signature empty1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > empty signature > empty2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata empty signature empty1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > empty signature > empty2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata empty signature empty2 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > empty signature > empty2 1`] = ` Score (1,1) -> (1,11) { - bars: Array [ + bars: [ Bar (1,1) -> (1,11) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,4) { tag: Tag "ac" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), @@ -2117,10 +2121,10 @@ Score (1,1) -> (1,11) { }, }, ], - beats: Array [ + beats: [ Beat (1,9) -> (1,11) { notes: NoteList (1,9) -> (1,11) { - notes: Array [ + notes: [ Note (1,9) -> (1,11) { noteValue: Ident "C4" (1,9) -> (1,11), }, @@ -2133,22 +2137,22 @@ Score (1,1) -> (1,11) { } `; -exports[`AlphaTexParameterTests parser metadata empty signature empty2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > list > multi > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata empty signature empty2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > list > multi > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata list multi 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > list > multi 1`] = ` Score (1,1) -> (1,21) { - bars: Array [ + bars: [ Bar (1,1) -> (1,21) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,21) { tag: Tag "systemslayout" (1,1) -> (1,15) { prefix: Backslash (1,1) -> (1,2), tag: Ident "systemslayout" (1,2) -> (1,15), }, arguments: Arguments (1,16) -> (1,21) { - arguments: Array [ + arguments: [ Number "3" (1,16) -> (1,17) { parameterIndices: Map { 0 => 0, @@ -2165,7 +2169,7 @@ Score (1,1) -> (1,21) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2177,29 +2181,29 @@ Score (1,1) -> (1,21) { } `; -exports[`AlphaTexParameterTests parser metadata list multi: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > list > single > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata list multi: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > list > single > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata list single 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > list > single 1`] = ` Score (1,1) -> (1,17) { - bars: Array [ + bars: [ Bar (1,1) -> (1,17) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,17) { tag: Tag "systemslayout" (1,1) -> (1,15) { prefix: Backslash (1,1) -> (1,2), tag: Ident "systemslayout" (1,2) -> (1,15), }, arguments: Arguments (1,16) -> (1,17) { - arguments: Array [ + arguments: [ Number "3" (1,16) -> (1,17) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2211,39 +2215,39 @@ Score (1,1) -> (1,17) { } `; -exports[`AlphaTexParameterTests parser metadata list single: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > list > switch to note > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata list single: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > list > switch to note > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata list switch to note 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > list > switch to note 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,6) { tag: Tag "ae" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), tag: Ident "ae" (1,2) -> (1,4), }, arguments: Arguments (1,5) -> (1,6) { - arguments: Array [ + arguments: [ Number "1" (1,5) -> (1,6) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,7) -> (1,10) { notes: NoteList (1,7) -> (1,10) { - notes: Array [ + notes: [ Note (1,7) -> (1,10) { noteValue: Number "1" (1,7) -> (1,8), noteStringDot: Dot (1,8) -> (1,9), @@ -2258,22 +2262,22 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests parser metadata list switch to note: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > multi > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata list switch to note: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > multi > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata optional overloads multi 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > multi 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,1) -> (1,25) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,25) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "track" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,25) { - arguments: Array [ + arguments: [ String "Name" (1,8) -> (1,13) { parameterIndices: Map { 0 => 0, @@ -2285,7 +2289,7 @@ Score (1,1) -> (1,25) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2297,15 +2301,15 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParameterTests parser metadata optional overloads multi: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > none > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata optional overloads multi: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > none > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata optional overloads none 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > none 1`] = ` Score (1,1) -> (1,7) { - bars: Array [ + bars: [ Bar (1,1) -> (1,7) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,7) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -2318,29 +2322,29 @@ Score (1,1) -> (1,7) { } `; -exports[`AlphaTexParameterTests parser metadata optional overloads none: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > single > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata optional overloads none: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > single > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata optional overloads single 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > optional overloads > single 1`] = ` Score (1,1) -> (1,13) { - bars: Array [ + bars: [ Bar (1,1) -> (1,13) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,13) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "track" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,13) { - arguments: Array [ + arguments: [ String "Name" (1,8) -> (1,13) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2352,22 +2356,22 @@ Score (1,1) -> (1,13) { } `; -exports[`AlphaTexParameterTests parser metadata optional overloads single: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > required overloads > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata optional overloads single: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > required overloads > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata required overloads overload1 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > required overloads > overload1 1`] = ` Score (1,1) -> (1,15) { - bars: Array [ + bars: [ Bar (1,1) -> (1,15) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,15) { tag: Tag "section" (1,1) -> (1,9) { prefix: Backslash (1,1) -> (1,2), tag: Ident "section" (1,2) -> (1,9), }, arguments: Arguments (1,10) -> (1,15) { - arguments: Array [ + arguments: [ String "Text" (1,10) -> (1,15) { parameterIndices: Map { 0 => 0, @@ -2375,7 +2379,7 @@ Score (1,1) -> (1,15) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, 1, ], @@ -2388,22 +2392,22 @@ Score (1,1) -> (1,15) { } `; -exports[`AlphaTexParameterTests parser metadata required overloads overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > required overloads > overload2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata required overloads overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > required overloads > overload2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata required overloads overload2 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > required overloads > overload2 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,19) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,19) { tag: Tag "section" (1,1) -> (1,9) { prefix: Backslash (1,1) -> (1,2), tag: Ident "section" (1,2) -> (1,9), }, arguments: Arguments (1,10) -> (1,19) { - arguments: Array [ + arguments: [ String "T" (1,10) -> (1,12) { parameterIndices: Map { 0 => 0, @@ -2416,7 +2420,7 @@ Score (1,1) -> (1,19) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -2428,39 +2432,39 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParameterTests parser metadata required overloads overload2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > single overload > correct > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata required overloads overload2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > single overload > correct > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata single overload correct 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > single overload > correct 1`] = ` Score (1,1) -> (1,15) { - bars: Array [ + bars: [ Bar (1,1) -> (1,15) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,12) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), tag: Ident "jump" (1,2) -> (1,6), }, arguments: Arguments (1,7) -> (1,12) { - arguments: Array [ + arguments: [ Ident "Segno" (1,7) -> (1,12) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,13) -> (1,15) { notes: NoteList (1,13) -> (1,15) { - notes: Array [ + notes: [ Note (1,13) -> (1,15) { noteValue: Ident "C4" (1,13) -> (1,15), }, @@ -2473,15 +2477,29 @@ Score (1,1) -> (1,15) { } `; -exports[`AlphaTexParameterTests parser metadata single overload correct: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > single overload > missing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata single overload correct: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > single overload > missing > parser-diagnostics 1`] = ` +[ + Map { + "code" => 219, + "severity" => 2, + "message" => "Error parsing arguments: no overload matched arguments (). Signatures: +(Ident|String)", + "start" => Map { + "col" => 6, + "line" => 1, + "offset" => 5, + }, + }, +] +`; -exports[`AlphaTexParameterTests parser metadata single overload missing 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > single overload > missing 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,6) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -2500,10 +2518,10 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests parser metadata single overload missing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > single overload > wrong identifier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata single overload missing: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParameterTests > parser > metadata > single overload > wrong identifier > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -2518,11 +2536,11 @@ Array [ ] `; -exports[`AlphaTexParameterTests parser metadata single overload wrong identifier 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > single overload > wrong identifier 1`] = ` Score (1,1) -> (1,9) { - bars: Array [ + bars: [ Bar (1,1) -> (1,9) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,6) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -2530,10 +2548,10 @@ Score (1,1) -> (1,9) { }, }, ], - beats: Array [ + beats: [ Beat (1,7) -> (1,9) { notes: NoteList (1,7) -> (1,9) { - notes: Array [ + notes: [ Note (1,7) -> (1,9) { noteValue: Ident "C4" (1,7) -> (1,9), }, @@ -2546,10 +2564,10 @@ Score (1,1) -> (1,9) { } `; -exports[`AlphaTexParameterTests parser metadata single overload wrong identifier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > single overload > wrong type > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata single overload wrong identifier: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParameterTests > parser > metadata > single overload > wrong type > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -2564,11 +2582,11 @@ Array [ ] `; -exports[`AlphaTexParameterTests parser metadata single overload wrong type 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > single overload > wrong type 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,6) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -2576,10 +2594,10 @@ Score (1,1) -> (1,10) { }, }, ], - beats: Array [ + beats: [ Beat (1,7) -> (1,10) { notes: NoteList (1,7) -> (1,10) { - notes: Array [ + notes: [ Note (1,7) -> (1,10) { noteValue: Number "3" (1,7) -> (1,8), noteStringDot: Dot (1,8) -> (1,9), @@ -2594,36 +2612,22 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests parser metadata single overload wrong type: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata single overload wrong type: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 219, - "severity" => 2, - "message" => "Error parsing arguments: no overload matched arguments (). Signatures: -(Ident|String)", - "start" => Map { - "col" => 6, - "line" => 1, - "offset" => 5, - }, - }, -] -`; +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata type overloads overload1 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload1 1`] = ` Score (1,1) -> (1,23) { - bars: Array [ + bars: [ Bar (1,1) -> (1,23) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,23) { tag: Tag "articulation" (1,1) -> (1,14) { prefix: Backslash (1,1) -> (1,2), tag: Ident "articulation" (1,2) -> (1,14), }, arguments: Arguments (1,15) -> (1,23) { - arguments: Array [ + arguments: [ Ident "defaults" (1,15) -> (1,23) { parameterIndices: Map { 0 => 0, @@ -2631,7 +2635,7 @@ Score (1,1) -> (1,23) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, 1, ], @@ -2644,22 +2648,22 @@ Score (1,1) -> (1,23) { } `; -exports[`AlphaTexParameterTests parser metadata type overloads overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata type overloads overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata type overloads overload2 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload2 1`] = ` Score (1,1) -> (1,20) { - bars: Array [ + bars: [ Bar (1,1) -> (1,20) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,20) { tag: Tag "articulation" (1,1) -> (1,14) { prefix: Backslash (1,1) -> (1,2), tag: Ident "articulation" (1,2) -> (1,14), }, arguments: Arguments (1,15) -> (1,20) { - arguments: Array [ + arguments: [ String "A" (1,15) -> (1,17) { parameterIndices: Map { 1 => 0, @@ -2671,7 +2675,7 @@ Score (1,1) -> (1,20) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -2683,22 +2687,22 @@ Score (1,1) -> (1,20) { } `; -exports[`AlphaTexParameterTests parser metadata type overloads overload2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload3 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata type overloads overload2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload3 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata type overloads overload3 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > type overloads > overload3 1`] = ` Score (1,1) -> (1,18) { - bars: Array [ + bars: [ Bar (1,1) -> (1,18) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,18) { tag: Tag "articulation" (1,1) -> (1,14) { prefix: Backslash (1,1) -> (1,2), tag: Ident "articulation" (1,2) -> (1,14), }, arguments: Arguments (1,15) -> (1,18) { - arguments: Array [ + arguments: [ Ident "A" (1,15) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -2710,7 +2714,7 @@ Score (1,1) -> (1,18) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -2722,29 +2726,29 @@ Score (1,1) -> (1,18) { } `; -exports[`AlphaTexParameterTests parser metadata type overloads overload3: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > value overloads > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata type overloads overload3: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > value overloads > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata value overloads overload1 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > value overloads > overload1 1`] = ` Score (1,1) -> (1,11) { - bars: Array [ + bars: [ Bar (1,1) -> (1,11) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,11) { tag: Tag "ts" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), tag: Ident "ts" (1,2) -> (1,4), }, arguments: Arguments (1,5) -> (1,11) { - arguments: Array [ + arguments: [ Ident "common" (1,5) -> (1,11) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2756,22 +2760,22 @@ Score (1,1) -> (1,11) { } `; -exports[`AlphaTexParameterTests parser metadata value overloads overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > value overloads > overload2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata value overloads overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > metadata > value overloads > overload2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata value overloads overload2 1`] = ` +exports[`AlphaTexParameterTests > parser > metadata > value overloads > overload2 1`] = ` Score (1,1) -> (1,8) { - bars: Array [ + bars: [ Bar (1,1) -> (1,8) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,8) { tag: Tag "ts" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), tag: Ident "ts" (1,2) -> (1,4), }, arguments: Arguments (1,5) -> (1,8) { - arguments: Array [ + arguments: [ Number "3" (1,5) -> (1,6) { parameterIndices: Map { 1 => 0, @@ -2783,7 +2787,7 @@ Score (1,1) -> (1,8) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -2795,27 +2799,27 @@ Score (1,1) -> (1,8) { } `; -exports[`AlphaTexParameterTests parser metadata value overloads overload2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > ambiguous > incomplete > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser metadata value overloads overload2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > ambiguous > incomplete > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props ambiguous incomplete 1`] = ` +exports[`AlphaTexParameterTests > parser > props > ambiguous > incomplete 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - beats: Array [ + beats: [ Beat (1,1) -> (1,12) { notes: NoteList (1,1) -> (1,12) { - notes: Array [ + notes: [ Note (1,1) -> (1,12) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,12) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,10) { property: Ident "tu" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,10) { - arguments: Array [ + arguments: [ Number "3" (1,9) -> (1,10) { parameterIndices: Map { 0 => 0, @@ -2823,7 +2827,7 @@ Score (1,1) -> (1,12) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, 1, ], @@ -2843,23 +2847,23 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParameterTests parser props ambiguous incomplete: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > empty signature > empty1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props ambiguous incomplete: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > empty signature > empty1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props empty signature empty1 1`] = ` +exports[`AlphaTexParameterTests > parser > props > empty signature > empty1 1`] = ` Score (1,1) -> (1,7) { - bars: Array [ + bars: [ Bar (1,1) -> (1,7) { - beats: Array [ + beats: [ Beat (1,1) -> (1,7) { notes: NoteList (1,1) -> (1,7) { - notes: Array [ + notes: [ Note (1,1) -> (1,7) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,7) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,6) { property: Ident "v" (1,5) -> (1,6), }, @@ -2876,23 +2880,23 @@ Score (1,1) -> (1,7) { } `; -exports[`AlphaTexParameterTests parser props empty signature empty1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > empty signature > empty2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props empty signature empty1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > empty signature > empty2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props empty signature empty2 1`] = ` +exports[`AlphaTexParameterTests > parser > props > empty signature > empty2 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - beats: Array [ + beats: [ Beat (1,1) -> (1,10) { notes: NoteList (1,1) -> (1,10) { - notes: Array [ + notes: [ Note (1,1) -> (1,10) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,10) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,6) { property: Ident "v" (1,5) -> (1,6), }, @@ -2912,22 +2916,22 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests parser props empty signature empty2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > mixed overloads > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props empty signature empty2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > mixed overloads > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props mixed overloads overload1 1`] = ` +exports[`AlphaTexParameterTests > parser > props > mixed overloads > overload1 1`] = ` Score (1,1) -> (1,15) { - bars: Array [ + bars: [ Bar (1,1) -> (1,15) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,15) { tag: Tag "section" (1,1) -> (1,9) { prefix: Backslash (1,1) -> (1,2), tag: Ident "section" (1,2) -> (1,9), }, arguments: Arguments (1,10) -> (1,15) { - arguments: Array [ + arguments: [ String "Text" (1,10) -> (1,15) { parameterIndices: Map { 0 => 0, @@ -2935,7 +2939,7 @@ Score (1,1) -> (1,15) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, 1, ], @@ -2948,22 +2952,22 @@ Score (1,1) -> (1,15) { } `; -exports[`AlphaTexParameterTests parser props mixed overloads overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > mixed overloads > overload2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props mixed overloads overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > mixed overloads > overload2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props mixed overloads overload2 1`] = ` +exports[`AlphaTexParameterTests > parser > props > mixed overloads > overload2 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,19) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,19) { tag: Tag "section" (1,1) -> (1,9) { prefix: Backslash (1,1) -> (1,2), tag: Ident "section" (1,2) -> (1,9), }, arguments: Arguments (1,10) -> (1,19) { - arguments: Array [ + arguments: [ String "T" (1,10) -> (1,12) { parameterIndices: Map { 0 => 0, @@ -2976,7 +2980,7 @@ Score (1,1) -> (1,19) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -2988,34 +2992,34 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParameterTests parser props mixed overloads overload2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > correct > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props mixed overloads overload2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > correct > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props optional overload correct 1`] = ` +exports[`AlphaTexParameterTests > parser > props > optional overload > correct 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - beats: Array [ + beats: [ Beat (1,1) -> (1,12) { notes: NoteList (1,1) -> (1,12) { - notes: Array [ + notes: [ Note (1,1) -> (1,12) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,12) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,11) { property: Ident "ad" (1,5) -> (1,7), properties: Arguments (1,8) -> (1,11) { - arguments: Array [ + arguments: [ Number "100" (1,8) -> (1,11) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -3034,23 +3038,23 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParameterTests parser props optional overload correct: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > missing1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props optional overload correct: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > missing1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props optional overload missing1 1`] = ` +exports[`AlphaTexParameterTests > parser > props > optional overload > missing1 1`] = ` Score (1,1) -> (1,8) { - bars: Array [ + bars: [ Bar (1,1) -> (1,8) { - beats: Array [ + beats: [ Beat (1,1) -> (1,8) { notes: NoteList (1,1) -> (1,8) { - notes: Array [ + notes: [ Note (1,1) -> (1,8) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,8) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,7) { property: Ident "ad" (1,5) -> (1,7), }, @@ -3067,23 +3071,23 @@ Score (1,1) -> (1,8) { } `; -exports[`AlphaTexParameterTests parser props optional overload missing1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > missing2 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props optional overload missing1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > missing2 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props optional overload missing2 1`] = ` +exports[`AlphaTexParameterTests > parser > props > optional overload > missing2 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - beats: Array [ + beats: [ Beat (1,1) -> (1,10) { notes: NoteList (1,1) -> (1,10) { - notes: Array [ + notes: [ Note (1,1) -> (1,10) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,10) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,7) { property: Ident "ad" (1,5) -> (1,7), }, @@ -3103,23 +3107,47 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests parser props optional overload missing2: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > wrong identifier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props optional overload missing2: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > wrong identifier > parser-diagnostics 1`] = ` +[ + Map { + "code" => 219, + "severity" => 2, + "message" => "Error parsing arguments: no overload matched arguments (). Signatures: +(Ident|String)", + "start" => Map { + "col" => 9, + "line" => 1, + "offset" => 8, + }, + }, + Map { + "code" => 205, + "severity" => 2, + "message" => "Unrecognized property 'invalid'.", + "start" => Map { + "col" => 17, + "line" => 1, + "offset" => 16, + }, + }, +] +`; -exports[`AlphaTexParameterTests parser props optional overload wrong identifier 1`] = ` +exports[`AlphaTexParameterTests > parser > props > optional overload > wrong identifier 1`] = ` Score (1,1) -> (1,18) { - bars: Array [ + bars: [ Bar (1,1) -> (1,18) { - beats: Array [ + beats: [ Beat (1,1) -> (1,18) { notes: NoteList (1,1) -> (1,18) { - notes: Array [ + notes: [ Note (1,1) -> (1,18) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,18) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,9) { property: Ident "beam" (1,5) -> (1,9), }, @@ -3139,47 +3167,37 @@ Score (1,1) -> (1,18) { } `; -exports[`AlphaTexParameterTests parser props optional overload wrong identifier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > optional overload > wrong type > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props optional overload wrong identifier: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 219, - "severity" => 2, - "message" => "Error parsing arguments: no overload matched arguments (). Signatures: -(Ident|String)", - "start" => Map { - "col" => 9, - "line" => 1, - "offset" => 8, - }, - }, +exports[`AlphaTexParameterTests > parser > props > optional overload > wrong type > parser-diagnostics 1`] = ` +[ Map { - "code" => 205, + "code" => 220, "severity" => 2, - "message" => "Unrecognized property 'invalid'.", + "message" => "Error parsing arguments: unexpected additional arguments. Signatures: +(Number)", "start" => Map { - "col" => 17, + "col" => 10, "line" => 1, - "offset" => 16, + "offset" => 9, }, }, ] `; -exports[`AlphaTexParameterTests parser props optional overload wrong type 1`] = ` +exports[`AlphaTexParameterTests > parser > props > optional overload > wrong type 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - beats: Array [ + beats: [ Beat (1,1) -> (1,12) { notes: NoteList (1,1) -> (1,12) { - notes: Array [ + notes: [ Note (1,1) -> (1,12) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,12) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,10) { property: Ident "ad" (1,5) -> (1,7), }, @@ -3196,53 +3214,39 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParameterTests parser props optional overload wrong type: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > single overload > correct > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props optional overload wrong type: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 220, - "severity" => 2, - "message" => "Error parsing arguments: unexpected additional arguments. Signatures: -(Number)", - "start" => Map { - "col" => 10, - "line" => 1, - "offset" => 9, - }, - }, -] -`; +exports[`AlphaTexParameterTests > parser > props > single overload > correct > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props single overload correct 1`] = ` +exports[`AlphaTexParameterTests > parser > props > single overload > correct 1`] = ` Score (1,1) -> (1,15) { - bars: Array [ + bars: [ Bar (1,1) -> (1,15) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,12) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), tag: Ident "jump" (1,2) -> (1,6), }, arguments: Arguments (1,7) -> (1,12) { - arguments: Array [ + arguments: [ Ident "Segno" (1,7) -> (1,12) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,13) -> (1,15) { notes: NoteList (1,13) -> (1,15) { - notes: Array [ + notes: [ Note (1,13) -> (1,15) { noteValue: Ident "C4" (1,13) -> (1,15), }, @@ -3255,15 +3259,29 @@ Score (1,1) -> (1,15) { } `; -exports[`AlphaTexParameterTests parser props single overload correct: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > single overload > missing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props single overload correct: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > single overload > missing > parser-diagnostics 1`] = ` +[ + Map { + "code" => 219, + "severity" => 2, + "message" => "Error parsing arguments: no overload matched arguments (). Signatures: +(Ident|String)", + "start" => Map { + "col" => 6, + "line" => 1, + "offset" => 5, + }, + }, +] +`; -exports[`AlphaTexParameterTests parser props single overload missing 1`] = ` +exports[`AlphaTexParameterTests > parser > props > single overload > missing 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,6) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -3282,10 +3300,10 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests parser props single overload missing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > single overload > wrong identifier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props single overload missing: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParameterTests > parser > props > single overload > wrong identifier > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -3300,11 +3318,11 @@ Array [ ] `; -exports[`AlphaTexParameterTests parser props single overload wrong identifier 1`] = ` +exports[`AlphaTexParameterTests > parser > props > single overload > wrong identifier 1`] = ` Score (1,1) -> (1,9) { - bars: Array [ + bars: [ Bar (1,1) -> (1,9) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,6) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -3312,10 +3330,10 @@ Score (1,1) -> (1,9) { }, }, ], - beats: Array [ + beats: [ Beat (1,7) -> (1,9) { notes: NoteList (1,7) -> (1,9) { - notes: Array [ + notes: [ Note (1,7) -> (1,9) { noteValue: Ident "C4" (1,7) -> (1,9), }, @@ -3328,10 +3346,10 @@ Score (1,1) -> (1,9) { } `; -exports[`AlphaTexParameterTests parser props single overload wrong identifier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > single overload > wrong type > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props single overload wrong identifier: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParameterTests > parser > props > single overload > wrong type > parser-diagnostics 1`] = ` +[ Map { "code" => 219, "severity" => 2, @@ -3346,11 +3364,11 @@ Array [ ] `; -exports[`AlphaTexParameterTests parser props single overload wrong type 1`] = ` +exports[`AlphaTexParameterTests > parser > props > single overload > wrong type 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,6) { tag: Tag "jump" (1,1) -> (1,6) { prefix: Backslash (1,1) -> (1,2), @@ -3358,10 +3376,10 @@ Score (1,1) -> (1,10) { }, }, ], - beats: Array [ + beats: [ Beat (1,7) -> (1,10) { notes: NoteList (1,7) -> (1,10) { - notes: Array [ + notes: [ Note (1,7) -> (1,10) { noteValue: Number "3" (1,7) -> (1,8), noteStringDot: Dot (1,8) -> (1,9), @@ -3376,29 +3394,15 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParameterTests parser props single overload wrong type: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > type overloads > overload1-number > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props single overload wrong type: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 219, - "severity" => 2, - "message" => "Error parsing arguments: no overload matched arguments (). Signatures: -(Ident|String)", - "start" => Map { - "col" => 6, - "line" => 1, - "offset" => 5, - }, - }, -] -`; +exports[`AlphaTexParameterTests > parser > props > type overloads > overload1-number > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props type overloads overload1-number 1`] = ` +exports[`AlphaTexParameterTests > parser > props > type overloads > overload1-number 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,1) -> (1,25) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,25) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -3406,18 +3410,18 @@ Score (1,1) -> (1,25) { }, properties: Props (1,8) -> (1,25) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,23) { property: Ident "instrument" (1,10) -> (1,20), properties: Arguments (1,21) -> (1,23) { - arguments: Array [ + arguments: [ Number "20" (1,21) -> (1,23) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -3433,15 +3437,15 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParameterTests parser props type overloads overload1-number: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > type overloads > overload2-identifier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props type overloads overload1-number: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > type overloads > overload2-identifier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props type overloads overload2-identifier 1`] = ` +exports[`AlphaTexParameterTests > parser > props > type overloads > overload2-identifier 1`] = ` Score (1,1) -> (1,41) { - bars: Array [ + bars: [ Bar (1,1) -> (1,41) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,41) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -3449,18 +3453,18 @@ Score (1,1) -> (1,41) { }, properties: Props (1,8) -> (1,41) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,39) { property: Ident "instrument" (1,10) -> (1,20), properties: Arguments (1,21) -> (1,39) { - arguments: Array [ + arguments: [ Ident "AcousticGrandPiano" (1,21) -> (1,39) { parameterIndices: Map { 1 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -3476,15 +3480,15 @@ Score (1,1) -> (1,41) { } `; -exports[`AlphaTexParameterTests parser props type overloads overload2-identifier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > type overloads > overload2-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props type overloads overload2-identifier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > type overloads > overload2-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props type overloads overload2-string 1`] = ` +exports[`AlphaTexParameterTests > parser > props > type overloads > overload2-string 1`] = ` Score (1,1) -> (1,44) { - bars: Array [ + bars: [ Bar (1,1) -> (1,44) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,44) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -3492,18 +3496,18 @@ Score (1,1) -> (1,44) { }, properties: Props (1,8) -> (1,44) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,42) { property: Ident "instrument" (1,10) -> (1,20), properties: Arguments (1,21) -> (1,42) { - arguments: Array [ + arguments: [ String "Acoustic Grand Piano" (1,21) -> (1,42) { parameterIndices: Map { 1 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -3519,15 +3523,15 @@ Score (1,1) -> (1,44) { } `; -exports[`AlphaTexParameterTests parser props type overloads overload2-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > type overloads > overload3-percussion > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props type overloads overload2-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > type overloads > overload3-percussion > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props type overloads overload3-percussion 1`] = ` +exports[`AlphaTexParameterTests > parser > props > type overloads > overload3-percussion 1`] = ` Score (1,1) -> (1,33) { - bars: Array [ + bars: [ Bar (1,1) -> (1,33) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,33) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -3535,11 +3539,11 @@ Score (1,1) -> (1,33) { }, properties: Props (1,8) -> (1,33) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,31) { property: Ident "instrument" (1,10) -> (1,20), properties: Arguments (1,21) -> (1,31) { - arguments: Array [ + arguments: [ Ident "percussion" (1,21) -> (1,31) { parameterIndices: Map { 1 => 0, @@ -3547,7 +3551,7 @@ Score (1,1) -> (1,33) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, 1, ], @@ -3564,27 +3568,27 @@ Score (1,1) -> (1,33) { } `; -exports[`AlphaTexParameterTests parser props type overloads overload3-percussion: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props type overloads overload3-percussion: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload1 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload1 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - beats: Array [ + beats: [ Beat (1,1) -> (1,14) { notes: NoteList (1,1) -> (1,14) { - notes: Array [ + notes: [ Note (1,1) -> (1,14) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,14) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,12) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,12) { - arguments: Array [ + arguments: [ Number "0" (1,9) -> (1,10) { parameterIndices: Map { 0 => 0, @@ -3596,7 +3600,7 @@ Score (1,1) -> (1,14) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -3615,27 +3619,27 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload2-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload2-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload2-ident 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload2-ident 1`] = ` Score (1,1) -> (1,21) { - bars: Array [ + bars: [ Bar (1,1) -> (1,21) { - beats: Array [ + beats: [ Beat (1,1) -> (1,21) { notes: NoteList (1,1) -> (1,21) { - notes: Array [ + notes: [ Note (1,1) -> (1,21) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,21) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,19) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,19) { - arguments: Array [ + arguments: [ Ident "custom" (1,9) -> (1,15) { parameterIndices: Map { 1 => 0, @@ -3653,7 +3657,7 @@ Score (1,1) -> (1,21) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -3672,27 +3676,27 @@ Score (1,1) -> (1,21) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload2-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload2-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload2-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload2-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload2-string 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload2-string 1`] = ` Score (1,1) -> (1,23) { - bars: Array [ + bars: [ Bar (1,1) -> (1,23) { - beats: Array [ + beats: [ Beat (1,1) -> (1,23) { notes: NoteList (1,1) -> (1,23) { - notes: Array [ + notes: [ Note (1,1) -> (1,23) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,23) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,21) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,21) { - arguments: Array [ + arguments: [ String "custom" (1,9) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -3710,7 +3714,7 @@ Score (1,1) -> (1,23) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -3729,27 +3733,27 @@ Score (1,1) -> (1,23) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload2-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload3-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload2-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload3-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload3-ident 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload3-ident 1`] = ` Score (1,1) -> (1,22) { - bars: Array [ + bars: [ Bar (1,1) -> (1,22) { - beats: Array [ + beats: [ Beat (1,1) -> (1,22) { notes: NoteList (1,1) -> (1,22) { - notes: Array [ + notes: [ Note (1,1) -> (1,22) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,22) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,20) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,20) { - arguments: Array [ + arguments: [ Ident "gradual" (1,9) -> (1,16) { parameterIndices: Map { 2 => 0, @@ -3766,7 +3770,7 @@ Score (1,1) -> (1,22) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, ], validated: true, @@ -3785,27 +3789,27 @@ Score (1,1) -> (1,22) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload3-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload3-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload3-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload3-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload3-string 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload3-string 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - beats: Array [ + beats: [ Beat (1,1) -> (1,24) { notes: NoteList (1,1) -> (1,24) { - notes: Array [ + notes: [ Note (1,1) -> (1,24) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,24) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,22) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,22) { - arguments: Array [ + arguments: [ String "gradual" (1,9) -> (1,17) { parameterIndices: Map { 2 => 0, @@ -3822,7 +3826,7 @@ Score (1,1) -> (1,24) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, ], validated: true, @@ -3841,27 +3845,27 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload3-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload4-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload3-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload4-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload4-ident 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload4-ident 1`] = ` Score (1,1) -> (1,29) { - bars: Array [ + bars: [ Bar (1,1) -> (1,29) { - beats: Array [ + beats: [ Beat (1,1) -> (1,29) { notes: NoteList (1,1) -> (1,29) { - notes: Array [ + notes: [ Note (1,1) -> (1,29) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,29) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,27) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,27) { - arguments: Array [ + arguments: [ Ident "custom" (1,9) -> (1,15) { parameterIndices: Map { 1 => 0, @@ -3884,7 +3888,7 @@ Score (1,1) -> (1,29) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 3, ], validated: true, @@ -3903,27 +3907,27 @@ Score (1,1) -> (1,29) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload4-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload4-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload4-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload4-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload4-string 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > flat > overload4-string 1`] = ` Score (1,1) -> (1,33) { - bars: Array [ + bars: [ Bar (1,1) -> (1,33) { - beats: Array [ + beats: [ Beat (1,1) -> (1,33) { notes: NoteList (1,1) -> (1,33) { - notes: Array [ + notes: [ Note (1,1) -> (1,33) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,33) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,31) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,31) { - arguments: Array [ + arguments: [ String "custom" (1,9) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -3946,7 +3950,7 @@ Score (1,1) -> (1,33) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 3, ], validated: true, @@ -3965,28 +3969,28 @@ Score (1,1) -> (1,33) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload4-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload1 > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads flat overload4-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload1 > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload1 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload1 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,16) { - beats: Array [ + beats: [ Beat (1,1) -> (1,16) { notes: NoteList (1,1) -> (1,16) { - notes: Array [ + notes: [ Note (1,1) -> (1,16) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,16) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,14) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,14) { openParenthesis: LParen (1,9) -> (1,10), - arguments: Array [ + arguments: [ Number "0" (1,10) -> (1,11), Number "4" (1,12) -> (1,13), ], @@ -4006,27 +4010,27 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload1: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload2-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload1: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload2-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload2-ident 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload2-ident 1`] = ` Score (1,1) -> (1,23) { - bars: Array [ + bars: [ Bar (1,1) -> (1,23) { - beats: Array [ + beats: [ Beat (1,1) -> (1,23) { notes: NoteList (1,1) -> (1,23) { - notes: Array [ + notes: [ Note (1,1) -> (1,23) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,23) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,21) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,21) { - arguments: Array [ + arguments: [ Ident "custom" (1,9) -> (1,15) { parameterIndices: Map { 1 => 0, @@ -4044,7 +4048,7 @@ Score (1,1) -> (1,23) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -4063,27 +4067,27 @@ Score (1,1) -> (1,23) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload2-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload2-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload2-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload2-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload2-string 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload2-string 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,1) -> (1,25) { - beats: Array [ + beats: [ Beat (1,1) -> (1,25) { notes: NoteList (1,1) -> (1,25) { - notes: Array [ + notes: [ Note (1,1) -> (1,25) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,25) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,23) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,23) { - arguments: Array [ + arguments: [ String "custom" (1,9) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -4101,7 +4105,7 @@ Score (1,1) -> (1,25) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -4120,27 +4124,27 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload2-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload3-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload2-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload3-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload3-ident 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload3-ident 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - beats: Array [ + beats: [ Beat (1,1) -> (1,24) { notes: NoteList (1,1) -> (1,24) { - notes: Array [ + notes: [ Note (1,1) -> (1,24) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,24) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,22) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,22) { - arguments: Array [ + arguments: [ Ident "gradual" (1,9) -> (1,16) { parameterIndices: Map { 2 => 0, @@ -4157,7 +4161,7 @@ Score (1,1) -> (1,24) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, ], validated: true, @@ -4176,27 +4180,27 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload3-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload3-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload3-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload3-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload3-string 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload3-string 1`] = ` Score (1,1) -> (1,26) { - bars: Array [ + bars: [ Bar (1,1) -> (1,26) { - beats: Array [ + beats: [ Beat (1,1) -> (1,26) { notes: NoteList (1,1) -> (1,26) { - notes: Array [ + notes: [ Note (1,1) -> (1,26) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,26) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,24) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,24) { - arguments: Array [ + arguments: [ String "gradual" (1,9) -> (1,17) { parameterIndices: Map { 2 => 0, @@ -4213,7 +4217,7 @@ Score (1,1) -> (1,26) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 2, ], validated: true, @@ -4232,27 +4236,27 @@ Score (1,1) -> (1,26) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload3-string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload4-ident > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload3-string: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload4-ident > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload4-ident 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload4-ident 1`] = ` Score (1,1) -> (1,31) { - bars: Array [ + bars: [ Bar (1,1) -> (1,31) { - beats: Array [ + beats: [ Beat (1,1) -> (1,31) { notes: NoteList (1,1) -> (1,31) { - notes: Array [ + notes: [ Note (1,1) -> (1,31) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,31) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,29) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,29) { - arguments: Array [ + arguments: [ Ident "custom" (1,9) -> (1,15) { parameterIndices: Map { 1 => 0, @@ -4275,7 +4279,7 @@ Score (1,1) -> (1,31) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 3, ], validated: true, @@ -4294,27 +4298,27 @@ Score (1,1) -> (1,31) { } `; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload4-ident: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload4-string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload4-ident: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload4-string > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload4-string 1`] = ` +exports[`AlphaTexParameterTests > parser > props > vararg overloads > parenthesis > overload4-string 1`] = ` Score (1,1) -> (1,35) { - bars: Array [ + bars: [ Bar (1,1) -> (1,35) { - beats: Array [ + beats: [ Beat (1,1) -> (1,35) { notes: NoteList (1,1) -> (1,35) { - notes: Array [ + notes: [ Note (1,1) -> (1,35) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,35) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,33) { property: Ident "tb" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,33) { - arguments: Array [ + arguments: [ String "custom" (1,9) -> (1,16) { parameterIndices: Map { 1 => 0, @@ -4337,7 +4341,7 @@ Score (1,1) -> (1,35) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 3, ], validated: true, @@ -4355,7 +4359,3 @@ Score (1,1) -> (1,35) { ], } `; - -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload4-string: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParameterTests parser props vararg overloads parenthesis overload4-string: parser-diagnostics 1`] = `Array []`; diff --git a/packages/alphatab/test/importer/__snapshots__/AlphaTexParser.test.ts.snap b/packages/alphatab/test/importer/__snapshots__/AlphaTexParser.test.ts.snap index 101ce7eb2..cc17a13f8 100644 --- a/packages/alphatab/test/importer/__snapshots__/AlphaTexParser.test.ts.snap +++ b/packages/alphatab/test/importer/__snapshots__/AlphaTexParser.test.ts.snap @@ -1,17 +1,21 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`AlphaTexParserTest ambiguous tempo and stringed note 1`] = ` +exports[`AlphaTexParserTest > ambiguous > tempo and stringed note > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > ambiguous > tempo and stringed note > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > ambiguous > tempo and stringed note 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,19) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,11) { tag: Tag "tempo" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "tempo" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,11) { - arguments: Array [ + arguments: [ Number "120" (1,8) -> (1,11) { parameterIndices: Map { 0 => 0, @@ -19,7 +23,7 @@ Score (1,1) -> (1,19) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, 1, ], @@ -27,10 +31,10 @@ Score (1,1) -> (1,19) { }, }, ], - beats: Array [ + beats: [ Beat (1,12) -> (1,15) { notes: NoteList (1,12) -> (1,15) { - notes: Array [ + notes: [ Note (1,12) -> (1,15) { noteValue: Number "3" (1,12) -> (1,13), noteStringDot: Dot (1,13) -> (1,14), @@ -41,7 +45,7 @@ Score (1,1) -> (1,19) { }, Beat (1,16) -> (1,19) { notes: NoteList (1,16) -> (1,19) { - notes: Array [ + notes: [ Note (1,16) -> (1,19) { noteValue: Number "3" (1,16) -> (1,17), noteStringDot: Dot (1,17) -> (1,18), @@ -56,19 +60,15 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParserTest ambiguous tempo and stringed note: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest ambiguous tempo and stringed note: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest ambiguous tempo, temponame and stringed note: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > ambiguous > voice followed by note list > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest ambiguous tempo, temponame and stringed note: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > ambiguous > voice followed by note list > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest ambiguous voice followed by note list 1`] = ` +exports[`AlphaTexParserTest > ambiguous > voice followed by note list 1`] = ` Score (1,1) -> (1,15) { - bars: Array [ + bars: [ Bar (1,1) -> (1,15) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,7) { tag: Tag "voice" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -76,11 +76,11 @@ Score (1,1) -> (1,15) { }, }, ], - beats: Array [ + beats: [ Beat (1,8) -> (1,15) { notes: NoteList (1,8) -> (1,15) { openParenthesis: LParen (1,8) -> (1,9), - notes: Array [ + notes: [ Note (1,9) -> (1,11) { noteValue: Ident "C4" (1,9) -> (1,11), }, @@ -97,25 +97,25 @@ Score (1,1) -> (1,15) { } `; -exports[`AlphaTexParserTest ambiguous voice followed by note list: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > bar meta singleline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest ambiguous voice followed by note list: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > bar meta singleline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments bar meta singleline 1`] = ` +exports[`AlphaTexParserTest > comments > bar meta singleline 1`] = ` Score (1,1) -> (3,9) { - bars: Array [ + bars: [ Bar (1,1) -> (3,9) { - metaData: Array [ + metaData: [ Meta (3,2) -> (3,9) { tag: Tag "ts" (3,2) -> (3,5) { - leadingComments: Array [ + leadingComments: [ "// Single ", ], prefix: Backslash (3,2) -> (3,3), tag: Ident "ts" (3,3) -> (3,5), }, arguments: Arguments (3,6) -> (3,9) { - arguments: Array [ + arguments: [ Number "3" (3,6) -> (3,7) { parameterIndices: Map { 1 => 0, @@ -127,7 +127,7 @@ Score (1,1) -> (3,9) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -139,18 +139,18 @@ Score (1,1) -> (3,9) { } `; -exports[`AlphaTexParserTest comments bar meta singleline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > bar multiline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments bar meta singleline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > bar multiline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments bar multiline 1`] = ` +exports[`AlphaTexParserTest > comments > bar multiline 1`] = ` Score (1,1) -> (3,15) { - bars: Array [ + bars: [ Bar (1,1) -> (3,15) { - metaData: Array [ + metaData: [ Meta (3,8) -> (3,15) { tag: Tag "ts" (3,8) -> (3,11) { - leadingComments: Array [ + leadingComments: [ "/** multi line**/", ], @@ -158,7 +158,7 @@ line**/", tag: Ident "ts" (3,9) -> (3,11), }, arguments: Arguments (3,12) -> (3,15) { - arguments: Array [ + arguments: [ Number "3" (3,12) -> (3,13) { parameterIndices: Map { 1 => 0, @@ -170,7 +170,7 @@ line**/", }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -182,20 +182,24 @@ line**/", } `; -exports[`AlphaTexParserTest comments bar multiline middle 1`] = ` +exports[`AlphaTexParserTest > comments > bar multiline middle > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > comments > bar multiline middle > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > comments > bar multiline middle 1`] = ` Score (1,1) -> (3,9) { - bars: Array [ + bars: [ Bar (1,1) -> (3,9) { - metaData: Array [ + metaData: [ Meta (2,1) -> (3,9) { tag: Tag "ts" (2,1) -> (2,4) { prefix: Backslash (2,1) -> (2,2), tag: Ident "ts" (2,2) -> (2,4), }, arguments: Arguments (2,5) -> (3,9) { - arguments: Array [ + arguments: [ Number "3" (2,5) -> (2,6) { - trailingComments: Array [ + trailingComments: [ "/** multi line**/", ], @@ -209,7 +213,7 @@ line**/", }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -221,29 +225,25 @@ line**/", } `; -exports[`AlphaTexParserTest comments bar multiline middle: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest comments bar multiline middle: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest comments bar multiline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beat chord multiline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments bar multiline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beat chord multiline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beat chord multiline 1`] = ` +exports[`AlphaTexParserTest > comments > beat chord multiline 1`] = ` Score (1,1) -> (3,11) { - bars: Array [ + bars: [ Bar (1,1) -> (3,11) { - beats: Array [ + beats: [ Beat (1,3) -> (3,11) { notes: NoteList (1,3) -> (3,11) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, Note (3,8) -> (3,10) { noteValue: Ident "C5" (3,8) -> (3,10) { - leadingComments: Array [ + leadingComments: [ "/** multi line**/", ], @@ -259,25 +259,25 @@ line**/", } `; -exports[`AlphaTexParserTest comments beat chord multiline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beat chord singleline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beat chord multiline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beat chord singleline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beat chord singleline 1`] = ` +exports[`AlphaTexParserTest > comments > beat chord singleline 1`] = ` Score (1,1) -> (3,5) { - bars: Array [ + bars: [ Bar (1,1) -> (3,5) { - beats: Array [ + beats: [ Beat (1,3) -> (3,5) { notes: NoteList (1,3) -> (3,5) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, Note (3,2) -> (3,4) { noteValue: Ident "C5" (3,2) -> (3,4) { - leadingComments: Array [ + leadingComments: [ "// Single ", ], }, @@ -292,18 +292,18 @@ Score (1,1) -> (3,5) { } `; -exports[`AlphaTexParserTest comments beat chord singleline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beat multiline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beat chord singleline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beat multiline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beat multiline 1`] = ` +exports[`AlphaTexParserTest > comments > beat multiline 1`] = ` Score (1,1) -> (3,10) { - bars: Array [ + bars: [ Bar (1,1) -> (3,10) { - beats: Array [ + beats: [ Beat (1,3) -> (1,5) { notes: NoteList (1,3) -> (1,5) { - notes: Array [ + notes: [ Note (1,3) -> (1,5) { noteValue: Ident "C4" (1,3) -> (1,5), }, @@ -312,10 +312,10 @@ Score (1,1) -> (3,10) { }, Beat (3,8) -> (3,10) { notes: NoteList (3,8) -> (3,10) { - notes: Array [ + notes: [ Note (3,8) -> (3,10) { noteValue: Ident "C5" (3,8) -> (3,10) { - leadingComments: Array [ + leadingComments: [ "/** multi line**/", ], @@ -330,18 +330,18 @@ line**/", } `; -exports[`AlphaTexParserTest comments beat multiline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beat singleline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beat multiline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beat singleline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beat singleline 1`] = ` +exports[`AlphaTexParserTest > comments > beat singleline 1`] = ` Score (1,1) -> (3,4) { - bars: Array [ + bars: [ Bar (1,1) -> (3,4) { - beats: Array [ + beats: [ Beat (1,3) -> (1,5) { notes: NoteList (1,3) -> (1,5) { - notes: Array [ + notes: [ Note (1,3) -> (1,5) { noteValue: Ident "C4" (1,3) -> (1,5), }, @@ -350,10 +350,10 @@ Score (1,1) -> (3,4) { }, Beat (3,2) -> (3,4) { notes: NoteList (3,2) -> (3,4) { - notes: Array [ + notes: [ Note (3,2) -> (3,4) { noteValue: Ident "C5" (3,2) -> (3,4) { - leadingComments: Array [ + leadingComments: [ "// Single ", ], }, @@ -367,19 +367,19 @@ Score (1,1) -> (3,4) { } `; -exports[`AlphaTexParserTest comments beat singleline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beateffects multiline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beat singleline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beateffects multiline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beateffects multiline 1`] = ` +exports[`AlphaTexParserTest > comments > beateffects multiline 1`] = ` Score (1,1) -> (3,9) { - bars: Array [ + bars: [ Bar (1,1) -> (3,9) { - beats: Array [ + beats: [ Beat (1,3) -> (3,9) { notes: NoteList (1,3) -> (1,10) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -391,9 +391,9 @@ Score (1,1) -> (3,9) { }, beatEffects: Props (1,11) -> (3,9) { openBrace: LBrace (1,11) -> (1,12), - properties: Array [], + properties: [], closeBrace: RBrace (3,8) -> (3,9) { - leadingComments: Array [ + leadingComments: [ "/** multi line**/", ], @@ -406,19 +406,19 @@ line**/", } `; -exports[`AlphaTexParserTest comments beateffects multiline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beateffects singleline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beateffects multiline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > beateffects singleline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beateffects singleline 1`] = ` +exports[`AlphaTexParserTest > comments > beateffects singleline 1`] = ` Score (1,1) -> (3,3) { - bars: Array [ + bars: [ Bar (1,1) -> (3,3) { - beats: Array [ + beats: [ Beat (1,3) -> (3,3) { notes: NoteList (1,3) -> (1,10) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -430,9 +430,9 @@ Score (1,1) -> (3,3) { }, beatEffects: Props (1,11) -> (3,3) { openBrace: LBrace (1,11) -> (1,12), - properties: Array [], + properties: [], closeBrace: RBrace (3,2) -> (3,3) { - leadingComments: Array [ + leadingComments: [ "// Single ", ], }, @@ -444,26 +444,26 @@ Score (1,1) -> (3,3) { } `; -exports[`AlphaTexParserTest comments beateffects singleline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > noteeffects multiline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments beateffects singleline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > noteeffects multiline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments noteeffects multiline 1`] = ` +exports[`AlphaTexParserTest > comments > noteeffects multiline 1`] = ` Score (1,1) -> (3,13) { - bars: Array [ + bars: [ Bar (1,1) -> (3,13) { - beats: Array [ + beats: [ Beat (1,3) -> (3,13) { notes: NoteList (1,3) -> (3,13) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [ + notes: [ Note (1,4) -> (3,9) { noteValue: Ident "C4" (1,4) -> (1,6), noteEffects: Props (1,9) -> (3,9) { openBrace: LBrace (1,9) -> (1,10), - properties: Array [], + properties: [], closeBrace: RBrace (3,8) -> (3,9) { - leadingComments: Array [ + leadingComments: [ "/** multi line**/", ], @@ -483,26 +483,26 @@ line**/", } `; -exports[`AlphaTexParserTest comments noteeffects multiline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > noteeffects singleline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments noteeffects multiline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > noteeffects singleline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments noteeffects singleline 1`] = ` +exports[`AlphaTexParserTest > comments > noteeffects singleline 1`] = ` Score (1,1) -> (3,7) { - bars: Array [ + bars: [ Bar (1,1) -> (3,7) { - beats: Array [ + beats: [ Beat (1,3) -> (3,7) { notes: NoteList (1,3) -> (3,7) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [ + notes: [ Note (1,4) -> (3,3) { noteValue: Ident "C4" (1,4) -> (1,6), noteEffects: Props (1,7) -> (3,3) { openBrace: LBrace (1,7) -> (1,8), - properties: Array [], + properties: [], closeBrace: RBrace (3,2) -> (3,3) { - leadingComments: Array [ + leadingComments: [ "// Single ", ], }, @@ -521,18 +521,18 @@ Score (1,1) -> (3,7) { } `; -exports[`AlphaTexParserTest comments noteeffects singleline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > score meta multiline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments noteeffects singleline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > score meta multiline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments score meta multiline 1`] = ` +exports[`AlphaTexParserTest > comments > score meta multiline 1`] = ` Score (1,1) -> (2,20) { - bars: Array [ + bars: [ Bar (2,8) -> (2,20) { - metaData: Array [ + metaData: [ Meta (2,8) -> (2,20) { tag: Tag "title" (2,8) -> (2,14) { - leadingComments: Array [ + leadingComments: [ "/** multi line**/", ], @@ -540,14 +540,14 @@ line**/", tag: Ident "title" (2,9) -> (2,14), }, arguments: Arguments (2,15) -> (2,20) { - arguments: Array [ + arguments: [ String "Test" (2,15) -> (2,20) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -559,14 +559,18 @@ line**/", } `; -exports[`AlphaTexParserTest comments score meta multiline middle 1`] = ` +exports[`AlphaTexParserTest > comments > score meta multiline middle > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > comments > score meta multiline middle > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > comments > score meta multiline middle 1`] = ` Score (1,1) -> (2,13) { - bars: Array [ + bars: [ Bar (1,1) -> (2,13) { - metaData: Array [ + metaData: [ Meta (1,1) -> (2,13) { tag: Tag "title" (1,1) -> (1,7) { - trailingComments: Array [ + trailingComments: [ "/** multi line**/", ], @@ -574,14 +578,14 @@ line**/", tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (2,8) -> (2,13) { - arguments: Array [ + arguments: [ String "Test" (2,8) -> (2,13) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -593,36 +597,32 @@ line**/", } `; -exports[`AlphaTexParserTest comments score meta multiline middle: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest comments score meta multiline middle: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest comments score meta multiline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > score meta singleline > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments score meta multiline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > comments > score meta singleline > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments score meta singleline 1`] = ` +exports[`AlphaTexParserTest > comments > score meta singleline 1`] = ` Score (1,1) -> (2,14) { - bars: Array [ + bars: [ Bar (2,2) -> (2,14) { - metaData: Array [ + metaData: [ Meta (2,2) -> (2,14) { tag: Tag "title" (2,2) -> (2,8) { - leadingComments: Array [ + leadingComments: [ "// Single ", ], prefix: Backslash (2,2) -> (2,3), tag: Ident "title" (2,3) -> (2,8), }, arguments: Arguments (2,9) -> (2,14) { - arguments: Array [ + arguments: [ String "Test" (2,9) -> (2,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -634,19 +634,32 @@ Score (1,1) -> (2,14) { } `; -exports[`AlphaTexParserTest comments score meta singleline: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at200 > missing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest comments score meta singleline: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at200 > missing > parser-diagnostics 1`] = ` +[ + Map { + "code" => 200, + "severity" => 2, + "message" => "Missing beat multiplier value after '*'.", + "start" => Map { + "col" => 8, + "line" => 1, + "offset" => 7, + }, + }, +] +`; -exports[`AlphaTexParserTest errors at200 missing 1`] = ` +exports[`AlphaTexParserTest > errors > at200 > missing 1`] = ` Score (1,1) -> (1,8) { - bars: Array [ + bars: [ Bar (1,1) -> (1,8) { - beats: Array [ + beats: [ Beat (1,1) -> (1,8) { notes: NoteList (1,1) -> (1,6) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,5) { noteValue: Number "3" (1,2) -> (1,3), noteStringDot: Dot (1,3) -> (1,4), @@ -663,10 +676,10 @@ Score (1,1) -> (1,8) { } `; -exports[`AlphaTexParserTest errors at200 missing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at200 > type > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at200 missing: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at200 > type > parser-diagnostics 1`] = ` +[ Map { "code" => 200, "severity" => 2, @@ -680,15 +693,15 @@ Array [ ] `; -exports[`AlphaTexParserTest errors at200 type 1`] = ` +exports[`AlphaTexParserTest > errors > at200 > type 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - beats: Array [ + beats: [ Beat (1,1) -> (1,8) { notes: NoteList (1,1) -> (1,6) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,5) { noteValue: Number "3" (1,2) -> (1,3), noteStringDot: Dot (1,3) -> (1,4), @@ -701,7 +714,7 @@ Score (1,1) -> (1,10) { }, Beat (1,9) -> (1,10) { notes: NoteList (1,9) -> (1,10) { - notes: Array [ + notes: [ Note (1,9) -> (1,10) { noteValue: Ident "A" (1,9) -> (1,10), }, @@ -714,28 +727,28 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParserTest errors at200 type: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at201 > missing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at200 type: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at201 > missing > parser-diagnostics 1`] = ` +[ Map { - "code" => 200, + "code" => 201, "severity" => 2, - "message" => "Missing beat multiplier value after '*'.", + "message" => "Missing duration value after ':'.", "start" => Map { - "col" => 8, + "col" => 2, "line" => 1, - "offset" => 7, + "offset" => 1, }, }, ] `; -exports[`AlphaTexParserTest errors at201 missing 1`] = ` +exports[`AlphaTexParserTest > errors > at201 > missing 1`] = ` Score (1,1) -> (1,2) { - bars: Array [ + bars: [ Bar (1,1) -> (1,2) { - beats: Array [ + beats: [ Beat (1,1) -> (1,2) { durationChange: Duration (1,1) -> (1,2) { colon: Colon (1,1) -> (1,2), @@ -747,10 +760,10 @@ Score (1,1) -> (1,2) { } `; -exports[`AlphaTexParserTest errors at201 missing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at201 > type > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at201 missing: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at201 > type > parser-diagnostics 1`] = ` +[ Map { "code" => 201, "severity" => 2, @@ -764,17 +777,17 @@ Array [ ] `; -exports[`AlphaTexParserTest errors at201 type 1`] = ` +exports[`AlphaTexParserTest > errors > at201 > type 1`] = ` Score (1,1) -> (1,3) { - bars: Array [ + bars: [ Bar (1,1) -> (1,3) { - beats: Array [ + beats: [ Beat (1,1) -> (1,3) { durationChange: Duration (1,1) -> (1,2) { colon: Colon (1,1) -> (1,2), }, notes: NoteList (1,2) -> (1,3) { - notes: Array [ + notes: [ Note (1,2) -> (1,3) { noteValue: Ident "A" (1,2) -> (1,3), }, @@ -787,32 +800,32 @@ Score (1,1) -> (1,3) { } `; -exports[`AlphaTexParserTest errors at201 type: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at202 > beat duration > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at201 type: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at202 > beat duration > parser-diagnostics 1`] = ` +[ Map { - "code" => 201, + "code" => 202, "severity" => 2, - "message" => "Missing duration value after ':'.", + "message" => "Unexpected 'Ident' token. Expected one of following: Number", "start" => Map { - "col" => 2, + "col" => 7, "line" => 1, - "offset" => 1, + "offset" => 6, }, }, ] `; -exports[`AlphaTexParserTest errors at202 beat duration 1`] = ` +exports[`AlphaTexParserTest > errors > at202 > beat duration 1`] = ` Score (1,1) -> (1,6) { - bars: Array [ + bars: [ Bar (1,1) -> (1,6) { - beats: Array [ + beats: [ Beat (1,1) -> (1,6) { notes: NoteList (1,1) -> (1,5) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,4) { noteValue: Ident "C4" (1,2) -> (1,4), }, @@ -827,73 +840,28 @@ Score (1,1) -> (1,6) { } `; -exports[`AlphaTexParserTest errors at202 beat duration: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at202 > note string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at202 beat duration: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at202 > note string > parser-diagnostics 1`] = ` +[ Map { "code" => 202, "severity" => 2, "message" => "Unexpected 'Ident' token. Expected one of following: Number", "start" => Map { - "col" => 7, - "line" => 1, - "offset" => 6, - }, - }, -] -`; - -exports[`AlphaTexParserTest errors at202 meta value 1`] = ` -Score (1,1) -> (1,10) { - bars: Array [ - Bar (1,1) -> (1,10) { - metaData: Array [ - Meta (1,1) -> (1,7) { - tag: Tag "title" (1,1) -> (1,7) { - prefix: Backslash (1,1) -> (1,2), - tag: Ident "title" (1,2) -> (1,7), - }, - }, - ], - beats: Array [ - Beat (1,8) -> (1,10) { - notes: NoteList (1,8) -> (1,10) { - notes: Array [ - Note (1,8) -> (1,10) { - noteValue: Number "10" (1,8) -> (1,10), - }, - ], - }, - }, - ], - }, - ], -} -`; - -exports[`AlphaTexParserTest errors at202 meta value: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest errors at202 meta value: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 202, - "severity" => 2, - "message" => "Unexpected 'Number' token. Expected one of following: String,Ident", - "start" => Map { - "col" => 10, + "col" => 4, "line" => 1, - "offset" => 9, + "offset" => 3, }, }, ] `; -exports[`AlphaTexParserTest errors at202 note string 1`] = ` +exports[`AlphaTexParserTest > errors > at202 > note string 1`] = ` Score (1,1) -> (1,3) { - bars: Array [ + bars: [ Bar (1,1) -> (1,3) { - beats: Array [ + beats: [ Beat (1,1) -> (1,3), ], }, @@ -901,44 +869,10 @@ Score (1,1) -> (1,3) { } `; -exports[`AlphaTexParserTest errors at202 note string: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest errors at202 note string: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 202, - "severity" => 2, - "message" => "Unexpected 'Ident' token. Expected one of following: Number", - "start" => Map { - "col" => 4, - "line" => 1, - "offset" => 3, - }, - }, -] -`; - -exports[`AlphaTexParserTest errors at202 note value 1`] = ` -Score (1,1) -> (1,5) { - bars: Array [ - Bar (1,2) -> (1,5) { - beats: Array [ - Beat (1,4) -> (1,5) { - notes: NoteList (1,4) -> (1,5) { - openParenthesis: LParen (1,4) -> (1,5), - notes: Array [], - }, - }, - ], - }, - ], -} -`; - -exports[`AlphaTexParserTest errors at202 note value: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at202 > note value > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at202 note value: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at202 > note value > parser-diagnostics 1`] = ` +[ Map { "code" => 202, "severity" => 2, @@ -962,20 +896,15 @@ Array [ ] `; -exports[`AlphaTexParserTest errors at202 value list 1`] = ` -Score (1,1) -> (1,19) { - bars: Array [ - Bar (1,1) -> (1,19) { - metaData: Array [ - Meta (1,1) -> (1,19) { - tag: Tag "meta" (1,1) -> (1,6) { - prefix: Backslash (1,1) -> (1,2), - tag: Ident "meta" (1,2) -> (1,6), - }, - arguments: Arguments (1,7) -> (1,19) { - openParenthesis: LParen (1,7) -> (1,8), - arguments: Array [], - closeParenthesis: RParen (1,18) -> (1,19), +exports[`AlphaTexParserTest > errors > at202 > note value 1`] = ` +Score (1,1) -> (1,5) { + bars: [ + Bar (1,2) -> (1,5) { + beats: [ + Beat (1,4) -> (1,5) { + notes: NoteList (1,4) -> (1,5) { + openParenthesis: LParen (1,4) -> (1,5), + notes: [], }, }, ], @@ -984,28 +913,28 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParserTest errors at202 value list: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at203 > meta value > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at202 value list: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at203 > meta value > parser-diagnostics 1`] = ` +[ Map { - "code" => 202, + "code" => 203, "severity" => 2, - "message" => "Unexpected 'Tag' token. Expected one of following: Ident,String,Number", + "message" => "Unexpected end of file.", "start" => Map { - "col" => 18, + "col" => 7, "line" => 1, - "offset" => 17, + "offset" => 6, }, }, ] `; -exports[`AlphaTexParserTest errors at203 meta value 1`] = ` +exports[`AlphaTexParserTest > errors > at203 > meta value 1`] = ` Score (1,1) -> (1,7) { - bars: Array [ + bars: [ Bar (1,1) -> (1,7) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,7) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -1018,32 +947,42 @@ Score (1,1) -> (1,7) { } `; -exports[`AlphaTexParserTest errors at203 meta value: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at203 > note string > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at203 meta value: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at203 > note string > parser-diagnostics 1`] = ` +[ Map { "code" => 203, "severity" => 2, "message" => "Unexpected end of file.", "start" => Map { - "col" => 7, + "col" => 6, "line" => 1, - "offset" => 6, + "offset" => 5, + }, + }, + Map { + "code" => 206, + "severity" => 2, + "message" => "Unexpected end of file. Group not closed.", + "start" => Map { + "col" => 6, + "line" => 1, + "offset" => 5, }, }, ] `; -exports[`AlphaTexParserTest errors at203 note string 1`] = ` +exports[`AlphaTexParserTest > errors > at203 > note string 1`] = ` Score (1,1) -> (1,6) { - bars: Array [ + bars: [ Bar (1,1) -> (1,6) { - beats: Array [ + beats: [ Beat (1,3) -> (1,6) { notes: NoteList (1,3) -> (1,6) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [], + notes: [], }, }, ], @@ -1052,38 +991,28 @@ Score (1,1) -> (1,6) { } `; -exports[`AlphaTexParserTest errors at203 note string: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at204 > bar > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at203 note string: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 203, - "severity" => 2, - "message" => "Unexpected end of file.", - "start" => Map { - "col" => 6, - "line" => 1, - "offset" => 5, - }, - }, +exports[`AlphaTexParserTest > errors > at204 > bar > parser-diagnostics 1`] = ` +[ Map { - "code" => 206, + "code" => 204, "severity" => 2, - "message" => "Unexpected end of file. Group not closed.", + "message" => "Unrecognized metadata 'unknown'.", "start" => Map { - "col" => 6, + "col" => 11, "line" => 1, - "offset" => 5, + "offset" => 10, }, }, ] `; -exports[`AlphaTexParserTest errors at204 bar 1`] = ` +exports[`AlphaTexParserTest > errors > at204 > bar 1`] = ` Score (1,1) -> (1,11) { - bars: Array [ + bars: [ Bar (1,1) -> (1,11) { - metaData: Array [ + metaData: [ Meta (1,3) -> (1,11) { tag: Tag "unknown" (1,3) -> (1,11) { prefix: Backslash (1,3) -> (1,4), @@ -1096,28 +1025,28 @@ Score (1,1) -> (1,11) { } `; -exports[`AlphaTexParserTest errors at204 bar: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at204 > score > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at204 bar: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at204 > score > parser-diagnostics 1`] = ` +[ Map { "code" => 204, "severity" => 2, "message" => "Unrecognized metadata 'unknown'.", "start" => Map { - "col" => 11, + "col" => 9, "line" => 1, - "offset" => 10, + "offset" => 8, }, }, ] `; -exports[`AlphaTexParserTest errors at204 score 1`] = ` +exports[`AlphaTexParserTest > errors > at204 > score 1`] = ` Score (1,1) -> (1,9) { - bars: Array [ + bars: [ Bar (1,1) -> (1,9) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,9) { tag: Tag "unknown" (1,1) -> (1,9) { prefix: Backslash (1,1) -> (1,2), @@ -1130,49 +1059,49 @@ Score (1,1) -> (1,9) { } `; -exports[`AlphaTexParserTest errors at204 score: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at205 > bar > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at204 score: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at205 > bar > parser-diagnostics 1`] = ` +[ Map { - "code" => 204, + "code" => 205, "severity" => 2, - "message" => "Unrecognized metadata 'unknown'.", + "message" => "Unrecognized property 'unknown'.", "start" => Map { - "col" => 9, + "col" => 25, "line" => 1, - "offset" => 8, + "offset" => 24, }, }, ] `; -exports[`AlphaTexParserTest errors at205 bar 1`] = ` +exports[`AlphaTexParserTest > errors > at205 > bar 1`] = ` Score (1,1) -> (1,26) { - bars: Array [ + bars: [ Bar (1,1) -> (1,26) { - metaData: Array [ + metaData: [ Meta (1,3) -> (1,26) { tag: Tag "track" (1,3) -> (1,9) { prefix: Backslash (1,3) -> (1,4), tag: Ident "track" (1,4) -> (1,9), }, arguments: Arguments (1,10) -> (1,15) { - arguments: Array [ + arguments: [ String "Test" (1,10) -> (1,15) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, properties: Props (1,17) -> (1,26) { openBrace: LBrace (1,17) -> (1,18), - properties: Array [ + properties: [ Prop (1,18) -> (1,25) { property: Ident "unknown" (1,18) -> (1,25), }, @@ -1186,47 +1115,47 @@ Score (1,1) -> (1,26) { } `; -exports[`AlphaTexParserTest errors at205 bar: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at205 > barre > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at205 bar: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at205 > barre > parser-diagnostics 1`] = ` +[ Map { "code" => 205, "severity" => 2, - "message" => "Unrecognized property 'unknown'.", + "message" => "Unrecognized property 'invalid'.", "start" => Map { - "col" => 25, + "col" => 20, "line" => 1, - "offset" => 24, + "offset" => 19, }, }, ] `; -exports[`AlphaTexParserTest errors at205 barre 1`] = ` +exports[`AlphaTexParserTest > errors > at205 > barre 1`] = ` Score (1,1) -> (1,21) { - bars: Array [ + bars: [ Bar (1,1) -> (1,21) { - beats: Array [ + beats: [ Beat (1,1) -> (1,21) { notes: NoteList (1,1) -> (1,21) { - notes: Array [ + notes: [ Note (1,1) -> (1,21) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,21) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,12) { property: Ident "barre" (1,5) -> (1,10), properties: Arguments (1,11) -> (1,12) { - arguments: Array [ + arguments: [ Number "1" (1,11) -> (1,12) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -1248,32 +1177,32 @@ Score (1,1) -> (1,21) { } `; -exports[`AlphaTexParserTest errors at205 barre: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at205 > beat > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at205 barre: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at205 > beat > parser-diagnostics 1`] = ` +[ Map { "code" => 205, "severity" => 2, - "message" => "Unrecognized property 'invalid'.", + "message" => "Unrecognized property 'unknown'.", "start" => Map { - "col" => 20, + "col" => 16, "line" => 1, - "offset" => 19, + "offset" => 15, }, }, ] `; -exports[`AlphaTexParserTest errors at205 beat 1`] = ` +exports[`AlphaTexParserTest > errors > at205 > beat 1`] = ` Score (1,1) -> (1,17) { - bars: Array [ + bars: [ Bar (1,1) -> (1,17) { - beats: Array [ + beats: [ Beat (1,3) -> (1,17) { notes: NoteList (1,3) -> (1,7) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -1282,7 +1211,7 @@ Score (1,1) -> (1,17) { }, beatEffects: Props (1,8) -> (1,17) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,9) -> (1,16) { property: Ident "unknown" (1,9) -> (1,16), }, @@ -1296,94 +1225,36 @@ Score (1,1) -> (1,17) { } `; -exports[`AlphaTexParserTest errors at205 beat: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest errors at205 beat: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 205, - "severity" => 2, - "message" => "Unrecognized property 'unknown'.", - "start" => Map { - "col" => 16, - "line" => 1, - "offset" => 15, - }, - }, -] -`; - -exports[`AlphaTexParserTest errors at205 fermata 1`] = ` -Score (1,1) -> (1,20) { - bars: Array [ - Bar (1,1) -> (1,20) { - beats: Array [ - Beat (1,1) -> (1,20) { - notes: NoteList (1,1) -> (1,20) { - notes: Array [ - Note (1,1) -> (1,20) { - noteValue: Ident "C4" (1,1) -> (1,3), - noteEffects: Props (1,4) -> (1,20) { - openBrace: LBrace (1,4) -> (1,5), - properties: Array [ - Prop (1,5) -> (1,12) { - property: Ident "fermata" (1,5) -> (1,12), - }, - Prop (1,13) -> (1,20) { - property: Ident "invalid" (1,13) -> (1,20), - }, - ], - }, - }, - ], - }, - }, - ], - }, - ], -} -`; - -exports[`AlphaTexParserTest errors at205 fermata: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at205 > gracetype > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at205 fermata: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at205 > gracetype > parser-diagnostics 1`] = ` +[ Map { "code" => 205, "severity" => 2, "message" => "Unrecognized property 'invalid'.", "start" => Map { - "col" => 20, - "line" => 1, - "offset" => 19, - }, - }, - Map { - "code" => 206, - "severity" => 2, - "message" => "Unexpected end of file. Group not closed.", - "start" => Map { - "col" => 20, + "col" => 15, "line" => 1, - "offset" => 19, + "offset" => 14, }, }, ] `; -exports[`AlphaTexParserTest errors at205 gracetype 1`] = ` +exports[`AlphaTexParserTest > errors > at205 > gracetype 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,16) { - beats: Array [ + beats: [ Beat (1,1) -> (1,16) { notes: NoteList (1,1) -> (1,16) { - notes: Array [ + notes: [ Note (1,1) -> (1,16) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,16) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,7) { property: Ident "gr" (1,5) -> (1,7), }, @@ -1403,37 +1274,37 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParserTest errors at205 gracetype: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at205 > note > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at205 gracetype: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at205 > note > parser-diagnostics 1`] = ` +[ Map { "code" => 205, "severity" => 2, - "message" => "Unrecognized property 'invalid'.", + "message" => "Unrecognized property 'unknown'.", "start" => Map { - "col" => 15, + "col" => 14, "line" => 1, - "offset" => 14, + "offset" => 13, }, }, ] `; -exports[`AlphaTexParserTest errors at205 note 1`] = ` +exports[`AlphaTexParserTest > errors > at205 > note 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,16) { - beats: Array [ + beats: [ Beat (1,3) -> (1,16) { notes: NoteList (1,3) -> (1,16) { openParenthesis: LParen (1,3) -> (1,4), - notes: Array [ + notes: [ Note (1,4) -> (1,15) { noteValue: Ident "C4" (1,4) -> (1,6), noteEffects: Props (1,6) -> (1,15) { openBrace: LBrace (1,6) -> (1,7), - properties: Array [ + properties: [ Prop (1,7) -> (1,14) { property: Ident "unknown" (1,7) -> (1,14), }, @@ -1451,32 +1322,32 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParserTest errors at205 note: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at206 > note list > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at205 note: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at206 > note list > parser-diagnostics 1`] = ` +[ Map { - "code" => 205, + "code" => 206, "severity" => 2, - "message" => "Unrecognized property 'unknown'.", + "message" => "Unexpected end of file. Group not closed.", "start" => Map { - "col" => 14, + "col" => 4, "line" => 1, - "offset" => 13, + "offset" => 3, }, }, ] `; -exports[`AlphaTexParserTest errors at206 note list 1`] = ` +exports[`AlphaTexParserTest > errors > at206 > note list 1`] = ` Score (1,1) -> (1,4) { - bars: Array [ + bars: [ Bar (1,1) -> (1,4) { - beats: Array [ + beats: [ Beat (1,1) -> (1,4) { notes: NoteList (1,1) -> (1,4) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,4) { noteValue: Ident "C4" (1,2) -> (1,4), }, @@ -1489,80 +1360,28 @@ Score (1,1) -> (1,4) { } `; -exports[`AlphaTexParserTest errors at206 note list: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest errors at206 note list: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 206, - "severity" => 2, - "message" => "Unexpected end of file. Group not closed.", - "start" => Map { - "col" => 4, - "line" => 1, - "offset" => 3, - }, - }, -] -`; - -exports[`AlphaTexParserTest errors at206 properties 1`] = ` -Score (1,1) -> (1,26) { - bars: Array [ - Bar (1,1) -> (1,26) { - metaData: Array [ - Meta (1,1) -> (1,26) { - tag: Tag "track" (1,1) -> (1,7) { - prefix: Backslash (1,1) -> (1,2), - tag: Ident "track" (1,2) -> (1,7), - }, - arguments: Arguments (1,8) -> (1,13) { - arguments: Array [ - String "Test" (1,8) -> (1,13), - ], - }, - properties: Props (1,15) -> (1,26) { - openBrace: LBrace (1,15) -> (1,16), - properties: Array [ - Prop (1,17) -> (1,26) { - property: Ident "color" (1,17) -> (1,22), - properties: Arguments (1,23) -> (1,26) { - arguments: Array [ - Ident "red" (1,23) -> (1,26), - ], - }, - }, - ], - }, - }, - ], - }, - ], -} -`; - -exports[`AlphaTexParserTest errors at206 properties: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > errors > at206 > values > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest errors at206 properties: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > errors > at206 > values > parser-diagnostics 1`] = ` +[ Map { "code" => 206, "severity" => 2, "message" => "Unexpected end of file. Group not closed.", "start" => Map { - "col" => 26, + "col" => 15, "line" => 1, - "offset" => 25, + "offset" => 14, }, }, ] `; -exports[`AlphaTexParserTest errors at206 values 1`] = ` +exports[`AlphaTexParserTest > errors > at206 > values 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -1570,7 +1389,7 @@ Score (1,1) -> (1,14) { }, arguments: Arguments (1,8) -> (1,14) { openParenthesis: LParen (1,8) -> (1,9), - arguments: Array [ + arguments: [ String "Test" (1,9) -> (1,14), ], }, @@ -1581,52 +1400,15 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParserTest errors at206 values: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest errors at206 values: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 206, - "severity" => 2, - "message" => "Unexpected end of file. Group not closed.", - "start" => Map { - "col" => 15, - "line" => 1, - "offset" => 14, - }, - }, -] -`; +exports[`AlphaTexParserTest > floats > tempo parenthesis > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest floats tempo 1`] = ` -Score (1,1) -> (1,28) { - bars: Array [ - Bar (1,1) -> (1,28) { - metaData: Array [ - Meta (1,3) -> (1,28) { - tag: Tag "tempo" (1,3) -> (1,9) { - prefix: Backslash (1,3) -> (1,4), - tag: Ident "tempo" (1,4) -> (1,9), - }, - arguments: Arguments (1,10) -> (1,28) { - arguments: Array [ - Number "120" (1,10) -> (1,13), - String "Moderate" (1,14) -> (1,23), - Number "0.5" (1,25) -> (1,28), - ], - }, - }, - ], - }, - ], -} -`; +exports[`AlphaTexParserTest > floats > tempo parenthesis > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest floats tempo parenthesis 1`] = ` +exports[`AlphaTexParserTest > floats > tempo parenthesis 1`] = ` Score (1,1) -> (1,30) { - bars: Array [ + bars: [ Bar (1,1) -> (1,30) { - metaData: Array [ + metaData: [ Meta (1,3) -> (1,30) { tag: Tag "tempo" (1,3) -> (1,9) { prefix: Backslash (1,3) -> (1,4), @@ -1634,7 +1416,7 @@ Score (1,1) -> (1,30) { }, arguments: Arguments (1,10) -> (1,30) { openParenthesis: LParen (1,10) -> (1,11), - arguments: Array [ + arguments: [ Number "120" (1,11) -> (1,14), String "Moderate" (1,15) -> (1,24), Number "0.5" (1,26) -> (1,29), @@ -1648,33 +1430,29 @@ Score (1,1) -> (1,30) { } `; -exports[`AlphaTexParserTest floats tempo parenthesis: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest floats tempo parenthesis: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest floats tempo: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > floats > valuelist > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest floats tempo: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > floats > valuelist > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest floats valuelist 1`] = ` +exports[`AlphaTexParserTest > floats > valuelist 1`] = ` Score (1,1) -> (1,13) { - bars: Array [ + bars: [ Bar (1,1) -> (1,13) { - metaData: Array [ + metaData: [ Meta (1,3) -> (1,13) { tag: Tag "scale" (1,3) -> (1,9) { prefix: Backslash (1,3) -> (1,4), tag: Ident "scale" (1,4) -> (1,9), }, arguments: Arguments (1,10) -> (1,13) { - arguments: Array [ + arguments: [ Number "0.5" (1,10) -> (1,13) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -1686,11 +1464,15 @@ Score (1,1) -> (1,13) { } `; -exports[`AlphaTexParserTest floats valuelist parenthesis 1`] = ` +exports[`AlphaTexParserTest > floats > valuelist parenthesis > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > floats > valuelist parenthesis > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > floats > valuelist parenthesis 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,19) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,19) { tag: Tag "unknown" (1,1) -> (1,9) { prefix: Backslash (1,1) -> (1,2), @@ -1698,7 +1480,7 @@ Score (1,1) -> (1,19) { }, arguments: Arguments (1,10) -> (1,19) { openParenthesis: LParen (1,10) -> (1,11), - arguments: Array [ + arguments: [ Number "1.2" (1,11) -> (1,14), Number "2.3" (1,15) -> (1,18), ], @@ -1711,59 +1493,68 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParserTest floats valuelist parenthesis: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest floats valuelist parenthesis: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > finished beat effect value, not closed > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest floats valuelist: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest floats valuelist: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > finished beat effect value, not closed > parser-diagnostics 1`] = ` +[ + Map { + "code" => 206, + "severity" => 2, + "message" => "Unexpected end of file. Group not closed.", + "start" => Map { + "col" => 51, + "line" => 1, + "offset" => 50, + }, + }, +] +`; -exports[`AlphaTexParserTest intermediate finished beat effect value, not closed 1`] = ` +exports[`AlphaTexParserTest > intermediate > finished beat effect value, not closed 1`] = ` Score (1,1) -> (1,49) { - bars: Array [ + bars: [ Bar (1,1) -> (1,49) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,49) { notes: NoteList (1,18) -> (1,34) { - notes: Array [ + notes: [ Note (1,18) -> (1,34) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,34) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,31) { property: Ident "slur" (1,23) -> (1,27), properties: Arguments (1,28) -> (1,31) { - arguments: Array [ + arguments: [ String "S1" (1,28) -> (1,31) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -1779,18 +1570,18 @@ Score (1,1) -> (1,49) { durationValue: Number "4" (1,37) -> (1,38), beatEffects: Props (1,39) -> (1,49) { openBrace: LBrace (1,39) -> (1,40), - properties: Array [ + properties: [ Prop (1,41) -> (1,49) { property: Ident "rasg" (1,41) -> (1,45), properties: Arguments (1,46) -> (1,49) { - arguments: Array [ + arguments: [ String "ii" (1,46) -> (1,49) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -1805,60 +1596,60 @@ Score (1,1) -> (1,49) { } `; -exports[`AlphaTexParserTest intermediate finished beat effect value, not closed: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > finished meta property value, not closed > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate finished beat effect value, not closed: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > finished meta property value, not closed > parser-diagnostics 1`] = ` +[ Map { "code" => 206, "severity" => 2, "message" => "Unexpected end of file. Group not closed.", "start" => Map { - "col" => 51, + "col" => 25, "line" => 1, - "offset" => 50, + "offset" => 24, }, }, ] `; -exports[`AlphaTexParserTest intermediate finished meta property value, not closed 1`] = ` +exports[`AlphaTexParserTest > intermediate > finished meta property value, not closed 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,24) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "track" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,10) { - arguments: Array [ + arguments: [ String "X" (1,8) -> (1,10) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, properties: Props (1,12) -> (1,24) { openBrace: LBrace (1,12) -> (1,13), - properties: Array [ + properties: [ Prop (1,14) -> (1,24) { property: Ident "color" (1,14) -> (1,19), properties: Arguments (1,20) -> (1,24) { - arguments: Array [ + arguments: [ String "red" (1,20) -> (1,24) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -1873,68 +1664,68 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParserTest intermediate finished meta property value, not closed : lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > finished note effect value, not closed > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate finished meta property value, not closed : parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > finished note effect value, not closed > parser-diagnostics 1`] = ` +[ Map { "code" => 206, "severity" => 2, "message" => "Unexpected end of file. Group not closed.", "start" => Map { - "col" => 25, + "col" => 32, "line" => 1, - "offset" => 24, + "offset" => 31, }, }, ] `; -exports[`AlphaTexParserTest intermediate finished note effect value, not closed 1`] = ` +exports[`AlphaTexParserTest > intermediate > finished note effect value, not closed 1`] = ` Score (1,1) -> (1,31) { - bars: Array [ + bars: [ Bar (1,1) -> (1,31) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,31) { notes: NoteList (1,18) -> (1,31) { - notes: Array [ + notes: [ Note (1,18) -> (1,31) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,31) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,31) { property: Ident "slur" (1,23) -> (1,27), properties: Arguments (1,28) -> (1,31) { - arguments: Array [ + arguments: [ String "S1" (1,28) -> (1,31) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -1952,68 +1743,55 @@ Score (1,1) -> (1,31) { } `; -exports[`AlphaTexParserTest intermediate finished note effect value, not closed: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started beat duration > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate finished note effect value, not closed: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 206, - "severity" => 2, - "message" => "Unexpected end of file. Group not closed.", - "start" => Map { - "col" => 32, - "line" => 1, - "offset" => 31, - }, - }, -] -`; +exports[`AlphaTexParserTest > intermediate > started beat duration > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started beat duration 1`] = ` +exports[`AlphaTexParserTest > intermediate > started beat duration 1`] = ` Score (1,1) -> (1,36) { - bars: Array [ + bars: [ Bar (1,1) -> (1,36) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,36) { notes: NoteList (1,18) -> (1,34) { - notes: Array [ + notes: [ Note (1,18) -> (1,34) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,34) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,31) { property: Ident "slur" (1,23) -> (1,27), properties: Arguments (1,28) -> (1,31) { - arguments: Array [ + arguments: [ String "S1" (1,28) -> (1,31) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2033,55 +1811,78 @@ Score (1,1) -> (1,36) { } `; -exports[`AlphaTexParserTest intermediate started beat duration: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started beat effect name > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started beat duration: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started beat effect name > parser-diagnostics 1`] = ` +[ + Map { + "code" => 205, + "severity" => 2, + "message" => "Unrecognized property 'ras'.", + "start" => Map { + "col" => 44, + "line" => 1, + "offset" => 43, + }, + }, + Map { + "code" => 206, + "severity" => 2, + "message" => "Unexpected end of file. Group not closed.", + "start" => Map { + "col" => 44, + "line" => 1, + "offset" => 43, + }, + }, +] +`; -exports[`AlphaTexParserTest intermediate started beat effect name 1`] = ` +exports[`AlphaTexParserTest > intermediate > started beat effect name 1`] = ` Score (1,1) -> (1,44) { - bars: Array [ + bars: [ Bar (1,1) -> (1,44) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,44) { notes: NoteList (1,18) -> (1,34) { - notes: Array [ + notes: [ Note (1,18) -> (1,34) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,34) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,31) { property: Ident "slur" (1,23) -> (1,27), properties: Arguments (1,28) -> (1,31) { - arguments: Array [ + arguments: [ String "S1" (1,28) -> (1,31) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2097,7 +1898,7 @@ Score (1,1) -> (1,44) { durationValue: Number "4" (1,37) -> (1,38), beatEffects: Props (1,39) -> (1,44) { openBrace: LBrace (1,39) -> (1,40), - properties: Array [ + properties: [ Prop (1,41) -> (1,44) { property: Ident "ras" (1,41) -> (1,44), }, @@ -2110,18 +1911,31 @@ Score (1,1) -> (1,44) { } `; -exports[`AlphaTexParserTest intermediate started beat effect name: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started beat effect value > lexer-diagnostics 1`] = ` +[ + Map { + "code" => 6, + "severity" => 2, + "message" => "Unexpected end of file. String not closed.", + "start" => Map { + "col" => 48, + "line" => 1, + "offset" => 47, + }, + }, +] +`; -exports[`AlphaTexParserTest intermediate started beat effect name: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started beat effect value > parser-diagnostics 1`] = ` +[ Map { - "code" => 205, + "code" => 203, "severity" => 2, - "message" => "Unrecognized property 'ras'.", + "message" => "Unexpected end of file.", "start" => Map { - "col" => 44, + "col" => 48, "line" => 1, - "offset" => 43, + "offset" => 47, }, }, Map { @@ -2129,59 +1943,59 @@ Array [ "severity" => 2, "message" => "Unexpected end of file. Group not closed.", "start" => Map { - "col" => 44, + "col" => 48, "line" => 1, - "offset" => 43, + "offset" => 47, }, }, ] `; -exports[`AlphaTexParserTest intermediate started beat effect value 1`] = ` +exports[`AlphaTexParserTest > intermediate > started beat effect value 1`] = ` Score (1,1) -> (1,45) { - bars: Array [ + bars: [ Bar (1,1) -> (1,45) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,45) { notes: NoteList (1,18) -> (1,34) { - notes: Array [ + notes: [ Note (1,18) -> (1,34) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,34) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,31) { property: Ident "slur" (1,23) -> (1,27), properties: Arguments (1,28) -> (1,31) { - arguments: Array [ + arguments: [ String "S1" (1,28) -> (1,31) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2197,7 +2011,7 @@ Score (1,1) -> (1,45) { durationValue: Number "4" (1,37) -> (1,38), beatEffects: Props (1,39) -> (1,45) { openBrace: LBrace (1,39) -> (1,40), - properties: Array [ + properties: [ Prop (1,41) -> (1,45) { property: Ident "rasg" (1,41) -> (1,45), }, @@ -2210,91 +2024,68 @@ Score (1,1) -> (1,45) { } `; -exports[`AlphaTexParserTest intermediate started beat effect value: lexer-diagnostics 1`] = ` -Array [ - Map { - "code" => 6, - "severity" => 2, - "message" => "Unexpected end of file. String not closed.", - "start" => Map { - "col" => 48, - "line" => 1, - "offset" => 47, - }, - }, -] -`; +exports[`AlphaTexParserTest > intermediate > started beat effects > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started beat effect value: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 203, - "severity" => 2, - "message" => "Unexpected end of file.", - "start" => Map { - "col" => 48, - "line" => 1, - "offset" => 47, - }, - }, +exports[`AlphaTexParserTest > intermediate > started beat effects > parser-diagnostics 1`] = ` +[ Map { "code" => 206, "severity" => 2, "message" => "Unexpected end of file. Group not closed.", "start" => Map { - "col" => 48, + "col" => 41, "line" => 1, - "offset" => 47, + "offset" => 40, }, }, ] `; -exports[`AlphaTexParserTest intermediate started beat effects 1`] = ` +exports[`AlphaTexParserTest > intermediate > started beat effects 1`] = ` Score (1,1) -> (1,40) { - bars: Array [ + bars: [ Bar (1,1) -> (1,40) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,40) { notes: NoteList (1,18) -> (1,34) { - notes: Array [ + notes: [ Note (1,18) -> (1,34) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,34) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,31) { property: Ident "slur" (1,23) -> (1,27), properties: Arguments (1,28) -> (1,31) { - arguments: Array [ + arguments: [ String "S1" (1,28) -> (1,31) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2310,7 +2101,7 @@ Score (1,1) -> (1,40) { durationValue: Number "4" (1,37) -> (1,38), beatEffects: Props (1,39) -> (1,40) { openBrace: LBrace (1,39) -> (1,40), - properties: Array [], + properties: [], }, }, ], @@ -2319,47 +2110,47 @@ Score (1,1) -> (1,40) { } `; -exports[`AlphaTexParserTest intermediate started beat effects: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest intermediate started beat effects: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started initial meta > lexer-diagnostics 1`] = ` +[ Map { - "code" => 206, + "code" => 2, "severity" => 2, - "message" => "Unexpected end of file. Group not closed.", + "message" => "Missing identifier after meta data start", "start" => Map { - "col" => 41, + "col" => 2, "line" => 1, - "offset" => 40, + "offset" => 1, }, }, ] `; -exports[`AlphaTexParserTest intermediate started initial meta 1`] = `Score (1,1) -> (1,2)`; +exports[`AlphaTexParserTest > intermediate > started initial meta > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > intermediate > started initial meta 1`] = `Score (1,1) -> (1,2)`; -exports[`AlphaTexParserTest intermediate started initial meta: lexer-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started meta > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > intermediate > started meta > parser-diagnostics 1`] = ` +[ Map { - "code" => 2, + "code" => 204, "severity" => 2, - "message" => "Missing identifier after meta data start", + "message" => "Unrecognized metadata 'tr'.", "start" => Map { - "col" => 2, + "col" => 4, "line" => 1, - "offset" => 1, + "offset" => 3, }, }, ] `; -exports[`AlphaTexParserTest intermediate started initial meta: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest intermediate started meta 1`] = ` +exports[`AlphaTexParserTest > intermediate > started meta 1`] = ` Score (1,1) -> (1,4) { - bars: Array [ + bars: [ Bar (1,1) -> (1,4) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,4) { tag: Tag "tr" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), @@ -2372,44 +2163,10 @@ Score (1,1) -> (1,4) { } `; -exports[`AlphaTexParserTest intermediate started meta properties 1`] = ` -Score (1,1) -> (1,13) { - bars: Array [ - Bar (1,1) -> (1,13) { - metaData: Array [ - Meta (1,1) -> (1,13) { - tag: Tag "track" (1,1) -> (1,7) { - prefix: Backslash (1,1) -> (1,2), - tag: Ident "track" (1,2) -> (1,7), - }, - arguments: Arguments (1,8) -> (1,10) { - arguments: Array [ - String "X" (1,8) -> (1,10) { - parameterIndices: Map { - 0 => 0, - }, - }, - ], - signatureCandidateIndices: Array [ - 0, - ], - validated: true, - }, - properties: Props (1,12) -> (1,13) { - openBrace: LBrace (1,12) -> (1,13), - properties: Array [], - }, - }, - ], - }, - ], -} -`; - -exports[`AlphaTexParserTest intermediate started meta properties: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started meta properties > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started meta properties: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started meta properties > parser-diagnostics 1`] = ` +[ Map { "code" => 206, "severity" => 2, @@ -2423,36 +2180,32 @@ Array [ ] `; -exports[`AlphaTexParserTest intermediate started meta property name 1`] = ` -Score (1,1) -> (1,16) { - bars: Array [ - Bar (1,1) -> (1,16) { - metaData: Array [ - Meta (1,1) -> (1,16) { +exports[`AlphaTexParserTest > intermediate > started meta properties 1`] = ` +Score (1,1) -> (1,13) { + bars: [ + Bar (1,1) -> (1,13) { + metaData: [ + Meta (1,1) -> (1,13) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "track" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,10) { - arguments: Array [ + arguments: [ String "X" (1,8) -> (1,10) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, - properties: Props (1,12) -> (1,16) { + properties: Props (1,12) -> (1,13) { openBrace: LBrace (1,12) -> (1,13), - properties: Array [ - Prop (1,14) -> (1,16) { - property: Ident "co" (1,14) -> (1,16), - }, - ], + properties: [], }, }, ], @@ -2461,10 +2214,10 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParserTest intermediate started meta property name: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started meta property name > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started meta property name: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started meta property name > parser-diagnostics 1`] = ` +[ Map { "code" => 205, "severity" => 2, @@ -2488,34 +2241,34 @@ Array [ ] `; -exports[`AlphaTexParserTest intermediate started meta property value 1`] = ` -Score (1,1) -> (1,19) { - bars: Array [ - Bar (1,1) -> (1,19) { - metaData: Array [ - Meta (1,1) -> (1,19) { +exports[`AlphaTexParserTest > intermediate > started meta property name 1`] = ` +Score (1,1) -> (1,16) { + bars: [ + Bar (1,1) -> (1,16) { + metaData: [ + Meta (1,1) -> (1,16) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "track" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,10) { - arguments: Array [ + arguments: [ String "X" (1,8) -> (1,10) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, - properties: Props (1,12) -> (1,19) { + properties: Props (1,12) -> (1,16) { openBrace: LBrace (1,12) -> (1,13), - properties: Array [ - Prop (1,14) -> (1,19) { - property: Ident "color" (1,14) -> (1,19), + properties: [ + Prop (1,14) -> (1,16) { + property: Ident "co" (1,14) -> (1,16), }, ], }, @@ -2526,8 +2279,8 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParserTest intermediate started meta property value: lexer-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started meta property value > lexer-diagnostics 1`] = ` +[ Map { "code" => 6, "severity" => 2, @@ -2541,8 +2294,8 @@ Array [ ] `; -exports[`AlphaTexParserTest intermediate started meta property value: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started meta property value > parser-diagnostics 1`] = ` +[ Map { "code" => 203, "severity" => 2, @@ -2566,15 +2319,36 @@ Array [ ] `; -exports[`AlphaTexParserTest intermediate started meta string 1`] = ` -Score (1,1) -> (1,7) { - bars: Array [ - Bar (1,1) -> (1,7) { - metaData: Array [ - Meta (1,1) -> (1,7) { - tag: Tag "title" (1,1) -> (1,7) { +exports[`AlphaTexParserTest > intermediate > started meta property value 1`] = ` +Score (1,1) -> (1,19) { + bars: [ + Bar (1,1) -> (1,19) { + metaData: [ + Meta (1,1) -> (1,19) { + tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), - tag: Ident "title" (1,2) -> (1,7), + tag: Ident "track" (1,2) -> (1,7), + }, + arguments: Arguments (1,8) -> (1,10) { + arguments: [ + String "X" (1,8) -> (1,10) { + parameterIndices: Map { + 0 => 0, + }, + }, + ], + signatureCandidateIndices: [ + 0, + ], + validated: true, + }, + properties: Props (1,12) -> (1,19) { + openBrace: LBrace (1,12) -> (1,13), + properties: [ + Prop (1,14) -> (1,19) { + property: Ident "color" (1,14) -> (1,19), + }, + ], }, }, ], @@ -2583,8 +2357,8 @@ Score (1,1) -> (1,7) { } `; -exports[`AlphaTexParserTest intermediate started meta string: lexer-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started meta string > lexer-diagnostics 1`] = ` +[ Map { "code" => 6, "severity" => 2, @@ -2598,8 +2372,8 @@ Array [ ] `; -exports[`AlphaTexParserTest intermediate started meta string: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started meta string > parser-diagnostics 1`] = ` +[ Map { "code" => 203, "severity" => 2, @@ -2613,57 +2387,84 @@ Array [ ] `; -exports[`AlphaTexParserTest intermediate started meta: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started meta string 1`] = ` +Score (1,1) -> (1,7) { + bars: [ + Bar (1,1) -> (1,7) { + metaData: [ + Meta (1,1) -> (1,7) { + tag: Tag "title" (1,1) -> (1,7) { + prefix: Backslash (1,1) -> (1,2), + tag: Ident "title" (1,2) -> (1,7), + }, + }, + ], + }, + ], +} +`; + +exports[`AlphaTexParserTest > intermediate > started note effect name > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started meta: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started note effect name > parser-diagnostics 1`] = ` +[ Map { - "code" => 204, + "code" => 205, "severity" => 2, - "message" => "Unrecognized metadata 'tr'.", + "message" => "Unrecognized property 'slu'.", "start" => Map { - "col" => 4, + "col" => 26, "line" => 1, - "offset" => 3, + "offset" => 25, + }, + }, + Map { + "code" => 206, + "severity" => 2, + "message" => "Unexpected end of file. Group not closed.", + "start" => Map { + "col" => 26, + "line" => 1, + "offset" => 25, }, }, ] `; -exports[`AlphaTexParserTest intermediate started note effect name 1`] = ` +exports[`AlphaTexParserTest > intermediate > started note effect name 1`] = ` Score (1,1) -> (1,26) { - bars: Array [ + bars: [ Bar (1,1) -> (1,26) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,26) { notes: NoteList (1,18) -> (1,26) { - notes: Array [ + notes: [ Note (1,18) -> (1,26) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,26) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,26) { property: Ident "slu" (1,23) -> (1,26), }, @@ -2679,18 +2480,31 @@ Score (1,1) -> (1,26) { } `; -exports[`AlphaTexParserTest intermediate started note effect name: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started note effect value > lexer-diagnostics 1`] = ` +[ + Map { + "code" => 6, + "severity" => 2, + "message" => "Unexpected end of file. String not closed.", + "start" => Map { + "col" => 31, + "line" => 1, + "offset" => 30, + }, + }, +] +`; -exports[`AlphaTexParserTest intermediate started note effect name: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > intermediate > started note effect value > parser-diagnostics 1`] = ` +[ Map { - "code" => 205, + "code" => 203, "severity" => 2, - "message" => "Unrecognized property 'slu'.", + "message" => "Unexpected end of file.", "start" => Map { - "col" => 26, + "col" => 31, "line" => 1, - "offset" => 25, + "offset" => 30, }, }, Map { @@ -2698,48 +2512,48 @@ Array [ "severity" => 2, "message" => "Unexpected end of file. Group not closed.", "start" => Map { - "col" => 26, + "col" => 31, "line" => 1, - "offset" => 25, + "offset" => 30, }, }, ] `; -exports[`AlphaTexParserTest intermediate started note effect value 1`] = ` +exports[`AlphaTexParserTest > intermediate > started note effect value 1`] = ` Score (1,1) -> (1,27) { - bars: Array [ + bars: [ Bar (1,1) -> (1,27) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,27) { notes: NoteList (1,18) -> (1,27) { - notes: Array [ + notes: [ Note (1,18) -> (1,27) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,27) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,27) { property: Ident "slur" (1,23) -> (1,27), }, @@ -2755,80 +2569,57 @@ Score (1,1) -> (1,27) { } `; -exports[`AlphaTexParserTest intermediate started note effect value: lexer-diagnostics 1`] = ` -Array [ - Map { - "code" => 6, - "severity" => 2, - "message" => "Unexpected end of file. String not closed.", - "start" => Map { - "col" => 31, - "line" => 1, - "offset" => 30, - }, - }, -] -`; +exports[`AlphaTexParserTest > intermediate > started note effects > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started note effect value: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 203, - "severity" => 2, - "message" => "Unexpected end of file.", - "start" => Map { - "col" => 31, - "line" => 1, - "offset" => 30, - }, - }, +exports[`AlphaTexParserTest > intermediate > started note effects > parser-diagnostics 1`] = ` +[ Map { "code" => 206, "severity" => 2, "message" => "Unexpected end of file. Group not closed.", "start" => Map { - "col" => 31, + "col" => 23, "line" => 1, - "offset" => 30, + "offset" => 22, }, }, ] `; -exports[`AlphaTexParserTest intermediate started note effects 1`] = ` +exports[`AlphaTexParserTest > intermediate > started note effects 1`] = ` Score (1,1) -> (1,22) { - bars: Array [ + bars: [ Bar (1,1) -> (1,22) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,22) { notes: NoteList (1,18) -> (1,22) { - notes: Array [ + notes: [ Note (1,18) -> (1,22) { noteValue: Ident "C4" (1,18) -> (1,20), noteEffects: Props (1,21) -> (1,22) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [], + properties: [], }, }, ], @@ -2840,52 +2631,39 @@ Score (1,1) -> (1,22) { } `; -exports[`AlphaTexParserTest intermediate started note effects: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > intermediate > started pitched note > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started note effects: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 206, - "severity" => 2, - "message" => "Unexpected end of file. Group not closed.", - "start" => Map { - "col" => 23, - "line" => 1, - "offset" => 22, - }, - }, -] -`; +exports[`AlphaTexParserTest > intermediate > started pitched note > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started pitched note 1`] = ` +exports[`AlphaTexParserTest > intermediate > started pitched note 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,19) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,19) { notes: NoteList (1,18) -> (1,19) { - notes: Array [ + notes: [ Note (1,18) -> (1,19) { noteValue: Ident "C" (1,18) -> (1,19), }, @@ -2898,34 +2676,60 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParserTest intermediate started pitched note: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > recovery > props > additional values > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest intermediate started pitched note: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > recovery > props > additional values > parser-diagnostics 1`] = ` +[ + Map { + "code" => 220, + "severity" => 2, + "message" => "Error parsing arguments: unexpected additional arguments. Signatures: +(String) +(Ident)", + "start" => Map { + "col" => 22, + "line" => 1, + "offset" => 21, + }, + }, + Map { + "code" => 220, + "severity" => 2, + "message" => "Error parsing arguments: unexpected additional arguments. Signatures: +()", + "start" => Map { + "col" => 26, + "line" => 1, + "offset" => 25, + }, + }, +] +`; -exports[`AlphaTexParserTest recovery props additional values 1`] = ` +exports[`AlphaTexParserTest > recovery > props > additional values 1`] = ` Score (1,1) -> (1,30) { - bars: Array [ + bars: [ Bar (1,1) -> (1,30) { - beats: Array [ + beats: [ Beat (1,1) -> (1,30) { notes: NoteList (1,1) -> (1,30) { - notes: Array [ + notes: [ Note (1,1) -> (1,30) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,30) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,22) { property: Ident "slur" (1,6) -> (1,10), properties: Arguments (1,11) -> (1,22) { - arguments: Array [ + arguments: [ String "S1" (1,11) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -2950,60 +2754,47 @@ Score (1,1) -> (1,30) { } `; -exports[`AlphaTexParserTest recovery props additional values: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > recovery > props > unknown property > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest recovery props additional values: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 220, - "severity" => 2, - "message" => "Error parsing arguments: unexpected additional arguments. Signatures: -(String) -(Ident)", - "start" => Map { - "col" => 22, - "line" => 1, - "offset" => 21, - }, - }, +exports[`AlphaTexParserTest > recovery > props > unknown property > parser-diagnostics 1`] = ` +[ Map { - "code" => 220, + "code" => 205, "severity" => 2, - "message" => "Error parsing arguments: unexpected additional arguments. Signatures: -()", + "message" => "Unrecognized property 'invalid'.", "start" => Map { - "col" => 26, + "col" => 42, "line" => 1, - "offset" => 25, + "offset" => 41, }, }, ] `; -exports[`AlphaTexParserTest recovery props unknown property 1`] = ` +exports[`AlphaTexParserTest > recovery > props > unknown property 1`] = ` Score (1,1) -> (1,45) { - bars: Array [ + bars: [ Bar (1,1) -> (1,45) { - beats: Array [ + beats: [ Beat (1,1) -> (1,45) { notes: NoteList (1,1) -> (1,45) { - notes: Array [ + notes: [ Note (1,1) -> (1,45) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,45) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,14) { property: Ident "slur" (1,6) -> (1,10), properties: Arguments (1,11) -> (1,14) { - arguments: Array [ + arguments: [ String "s1" (1,11) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -3028,43 +2819,44 @@ Score (1,1) -> (1,45) { } `; -exports[`AlphaTexParserTest recovery props unknown property: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > recovery > props > unknown value > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest recovery props unknown property: parser-diagnostics 1`] = ` -Array [ +exports[`AlphaTexParserTest > recovery > props > unknown value > parser-diagnostics 1`] = ` +[ Map { - "code" => 205, + "code" => 219, "severity" => 2, - "message" => "Unrecognized property 'invalid'.", + "message" => "Error parsing arguments: no overload matched arguments (String). Signatures: +(Ident|String)", "start" => Map { - "col" => 42, + "col" => 19, "line" => 1, - "offset" => 41, + "offset" => 18, }, }, ] `; -exports[`AlphaTexParserTest recovery props unknown value 1`] = ` +exports[`AlphaTexParserTest > recovery > props > unknown value 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - beats: Array [ + beats: [ Beat (1,1) -> (1,24) { notes: NoteList (1,1) -> (1,24) { - notes: Array [ + notes: [ Note (1,1) -> (1,24) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,24) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,19) { property: Ident "rasg" (1,6) -> (1,10), properties: Arguments (1,11) -> (1,19) { - arguments: Array [ + arguments: [ String "invalid" (1,11) -> (1,19), ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], }, @@ -3085,36 +2877,22 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParserTest recovery props unknown value: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bar-meta > known no score meta > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest recovery props unknown value: parser-diagnostics 1`] = ` -Array [ - Map { - "code" => 219, - "severity" => 2, - "message" => "Error parsing arguments: no overload matched arguments (String). Signatures: -(Ident|String)", - "start" => Map { - "col" => 19, - "line" => 1, - "offset" => 18, - }, - }, -] -`; +exports[`AlphaTexParserTest > valid-bar-meta > known no score meta > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bar-meta known no score meta 1`] = ` +exports[`AlphaTexParserTest > valid-bar-meta > known no score meta 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,13) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,8) { tag: Tag "ts" (1,1) -> (1,4) { prefix: Backslash (1,1) -> (1,2), tag: Ident "ts" (1,2) -> (1,4), }, arguments: Arguments (1,5) -> (1,8) { - arguments: Array [ + arguments: [ Number "3" (1,5) -> (1,6) { parameterIndices: Map { 1 => 0, @@ -3126,17 +2904,17 @@ Score (1,1) -> (1,16) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,9) -> (1,11) { notes: NoteList (1,9) -> (1,11) { - notes: Array [ + notes: [ Note (1,9) -> (1,11) { noteValue: Ident "C4" (1,9) -> (1,11), }, @@ -3147,10 +2925,10 @@ Score (1,1) -> (1,16) { pipe: Pipe (1,12) -> (1,13), }, Bar (1,14) -> (1,16) { - beats: Array [ + beats: [ Beat (1,14) -> (1,16) { notes: NoteList (1,14) -> (1,16) { - notes: Array [ + notes: [ Note (1,14) -> (1,16) { noteValue: Ident "C4" (1,14) -> (1,16), }, @@ -3163,22 +2941,22 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParserTest valid-bar-meta known no score meta: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bar-meta > known score meta > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bar-meta known no score meta: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bar-meta > known score meta > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bar-meta known score meta 1`] = ` +exports[`AlphaTexParserTest > valid-bar-meta > known score meta 1`] = ` Score (1,1) -> (1,29) { - bars: Array [ + bars: [ Bar (1,1) -> (1,26) { - metaData: Array [ + metaData: [ Meta (1,3) -> (1,10) { tag: Tag "ts" (1,3) -> (1,6) { prefix: Backslash (1,3) -> (1,4), tag: Ident "ts" (1,4) -> (1,6), }, arguments: Arguments (1,7) -> (1,10) { - arguments: Array [ + arguments: [ Number "3" (1,7) -> (1,8) { parameterIndices: Map { 1 => 0, @@ -3190,18 +2968,18 @@ Score (1,1) -> (1,29) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,12) -> (1,21) { notes: NoteList (1,12) -> (1,21) { openParenthesis: LParen (1,12) -> (1,13), - notes: Array [ + notes: [ Note (1,13) -> (1,19) { noteValue: String "Value" (1,13) -> (1,19), }, @@ -3211,7 +2989,7 @@ Score (1,1) -> (1,29) { }, Beat (1,22) -> (1,24) { notes: NoteList (1,22) -> (1,24) { - notes: Array [ + notes: [ Note (1,22) -> (1,24) { noteValue: Ident "C4" (1,22) -> (1,24), }, @@ -3222,10 +3000,10 @@ Score (1,1) -> (1,29) { pipe: Pipe (1,25) -> (1,26), }, Bar (1,27) -> (1,29) { - beats: Array [ + beats: [ Beat (1,27) -> (1,29) { notes: NoteList (1,27) -> (1,29) { - notes: Array [ + notes: [ Note (1,27) -> (1,29) { noteValue: Ident "C4" (1,27) -> (1,29), }, @@ -3238,15 +3016,15 @@ Score (1,1) -> (1,29) { } `; -exports[`AlphaTexParserTest valid-bar-meta known score meta: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bar-meta > unknown no score meta > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bar-meta known score meta: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bar-meta > unknown no score meta > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bar-meta unknown no score meta 1`] = ` +exports[`AlphaTexParserTest > valid-bar-meta > unknown no score meta 1`] = ` Score (1,1) -> (1,31) { - bars: Array [ + bars: [ Bar (1,1) -> (1,28) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,23) { tag: Tag "notExisting" (1,1) -> (1,13) { prefix: Backslash (1,1) -> (1,2), @@ -3254,17 +3032,17 @@ Score (1,1) -> (1,31) { }, arguments: Arguments (1,14) -> (1,23) { openParenthesis: LParen (1,14) -> (1,15), - arguments: Array [ + arguments: [ String "Value" (1,15) -> (1,21), ], closeParenthesis: RParen (1,22) -> (1,23), }, }, ], - beats: Array [ + beats: [ Beat (1,24) -> (1,26) { notes: NoteList (1,24) -> (1,26) { - notes: Array [ + notes: [ Note (1,24) -> (1,26) { noteValue: Ident "C4" (1,24) -> (1,26), }, @@ -3275,10 +3053,10 @@ Score (1,1) -> (1,31) { pipe: Pipe (1,27) -> (1,28), }, Bar (1,29) -> (1,31) { - beats: Array [ + beats: [ Beat (1,29) -> (1,31) { notes: NoteList (1,29) -> (1,31) { - notes: Array [ + notes: [ Note (1,29) -> (1,31) { noteValue: Ident "C4" (1,29) -> (1,31), }, @@ -3291,15 +3069,15 @@ Score (1,1) -> (1,31) { } `; -exports[`AlphaTexParserTest valid-bar-meta unknown no score meta: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bar-meta > unkonwn score meta > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bar-meta unknown no score meta: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bar-meta > unkonwn score meta > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bar-meta unkonwn score meta 1`] = ` +exports[`AlphaTexParserTest > valid-bar-meta > unkonwn score meta 1`] = ` Score (1,1) -> (1,33) { - bars: Array [ + bars: [ Bar (1,1) -> (1,30) { - metaData: Array [ + metaData: [ Meta (1,3) -> (1,25) { tag: Tag "notExisting" (1,3) -> (1,15) { prefix: Backslash (1,3) -> (1,4), @@ -3307,17 +3085,17 @@ Score (1,1) -> (1,33) { }, arguments: Arguments (1,16) -> (1,25) { openParenthesis: LParen (1,16) -> (1,17), - arguments: Array [ + arguments: [ String "Value" (1,17) -> (1,23), ], closeParenthesis: RParen (1,24) -> (1,25), }, }, ], - beats: Array [ + beats: [ Beat (1,26) -> (1,28) { notes: NoteList (1,26) -> (1,28) { - notes: Array [ + notes: [ Note (1,26) -> (1,28) { noteValue: Ident "C4" (1,26) -> (1,28), }, @@ -3328,10 +3106,10 @@ Score (1,1) -> (1,33) { pipe: Pipe (1,29) -> (1,30), }, Bar (1,31) -> (1,33) { - beats: Array [ + beats: [ Beat (1,31) -> (1,33) { notes: NoteList (1,31) -> (1,33) { - notes: Array [ + notes: [ Note (1,31) -> (1,33) { noteValue: Ident "C4" (1,31) -> (1,33), }, @@ -3344,18 +3122,18 @@ Score (1,1) -> (1,33) { } `; -exports[`AlphaTexParserTest valid-bar-meta unkonwn score meta: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bars > empty at end > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bar-meta unkonwn score meta: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bars > empty at end > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bars empty at end 1`] = ` +exports[`AlphaTexParserTest > valid-bars > empty at end 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,5) { - beats: Array [ + beats: [ Beat (1,1) -> (1,3) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -3366,10 +3144,10 @@ Score (1,1) -> (1,10) { pipe: Pipe (1,4) -> (1,5), }, Bar (1,6) -> (1,10) { - beats: Array [ + beats: [ Beat (1,6) -> (1,8) { notes: NoteList (1,6) -> (1,8) { - notes: Array [ + notes: [ Note (1,6) -> (1,8) { noteValue: Ident "C4" (1,6) -> (1,8), }, @@ -3383,18 +3161,18 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParserTest valid-bars empty at end: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bars > multiple empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bars empty at end: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bars > multiple empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bars multiple empty 1`] = ` +exports[`AlphaTexParserTest > valid-bars > multiple empty 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,5) { - beats: Array [ + beats: [ Beat (1,1) -> (1,3) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -3405,10 +3183,10 @@ Score (1,1) -> (1,16) { pipe: Pipe (1,4) -> (1,5), }, Bar (1,6) -> (1,10) { - beats: Array [ + beats: [ Beat (1,6) -> (1,8) { notes: NoteList (1,6) -> (1,8) { - notes: Array [ + notes: [ Note (1,6) -> (1,8) { noteValue: Ident "C4" (1,6) -> (1,8), }, @@ -3431,14 +3209,18 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParserTest valid-bars multiple empty then filled 1`] = ` +exports[`AlphaTexParserTest > valid-bars > multiple empty then filled > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-bars > multiple empty then filled > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-bars > multiple empty then filled 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,5) { - beats: Array [ + beats: [ Beat (1,1) -> (1,3) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -3449,10 +3231,10 @@ Score (1,1) -> (1,19) { pipe: Pipe (1,4) -> (1,5), }, Bar (1,6) -> (1,10) { - beats: Array [ + beats: [ Beat (1,6) -> (1,8) { notes: NoteList (1,6) -> (1,8) { - notes: Array [ + notes: [ Note (1,6) -> (1,8) { noteValue: Ident "C4" (1,6) -> (1,8), }, @@ -3472,10 +3254,10 @@ Score (1,1) -> (1,19) { pipe: Pipe (1,15) -> (1,16), }, Bar (1,17) -> (1,19) { - beats: Array [ + beats: [ Beat (1,17) -> (1,19) { notes: NoteList (1,17) -> (1,19) { - notes: Array [ + notes: [ Note (1,17) -> (1,19) { noteValue: Ident "C4" (1,17) -> (1,19), }, @@ -3488,22 +3270,18 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParserTest valid-bars multiple empty then filled: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bars > no score meta > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bars multiple empty then filled: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bars > no score meta > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bars multiple empty: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-bars multiple empty: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-bars no score meta 1`] = ` +exports[`AlphaTexParserTest > valid-bars > no score meta 1`] = ` Score (1,1) -> (1,9) { - bars: Array [ + bars: [ Bar (1,2) -> (1,6) { - beats: Array [ + beats: [ Beat (1,2) -> (1,4) { notes: NoteList (1,2) -> (1,4) { - notes: Array [ + notes: [ Note (1,2) -> (1,4) { noteValue: Ident "C4" (1,2) -> (1,4), }, @@ -3514,10 +3292,10 @@ Score (1,1) -> (1,9) { pipe: Pipe (1,5) -> (1,6), }, Bar (1,7) -> (1,9) { - beats: Array [ + beats: [ Beat (1,7) -> (1,9) { notes: NoteList (1,7) -> (1,9) { - notes: Array [ + notes: [ Note (1,7) -> (1,9) { noteValue: Ident "C4" (1,7) -> (1,9), }, @@ -3530,39 +3308,39 @@ Score (1,1) -> (1,9) { } `; -exports[`AlphaTexParserTest valid-bars no score meta: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bars > with score meta > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bars no score meta: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-bars > with score meta > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bars with score meta 1`] = ` +exports[`AlphaTexParserTest > valid-bars > with score meta 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,21) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,13) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,13) { - arguments: Array [ + arguments: [ String "Test" (1,8) -> (1,13) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,17) -> (1,19) { notes: NoteList (1,17) -> (1,19) { - notes: Array [ + notes: [ Note (1,17) -> (1,19) { noteValue: Ident "C4" (1,17) -> (1,19), }, @@ -3573,10 +3351,10 @@ Score (1,1) -> (1,24) { pipe: Pipe (1,20) -> (1,21), }, Bar (1,22) -> (1,24) { - beats: Array [ + beats: [ Beat (1,22) -> (1,24) { notes: NoteList (1,22) -> (1,24) { - notes: Array [ + notes: [ Note (1,22) -> (1,24) { noteValue: Ident "C4" (1,22) -> (1,24), }, @@ -3589,18 +3367,18 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParserTest valid-bars with score meta: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beat-effects > empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-bars with score meta: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beat-effects > empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beat-effects empty 1`] = ` +exports[`AlphaTexParserTest > valid-beat-effects > empty 1`] = ` Score (1,1) -> (1,8) { - bars: Array [ + bars: [ Bar (1,1) -> (1,8) { - beats: Array [ + beats: [ Beat (1,1) -> (1,8) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -3610,7 +3388,7 @@ Score (1,1) -> (1,8) { durationValue: Number "8" (1,4) -> (1,5), beatEffects: Props (1,6) -> (1,8) { openBrace: LBrace (1,6) -> (1,7), - properties: Array [], + properties: [], closeBrace: RBrace (1,7) -> (1,8), }, }, @@ -3620,18 +3398,18 @@ Score (1,1) -> (1,8) { } `; -exports[`AlphaTexParserTest valid-beat-effects empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beat-effects > known > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beat-effects empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beat-effects > known > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beat-effects known 1`] = ` +exports[`AlphaTexParserTest > valid-beat-effects > known 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - beats: Array [ + beats: [ Beat (1,1) -> (1,14) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -3641,11 +3419,11 @@ Score (1,1) -> (1,14) { durationValue: Number "8" (1,4) -> (1,5), beatEffects: Props (1,6) -> (1,14) { openBrace: LBrace (1,6) -> (1,7), - properties: Array [ + properties: [ Prop (1,7) -> (1,13) { property: Ident "tu" (1,7) -> (1,9), properties: Arguments (1,10) -> (1,13) { - arguments: Array [ + arguments: [ Number "2" (1,10) -> (1,11) { parameterIndices: Map { 0 => 0, @@ -3658,7 +3436,7 @@ Score (1,1) -> (1,14) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -3674,14 +3452,18 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParserTest valid-beat-effects known with list 1`] = ` +exports[`AlphaTexParserTest > valid-beat-effects > known with list > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beat-effects > known with list > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beat-effects > known with list 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,19) { - beats: Array [ + beats: [ Beat (1,1) -> (1,19) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -3691,12 +3473,12 @@ Score (1,1) -> (1,19) { durationValue: Number "8" (1,4) -> (1,5), beatEffects: Props (1,6) -> (1,19) { openBrace: LBrace (1,6) -> (1,7), - properties: Array [ + properties: [ Prop (1,7) -> (1,18) { property: Ident "tb" (1,7) -> (1,9), properties: Arguments (1,10) -> (1,18) { openParenthesis: LParen (1,10) -> (1,11), - arguments: Array [ + arguments: [ Number "0" (1,11) -> (1,12), Number "-2" (1,13) -> (1,15), Number "0" (1,16) -> (1,17), @@ -3714,22 +3496,18 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParserTest valid-beat-effects known with list: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beat-effects > multiple > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beat-effects known with list: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beat-effects > multiple > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beat-effects known: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beat-effects known: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beat-effects multiple 1`] = ` +exports[`AlphaTexParserTest > valid-beat-effects > multiple 1`] = ` Score (1,1) -> (1,30) { - bars: Array [ + bars: [ Bar (1,1) -> (1,30) { - beats: Array [ + beats: [ Beat (1,1) -> (1,30) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -3739,7 +3517,7 @@ Score (1,1) -> (1,30) { durationValue: Number "8" (1,4) -> (1,5), beatEffects: Props (1,6) -> (1,30) { openBrace: LBrace (1,6) -> (1,7), - properties: Array [ + properties: [ Prop (1,7) -> (1,10) { property: Ident "cre" (1,7) -> (1,10), }, @@ -3747,7 +3525,7 @@ Score (1,1) -> (1,30) { property: Ident "tb" (1,11) -> (1,13), properties: Arguments (1,14) -> (1,22) { openParenthesis: LParen (1,14) -> (1,15), - arguments: Array [ + arguments: [ Number "0" (1,15) -> (1,16), Number "-2" (1,17) -> (1,19), Number "0" (1,20) -> (1,21), @@ -3758,7 +3536,7 @@ Score (1,1) -> (1,30) { Prop (1,23) -> (1,29) { property: Ident "tu" (1,23) -> (1,25), properties: Arguments (1,26) -> (1,29) { - arguments: Array [ + arguments: [ Number "3" (1,26) -> (1,27) { parameterIndices: Map { 0 => 0, @@ -3771,7 +3549,7 @@ Score (1,1) -> (1,30) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -3787,18 +3565,18 @@ Score (1,1) -> (1,30) { } `; -exports[`AlphaTexParserTest valid-beat-effects multiple: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beat-effects > unknown > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beat-effects multiple: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beat-effects > unknown > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beat-effects unknown 1`] = ` +exports[`AlphaTexParserTest > valid-beat-effects > unknown 1`] = ` Score (1,1) -> (1,23) { - bars: Array [ + bars: [ Bar (1,1) -> (1,23) { - beats: Array [ + beats: [ Beat (1,1) -> (1,23) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -3808,12 +3586,12 @@ Score (1,1) -> (1,23) { durationValue: Number "8" (1,4) -> (1,5), beatEffects: Props (1,6) -> (1,23) { openBrace: LBrace (1,6) -> (1,7), - properties: Array [ + properties: [ Prop (1,7) -> (1,22) { property: Ident "unknown" (1,7) -> (1,14), properties: Arguments (1,15) -> (1,22) { openParenthesis: LParen (1,15) -> (1,16), - arguments: Array [ + arguments: [ Number "1" (1,16) -> (1,17), Number "2" (1,18) -> (1,19), Number "3" (1,20) -> (1,21), @@ -3831,18 +3609,18 @@ Score (1,1) -> (1,23) { } `; -exports[`AlphaTexParserTest valid-beat-effects unknown: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > basic > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beat-effects unknown: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > basic > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted basic 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-fretted > basic 1`] = ` Score (1,1) -> (1,8) { - bars: Array [ + bars: [ Bar (1,1) -> (1,8) { - beats: Array [ + beats: [ Beat (1,1) -> (1,4) { notes: NoteList (1,1) -> (1,4) { - notes: Array [ + notes: [ Note (1,1) -> (1,4) { noteValue: Number "3" (1,1) -> (1,2), noteStringDot: Dot (1,2) -> (1,3), @@ -3853,7 +3631,7 @@ Score (1,1) -> (1,8) { }, Beat (1,5) -> (1,8) { notes: NoteList (1,5) -> (1,8) { - notes: Array [ + notes: [ Note (1,5) -> (1,8) { noteValue: Number "4" (1,5) -> (1,6), noteStringDot: Dot (1,6) -> (1,7), @@ -3868,22 +3646,22 @@ Score (1,1) -> (1,8) { } `; -exports[`AlphaTexParserTest valid-beats-basic-fretted basic: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > complex > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted basic: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > complex > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted complex 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-fretted > complex 1`] = ` Score (1,1) -> (1,26) { - bars: Array [ + bars: [ Bar (1,1) -> (1,26) { - beats: Array [ + beats: [ Beat (1,1) -> (1,26) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), value: Number "2" (1,2) -> (1,3), }, notes: NoteList (1,4) -> (1,7) { - notes: Array [ + notes: [ Note (1,4) -> (1,7) { noteValue: Number "3" (1,4) -> (1,5), noteStringDot: Dot (1,5) -> (1,6), @@ -3897,14 +3675,14 @@ Score (1,1) -> (1,26) { beatMultiplierValue: Number "2" (1,12) -> (1,13), beatEffects: Props (1,14) -> (1,26) { openBrace: LBrace (1,14) -> (1,15), - properties: Array [ + properties: [ Prop (1,15) -> (1,18) { property: Ident "cre" (1,15) -> (1,18), }, Prop (1,19) -> (1,25) { property: Ident "tu" (1,19) -> (1,21), properties: Arguments (1,22) -> (1,25) { - arguments: Array [ + arguments: [ Number "3" (1,22) -> (1,23) { parameterIndices: Map { 0 => 0, @@ -3917,7 +3695,7 @@ Score (1,1) -> (1,26) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -3933,18 +3711,18 @@ Score (1,1) -> (1,26) { } `; -exports[`AlphaTexParserTest valid-beats-basic-fretted complex: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > duration > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted complex: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > duration > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted duration 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-fretted > duration 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - beats: Array [ + beats: [ Beat (1,1) -> (1,6) { notes: NoteList (1,1) -> (1,4) { - notes: Array [ + notes: [ Note (1,1) -> (1,4) { noteValue: Number "3" (1,1) -> (1,2), noteStringDot: Dot (1,2) -> (1,3), @@ -3957,7 +3735,7 @@ Score (1,1) -> (1,12) { }, Beat (1,7) -> (1,12) { notes: NoteList (1,7) -> (1,10) { - notes: Array [ + notes: [ Note (1,7) -> (1,10) { noteValue: Number "4" (1,7) -> (1,8), noteStringDot: Dot (1,8) -> (1,9), @@ -3974,18 +3752,22 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParserTest valid-beats-basic-fretted duration change 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-fretted > duration change > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-basic-fretted > duration change > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-basic-fretted > duration change 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - beats: Array [ + beats: [ Beat (1,1) -> (1,7) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), value: Number "2" (1,2) -> (1,3), }, notes: NoteList (1,4) -> (1,7) { - notes: Array [ + notes: [ Note (1,4) -> (1,7) { noteValue: Number "3" (1,4) -> (1,5), noteStringDot: Dot (1,5) -> (1,6), @@ -4000,7 +3782,7 @@ Score (1,1) -> (1,14) { value: Number "4" (1,9) -> (1,10), }, notes: NoteList (1,11) -> (1,14) { - notes: Array [ + notes: [ Note (1,11) -> (1,14) { noteValue: Number "4" (1,11) -> (1,12), noteStringDot: Dot (1,12) -> (1,13), @@ -4015,22 +3797,18 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParserTest valid-beats-basic-fretted duration change: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > effects empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted duration change: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > effects empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted duration: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-basic-fretted duration: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-basic-fretted effects empty 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-fretted > effects empty 1`] = ` Score (1,1) -> (1,18) { - bars: Array [ + bars: [ Bar (1,1) -> (1,18) { - beats: Array [ + beats: [ Beat (1,1) -> (1,9) { notes: NoteList (1,1) -> (1,4) { - notes: Array [ + notes: [ Note (1,1) -> (1,4) { noteValue: Number "3" (1,1) -> (1,2), noteStringDot: Dot (1,2) -> (1,3), @@ -4042,13 +3820,13 @@ Score (1,1) -> (1,18) { durationValue: Number "4" (1,5) -> (1,6), beatEffects: Props (1,7) -> (1,9) { openBrace: LBrace (1,7) -> (1,8), - properties: Array [], + properties: [], closeBrace: RBrace (1,8) -> (1,9), }, }, Beat (1,10) -> (1,18) { notes: NoteList (1,10) -> (1,13) { - notes: Array [ + notes: [ Note (1,10) -> (1,13) { noteValue: Number "4" (1,10) -> (1,11), noteStringDot: Dot (1,11) -> (1,12), @@ -4060,7 +3838,7 @@ Score (1,1) -> (1,18) { durationValue: Number "4" (1,14) -> (1,15), beatEffects: Props (1,16) -> (1,18) { openBrace: LBrace (1,16) -> (1,17), - properties: Array [], + properties: [], closeBrace: RBrace (1,17) -> (1,18), }, }, @@ -4070,18 +3848,18 @@ Score (1,1) -> (1,18) { } `; -exports[`AlphaTexParserTest valid-beats-basic-fretted effects empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > effects known > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted effects empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > effects known > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted effects known 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-fretted > effects known 1`] = ` Score (1,1) -> (1,31) { - bars: Array [ + bars: [ Bar (1,1) -> (1,31) { - beats: Array [ + beats: [ Beat (1,1) -> (1,12) { notes: NoteList (1,1) -> (1,4) { - notes: Array [ + notes: [ Note (1,1) -> (1,4) { noteValue: Number "3" (1,1) -> (1,2), noteStringDot: Dot (1,2) -> (1,3), @@ -4093,7 +3871,7 @@ Score (1,1) -> (1,31) { durationValue: Number "4" (1,5) -> (1,6), beatEffects: Props (1,7) -> (1,12) { openBrace: LBrace (1,7) -> (1,8), - properties: Array [ + properties: [ Prop (1,8) -> (1,9) { property: Ident "v" (1,8) -> (1,9), }, @@ -4106,7 +3884,7 @@ Score (1,1) -> (1,31) { }, Beat (1,13) -> (1,31) { notes: NoteList (1,13) -> (1,16) { - notes: Array [ + notes: [ Note (1,13) -> (1,16) { noteValue: Number "4" (1,13) -> (1,14), noteStringDot: Dot (1,14) -> (1,15), @@ -4118,14 +3896,14 @@ Score (1,1) -> (1,31) { durationValue: Number "4" (1,17) -> (1,18), beatEffects: Props (1,19) -> (1,31) { openBrace: LBrace (1,19) -> (1,20), - properties: Array [ + properties: [ Prop (1,20) -> (1,23) { property: Ident "cre" (1,20) -> (1,23), }, Prop (1,24) -> (1,30) { property: Ident "tu" (1,24) -> (1,26), properties: Arguments (1,27) -> (1,30) { - arguments: Array [ + arguments: [ Number "3" (1,27) -> (1,28) { parameterIndices: Map { 0 => 0, @@ -4138,7 +3916,7 @@ Score (1,1) -> (1,31) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -4154,18 +3932,18 @@ Score (1,1) -> (1,31) { } `; -exports[`AlphaTexParserTest valid-beats-basic-fretted effects known: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > multiplier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted effects known: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > multiplier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted multiplier 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-fretted > multiplier 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - beats: Array [ + beats: [ Beat (1,1) -> (1,6) { notes: NoteList (1,1) -> (1,4) { - notes: Array [ + notes: [ Note (1,1) -> (1,4) { noteValue: Number "3" (1,1) -> (1,2), noteStringDot: Dot (1,2) -> (1,3), @@ -4178,7 +3956,7 @@ Score (1,1) -> (1,12) { }, Beat (1,7) -> (1,12) { notes: NoteList (1,7) -> (1,10) { - notes: Array [ + notes: [ Note (1,7) -> (1,10) { noteValue: Number "4" (1,7) -> (1,8), noteStringDot: Dot (1,8) -> (1,9), @@ -4195,18 +3973,18 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParserTest valid-beats-basic-fretted multiplier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > spacing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted multiplier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-fretted > spacing > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted spacing 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-fretted > spacing 1`] = ` Score (1,1) -> (1,37) { - bars: Array [ + bars: [ Bar (1,1) -> (1,8) { - beats: Array [ + beats: [ Beat (1,1) -> (1,6) { notes: NoteList (1,1) -> (1,4) { - notes: Array [ + notes: [ Note (1,1) -> (1,4) { noteValue: Number "3" (1,1) -> (1,2), noteStringDot: Dot (1,2) -> (1,3), @@ -4221,10 +3999,10 @@ Score (1,1) -> (1,37) { pipe: Pipe (1,7) -> (1,8), }, Bar (1,9) -> (1,20) { - beats: Array [ + beats: [ Beat (1,9) -> (1,18) { notes: NoteList (1,9) -> (1,14) { - notes: Array [ + notes: [ Note (1,9) -> (1,14) { noteValue: Number "3" (1,9) -> (1,10), noteStringDot: Dot (1,11) -> (1,12), @@ -4239,10 +4017,10 @@ Score (1,1) -> (1,37) { pipe: Pipe (1,19) -> (1,20), }, Bar (1,21) -> (1,29) { - beats: Array [ + beats: [ Beat (1,21) -> (1,27) { notes: NoteList (1,21) -> (1,24) { - notes: Array [ + notes: [ Note (1,21) -> (1,24) { noteValue: Number "3" (1,21) -> (1,22), noteStringDot: Dot (1,22) -> (1,23), @@ -4257,10 +4035,10 @@ Score (1,1) -> (1,37) { pipe: Pipe (1,28) -> (1,29), }, Bar (1,30) -> (1,37) { - beats: Array [ + beats: [ Beat (1,30) -> (1,37) { notes: NoteList (1,30) -> (1,35) { - notes: Array [ + notes: [ Note (1,30) -> (1,35) { noteValue: Number "3" (1,30) -> (1,31), noteStringDot: Dot (1,32) -> (1,33), @@ -4277,18 +4055,18 @@ Score (1,1) -> (1,37) { } `; -exports[`AlphaTexParserTest valid-beats-basic-fretted spacing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > basic > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-fretted spacing: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > basic > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched basic 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-pitched > basic 1`] = ` Score (1,1) -> (1,6) { - bars: Array [ + bars: [ Bar (1,1) -> (1,6) { - beats: Array [ + beats: [ Beat (1,1) -> (1,3) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -4297,7 +4075,7 @@ Score (1,1) -> (1,6) { }, Beat (1,4) -> (1,6) { notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C5" (1,4) -> (1,6), }, @@ -4310,22 +4088,22 @@ Score (1,1) -> (1,6) { } `; -exports[`AlphaTexParserTest valid-beats-basic-pitched basic: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > complex > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched basic: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > complex > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched complex 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-pitched > complex 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,1) -> (1,25) { - beats: Array [ + beats: [ Beat (1,1) -> (1,25) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), value: Number "2" (1,2) -> (1,3), }, notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -4337,14 +4115,14 @@ Score (1,1) -> (1,25) { beatMultiplierValue: Number "2" (1,11) -> (1,12), beatEffects: Props (1,13) -> (1,25) { openBrace: LBrace (1,13) -> (1,14), - properties: Array [ + properties: [ Prop (1,14) -> (1,17) { property: Ident "cre" (1,14) -> (1,17), }, Prop (1,18) -> (1,24) { property: Ident "tu" (1,18) -> (1,20), properties: Arguments (1,21) -> (1,24) { - arguments: Array [ + arguments: [ Number "3" (1,21) -> (1,22) { parameterIndices: Map { 0 => 0, @@ -4357,7 +4135,7 @@ Score (1,1) -> (1,25) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -4373,18 +4151,18 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParserTest valid-beats-basic-pitched complex: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > duration > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched complex: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > duration > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched duration 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-pitched > duration 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - beats: Array [ + beats: [ Beat (1,1) -> (1,5) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -4395,7 +4173,7 @@ Score (1,1) -> (1,10) { }, Beat (1,6) -> (1,10) { notes: NoteList (1,6) -> (1,8) { - notes: Array [ + notes: [ Note (1,6) -> (1,8) { noteValue: Ident "C5" (1,6) -> (1,8), }, @@ -4410,18 +4188,22 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParserTest valid-beats-basic-pitched duration change 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-pitched > duration change > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-basic-pitched > duration change > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-basic-pitched > duration change 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - beats: Array [ + beats: [ Beat (1,1) -> (1,6) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), value: Number "2" (1,2) -> (1,3), }, notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -4434,7 +4216,7 @@ Score (1,1) -> (1,12) { value: Number "4" (1,8) -> (1,9), }, notes: NoteList (1,10) -> (1,12) { - notes: Array [ + notes: [ Note (1,10) -> (1,12) { noteValue: Ident "C5" (1,10) -> (1,12), }, @@ -4447,22 +4229,18 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParserTest valid-beats-basic-pitched duration change: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > effects empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched duration change: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > effects empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched duration: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-basic-pitched duration: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-basic-pitched effects empty 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-pitched > effects empty 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,16) { - beats: Array [ + beats: [ Beat (1,1) -> (1,8) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -4472,13 +4250,13 @@ Score (1,1) -> (1,16) { durationValue: Number "4" (1,4) -> (1,5), beatEffects: Props (1,6) -> (1,8) { openBrace: LBrace (1,6) -> (1,7), - properties: Array [], + properties: [], closeBrace: RBrace (1,7) -> (1,8), }, }, Beat (1,9) -> (1,16) { notes: NoteList (1,9) -> (1,11) { - notes: Array [ + notes: [ Note (1,9) -> (1,11) { noteValue: Ident "C5" (1,9) -> (1,11), }, @@ -4488,7 +4266,7 @@ Score (1,1) -> (1,16) { durationValue: Number "4" (1,12) -> (1,13), beatEffects: Props (1,14) -> (1,16) { openBrace: LBrace (1,14) -> (1,15), - properties: Array [], + properties: [], closeBrace: RBrace (1,15) -> (1,16), }, }, @@ -4498,18 +4276,18 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParserTest valid-beats-basic-pitched effects empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > effects known > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched effects empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > effects known > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched effects known 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-pitched > effects known 1`] = ` Score (1,1) -> (1,29) { - bars: Array [ + bars: [ Bar (1,1) -> (1,29) { - beats: Array [ + beats: [ Beat (1,1) -> (1,11) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -4519,7 +4297,7 @@ Score (1,1) -> (1,29) { durationValue: Number "4" (1,4) -> (1,5), beatEffects: Props (1,6) -> (1,11) { openBrace: LBrace (1,6) -> (1,7), - properties: Array [ + properties: [ Prop (1,7) -> (1,8) { property: Ident "v" (1,7) -> (1,8), }, @@ -4532,7 +4310,7 @@ Score (1,1) -> (1,29) { }, Beat (1,12) -> (1,29) { notes: NoteList (1,12) -> (1,14) { - notes: Array [ + notes: [ Note (1,12) -> (1,14) { noteValue: Ident "C5" (1,12) -> (1,14), }, @@ -4542,14 +4320,14 @@ Score (1,1) -> (1,29) { durationValue: Number "4" (1,15) -> (1,16), beatEffects: Props (1,17) -> (1,29) { openBrace: LBrace (1,17) -> (1,18), - properties: Array [ + properties: [ Prop (1,18) -> (1,21) { property: Ident "cre" (1,18) -> (1,21), }, Prop (1,22) -> (1,28) { property: Ident "tu" (1,22) -> (1,24), properties: Arguments (1,25) -> (1,28) { - arguments: Array [ + arguments: [ Number "3" (1,25) -> (1,26) { parameterIndices: Map { 0 => 0, @@ -4562,7 +4340,7 @@ Score (1,1) -> (1,29) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -4578,18 +4356,18 @@ Score (1,1) -> (1,29) { } `; -exports[`AlphaTexParserTest valid-beats-basic-pitched effects known: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > multiplier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched effects known: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-basic-pitched > multiplier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched multiplier 1`] = ` +exports[`AlphaTexParserTest > valid-beats-basic-pitched > multiplier 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - beats: Array [ + beats: [ Beat (1,1) -> (1,5) { notes: NoteList (1,1) -> (1,3) { - notes: Array [ + notes: [ Note (1,1) -> (1,3) { noteValue: Ident "C4" (1,1) -> (1,3), }, @@ -4600,7 +4378,7 @@ Score (1,1) -> (1,10) { }, Beat (1,6) -> (1,10) { notes: NoteList (1,6) -> (1,8) { - notes: Array [ + notes: [ Note (1,6) -> (1,8) { noteValue: Ident "C5" (1,6) -> (1,8), }, @@ -4615,19 +4393,19 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParserTest valid-beats-basic-pitched multiplier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > chord > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-basic-pitched multiplier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > chord > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted chord 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-fretted > chord 1`] = ` Score (1,1) -> (1,20) { - bars: Array [ + bars: [ Bar (1,1) -> (1,20) { - beats: Array [ + beats: [ Beat (1,1) -> (1,10) { notes: NoteList (1,1) -> (1,10) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,5) { noteValue: Number "3" (1,2) -> (1,3), noteStringDot: Dot (1,3) -> (1,4), @@ -4645,7 +4423,7 @@ Score (1,1) -> (1,20) { Beat (1,11) -> (1,20) { notes: NoteList (1,11) -> (1,20) { openParenthesis: LParen (1,11) -> (1,12), - notes: Array [ + notes: [ Note (1,12) -> (1,15) { noteValue: Number "1" (1,12) -> (1,13), noteStringDot: Dot (1,13) -> (1,14), @@ -4666,15 +4444,15 @@ Score (1,1) -> (1,20) { } `; -exports[`AlphaTexParserTest valid-beats-chord-fretted chord: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > complex > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted chord: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > complex > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted complex 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-fretted > complex 1`] = ` Score (1,1) -> (1,32) { - bars: Array [ + bars: [ Bar (1,1) -> (1,32) { - beats: Array [ + beats: [ Beat (1,1) -> (1,32) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), @@ -4682,7 +4460,7 @@ Score (1,1) -> (1,32) { }, notes: NoteList (1,4) -> (1,13) { openParenthesis: LParen (1,4) -> (1,5), - notes: Array [ + notes: [ Note (1,5) -> (1,8) { noteValue: Number "3" (1,5) -> (1,6), noteStringDot: Dot (1,6) -> (1,7), @@ -4702,14 +4480,14 @@ Score (1,1) -> (1,32) { beatMultiplierValue: Number "2" (1,18) -> (1,19), beatEffects: Props (1,20) -> (1,32) { openBrace: LBrace (1,20) -> (1,21), - properties: Array [ + properties: [ Prop (1,21) -> (1,24) { property: Ident "cre" (1,21) -> (1,24), }, Prop (1,25) -> (1,31) { property: Ident "tu" (1,25) -> (1,27), properties: Arguments (1,28) -> (1,31) { - arguments: Array [ + arguments: [ Number "3" (1,28) -> (1,29) { parameterIndices: Map { 0 => 0, @@ -4722,7 +4500,7 @@ Score (1,1) -> (1,32) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -4738,19 +4516,19 @@ Score (1,1) -> (1,32) { } `; -exports[`AlphaTexParserTest valid-beats-chord-fretted complex: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > duration > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted complex: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > duration > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted duration 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-fretted > duration 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - beats: Array [ + beats: [ Beat (1,1) -> (1,12) { notes: NoteList (1,1) -> (1,10) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,5) { noteValue: Number "3" (1,2) -> (1,3), noteStringDot: Dot (1,3) -> (1,4), @@ -4770,7 +4548,7 @@ Score (1,1) -> (1,24) { Beat (1,13) -> (1,24) { notes: NoteList (1,13) -> (1,22) { openParenthesis: LParen (1,13) -> (1,14), - notes: Array [ + notes: [ Note (1,14) -> (1,17) { noteValue: Number "1" (1,14) -> (1,15), noteStringDot: Dot (1,15) -> (1,16), @@ -4793,11 +4571,15 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParserTest valid-beats-chord-fretted duration change 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-fretted > duration change > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-chord-fretted > duration change > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-chord-fretted > duration change 1`] = ` Score (1,1) -> (1,26) { - bars: Array [ + bars: [ Bar (1,1) -> (1,26) { - beats: Array [ + beats: [ Beat (1,1) -> (1,13) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), @@ -4805,7 +4587,7 @@ Score (1,1) -> (1,26) { }, notes: NoteList (1,4) -> (1,13) { openParenthesis: LParen (1,4) -> (1,5), - notes: Array [ + notes: [ Note (1,5) -> (1,8) { noteValue: Number "3" (1,5) -> (1,6), noteStringDot: Dot (1,6) -> (1,7), @@ -4827,7 +4609,7 @@ Score (1,1) -> (1,26) { }, notes: NoteList (1,17) -> (1,26) { openParenthesis: LParen (1,17) -> (1,18), - notes: Array [ + notes: [ Note (1,18) -> (1,21) { noteValue: Number "1" (1,18) -> (1,19), noteStringDot: Dot (1,19) -> (1,20), @@ -4848,23 +4630,19 @@ Score (1,1) -> (1,26) { } `; -exports[`AlphaTexParserTest valid-beats-chord-fretted duration change: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > effects empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted duration change: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > effects empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted duration: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-chord-fretted duration: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-chord-fretted effects empty 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-fretted > effects empty 1`] = ` Score (1,1) -> (1,30) { - bars: Array [ + bars: [ Bar (1,1) -> (1,30) { - beats: Array [ + beats: [ Beat (1,1) -> (1,15) { notes: NoteList (1,1) -> (1,10) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,5) { noteValue: Number "3" (1,2) -> (1,3), noteStringDot: Dot (1,3) -> (1,4), @@ -4882,14 +4660,14 @@ Score (1,1) -> (1,30) { durationValue: Number "4" (1,11) -> (1,12), beatEffects: Props (1,13) -> (1,15) { openBrace: LBrace (1,13) -> (1,14), - properties: Array [], + properties: [], closeBrace: RBrace (1,14) -> (1,15), }, }, Beat (1,16) -> (1,30) { notes: NoteList (1,16) -> (1,25) { openParenthesis: LParen (1,16) -> (1,17), - notes: Array [ + notes: [ Note (1,17) -> (1,20) { noteValue: Number "1" (1,17) -> (1,18), noteStringDot: Dot (1,18) -> (1,19), @@ -4907,7 +4685,7 @@ Score (1,1) -> (1,30) { durationValue: Number "4" (1,26) -> (1,27), beatEffects: Props (1,28) -> (1,30) { openBrace: LBrace (1,28) -> (1,29), - properties: Array [], + properties: [], closeBrace: RBrace (1,29) -> (1,30), }, }, @@ -4917,19 +4695,19 @@ Score (1,1) -> (1,30) { } `; -exports[`AlphaTexParserTest valid-beats-chord-fretted effects empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > effects known > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted effects empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > effects known > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted effects known 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-fretted > effects known 1`] = ` Score (1,1) -> (1,43) { - bars: Array [ + bars: [ Bar (1,1) -> (1,43) { - beats: Array [ + beats: [ Beat (1,1) -> (1,18) { notes: NoteList (1,1) -> (1,10) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,5) { noteValue: Number "3" (1,2) -> (1,3), noteStringDot: Dot (1,3) -> (1,4), @@ -4947,7 +4725,7 @@ Score (1,1) -> (1,43) { durationValue: Number "4" (1,11) -> (1,12), beatEffects: Props (1,13) -> (1,18) { openBrace: LBrace (1,13) -> (1,14), - properties: Array [ + properties: [ Prop (1,14) -> (1,15) { property: Ident "v" (1,14) -> (1,15), }, @@ -4961,7 +4739,7 @@ Score (1,1) -> (1,43) { Beat (1,19) -> (1,43) { notes: NoteList (1,19) -> (1,28) { openParenthesis: LParen (1,19) -> (1,20), - notes: Array [ + notes: [ Note (1,20) -> (1,23) { noteValue: Number "1" (1,20) -> (1,21), noteStringDot: Dot (1,21) -> (1,22), @@ -4979,14 +4757,14 @@ Score (1,1) -> (1,43) { durationValue: Number "4" (1,29) -> (1,30), beatEffects: Props (1,31) -> (1,43) { openBrace: LBrace (1,31) -> (1,32), - properties: Array [ + properties: [ Prop (1,32) -> (1,35) { property: Ident "cre" (1,32) -> (1,35), }, Prop (1,36) -> (1,42) { property: Ident "tu" (1,36) -> (1,38), properties: Arguments (1,39) -> (1,42) { - arguments: Array [ + arguments: [ Number "3" (1,39) -> (1,40) { parameterIndices: Map { 0 => 0, @@ -4999,7 +4777,7 @@ Score (1,1) -> (1,43) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -5015,19 +4793,19 @@ Score (1,1) -> (1,43) { } `; -exports[`AlphaTexParserTest valid-beats-chord-fretted effects known: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > multiplier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted effects known: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > multiplier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted multiplier 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-fretted > multiplier 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - beats: Array [ + beats: [ Beat (1,1) -> (1,12) { notes: NoteList (1,1) -> (1,10) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,5) { noteValue: Number "3" (1,2) -> (1,3), noteStringDot: Dot (1,3) -> (1,4), @@ -5047,7 +4825,7 @@ Score (1,1) -> (1,24) { Beat (1,13) -> (1,24) { notes: NoteList (1,13) -> (1,22) { openParenthesis: LParen (1,13) -> (1,14), - notes: Array [ + notes: [ Note (1,14) -> (1,17) { noteValue: Number "1" (1,14) -> (1,15), noteStringDot: Dot (1,15) -> (1,16), @@ -5070,19 +4848,19 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParserTest valid-beats-chord-fretted multiplier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > spacing > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted multiplier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-fretted > spacing > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted spacing 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-fretted > spacing 1`] = ` Score (1,1) -> (5,18) { - bars: Array [ + bars: [ Bar (2,13) -> (5,18) { - beats: Array [ + beats: [ Beat (2,13) -> (5,18) { notes: NoteList (2,13) -> (5,14) { openParenthesis: LParen (2,13) -> (2,14), - notes: Array [ + notes: [ Note (3,17) -> (3,20) { noteValue: Number "3" (3,17) -> (3,18), noteStringDot: Dot (3,18) -> (3,19), @@ -5105,19 +4883,19 @@ Score (1,1) -> (5,18) { } `; -exports[`AlphaTexParserTest valid-beats-chord-fretted spacing: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > chord > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-fretted spacing: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > chord > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched chord 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-pitched > chord 1`] = ` Score (1,1) -> (1,16) { - bars: Array [ + bars: [ Bar (1,1) -> (1,16) { - beats: Array [ + beats: [ Beat (1,1) -> (1,8) { notes: NoteList (1,1) -> (1,8) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,4) { noteValue: Ident "C4" (1,2) -> (1,4), }, @@ -5131,7 +4909,7 @@ Score (1,1) -> (1,16) { Beat (1,9) -> (1,16) { notes: NoteList (1,9) -> (1,16) { openParenthesis: LParen (1,9) -> (1,10), - notes: Array [ + notes: [ Note (1,10) -> (1,12) { noteValue: Ident "D4" (1,10) -> (1,12), }, @@ -5148,15 +4926,15 @@ Score (1,1) -> (1,16) { } `; -exports[`AlphaTexParserTest valid-beats-chord-pitched chord: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > complex > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched chord: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > complex > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched complex 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-pitched > complex 1`] = ` Score (1,1) -> (1,30) { - bars: Array [ + bars: [ Bar (1,1) -> (1,30) { - beats: Array [ + beats: [ Beat (1,1) -> (1,30) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), @@ -5164,7 +4942,7 @@ Score (1,1) -> (1,30) { }, notes: NoteList (1,4) -> (1,11) { openParenthesis: LParen (1,4) -> (1,5), - notes: Array [ + notes: [ Note (1,5) -> (1,7) { noteValue: Ident "C4" (1,5) -> (1,7), }, @@ -5180,14 +4958,14 @@ Score (1,1) -> (1,30) { beatMultiplierValue: Number "2" (1,16) -> (1,17), beatEffects: Props (1,18) -> (1,30) { openBrace: LBrace (1,18) -> (1,19), - properties: Array [ + properties: [ Prop (1,19) -> (1,22) { property: Ident "cre" (1,19) -> (1,22), }, Prop (1,23) -> (1,29) { property: Ident "tu" (1,23) -> (1,25), properties: Arguments (1,26) -> (1,29) { - arguments: Array [ + arguments: [ Number "3" (1,26) -> (1,27) { parameterIndices: Map { 0 => 0, @@ -5200,7 +4978,7 @@ Score (1,1) -> (1,30) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -5216,19 +4994,19 @@ Score (1,1) -> (1,30) { } `; -exports[`AlphaTexParserTest valid-beats-chord-pitched complex: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > duration > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched complex: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > duration > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched duration 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-pitched > duration 1`] = ` Score (1,1) -> (1,20) { - bars: Array [ + bars: [ Bar (1,1) -> (1,20) { - beats: Array [ + beats: [ Beat (1,1) -> (1,10) { notes: NoteList (1,1) -> (1,8) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,4) { noteValue: Ident "C4" (1,2) -> (1,4), }, @@ -5244,7 +5022,7 @@ Score (1,1) -> (1,20) { Beat (1,11) -> (1,20) { notes: NoteList (1,11) -> (1,18) { openParenthesis: LParen (1,11) -> (1,12), - notes: Array [ + notes: [ Note (1,12) -> (1,14) { noteValue: Ident "D4" (1,12) -> (1,14), }, @@ -5263,11 +5041,15 @@ Score (1,1) -> (1,20) { } `; -exports[`AlphaTexParserTest valid-beats-chord-pitched duration change 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-pitched > duration change > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-chord-pitched > duration change > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-chord-pitched > duration change 1`] = ` Score (1,1) -> (1,22) { - bars: Array [ + bars: [ Bar (1,1) -> (1,22) { - beats: Array [ + beats: [ Beat (1,1) -> (1,11) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), @@ -5275,7 +5057,7 @@ Score (1,1) -> (1,22) { }, notes: NoteList (1,4) -> (1,11) { openParenthesis: LParen (1,4) -> (1,5), - notes: Array [ + notes: [ Note (1,5) -> (1,7) { noteValue: Ident "C4" (1,5) -> (1,7), }, @@ -5293,7 +5075,7 @@ Score (1,1) -> (1,22) { }, notes: NoteList (1,15) -> (1,22) { openParenthesis: LParen (1,15) -> (1,16), - notes: Array [ + notes: [ Note (1,16) -> (1,18) { noteValue: Ident "D4" (1,16) -> (1,18), }, @@ -5310,23 +5092,19 @@ Score (1,1) -> (1,22) { } `; -exports[`AlphaTexParserTest valid-beats-chord-pitched duration change: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > effects empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched duration change: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > effects empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched duration: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-chord-pitched duration: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-chord-pitched effects empty 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-pitched > effects empty 1`] = ` Score (1,1) -> (1,22) { - bars: Array [ + bars: [ Bar (1,1) -> (1,22) { - beats: Array [ + beats: [ Beat (1,1) -> (1,11) { notes: NoteList (1,1) -> (1,8) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,4) { noteValue: Ident "C4" (1,2) -> (1,4), }, @@ -5338,14 +5116,14 @@ Score (1,1) -> (1,22) { }, beatEffects: Props (1,9) -> (1,11) { openBrace: LBrace (1,9) -> (1,10), - properties: Array [], + properties: [], closeBrace: RBrace (1,10) -> (1,11), }, }, Beat (1,12) -> (1,22) { notes: NoteList (1,12) -> (1,19) { openParenthesis: LParen (1,12) -> (1,13), - notes: Array [ + notes: [ Note (1,13) -> (1,15) { noteValue: Ident "D4" (1,13) -> (1,15), }, @@ -5357,7 +5135,7 @@ Score (1,1) -> (1,22) { }, beatEffects: Props (1,20) -> (1,22) { openBrace: LBrace (1,20) -> (1,21), - properties: Array [], + properties: [], closeBrace: RBrace (1,21) -> (1,22), }, }, @@ -5367,19 +5145,19 @@ Score (1,1) -> (1,22) { } `; -exports[`AlphaTexParserTest valid-beats-chord-pitched effects empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > effects known > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched effects empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > effects known > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched effects known 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-pitched > effects known 1`] = ` Score (1,1) -> (1,35) { - bars: Array [ + bars: [ Bar (1,1) -> (1,35) { - beats: Array [ + beats: [ Beat (1,1) -> (1,14) { notes: NoteList (1,1) -> (1,8) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,4) { noteValue: Ident "C4" (1,2) -> (1,4), }, @@ -5391,7 +5169,7 @@ Score (1,1) -> (1,35) { }, beatEffects: Props (1,9) -> (1,14) { openBrace: LBrace (1,9) -> (1,10), - properties: Array [ + properties: [ Prop (1,10) -> (1,11) { property: Ident "v" (1,10) -> (1,11), }, @@ -5405,7 +5183,7 @@ Score (1,1) -> (1,35) { Beat (1,15) -> (1,35) { notes: NoteList (1,15) -> (1,22) { openParenthesis: LParen (1,15) -> (1,16), - notes: Array [ + notes: [ Note (1,16) -> (1,18) { noteValue: Ident "D4" (1,16) -> (1,18), }, @@ -5417,14 +5195,14 @@ Score (1,1) -> (1,35) { }, beatEffects: Props (1,23) -> (1,35) { openBrace: LBrace (1,23) -> (1,24), - properties: Array [ + properties: [ Prop (1,24) -> (1,27) { property: Ident "cre" (1,24) -> (1,27), }, Prop (1,28) -> (1,34) { property: Ident "tu" (1,28) -> (1,30), properties: Arguments (1,31) -> (1,34) { - arguments: Array [ + arguments: [ Number "3" (1,31) -> (1,32) { parameterIndices: Map { 0 => 0, @@ -5437,7 +5215,7 @@ Score (1,1) -> (1,35) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -5453,19 +5231,19 @@ Score (1,1) -> (1,35) { } `; -exports[`AlphaTexParserTest valid-beats-chord-pitched effects known: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > multiplier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched effects known: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-chord-pitched > multiplier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched multiplier 1`] = ` +exports[`AlphaTexParserTest > valid-beats-chord-pitched > multiplier 1`] = ` Score (1,1) -> (1,20) { - bars: Array [ + bars: [ Bar (1,1) -> (1,20) { - beats: Array [ + beats: [ Beat (1,1) -> (1,10) { notes: NoteList (1,1) -> (1,8) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,4) { noteValue: Ident "C4" (1,2) -> (1,4), }, @@ -5481,7 +5259,7 @@ Score (1,1) -> (1,20) { Beat (1,11) -> (1,20) { notes: NoteList (1,11) -> (1,18) { openParenthesis: LParen (1,11) -> (1,12), - notes: Array [ + notes: [ Note (1,12) -> (1,14) { noteValue: Ident "D4" (1,12) -> (1,14), }, @@ -5500,15 +5278,15 @@ Score (1,1) -> (1,20) { } `; -exports[`AlphaTexParserTest valid-beats-chord-pitched multiplier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > complex > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-chord-pitched multiplier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > complex > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest complex 1`] = ` +exports[`AlphaTexParserTest > valid-beats-rest > complex 1`] = ` Score (1,1) -> (1,24) { - bars: Array [ + bars: [ Bar (1,1) -> (1,24) { - beats: Array [ + beats: [ Beat (1,1) -> (1,24) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), @@ -5521,14 +5299,14 @@ Score (1,1) -> (1,24) { beatMultiplierValue: Number "2" (1,10) -> (1,11), beatEffects: Props (1,12) -> (1,24) { openBrace: LBrace (1,12) -> (1,13), - properties: Array [ + properties: [ Prop (1,13) -> (1,16) { property: Ident "cre" (1,13) -> (1,16), }, Prop (1,17) -> (1,23) { property: Ident "tu" (1,17) -> (1,19), properties: Arguments (1,20) -> (1,23) { - arguments: Array [ + arguments: [ Number "3" (1,20) -> (1,21) { parameterIndices: Map { 0 => 0, @@ -5541,7 +5319,7 @@ Score (1,1) -> (1,24) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -5557,15 +5335,15 @@ Score (1,1) -> (1,24) { } `; -exports[`AlphaTexParserTest valid-beats-rest complex: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > duration > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest complex: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > duration > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest duration 1`] = ` +exports[`AlphaTexParserTest > valid-beats-rest > duration 1`] = ` Score (1,1) -> (1,8) { - bars: Array [ + bars: [ Bar (1,1) -> (1,8) { - beats: Array [ + beats: [ Beat (1,1) -> (1,4) { rest: Ident "r" (1,1) -> (1,2), durationDot: Dot (1,2) -> (1,3), @@ -5582,11 +5360,15 @@ Score (1,1) -> (1,8) { } `; -exports[`AlphaTexParserTest valid-beats-rest duration change 1`] = ` +exports[`AlphaTexParserTest > valid-beats-rest > duration change > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-rest > duration change > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-beats-rest > duration change 1`] = ` Score (1,1) -> (1,10) { - bars: Array [ + bars: [ Bar (1,1) -> (1,10) { - beats: Array [ + beats: [ Beat (1,1) -> (1,5) { durationChange: Duration (1,1) -> (1,3) { colon: Colon (1,1) -> (1,2), @@ -5607,26 +5389,22 @@ Score (1,1) -> (1,10) { } `; -exports[`AlphaTexParserTest valid-beats-rest duration change: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > effects empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest duration change: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > effects empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest duration: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-rest duration: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-beats-rest effects empty 1`] = ` +exports[`AlphaTexParserTest > valid-beats-rest > effects empty 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - beats: Array [ + beats: [ Beat (1,1) -> (1,7) { rest: Ident "r" (1,1) -> (1,2), durationDot: Dot (1,2) -> (1,3), durationValue: Number "4" (1,3) -> (1,4), beatEffects: Props (1,5) -> (1,7) { openBrace: LBrace (1,5) -> (1,6), - properties: Array [], + properties: [], closeBrace: RBrace (1,6) -> (1,7), }, }, @@ -5636,7 +5414,7 @@ Score (1,1) -> (1,14) { durationValue: Number "4" (1,10) -> (1,11), beatEffects: Props (1,12) -> (1,14) { openBrace: LBrace (1,12) -> (1,13), - properties: Array [], + properties: [], closeBrace: RBrace (1,13) -> (1,14), }, }, @@ -5646,22 +5424,22 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParserTest valid-beats-rest effects empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > effects known > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest effects empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > effects known > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest effects known 1`] = ` +exports[`AlphaTexParserTest > valid-beats-rest > effects known 1`] = ` Score (1,1) -> (1,27) { - bars: Array [ + bars: [ Bar (1,1) -> (1,27) { - beats: Array [ + beats: [ Beat (1,1) -> (1,10) { rest: Ident "r" (1,1) -> (1,2), durationDot: Dot (1,2) -> (1,3), durationValue: Number "4" (1,3) -> (1,4), beatEffects: Props (1,5) -> (1,10) { openBrace: LBrace (1,5) -> (1,6), - properties: Array [ + properties: [ Prop (1,6) -> (1,7) { property: Ident "v" (1,6) -> (1,7), }, @@ -5678,14 +5456,14 @@ Score (1,1) -> (1,27) { durationValue: Number "4" (1,13) -> (1,14), beatEffects: Props (1,15) -> (1,27) { openBrace: LBrace (1,15) -> (1,16), - properties: Array [ + properties: [ Prop (1,16) -> (1,19) { property: Ident "cre" (1,16) -> (1,19), }, Prop (1,20) -> (1,26) { property: Ident "tu" (1,20) -> (1,22), properties: Arguments (1,23) -> (1,26) { - arguments: Array [ + arguments: [ Number "3" (1,23) -> (1,24) { parameterIndices: Map { 0 => 0, @@ -5698,7 +5476,7 @@ Score (1,1) -> (1,27) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -5714,15 +5492,15 @@ Score (1,1) -> (1,27) { } `; -exports[`AlphaTexParserTest valid-beats-rest effects known: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > multiplier > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest effects known: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > multiplier > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest multiplier 1`] = ` +exports[`AlphaTexParserTest > valid-beats-rest > multiplier 1`] = ` Score (1,1) -> (1,8) { - bars: Array [ + bars: [ Bar (1,1) -> (1,8) { - beats: Array [ + beats: [ Beat (1,1) -> (1,4) { rest: Ident "r" (1,1) -> (1,2), beatMultiplier: Asterisk (1,2) -> (1,3), @@ -5739,15 +5517,15 @@ Score (1,1) -> (1,8) { } `; -exports[`AlphaTexParserTest valid-beats-rest multiplier: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > rest > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest multiplier: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-beats-rest > rest > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest rest 1`] = ` +exports[`AlphaTexParserTest > valid-beats-rest > rest 1`] = ` Score (1,1) -> (1,2) { - bars: Array [ + bars: [ Bar (1,1) -> (1,2) { - beats: Array [ + beats: [ Beat (1,1) -> (1,2) { rest: Ident "r" (1,1) -> (1,2), }, @@ -5757,33 +5535,33 @@ Score (1,1) -> (1,2) { } `; -exports[`AlphaTexParserTest valid-beats-rest rest: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-empty > empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-beats-rest rest: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-empty > empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-empty empty 1`] = `Score (1,1) -> (1,1)`; +exports[`AlphaTexParserTest > valid-empty > empty 1`] = `Score (1,1) -> (1,1)`; -exports[`AlphaTexParserTest valid-empty empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > beat effects in note effect > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-empty empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > beat effects in note effect > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects beat effects in note effect 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > beat effects in note effect 1`] = ` Score (1,1) -> (1,14) { - bars: Array [ + bars: [ Bar (1,1) -> (1,14) { - beats: Array [ + beats: [ Beat (1,1) -> (1,14) { notes: NoteList (1,1) -> (1,14) { - notes: Array [ + notes: [ Note (1,1) -> (1,14) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,14) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,6) -> (1,12) { property: Ident "tu" (1,6) -> (1,8), properties: Arguments (1,9) -> (1,12) { - arguments: Array [ + arguments: [ Number "3" (1,9) -> (1,10) { parameterIndices: Map { 0 => 0, @@ -5796,7 +5574,7 @@ Score (1,1) -> (1,14) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -5815,23 +5593,23 @@ Score (1,1) -> (1,14) { } `; -exports[`AlphaTexParserTest valid-note-effects beat effects in note effect: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects beat effects in note effect: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects empty 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > empty 1`] = ` Score (1,1) -> (1,6) { - bars: Array [ + bars: [ Bar (1,1) -> (1,6) { - beats: Array [ + beats: [ Beat (1,1) -> (1,6) { notes: NoteList (1,1) -> (1,6) { - notes: Array [ + notes: [ Note (1,1) -> (1,6) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,6) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [], + properties: [], closeBrace: RBrace (1,5) -> (1,6), }, }, @@ -5844,27 +5622,27 @@ Score (1,1) -> (1,6) { } `; -exports[`AlphaTexParserTest valid-note-effects empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > known > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > known > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects known 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > known 1`] = ` Score (1,1) -> (1,12) { - bars: Array [ + bars: [ Bar (1,1) -> (1,12) { - beats: Array [ + beats: [ Beat (1,1) -> (1,12) { notes: NoteList (1,1) -> (1,12) { - notes: Array [ + notes: [ Note (1,1) -> (1,12) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,12) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,11) { property: Ident "tr" (1,5) -> (1,7), properties: Arguments (1,8) -> (1,11) { - arguments: Array [ + arguments: [ Number "4" (1,8) -> (1,9) { parameterIndices: Map { 0 => 0, @@ -5876,7 +5654,7 @@ Score (1,1) -> (1,12) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -5895,24 +5673,28 @@ Score (1,1) -> (1,12) { } `; -exports[`AlphaTexParserTest valid-note-effects known with list 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > known with list > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-note-effects > known with list > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-note-effects > known with list 1`] = ` Score (1,1) -> (1,15) { - bars: Array [ + bars: [ Bar (1,1) -> (1,15) { - beats: Array [ + beats: [ Beat (1,1) -> (1,15) { notes: NoteList (1,1) -> (1,15) { - notes: Array [ + notes: [ Note (1,1) -> (1,15) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,15) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,14) { property: Ident "b" (1,5) -> (1,6), properties: Arguments (1,7) -> (1,14) { openParenthesis: LParen (1,7) -> (1,8), - arguments: Array [ + arguments: [ Number "0" (1,8) -> (1,9), Number "4" (1,10) -> (1,11), Number "0" (1,12) -> (1,13), @@ -5933,27 +5715,23 @@ Score (1,1) -> (1,15) { } `; -exports[`AlphaTexParserTest valid-note-effects known with list: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > multiple > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects known with list: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > multiple > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects known: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-note-effects known: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-note-effects multiple 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > multiple 1`] = ` Score (1,1) -> (1,20) { - bars: Array [ + bars: [ Bar (1,1) -> (1,20) { - beats: Array [ + beats: [ Beat (1,1) -> (1,20) { notes: NoteList (1,1) -> (1,20) { - notes: Array [ + notes: [ Note (1,1) -> (1,20) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,20) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,7) { property: Ident "nh" (1,5) -> (1,7), }, @@ -5961,7 +5739,7 @@ Score (1,1) -> (1,20) { property: Ident "b" (1,8) -> (1,9), properties: Arguments (1,10) -> (1,17) { openParenthesis: LParen (1,10) -> (1,11), - arguments: Array [ + arguments: [ Number "0" (1,11) -> (1,12), Number "4" (1,13) -> (1,14), Number "0" (1,15) -> (1,16), @@ -5985,20 +5763,24 @@ Score (1,1) -> (1,20) { } `; -exports[`AlphaTexParserTest valid-note-effects multiple chord 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > multiple chord > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-note-effects > multiple chord > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-note-effects > multiple chord 1`] = ` Score (1,1) -> (1,48) { - bars: Array [ + bars: [ Bar (1,1) -> (1,48) { - beats: Array [ + beats: [ Beat (1,1) -> (1,48) { notes: NoteList (1,1) -> (1,48) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,21) { noteValue: Ident "C4" (1,2) -> (1,4), noteEffects: Props (1,5) -> (1,21) { openBrace: LBrace (1,5) -> (1,6), - properties: Array [ + properties: [ Prop (1,6) -> (1,8) { property: Ident "nh" (1,6) -> (1,8), }, @@ -6006,7 +5788,7 @@ Score (1,1) -> (1,48) { property: Ident "b" (1,9) -> (1,10), properties: Arguments (1,11) -> (1,18) { openParenthesis: LParen (1,11) -> (1,12), - arguments: Array [ + arguments: [ Number "0" (1,12) -> (1,13), Number "4" (1,14) -> (1,15), Number "0" (1,16) -> (1,17), @@ -6025,7 +5807,7 @@ Score (1,1) -> (1,48) { noteValue: Ident "C5" (1,22) -> (1,24), noteEffects: Props (1,25) -> (1,47) { openBrace: LBrace (1,25) -> (1,26), - properties: Array [ + properties: [ Prop (1,27) -> (1,28) { property: Ident "v" (1,27) -> (1,28), }, @@ -6036,7 +5818,7 @@ Score (1,1) -> (1,48) { property: Ident "unknown" (1,31) -> (1,38), properties: Arguments (1,39) -> (1,46) { openParenthesis: LParen (1,39) -> (1,40), - arguments: Array [ + arguments: [ Number "1" (1,40) -> (1,41), Number "2" (1,42) -> (1,43), Number "3" (1,44) -> (1,45), @@ -6058,20 +5840,24 @@ Score (1,1) -> (1,48) { } `; -exports[`AlphaTexParserTest valid-note-effects multiple chord beat effects 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > multiple chord beat effects > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-note-effects > multiple chord beat effects > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-note-effects > multiple chord beat effects 1`] = ` Score (1,1) -> (1,59) { - bars: Array [ + bars: [ Bar (1,1) -> (1,59) { - beats: Array [ + beats: [ Beat (1,1) -> (1,59) { notes: NoteList (1,1) -> (1,48) { openParenthesis: LParen (1,1) -> (1,2), - notes: Array [ + notes: [ Note (1,2) -> (1,21) { noteValue: Ident "C4" (1,2) -> (1,4), noteEffects: Props (1,5) -> (1,21) { openBrace: LBrace (1,5) -> (1,6), - properties: Array [ + properties: [ Prop (1,6) -> (1,8) { property: Ident "nh" (1,6) -> (1,8), }, @@ -6079,7 +5865,7 @@ Score (1,1) -> (1,59) { property: Ident "b" (1,9) -> (1,10), properties: Arguments (1,11) -> (1,18) { openParenthesis: LParen (1,11) -> (1,12), - arguments: Array [ + arguments: [ Number "0" (1,12) -> (1,13), Number "4" (1,14) -> (1,15), Number "0" (1,16) -> (1,17), @@ -6098,7 +5884,7 @@ Score (1,1) -> (1,59) { noteValue: Ident "C5" (1,22) -> (1,24), noteEffects: Props (1,25) -> (1,47) { openBrace: LBrace (1,25) -> (1,26), - properties: Array [ + properties: [ Prop (1,27) -> (1,28) { property: Ident "v" (1,27) -> (1,28), }, @@ -6109,7 +5895,7 @@ Score (1,1) -> (1,59) { property: Ident "unknown" (1,31) -> (1,38), properties: Arguments (1,39) -> (1,46) { openParenthesis: LParen (1,39) -> (1,40), - arguments: Array [ + arguments: [ Number "1" (1,40) -> (1,41), Number "2" (1,42) -> (1,43), Number "3" (1,44) -> (1,45), @@ -6126,11 +5912,11 @@ Score (1,1) -> (1,59) { }, beatEffects: Props (1,49) -> (1,59) { openBrace: LBrace (1,49) -> (1,50), - properties: Array [ + properties: [ Prop (1,51) -> (1,57) { property: Ident "tu" (1,51) -> (1,53), properties: Arguments (1,54) -> (1,57) { - arguments: Array [ + arguments: [ Number "3" (1,54) -> (1,55) { parameterIndices: Map { 0 => 0, @@ -6143,7 +5929,7 @@ Score (1,1) -> (1,59) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -6159,36 +5945,28 @@ Score (1,1) -> (1,59) { } `; -exports[`AlphaTexParserTest valid-note-effects multiple chord beat effects: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-note-effects multiple chord beat effects: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-note-effects multiple chord: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > unknown > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects multiple chord: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > unknown > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects multiple: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-note-effects multiple: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-note-effects unknown 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > unknown 1`] = ` Score (1,1) -> (1,21) { - bars: Array [ + bars: [ Bar (1,1) -> (1,21) { - beats: Array [ + beats: [ Beat (1,1) -> (1,21) { notes: NoteList (1,1) -> (1,21) { - notes: Array [ + notes: [ Note (1,1) -> (1,21) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,21) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,20) { property: Ident "unknown" (1,5) -> (1,12), properties: Arguments (1,13) -> (1,20) { openParenthesis: LParen (1,13) -> (1,14), - arguments: Array [ + arguments: [ Number "1" (1,14) -> (1,15), Number "2" (1,16) -> (1,17), Number "3" (1,18) -> (1,19), @@ -6209,23 +5987,23 @@ Score (1,1) -> (1,21) { } `; -exports[`AlphaTexParserTest valid-note-effects unknown: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > with beat effects > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects unknown: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-note-effects > with beat effects > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects with beat effects 1`] = ` +exports[`AlphaTexParserTest > valid-note-effects > with beat effects 1`] = ` Score (1,1) -> (1,31) { - bars: Array [ + bars: [ Bar (1,1) -> (1,31) { - beats: Array [ + beats: [ Beat (1,1) -> (1,31) { notes: NoteList (1,1) -> (1,20) { - notes: Array [ + notes: [ Note (1,1) -> (1,20) { noteValue: Ident "C4" (1,1) -> (1,3), noteEffects: Props (1,4) -> (1,20) { openBrace: LBrace (1,4) -> (1,5), - properties: Array [ + properties: [ Prop (1,5) -> (1,7) { property: Ident "nh" (1,5) -> (1,7), }, @@ -6233,7 +6011,7 @@ Score (1,1) -> (1,31) { property: Ident "b" (1,8) -> (1,9), properties: Arguments (1,10) -> (1,17) { openParenthesis: LParen (1,10) -> (1,11), - arguments: Array [ + arguments: [ Number "0" (1,11) -> (1,12), Number "4" (1,13) -> (1,14), Number "0" (1,15) -> (1,16), @@ -6252,11 +6030,11 @@ Score (1,1) -> (1,31) { }, beatEffects: Props (1,21) -> (1,31) { openBrace: LBrace (1,21) -> (1,22), - properties: Array [ + properties: [ Prop (1,23) -> (1,29) { property: Ident "tu" (1,23) -> (1,25), properties: Arguments (1,26) -> (1,29) { - arguments: Array [ + arguments: [ Number "3" (1,26) -> (1,27) { parameterIndices: Map { 0 => 0, @@ -6269,7 +6047,7 @@ Score (1,1) -> (1,31) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 1, ], validated: true, @@ -6285,41 +6063,41 @@ Score (1,1) -> (1,31) { } `; -exports[`AlphaTexParserTest valid-note-effects with beat effects: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-note-effects with beat effects: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata empty 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > empty 1`] = ` Score (1,1) -> (1,3) { - bars: Array [ + bars: [ Bar (1,2) -> (1,3), ], } `; -exports[`AlphaTexParserTest valid-score-metadata empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > known multiple > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > known multiple > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata known multiple 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > known multiple 1`] = ` Score (1,1) -> (1,33) { - bars: Array [ + bars: [ Bar (1,1) -> (1,33) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,14) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,14) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -6331,14 +6109,14 @@ Score (1,1) -> (1,33) { tag: Ident "subtitle" (1,17) -> (1,25), }, arguments: Arguments (1,26) -> (1,30) { - arguments: Array [ + arguments: [ String "Sub" (1,26) -> (1,30) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -6350,47 +6128,47 @@ Score (1,1) -> (1,33) { } `; -exports[`AlphaTexParserTest valid-score-metadata known multiple: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > known property > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata known multiple: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > known property > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata known property 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > known property 1`] = ` Score (1,1) -> (1,30) { - bars: Array [ + bars: [ Bar (1,1) -> (1,30) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,28) { tag: Tag "track" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "track" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,13) { - arguments: Array [ + arguments: [ String "Name" (1,8) -> (1,13) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, properties: Props (1,15) -> (1,28) { openBrace: LBrace (1,15) -> (1,16), - properties: Array [ + properties: [ Prop (1,16) -> (1,26) { property: Ident "color" (1,16) -> (1,21), properties: Arguments (1,22) -> (1,26) { - arguments: Array [ + arguments: [ String "red" (1,22) -> (1,26) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -6406,32 +6184,36 @@ Score (1,1) -> (1,30) { } `; -exports[`AlphaTexParserTest valid-score-metadata known property before value 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > known property before value > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-score-metadata > known property before value > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-score-metadata > known property before value 1`] = ` Score (1,1) -> (1,32) { - bars: Array [ + bars: [ Bar (1,1) -> (1,32) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,29) { tag: Tag "chord" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "chord" (1,2) -> (1,7), }, arguments: Arguments (1,24) -> (1,29) { - arguments: Array [ + arguments: [ String "Name" (1,24) -> (1,29) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, properties: Props (1,8) -> (1,23) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,9) -> (1,22) { property: Ident "showFingering" (1,9) -> (1,22), }, @@ -6445,26 +6227,22 @@ Score (1,1) -> (1,32) { } `; -exports[`AlphaTexParserTest valid-score-metadata known property before value: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > known semantic > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata known property before value: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > known semantic > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata known property: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-score-metadata known property: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-score-metadata known semantic 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > known semantic 1`] = ` Score (1,1) -> (1,33) { - bars: Array [ + bars: [ Bar (1,1) -> (1,33) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,31) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), tag: Ident "title" (1,2) -> (1,7), }, arguments: Arguments (1,8) -> (1,31) { - arguments: Array [ + arguments: [ String "Title" (1,8) -> (1,14) { parameterIndices: Map { 0 => 0, @@ -6481,7 +6259,7 @@ Score (1,1) -> (1,33) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -6493,15 +6271,15 @@ Score (1,1) -> (1,33) { } `; -exports[`AlphaTexParserTest valid-score-metadata known semantic: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > known valuelist > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata known semantic: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > known valuelist > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata known valuelist 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > known valuelist 1`] = ` Score (1,1) -> (1,19) { - bars: Array [ + bars: [ Bar (1,1) -> (1,19) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,17) { tag: Tag "title" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -6509,7 +6287,7 @@ Score (1,1) -> (1,19) { }, arguments: Arguments (1,8) -> (1,17) { openParenthesis: LParen (1,8) -> (1,9), - arguments: Array [ + arguments: [ String "Title" (1,9) -> (1,15), ], closeParenthesis: RParen (1,16) -> (1,17), @@ -6521,15 +6299,15 @@ Score (1,1) -> (1,19) { } `; -exports[`AlphaTexParserTest valid-score-metadata known valuelist: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > notelist after props > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata known valuelist: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > notelist after props > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata notelist after props 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > notelist after props 1`] = ` Score (1,1) -> (1,28) { - bars: Array [ + bars: [ Bar (1,1) -> (1,28) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,16) { tag: Tag "staff" (1,1) -> (1,7) { prefix: Backslash (1,1) -> (1,2), @@ -6537,7 +6315,7 @@ Score (1,1) -> (1,28) { }, properties: Props (1,8) -> (1,16) { openBrace: LBrace (1,8) -> (1,9), - properties: Array [ + properties: [ Prop (1,10) -> (1,14) { property: Ident "tabs" (1,10) -> (1,14), }, @@ -6546,11 +6324,11 @@ Score (1,1) -> (1,28) { }, }, ], - beats: Array [ + beats: [ Beat (1,17) -> (1,28) { notes: NoteList (1,17) -> (1,26) { openParenthesis: LParen (1,17) -> (1,18), - notes: Array [ + notes: [ Note (1,18) -> (1,21) { noteValue: Number "3" (1,18) -> (1,19), noteStringDot: Dot (1,19) -> (1,20), @@ -6573,15 +6351,15 @@ Score (1,1) -> (1,28) { } `; -exports[`AlphaTexParserTest valid-score-metadata notelist after props: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > unknown multiple > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata notelist after props: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > unknown multiple > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata unknown multiple 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > unknown multiple 1`] = ` Score (1,1) -> (1,43) { - bars: Array [ + bars: [ Bar (1,1) -> (1,43) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,23) { tag: Tag "notExisting" (1,1) -> (1,13) { prefix: Backslash (1,1) -> (1,2), @@ -6589,7 +6367,7 @@ Score (1,1) -> (1,43) { }, arguments: Arguments (1,14) -> (1,23) { openParenthesis: LParen (1,14) -> (1,15), - arguments: Array [ + arguments: [ String "Value" (1,15) -> (1,21), ], closeParenthesis: RParen (1,22) -> (1,23), @@ -6602,7 +6380,7 @@ Score (1,1) -> (1,43) { }, arguments: Arguments (1,37) -> (1,41) { openParenthesis: LParen (1,37) -> (1,38), - arguments: Array [ + arguments: [ String "" (1,38) -> (1,39), ], closeParenthesis: RParen (1,40) -> (1,41), @@ -6614,15 +6392,15 @@ Score (1,1) -> (1,43) { } `; -exports[`AlphaTexParserTest valid-score-metadata unknown multiple: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > unknown valuelist > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata unknown multiple: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > unknown valuelist > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata unknown valuelist 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > unknown valuelist 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,1) -> (1,25) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,23) { tag: Tag "notExisting" (1,1) -> (1,13) { prefix: Backslash (1,1) -> (1,2), @@ -6630,7 +6408,7 @@ Score (1,1) -> (1,25) { }, arguments: Arguments (1,14) -> (1,23) { openParenthesis: LParen (1,14) -> (1,15), - arguments: Array [ + arguments: [ String "Value" (1,15) -> (1,21), ], closeParenthesis: RParen (1,22) -> (1,23), @@ -6642,15 +6420,15 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParserTest valid-score-metadata unknown valuelist: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > valuelist propertylist empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata unknown valuelist: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > valuelist propertylist empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata valuelist propertylist empty 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > valuelist propertylist empty 1`] = ` Score (1,1) -> (1,28) { - bars: Array [ + bars: [ Bar (1,1) -> (1,28) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,26) { tag: Tag "notExisting" (1,1) -> (1,13) { prefix: Backslash (1,1) -> (1,2), @@ -6658,14 +6436,14 @@ Score (1,1) -> (1,28) { }, arguments: Arguments (1,14) -> (1,23) { openParenthesis: LParen (1,14) -> (1,15), - arguments: Array [ + arguments: [ String "Value" (1,15) -> (1,21), ], closeParenthesis: RParen (1,22) -> (1,23), }, properties: Props (1,24) -> (1,26) { openBrace: LBrace (1,24) -> (1,25), - properties: Array [], + properties: [], closeBrace: RBrace (1,25) -> (1,26), }, }, @@ -6675,15 +6453,15 @@ Score (1,1) -> (1,28) { } `; -exports[`AlphaTexParserTest valid-score-metadata valuelist propertylist empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > valuelist propertylist unknown prop > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata valuelist propertylist empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-score-metadata > valuelist propertylist unknown prop > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata valuelist propertylist unknown prop 1`] = ` +exports[`AlphaTexParserTest > valid-score-metadata > valuelist propertylist unknown prop 1`] = ` Score (1,1) -> (1,43) { - bars: Array [ + bars: [ Bar (1,1) -> (1,43) { - metaData: Array [ + metaData: [ Meta (1,1) -> (1,41) { tag: Tag "notExisting" (1,1) -> (1,13) { prefix: Backslash (1,1) -> (1,2), @@ -6691,19 +6469,19 @@ Score (1,1) -> (1,43) { }, arguments: Arguments (1,14) -> (1,23) { openParenthesis: LParen (1,14) -> (1,15), - arguments: Array [ + arguments: [ String "Value" (1,15) -> (1,21), ], closeParenthesis: RParen (1,22) -> (1,23), }, properties: Props (1,24) -> (1,41) { openBrace: LBrace (1,24) -> (1,25), - properties: Array [ + properties: [ Prop (1,25) -> (1,40) { property: Ident "unknown" (1,25) -> (1,32), properties: Arguments (1,33) -> (1,40) { openParenthesis: LParen (1,33) -> (1,34), - arguments: Array [ + arguments: [ Number "1" (1,34) -> (1,35), Number "2" (1,36) -> (1,37), Number "3" (1,38) -> (1,39), @@ -6721,18 +6499,18 @@ Score (1,1) -> (1,43) { } `; -exports[`AlphaTexParserTest valid-score-metadata valuelist propertylist unknown prop: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > basic fretted > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-score-metadata valuelist propertylist unknown prop: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > basic fretted > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points basic fretted 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > basic fretted 1`] = ` Score (1,1) -> (1,21) { - bars: Array [ + bars: [ Bar (1,2) -> (1,9) { - beats: Array [ + beats: [ Beat (1,4) -> (1,9) { notes: NoteList (1,4) -> (1,7) { - notes: Array [ + notes: [ Note (1,4) -> (1,7) { noteValue: Number "3" (1,4) -> (1,5), noteStringDot: Dot (1,5) -> (1,6), @@ -6744,14 +6522,14 @@ Score (1,1) -> (1,21) { ], }, Bar (1,10) -> (1,21) { - metaData: Array [ + metaData: [ Meta (1,10) -> (1,21) { tag: Tag "sync" (1,10) -> (1,15) { prefix: Backslash (1,10) -> (1,11), tag: Ident "sync" (1,11) -> (1,15), }, arguments: Arguments (1,16) -> (1,21) { - arguments: Array [ + arguments: [ Number "1" (1,16) -> (1,17) { parameterIndices: Map { 0 => 0, @@ -6768,7 +6546,7 @@ Score (1,1) -> (1,21) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -6780,18 +6558,18 @@ Score (1,1) -> (1,21) { } `; -exports[`AlphaTexParserTest valid-sync-points basic fretted: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > basic simple numbered > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points basic fretted: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > basic simple numbered > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points basic simple numbered 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > basic simple numbered 1`] = ` Score (1,1) -> (1,20) { - bars: Array [ + bars: [ Bar (1,2) -> (1,8) { - beats: Array [ + beats: [ Beat (1,4) -> (1,8) { notes: NoteList (1,4) -> (1,8) { - notes: Array [ + notes: [ Note (1,4) -> (1,8) { noteValue: Number "32" (1,4) -> (1,6), }, @@ -6801,14 +6579,14 @@ Score (1,1) -> (1,20) { ], }, Bar (1,9) -> (1,20) { - metaData: Array [ + metaData: [ Meta (1,9) -> (1,20) { tag: Tag "sync" (1,9) -> (1,14) { prefix: Backslash (1,9) -> (1,10), tag: Ident "sync" (1,10) -> (1,14), }, arguments: Arguments (1,15) -> (1,20) { - arguments: Array [ + arguments: [ Number "1" (1,15) -> (1,16) { parameterIndices: Map { 0 => 0, @@ -6825,7 +6603,7 @@ Score (1,1) -> (1,20) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -6837,18 +6615,18 @@ Score (1,1) -> (1,20) { } `; -exports[`AlphaTexParserTest valid-sync-points basic simple numbered: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > basic simple pitched > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points basic simple numbered: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > basic simple pitched > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points basic simple pitched 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > basic simple pitched 1`] = ` Score (1,1) -> (1,20) { - bars: Array [ + bars: [ Bar (1,2) -> (1,8) { - beats: Array [ + beats: [ Beat (1,4) -> (1,8) { notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -6858,14 +6636,14 @@ Score (1,1) -> (1,20) { ], }, Bar (1,9) -> (1,20) { - metaData: Array [ + metaData: [ Meta (1,9) -> (1,20) { tag: Tag "sync" (1,9) -> (1,14) { prefix: Backslash (1,9) -> (1,10), tag: Ident "sync" (1,10) -> (1,14), }, arguments: Arguments (1,15) -> (1,20) { - arguments: Array [ + arguments: [ Number "1" (1,15) -> (1,16) { parameterIndices: Map { 0 => 0, @@ -6882,7 +6660,7 @@ Score (1,1) -> (1,20) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -6894,26 +6672,30 @@ Score (1,1) -> (1,20) { } `; -exports[`AlphaTexParserTest valid-sync-points basic simple pitched: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points basic simple pitched: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points empty 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > empty 1`] = ` Score (1,1) -> (1,5) { - bars: Array [ + bars: [ Bar (1,2) -> (1,5), ], } `; -exports[`AlphaTexParserTest valid-sync-points empty with bars 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > empty with bars > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-sync-points > empty with bars > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-sync-points > empty with bars 1`] = ` Score (1,1) -> (1,13) { - bars: Array [ + bars: [ Bar (1,2) -> (1,8) { - beats: Array [ + beats: [ Beat (1,4) -> (1,6) { notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -6924,10 +6706,10 @@ Score (1,1) -> (1,13) { pipe: Pipe (1,7) -> (1,8), }, Bar (1,9) -> (1,13) { - beats: Array [ + beats: [ Beat (1,9) -> (1,13) { notes: NoteList (1,9) -> (1,11) { - notes: Array [ + notes: [ Note (1,9) -> (1,11) { noteValue: Ident "C5" (1,9) -> (1,11), }, @@ -6941,14 +6723,18 @@ Score (1,1) -> (1,13) { } `; -exports[`AlphaTexParserTest valid-sync-points empty with bars empty at end 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > empty with bars empty at end > lexer-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-sync-points > empty with bars empty at end > parser-diagnostics 1`] = `[]`; + +exports[`AlphaTexParserTest > valid-sync-points > empty with bars empty at end 1`] = ` Score (1,1) -> (1,15) { - bars: Array [ + bars: [ Bar (1,2) -> (1,8) { - beats: Array [ + beats: [ Beat (1,4) -> (1,6) { notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -6959,10 +6745,10 @@ Score (1,1) -> (1,15) { pipe: Pipe (1,7) -> (1,8), }, Bar (1,9) -> (1,13) { - beats: Array [ + beats: [ Beat (1,9) -> (1,11) { notes: NoteList (1,9) -> (1,11) { - notes: Array [ + notes: [ Note (1,9) -> (1,11) { noteValue: Ident "C5" (1,9) -> (1,11), }, @@ -6977,47 +6763,39 @@ Score (1,1) -> (1,15) { } `; -exports[`AlphaTexParserTest valid-sync-points empty with bars empty at end: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-sync-points empty with bars empty at end: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-sync-points empty with bars: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > full > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points empty with bars: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > full > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points empty: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-sync-points empty: parser-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-sync-points full 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > full 1`] = ` Score (1,1) -> (1,36) { - bars: Array [ + bars: [ Bar (1,2) -> (1,22) { - metaData: Array [ + metaData: [ Meta (1,2) -> (1,14) { tag: Tag "title" (1,2) -> (1,8) { prefix: Backslash (1,2) -> (1,3), tag: Ident "title" (1,3) -> (1,8), }, arguments: Arguments (1,9) -> (1,14) { - arguments: Array [ + arguments: [ String "Test" (1,9) -> (1,14) { parameterIndices: Map { 0 => 0, }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, }, }, ], - beats: Array [ + beats: [ Beat (1,18) -> (1,22) { notes: NoteList (1,18) -> (1,20) { - notes: Array [ + notes: [ Note (1,18) -> (1,20) { noteValue: Ident "C4" (1,18) -> (1,20), }, @@ -7029,14 +6807,14 @@ Score (1,1) -> (1,36) { ], }, Bar (1,23) -> (1,36) { - metaData: Array [ + metaData: [ Meta (1,25) -> (1,36) { tag: Tag "sync" (1,25) -> (1,30) { prefix: Backslash (1,25) -> (1,26), tag: Ident "sync" (1,26) -> (1,30), }, arguments: Arguments (1,31) -> (1,36) { - arguments: Array [ + arguments: [ Number "1" (1,31) -> (1,32) { parameterIndices: Map { 0 => 0, @@ -7053,7 +6831,7 @@ Score (1,1) -> (1,36) { }, }, ], - signatureCandidateIndices: Array [ + signatureCandidateIndices: [ 0, ], validated: true, @@ -7065,18 +6843,18 @@ Score (1,1) -> (1,36) { } `; -exports[`AlphaTexParserTest valid-sync-points full: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > properties empty > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points full: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > properties empty > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points properties empty 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > properties empty 1`] = ` Score (1,1) -> (1,25) { - bars: Array [ + bars: [ Bar (1,2) -> (1,8) { - beats: Array [ + beats: [ Beat (1,4) -> (1,8) { notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -7086,7 +6864,7 @@ Score (1,1) -> (1,25) { ], }, Bar (1,9) -> (1,25) { - metaData: Array [ + metaData: [ Meta (1,9) -> (1,25) { tag: Tag "sync" (1,9) -> (1,14) { prefix: Backslash (1,9) -> (1,10), @@ -7094,7 +6872,7 @@ Score (1,1) -> (1,25) { }, arguments: Arguments (1,15) -> (1,22) { openParenthesis: LParen (1,15) -> (1,16), - arguments: Array [ + arguments: [ Number "1" (1,16) -> (1,17), Number "1" (1,18) -> (1,19), Number "1" (1,20) -> (1,21), @@ -7103,7 +6881,7 @@ Score (1,1) -> (1,25) { }, properties: Props (1,23) -> (1,25) { openBrace: LBrace (1,23) -> (1,24), - properties: Array [], + properties: [], closeBrace: RBrace (1,24) -> (1,25), }, }, @@ -7113,18 +6891,18 @@ Score (1,1) -> (1,25) { } `; -exports[`AlphaTexParserTest valid-sync-points properties empty: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > properties unknown > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points properties empty: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > properties unknown > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points properties unknown 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > properties unknown 1`] = ` Score (1,1) -> (1,42) { - bars: Array [ + bars: [ Bar (1,2) -> (1,8) { - beats: Array [ + beats: [ Beat (1,4) -> (1,8) { notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -7134,7 +6912,7 @@ Score (1,1) -> (1,42) { ], }, Bar (1,9) -> (1,42) { - metaData: Array [ + metaData: [ Meta (1,9) -> (1,42) { tag: Tag "sync" (1,9) -> (1,14) { prefix: Backslash (1,9) -> (1,10), @@ -7142,7 +6920,7 @@ Score (1,1) -> (1,42) { }, arguments: Arguments (1,15) -> (1,22) { openParenthesis: LParen (1,15) -> (1,16), - arguments: Array [ + arguments: [ Number "1" (1,16) -> (1,17), Number "1" (1,18) -> (1,19), Number "1" (1,20) -> (1,21), @@ -7151,12 +6929,12 @@ Score (1,1) -> (1,42) { }, properties: Props (1,23) -> (1,42) { openBrace: LBrace (1,23) -> (1,24), - properties: Array [ + properties: [ Prop (1,25) -> (1,40) { property: Ident "unknown" (1,25) -> (1,32), properties: Arguments (1,33) -> (1,40) { openParenthesis: LParen (1,33) -> (1,34), - arguments: Array [ + arguments: [ Number "1" (1,34) -> (1,35), Number "2" (1,36) -> (1,37), Number "3" (1,38) -> (1,39), @@ -7174,18 +6952,18 @@ Score (1,1) -> (1,42) { } `; -exports[`AlphaTexParserTest valid-sync-points properties unknown: lexer-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > valuelist > lexer-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points properties unknown: parser-diagnostics 1`] = `Array []`; +exports[`AlphaTexParserTest > valid-sync-points > valuelist > parser-diagnostics 1`] = `[]`; -exports[`AlphaTexParserTest valid-sync-points valuelist 1`] = ` +exports[`AlphaTexParserTest > valid-sync-points > valuelist 1`] = ` Score (1,1) -> (1,22) { - bars: Array [ + bars: [ Bar (1,2) -> (1,8) { - beats: Array [ + beats: [ Beat (1,4) -> (1,8) { notes: NoteList (1,4) -> (1,6) { - notes: Array [ + notes: [ Note (1,4) -> (1,6) { noteValue: Ident "C4" (1,4) -> (1,6), }, @@ -7195,7 +6973,7 @@ Score (1,1) -> (1,22) { ], }, Bar (1,9) -> (1,22) { - metaData: Array [ + metaData: [ Meta (1,9) -> (1,22) { tag: Tag "sync" (1,9) -> (1,14) { prefix: Backslash (1,9) -> (1,10), @@ -7203,7 +6981,7 @@ Score (1,1) -> (1,22) { }, arguments: Arguments (1,15) -> (1,22) { openParenthesis: LParen (1,15) -> (1,16), - arguments: Array [ + arguments: [ Number "1" (1,16) -> (1,17), Number "1" (1,18) -> (1,19), Number "1" (1,20) -> (1,21), @@ -7216,7 +6994,3 @@ Score (1,1) -> (1,22) { ], } `; - -exports[`AlphaTexParserTest valid-sync-points valuelist: lexer-diagnostics 1`] = `Array []`; - -exports[`AlphaTexParserTest valid-sync-points valuelist: parser-diagnostics 1`] = `Array []`; diff --git a/packages/alphatab/test/importer/__snapshots__/Gp8Importer.test.ts.snap b/packages/alphatab/test/importer/__snapshots__/Gp8Importer.test.ts.snap index 0fed28a05..d3b6b5de6 100644 --- a/packages/alphatab/test/importer/__snapshots__/Gp8Importer.test.ts.snap +++ b/packages/alphatab/test/importer/__snapshots__/Gp8Importer.test.ts.snap @@ -1,17 +1,17 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Gp8ImporterTest audio-track 1`] = ` +exports[`Gp8ImporterTest > audio-track 1`] = ` Map { "__kind" => "Score", "artist" => "JerryC", "music" => "JerryC", "title" => "Canon Rock", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", "beamingrules" => Map { "groups" => Map { - "8" => Array [ + "8" => [ 2, 2, 2, @@ -19,7 +19,7 @@ Map { ], }, }, - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -29,7 +29,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -58,7 +58,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -124,7 +124,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -146,7 +146,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -156,7 +156,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -174,7 +174,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -328,7 +328,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -402,7 +402,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -707,13 +707,13 @@ Map { "timesignaturenumerator" => 6, "beamingrules" => Map { "groups" => Map { - "8" => Array [ + "8" => [ 6, 6, ], }, }, - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -723,7 +723,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -743,7 +743,7 @@ Map { "__kind" => "MasterBar", "beamingrules" => Map { "groups" => Map { - "8" => Array [ + "8" => [ 2, 2, 2, @@ -751,7 +751,7 @@ Map { ], }, }, - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -761,7 +761,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -783,7 +783,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -797,7 +797,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -811,7 +811,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -825,7 +825,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -839,7 +839,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -853,7 +853,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -867,7 +867,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -877,7 +877,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -899,7 +899,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -917,7 +917,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -979,7 +979,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -1025,7 +1025,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -1074,7 +1074,7 @@ Map { "timesignaturenumerator" => 6, "beamingrules" => Map { "groups" => Map { - "8" => Array [ + "8" => [ 6, 6, ], @@ -1086,7 +1086,7 @@ Map { "__kind" => "MasterBar", "beamingrules" => Map { "groups" => Map { - "8" => Array [ + "8" => [ 2, 2, 2, @@ -1218,7 +1218,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1228,7 +1228,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -1258,7 +1258,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1268,7 +1268,7 @@ Map { "isvisible" => true, }, ], - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, @@ -1298,7 +1298,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1320,7 +1320,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1334,7 +1334,7 @@ Map { }, Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1376,7 +1376,7 @@ Map { }, Map { "__kind" => "MasterBar", - "syncpoints" => Array [ + "syncpoints" => [ Map { "islinear" => false, "type" => 4, diff --git a/packages/alphatab/test/importer/__snapshots__/MusicXmlImporter.test.ts.snap b/packages/alphatab/test/importer/__snapshots__/MusicXmlImporter.test.ts.snap index b55cd2ecf..11e20342c 100644 --- a/packages/alphatab/test/importer/__snapshots__/MusicXmlImporter.test.ts.snap +++ b/packages/alphatab/test/importer/__snapshots__/MusicXmlImporter.test.ts.snap @@ -1,12 +1,12 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`MusicXmlImporterTests 2102-corrupt-direction 1`] = ` +exports[`MusicXmlImporterTests > 2102-corrupt-direction 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -18,25 +18,25 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -44,7 +44,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -79,14 +79,14 @@ Map { } `; -exports[`MusicXmlImporterTests barlines 1`] = ` +exports[`MusicXmlImporterTests > barlines 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", "timesignaturecommon" => true, - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -166,26 +166,26 @@ Map { "start" => 65280, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -207,11 +207,11 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, @@ -228,11 +228,11 @@ Map { Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -249,11 +249,11 @@ Map { Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -270,11 +270,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -291,11 +291,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -311,11 +311,11 @@ Map { Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -331,11 +331,11 @@ Map { Map { "__kind" => "Bar", "id" => 7, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -351,11 +351,11 @@ Map { Map { "__kind" => "Bar", "id" => 8, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -371,11 +371,11 @@ Map { Map { "__kind" => "Bar", "id" => 9, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 9, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 9, @@ -391,11 +391,11 @@ Map { Map { "__kind" => "Bar", "id" => 10, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 10, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 10, @@ -411,11 +411,11 @@ Map { Map { "__kind" => "Bar", "id" => 11, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 11, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 11, @@ -431,11 +431,11 @@ Map { Map { "__kind" => "Bar", "id" => 12, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 12, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 12, @@ -451,11 +451,11 @@ Map { Map { "__kind" => "Bar", "id" => 13, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 13, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 13, @@ -471,11 +471,11 @@ Map { Map { "__kind" => "Bar", "id" => 14, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 14, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 14, @@ -491,11 +491,11 @@ Map { Map { "__kind" => "Bar", "id" => 15, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 15, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 15, @@ -511,11 +511,11 @@ Map { Map { "__kind" => "Bar", "id" => 16, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 16, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 16, @@ -531,11 +531,11 @@ Map { Map { "__kind" => "Bar", "id" => 17, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 17, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 17, @@ -562,7 +562,7 @@ Map { } `; -exports[`MusicXmlImporterTests buzzroll 1`] = ` +exports[`MusicXmlImporterTests > buzzroll 1`] = ` Map { "__kind" => "Score", "artist" => "Artist", @@ -572,10 +572,10 @@ Map { "title" => "Title", "words" => "Words", "tab" => "Tab", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -587,25 +587,25 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -613,7 +613,7 @@ Map { "tone" => 0, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -634,7 +634,7 @@ Map { Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -655,7 +655,7 @@ Map { Map { "__kind" => "Beat", "id" => 2, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 2, @@ -676,7 +676,7 @@ Map { Map { "__kind" => "Beat", "id" => 3, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 3, @@ -716,7 +716,7 @@ Map { } `; -exports[`MusicXmlImporterTests partwise-anacrusis 1`] = ` +exports[`MusicXmlImporterTests > partwise-anacrusis 1`] = ` Map { "__kind" => "Score", "artist" => "Artist", @@ -726,10 +726,10 @@ Map { "title" => "Title", "words" => "Words", "tab" => "Tab", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -758,26 +758,26 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -798,11 +798,11 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, @@ -817,11 +817,11 @@ Map { Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -836,11 +836,11 @@ Map { Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -856,11 +856,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -885,23 +885,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -922,11 +922,11 @@ Map { Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -941,11 +941,11 @@ Map { Map { "__kind" => "Bar", "id" => 7, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -960,11 +960,11 @@ Map { Map { "__kind" => "Bar", "id" => 8, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -980,11 +980,11 @@ Map { Map { "__kind" => "Bar", "id" => 9, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 9, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 9, @@ -1016,7 +1016,7 @@ Map { } `; -exports[`MusicXmlImporterTests partwise-basic 1`] = ` +exports[`MusicXmlImporterTests > partwise-basic 1`] = ` Map { "__kind" => "Score", "artist" => "Artist", @@ -1026,10 +1026,10 @@ Map { "title" => "Title", "words" => "Words", "tab" => "Tab", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1049,26 +1049,26 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1088,11 +1088,11 @@ Map { Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, @@ -1107,11 +1107,11 @@ Map { Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -1136,23 +1136,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1172,11 +1172,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -1191,11 +1191,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -1222,23 +1222,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1258,11 +1258,11 @@ Map { Map { "__kind" => "Bar", "id" => 7, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -1277,11 +1277,11 @@ Map { Map { "__kind" => "Bar", "id" => 8, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -1313,14 +1313,14 @@ Map { } `; -exports[`MusicXmlImporterTests partwise-complex-measures 1`] = ` +exports[`MusicXmlImporterTests > partwise-complex-measures 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", "timesignaturecommon" => true, - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1336,25 +1336,25 @@ Map { "start" => 3840, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -1368,7 +1368,7 @@ Map { "tone" => 2, }, ], - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1385,7 +1385,7 @@ Map { Map { "__kind" => "Beat", "id" => 1, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 2, @@ -1413,7 +1413,7 @@ Map { Map { "__kind" => "Beat", "id" => 3, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 3, @@ -1435,15 +1435,15 @@ Map { Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 6, @@ -1464,7 +1464,7 @@ Map { Map { "__kind" => "Beat", "id" => 9, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 8, @@ -1492,7 +1492,7 @@ Map { Map { "__kind" => "Beat", "id" => 11, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 9, @@ -1516,15 +1516,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -1537,7 +1537,7 @@ Map { Map { "__kind" => "Beat", "id" => 5, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 4, @@ -1556,7 +1556,7 @@ Map { Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -1569,7 +1569,7 @@ Map { Map { "__kind" => "Beat", "id" => 7, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 5, @@ -1591,11 +1591,11 @@ Map { Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 12, @@ -1608,7 +1608,7 @@ Map { Map { "__kind" => "Beat", "id" => 13, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 10, @@ -1627,7 +1627,7 @@ Map { Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 14, @@ -1640,7 +1640,7 @@ Map { Map { "__kind" => "Beat", "id" => 15, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 11, @@ -1671,24 +1671,24 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 16, "isempty" => true, "duration" => 256, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1705,7 +1705,7 @@ Map { Map { "__kind" => "Beat", "id" => 17, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 12, @@ -1725,7 +1725,7 @@ Map { Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 18, @@ -1738,7 +1738,7 @@ Map { Map { "__kind" => "Beat", "id" => 19, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 13, @@ -1757,7 +1757,7 @@ Map { Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 20, @@ -1770,7 +1770,7 @@ Map { Map { "__kind" => "Beat", "id" => 21, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 14, @@ -1793,11 +1793,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 9, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 22, @@ -1810,7 +1810,7 @@ Map { Map { "__kind" => "Beat", "id" => 23, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 15, @@ -1830,7 +1830,7 @@ Map { Map { "__kind" => "Voice", "id" => 10, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 24, @@ -1843,7 +1843,7 @@ Map { Map { "__kind" => "Beat", "id" => 25, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 16, @@ -1862,7 +1862,7 @@ Map { Map { "__kind" => "Voice", "id" => 11, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 26, @@ -1875,7 +1875,7 @@ Map { Map { "__kind" => "Beat", "id" => 27, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 17, @@ -1913,14 +1913,14 @@ Map { } `; -exports[`MusicXmlImporterTests partwise-staff-change 1`] = ` +exports[`MusicXmlImporterTests > partwise-staff-change 1`] = ` Map { "__kind" => "Score", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", "timesignaturecommon" => true, - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -1932,26 +1932,26 @@ Map { ], }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "duration" => 16, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -1979,7 +1979,7 @@ Map { Map { "__kind" => "Beat", "id" => 14, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 11, @@ -1999,7 +1999,7 @@ Map { Map { "__kind" => "Beat", "id" => 15, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 12, @@ -2019,7 +2019,7 @@ Map { Map { "__kind" => "Beat", "id" => 16, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 13, @@ -2040,7 +2040,7 @@ Map { Map { "__kind" => "Beat", "id" => 17, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 14, @@ -2067,16 +2067,16 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 1, "clef" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, @@ -2089,7 +2089,7 @@ Map { Map { "__kind" => "Beat", "id" => 2, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 0, @@ -2109,7 +2109,7 @@ Map { Map { "__kind" => "Beat", "id" => 3, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 1, @@ -2130,7 +2130,7 @@ Map { Map { "__kind" => "Beat", "id" => 4, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 2, @@ -2150,7 +2150,7 @@ Map { Map { "__kind" => "Beat", "id" => 5, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 3, @@ -2170,7 +2170,7 @@ Map { Map { "__kind" => "Beat", "id" => 6, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 4, @@ -2190,7 +2190,7 @@ Map { Map { "__kind" => "Beat", "id" => 7, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 5, @@ -2210,7 +2210,7 @@ Map { Map { "__kind" => "Beat", "id" => 8, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 6, @@ -2230,7 +2230,7 @@ Map { Map { "__kind" => "Beat", "id" => 9, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 7, @@ -2251,7 +2251,7 @@ Map { Map { "__kind" => "Beat", "id" => 10, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 8, @@ -2271,7 +2271,7 @@ Map { Map { "__kind" => "Beat", "id" => 11, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 9, @@ -2291,7 +2291,7 @@ Map { Map { "__kind" => "Beat", "id" => 12, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 10, @@ -2313,7 +2313,7 @@ Map { Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 47, @@ -2326,7 +2326,7 @@ Map { Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 48, @@ -2339,7 +2339,7 @@ Map { Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 49, @@ -2352,11 +2352,11 @@ Map { Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 18, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 15, @@ -2376,7 +2376,7 @@ Map { Map { "__kind" => "Beat", "id" => 19, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 16, @@ -2397,7 +2397,7 @@ Map { Map { "__kind" => "Beat", "id" => 20, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 17, @@ -2418,7 +2418,7 @@ Map { Map { "__kind" => "Beat", "id" => 21, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 18, @@ -2439,7 +2439,7 @@ Map { Map { "__kind" => "Beat", "id" => 22, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 19, @@ -2460,7 +2460,7 @@ Map { Map { "__kind" => "Beat", "id" => 23, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 20, @@ -2481,7 +2481,7 @@ Map { Map { "__kind" => "Beat", "id" => 24, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 21, @@ -2502,7 +2502,7 @@ Map { Map { "__kind" => "Beat", "id" => 25, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 22, @@ -2537,23 +2537,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 26, "duration" => 16, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -2581,7 +2581,7 @@ Map { Map { "__kind" => "Beat", "id" => 36, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 30, @@ -2621,7 +2621,7 @@ Map { Map { "__kind" => "Beat", "id" => 42, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 33, @@ -2641,7 +2641,7 @@ Map { Map { "__kind" => "Beat", "id" => 43, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 34, @@ -2661,7 +2661,7 @@ Map { Map { "__kind" => "Beat", "id" => 44, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 35, @@ -2681,7 +2681,7 @@ Map { Map { "__kind" => "Beat", "id" => 45, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 36, @@ -2701,7 +2701,7 @@ Map { Map { "__kind" => "Beat", "id" => 46, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 37, @@ -2727,15 +2727,15 @@ Map { }, Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 27, @@ -2748,7 +2748,7 @@ Map { Map { "__kind" => "Beat", "id" => 28, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 23, @@ -2768,7 +2768,7 @@ Map { Map { "__kind" => "Beat", "id" => 29, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 24, @@ -2788,7 +2788,7 @@ Map { Map { "__kind" => "Beat", "id" => 30, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 25, @@ -2808,7 +2808,7 @@ Map { Map { "__kind" => "Beat", "id" => 31, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 26, @@ -2828,7 +2828,7 @@ Map { Map { "__kind" => "Beat", "id" => 32, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 27, @@ -2848,7 +2848,7 @@ Map { Map { "__kind" => "Beat", "id" => 33, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 28, @@ -2868,7 +2868,7 @@ Map { Map { "__kind" => "Beat", "id" => 34, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 29, @@ -2899,7 +2899,7 @@ Map { Map { "__kind" => "Beat", "id" => 38, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 31, @@ -2919,7 +2919,7 @@ Map { Map { "__kind" => "Beat", "id" => 39, - "notes" => Array [ + "notes" => [ Map { "__kind" => "Note", "id" => 32, @@ -2958,7 +2958,7 @@ Map { } `; -exports[`MusicXmlImporterTests timewise-anacrusis 1`] = ` +exports[`MusicXmlImporterTests > timewise-anacrusis 1`] = ` Map { "__kind" => "Score", "artist" => "Artist", @@ -2968,10 +2968,10 @@ Map { "title" => "Title", "words" => "Words", "tab" => "Tab", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -3000,26 +3000,26 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3040,11 +3040,11 @@ Map { Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, @@ -3059,11 +3059,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -3078,11 +3078,11 @@ Map { Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, @@ -3098,11 +3098,11 @@ Map { Map { "__kind" => "Bar", "id" => 8, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -3127,23 +3127,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3164,11 +3164,11 @@ Map { Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, @@ -3183,11 +3183,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -3202,11 +3202,11 @@ Map { Map { "__kind" => "Bar", "id" => 7, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, @@ -3222,11 +3222,11 @@ Map { Map { "__kind" => "Bar", "id" => 9, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 9, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 9, @@ -3258,7 +3258,7 @@ Map { } `; -exports[`MusicXmlImporterTests timewise-basic 1`] = ` +exports[`MusicXmlImporterTests > timewise-basic 1`] = ` Map { "__kind" => "Score", "artist" => "Artist", @@ -3268,10 +3268,10 @@ Map { "title" => "Title", "words" => "Words", "tab" => "Tab", - "masterbars" => Array [ + "masterbars" => [ Map { "__kind" => "MasterBar", - "tempoautomations" => Array [ + "tempoautomations" => [ Map { "islinear" => false, "type" => 0, @@ -3291,26 +3291,26 @@ Map { "start" => 7680, }, ], - "tracks" => Array [ + "tracks" => [ Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 0, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 0, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 0, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3330,11 +3330,11 @@ Map { Map { "__kind" => "Bar", "id" => 3, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 3, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 1, @@ -3349,11 +3349,11 @@ Map { Map { "__kind" => "Bar", "id" => 6, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 6, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 2, @@ -3378,23 +3378,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 1, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 1, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 3, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3414,11 +3414,11 @@ Map { Map { "__kind" => "Bar", "id" => 4, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 4, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 4, @@ -3433,11 +3433,11 @@ Map { Map { "__kind" => "Bar", "id" => 7, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 7, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 5, @@ -3464,23 +3464,23 @@ Map { }, Map { "__kind" => "Track", - "staves" => Array [ + "staves" => [ Map { "__kind" => "Staff", - "bars" => Array [ + "bars" => [ Map { "__kind" => "Bar", "id" => 2, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 2, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 6, "isempty" => true, - "automations" => Array [ + "automations" => [ Map { "islinear" => false, "type" => 2, @@ -3500,11 +3500,11 @@ Map { Map { "__kind" => "Bar", "id" => 5, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 5, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 7, @@ -3519,11 +3519,11 @@ Map { Map { "__kind" => "Bar", "id" => 8, - "voices" => Array [ + "voices" => [ Map { "__kind" => "Voice", "id" => 8, - "beats" => Array [ + "beats" => [ Map { "__kind" => "Beat", "id" => 8, diff --git a/packages/alphatab/test/mocha.jest-snapshot.ts b/packages/alphatab/test/mocha.jest-snapshot.ts deleted file mode 100644 index 7248c866e..000000000 --- a/packages/alphatab/test/mocha.jest-snapshot.ts +++ /dev/null @@ -1,513 +0,0 @@ -/** @target web */ -import chalk from 'chalk'; -import * as chai from 'chai'; -import url from 'node:url'; -import path from 'node:path'; -import { - addSerializer, - buildSnapshotResolver, - type SnapshotResolver, - SnapshotState, - toMatchSnapshot -} from 'jest-snapshot'; -import type { Config } from '@jest/types'; -import slash from 'slash'; -import type { SyncExpectationResult } from 'expect'; -import { equals, iterableEquality, subsetEquality } from '@jest/expect-utils'; -import * as matcherUtils from 'jest-matcher-utils'; -import { - AlphaTexAstNodePlugin, - AlphaTexDiagnosticPlugin, - MidiEventSerializerPlugin, - type PrettyFormatConfig, - type PrettyFormatPrinter, - ScoreSerializerPlugin -} from './PrettyFormat'; - -// Mocha and Chai integration (called from global-hooks.ts) -declare global { - namespace Chai { - interface Assertion { - toMatchSnapshot(message?: string): Assertion; - } - } -} - -export async function initializeJestSnapshot() { - // Setup jest-snapshot - - addSerializer({ - test(val) { - return ScoreSerializerPlugin.instance.test(val); - }, - serialize(val, config, indentation, depth, refs, printer) { - // - return ScoreSerializerPlugin.instance.serialize( - val, - config as PrettyFormatConfig, - indentation, - depth, - refs, - printer as PrettyFormatPrinter - ); - } - }); - addSerializer({ - test(val) { - return MidiEventSerializerPlugin.instance.test(val); - }, - serialize(val, config, indentation, depth, refs, printer) { - // - return MidiEventSerializerPlugin.instance.serialize( - val, - config as PrettyFormatConfig, - indentation, - depth, - refs, - printer as PrettyFormatPrinter - ); - } - }); - addSerializer({ - test(val) { - return AlphaTexDiagnosticPlugin.instance.test(val); - }, - serialize(val, config, indentation, depth, refs, printer) { - // - return AlphaTexDiagnosticPlugin.instance.serialize( - val, - config as PrettyFormatConfig, - indentation, - depth, - refs, - printer as PrettyFormatPrinter - ); - } - }); - addSerializer({ - test(val) { - return AlphaTexAstNodePlugin.instance.test(val); - }, - serialize(val, config, indentation, depth, refs, printer) { - // - return AlphaTexAstNodePlugin.instance.serialize( - val, - config as PrettyFormatConfig, - indentation, - depth, - refs, - printer as PrettyFormatPrinter - ); - } - }); - - currentResolver = await buildSnapshotResolver(globalConfig); - - chai.use((chai, utils) => { - utils.addMethod( - chai.Assertion.prototype, - 'toMatchSnapshot', - function (this: Record, message?: string) { - const received = utils.flag(this, 'object'); - const isNot = utils.flag(this, 'negate') as boolean; - - const args = [received]; - if (message !== undefined) { - args.push(message); - } - - const matchResult = toMatchSnapshot.apply( - { - // Context - snapshotState: snapshotState!, - - // MatcherContext -> MatcherState - assertionCalls, - currentConcurrentTestName: undefined, - currentTestName: currentTest!.fullTitle(), - error: undefined, - expand: snapshotOptions.expand, - expectedAssertionsNumber: null, - expectedAssertionsNumberError: undefined, - isExpectingAssertions: false, - isExpectingAssertionsError: undefined, - isNot, - numPassingAsserts: 0, - promise: undefined, - suppressedErrors: [], - testPath: currentTest!.file, - - // MatcherContext -> MatcherUtils - customTesters: [], - dontThrow() {}, - equals, - utils: { - ...matcherUtils, - iterableEquality, - subsetEquality - } - }, - args as any - ) as SyncExpectationResult; - - assertionCalls++; - - if (!matchResult.pass) { - chai.assert.fail(matchResult.message()); - } - } - ); - }); -} - -export function beforeEachTest(newTest: Mocha.Test) { - if (currentTest === undefined || currentTest?.file !== newTest.file) { - if (snapshotState) { - storeSnapshotState(snapshotState); - } - - snapshotState = new SnapshotState(currentResolver!.resolveSnapshotPath(newTest.file!), snapshotOptions); - } - assertionCalls = 0; - currentTest = newTest; - executedTestNames.add(newTest.fullTitle()); -} - -export function afterAll() { - if (snapshotState) { - storeSnapshotState(snapshotState); - } - - writeSummaryReport(); -} - -// -// Adapted code from Jest for the use in Mocha -// MIT License -// Copyright (c) Meta Platforms, Inc. and affiliates. -// Copyright Contributors to the Jest project. -// https://github.com/jestjs/jest/blob/main/LICENSE - -// General Snapshot matching -const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); - -type SnapshotStateOptions = ConstructorParameters[1]; -type SnapshotSummary = { - added: number; - didUpdate: boolean; - failure: boolean; - filesAdded: number; - filesRemoved: number; - filesRemovedList: Array; - filesUnmatched: number; - filesUpdated: number; - matched: number; - total: number; - unchecked: number; - uncheckedKeysByFile: Array; - unmatched: number; - updated: number; -}; -type UncheckedSnapshot = { - filePath: string; - keys: Array; -}; - -const globalConfig: Config.ProjectConfig = { - rootDir: path.resolve(__dirname, '..'), - snapshotFormat: {}, - // defaults - automock: false, - cache: false, - cacheDirectory: '', - clearMocks: false, - collectCoverageFrom: [], - coverageDirectory: '', - coveragePathIgnorePatterns: [], - cwd: '', - dependencyExtractor: undefined, - detectLeaks: false, - detectOpenHandles: false, - displayName: undefined, - errorOnDeprecated: false, - extensionsToTreatAsEsm: [], - fakeTimers: {}, - filter: undefined, - forceCoverageMatch: [], - globalSetup: undefined, - globalTeardown: undefined, - globals: {}, - haste: {}, - id: '', - injectGlobals: false, - moduleDirectories: [], - moduleFileExtensions: [], - moduleNameMapper: [], - modulePathIgnorePatterns: [], - modulePaths: undefined, - openHandlesTimeout: 0, - preset: undefined, - prettierPath: '', - resetMocks: false, - resetModules: false, - resolver: undefined, - restoreMocks: false, - roots: [], - runner: '', - runtime: undefined, - sandboxInjectedGlobals: [], - setupFiles: [], - setupFilesAfterEnv: [], - skipFilter: false, - skipNodeResolution: undefined, - slowTestThreshold: 0, - snapshotResolver: undefined, - snapshotSerializers: [], - testEnvironment: '', - testEnvironmentOptions: {}, - testMatch: [], - testLocationInResults: false, - testPathIgnorePatterns: [], - testRegex: [], - testRunner: '', - transform: [], - transformIgnorePatterns: [], - watchPathIgnorePatterns: [], - unmockedModulePathPatterns: undefined, - workerIdleMemoryLimit: undefined, - coverageReporters: [], - reporters: [], - testTimeout: 5000, - waitForUnhandledRejections: false -}; - -// https://github.com/jestjs/jest/blob/4e7d916ec6a16de5548273c17b5d2c5761b0aebb/packages/jest-config/src/normalize.ts#L1079-L1088 -const argvCi = !!process.env.CI; -const argvUpdateSnapshot = process.argv.includes('--updateSnapshot') || process.env.UPDATE_SNAPSHOT === 'true'; -const snapshotOptions: SnapshotStateOptions = { - updateSnapshot: argvCi ? 'none' : argvUpdateSnapshot ? 'all' : 'new', - rootDir: globalConfig.rootDir, - snapshotFormat: globalConfig.snapshotFormat, - expand: undefined, - prettierPath: undefined -}; - -let currentResolver: SnapshotResolver | undefined; -let currentTest: Mocha.Test | undefined = undefined; -let snapshotState: SnapshotState | undefined = undefined; -let assertionCalls = 0; - -// Snapshot results -const executedTestNames = new Set(); -const aggregatedResults: SnapshotSummary = { - // https://github.com/jestjs/jest/blob/4e7d916ec6a16de5548273c17b5d2c5761b0aebb/packages/jest-test-result/src/helpers.ts#L22 - added: 0, - didUpdate: false, // is set only after the full run - failure: false, - filesAdded: 0, - // combines individual test results + removed files after the full run - filesRemoved: 0, - filesRemovedList: [], - filesUnmatched: 0, - filesUpdated: 0, - matched: 0, - total: 0, - unchecked: 0, - uncheckedKeysByFile: [], - unmatched: 0, - updated: 0 -}; - -function storeSnapshotState(snapshotState: SnapshotState) { - // https://github.com/jestjs/jest/blob/4e7d916ec6a16de5548273c17b5d2c5761b0aebb/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.ts#L137 - - const uncheckedCount = snapshotState.getUncheckedCount(); - const uncheckedKeys = snapshotState.getUncheckedKeys(); - // if (uncheckedCount) { - // snapshotState.removeUncheckedKeys(); - // } - const status = snapshotState.save(); - - // https://github.com/jestjs/jest/blob/4e7d916ec6a16de5548273c17b5d2c5761b0aebb/packages/jest-test-result/src/helpers.ts#L119C1-L120C1 - // Snapshot data - - if (snapshotState.added) { - aggregatedResults.filesAdded++; - } - if (status.deleted) { - aggregatedResults.filesRemoved++; - } - if (snapshotState.unmatched) { - aggregatedResults.filesUnmatched++; - } - if (snapshotState.updated) { - aggregatedResults.filesUpdated++; - } - - aggregatedResults.unmatched += snapshotState.unmatched; - aggregatedResults.updated += snapshotState.updated; - aggregatedResults.total += - snapshotState.added + snapshotState.matched + snapshotState.unmatched + snapshotState.updated; - - aggregatedResults.added += snapshotState.added; - aggregatedResults.matched += snapshotState.matched; - aggregatedResults.unchecked += status.deleted ? 0 : uncheckedCount; - if (uncheckedKeys.length > 0) { - aggregatedResults.uncheckedKeysByFile.push({ - filePath: currentTest!.file!, - keys: uncheckedKeys - }); - } - - aggregatedResults.filesAdded += snapshotState.added; - aggregatedResults.filesRemoved += uncheckedCount; - aggregatedResults.filesUnmatched += snapshotState.unmatched; -} - -// Result Summary Printing -// https://github.com/jestjs/jest/blob/4e7d916ec6a16de5548273c17b5d2c5761b0aebb/packages/jest-reporters/src/getSnapshotSummary.ts#L25 -const ARROW = ' \u203A '; -const DOWN_ARROW = ' \u21B3 '; -const DOT = ' \u2022 '; -const FAIL_COLOR = chalk.bold.red; -const OBSOLETE_COLOR = chalk.bold.yellow; -const SNAPSHOT_ADDED = chalk.bold.green; -const SNAPSHOT_NOTE = chalk.dim; -const SNAPSHOT_REMOVED = chalk.bold.green; -const SNAPSHOT_SUMMARY = chalk.bold; -const SNAPSHOT_UPDATED = chalk.bold.green; - -function pluralize(word: string, count: number, ending = 's'): string { - return `${count} ${word}${count === 1 ? '' : ending}`; -} - -function relativePath( - config: Config.GlobalConfig | Config.ProjectConfig, - testPath: string -): { basename: string; dirname: string } { - // this function can be called with ProjectConfigs or GlobalConfigs. GlobalConfigs - // do not have config.cwd, only config.rootDir. Try using config.cwd, fallback - // to config.rootDir. (Also, some unit just use config.rootDir, which is ok) - testPath = path.relative((config as Config.ProjectConfig).cwd || config.rootDir, testPath); - const dirname = path.dirname(testPath); - const basename = path.basename(testPath); - return { basename, dirname }; -} - -function formatTestPath(config: Config.GlobalConfig | Config.ProjectConfig, testPath: string): string { - const { dirname, basename } = relativePath(config, testPath); - return slash(chalk.dim(dirname + path.sep) + chalk.bold(basename)); -} - -function writeSummaryReport() { - const snapshots = aggregatedResults; - const updateCommand = '--updateSnapshots'; - - // filter out obsolete keys if we did not execute the related test - for (const uncheckedFile of snapshots.uncheckedKeysByFile) { - const keysToRemove = new Set(); - for (const key of uncheckedFile.keys) { - let removeKey = true; - for (const executed of executedTestNames) { - if (key.startsWith(executed)) { - removeKey = false; - break; - } - } - - if (removeKey) { - keysToRemove.add(key); - snapshots.unchecked--; - snapshots.filesRemoved--; - } - } - - uncheckedFile.keys = uncheckedFile.keys.filter(k => !keysToRemove.has(k)); - } - - snapshots.uncheckedKeysByFile = snapshots.uncheckedKeysByFile.filter(f => f.keys.length > 0); - - const summary: string[] = []; - summary.push(SNAPSHOT_SUMMARY('Snapshot Summary')); - if (snapshots.added) { - summary.push( - `${SNAPSHOT_ADDED( - `${ARROW + pluralize('snapshot', snapshots.added)} written ` - )}from ${pluralize('test suite', snapshots.filesAdded)}.` - ); - } - - if (snapshots.unmatched) { - summary.push( - `${FAIL_COLOR(`${ARROW}${pluralize('snapshot', snapshots.unmatched)} failed`)} from ${pluralize( - 'test suite', - snapshots.filesUnmatched - )}. ${SNAPSHOT_NOTE(`Inspect your code changes or ${updateCommand} to update them.`)}` - ); - } - - if (snapshots.updated) { - summary.push( - `${SNAPSHOT_UPDATED( - `${ARROW + pluralize('snapshot', snapshots.updated)} updated ` - )}from ${pluralize('test suite', snapshots.filesUpdated)}.` - ); - } - - if (snapshots.filesRemoved) { - if (snapshots.didUpdate) { - summary.push( - `${SNAPSHOT_REMOVED( - `${ARROW}${pluralize('snapshot file', snapshots.filesRemoved)} removed ` - )}from ${pluralize('test suite', snapshots.filesRemoved)}.` - ); - } else { - summary.push( - `${OBSOLETE_COLOR( - `${ARROW}${pluralize('snapshot file', snapshots.filesRemoved)} obsolete ` - )}from ${pluralize('test suite', snapshots.filesRemoved)}. ${SNAPSHOT_NOTE( - `To remove ${snapshots.filesRemoved === 1 ? 'it' : 'them all'}, ${updateCommand}.` - )}` - ); - } - } - if (snapshots.filesRemovedList && snapshots.filesRemovedList.length > 0) { - const [head, ...tail] = snapshots.filesRemovedList; - summary.push(` ${DOWN_ARROW} ${DOT}${formatTestPath(globalConfig, head)}`); - - for (const key of tail) { - summary.push(` ${DOT}${formatTestPath(globalConfig, key)}`); - } - } - - if (snapshots.unchecked) { - if (snapshots.didUpdate) { - summary.push( - `${SNAPSHOT_REMOVED(`${ARROW}${pluralize('snapshot', snapshots.unchecked)} removed `)}from ${pluralize( - 'test suite', - snapshots.uncheckedKeysByFile.length - )}.` - ); - } else { - summary.push( - `${OBSOLETE_COLOR(`${ARROW}${pluralize('snapshot', snapshots.unchecked)} obsolete `)}from ${pluralize( - 'test suite', - snapshots.uncheckedKeysByFile.length - )}. ${SNAPSHOT_NOTE(`To remove ${snapshots.unchecked === 1 ? 'it' : 'them all'}, ${updateCommand}.`)}` - ); - } - - for (const uncheckedFile of snapshots.uncheckedKeysByFile) { - summary.push(` ${DOWN_ARROW}${formatTestPath(globalConfig, uncheckedFile.filePath)}`); - - for (const key of uncheckedFile.keys) { - summary.push(` ${DOT}${key}`); - } - } - } - - console.log(); - for (const line of summary) { - console.log(line); - } -} diff --git a/packages/alphatab/test/model/AccidentalResolutionEdge.test.ts b/packages/alphatab/test/model/AccidentalResolutionEdge.test.ts index 6ee0a080d..03d7025cd 100644 --- a/packages/alphatab/test/model/AccidentalResolutionEdge.test.ts +++ b/packages/alphatab/test/model/AccidentalResolutionEdge.test.ts @@ -1,36 +1,35 @@ +import { describe, expect, it } from 'vitest'; import { AccidentalType } from '@coderline/alphatab/model/AccidentalType'; import { KeySignature } from '@coderline/alphatab/model/KeySignature'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; import { NoteAccidentalMode } from '@coderline/alphatab/model/NoteAccidentalMode'; -import { expect } from 'chai'; - describe('AccidentalResolutionEdgeTests', () => { it('spells B# in C# major for pitch C natural', () => { const ks = KeySignature.CSharp; const noteValue = 60; // C4 const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.Default); - expect(spelling.degree).to.equal(6); // B - expect(spelling.accidentalOffset).to.equal(1); // B# + expect(spelling.degree).toBe(6); // B + expect(spelling.accidentalOffset).toBe(1); // B# const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.Default, spelling, false, null); - expect(accidental).to.equal(AccidentalType.None); + expect(accidental).toBe(AccidentalType.None); }); it('spells Fb in Cb major for pitch E natural', () => { const ks = KeySignature.Cb; const noteValue = 64; // E4 const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.Default); - expect(spelling.degree).to.equal(3); // F - expect(spelling.accidentalOffset).to.equal(-1); // Fb + expect(spelling.degree).toBe(3); // F + expect(spelling.accidentalOffset).toBe(-1); // Fb const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.Default, spelling, false, null); - expect(accidental).to.equal(AccidentalType.None); + expect(accidental).toBe(AccidentalType.None); }); it('forces double sharp spelling when requested', () => { const ks = KeySignature.C; const noteValue = 62; // D const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.ForceDoubleSharp); - expect(spelling.degree).to.equal(0); // C - expect(spelling.accidentalOffset).to.equal(2); // C## + expect(spelling.degree).toBe(0); // C + expect(spelling.accidentalOffset).toBe(2); // C## const accidental = ModelUtils.computeAccidentalForSpelling( ks, NoteAccidentalMode.ForceDoubleSharp, @@ -38,15 +37,15 @@ describe('AccidentalResolutionEdgeTests', () => { false, null ); - expect(accidental).to.equal(AccidentalType.DoubleSharp); + expect(accidental).toBe(AccidentalType.DoubleSharp); }); it('forces double flat spelling when requested', () => { const ks = KeySignature.C; const noteValue = 62; // D const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.ForceDoubleFlat); - expect(spelling.degree).to.equal(2); // E - expect(spelling.accidentalOffset).to.equal(-2); // Ebb + expect(spelling.degree).toBe(2); // E + expect(spelling.accidentalOffset).toBe(-2); // Ebb const accidental = ModelUtils.computeAccidentalForSpelling( ks, NoteAccidentalMode.ForceDoubleFlat, @@ -54,6 +53,6 @@ describe('AccidentalResolutionEdgeTests', () => { false, null ); - expect(accidental).to.equal(AccidentalType.DoubleFlat); + expect(accidental).toBe(AccidentalType.DoubleFlat); }); }); \ No newline at end of file diff --git a/packages/alphatab/test/model/AccidentalResolutionTests.test.ts b/packages/alphatab/test/model/AccidentalResolutionTests.test.ts index a498eb6c8..c2d0dcfb8 100644 --- a/packages/alphatab/test/model/AccidentalResolutionTests.test.ts +++ b/packages/alphatab/test/model/AccidentalResolutionTests.test.ts @@ -1,9 +1,8 @@ +import { describe, expect, it } from 'vitest'; import { AccidentalType } from '@coderline/alphatab/model/AccidentalType'; import { KeySignature } from '@coderline/alphatab/model/KeySignature'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; import { NoteAccidentalMode } from '@coderline/alphatab/model/NoteAccidentalMode'; -import { expect } from 'chai'; - describe('AccidentalResolutionTests', () => { const degreeSemitones = [0, 2, 4, 5, 7, 9, 11]; @@ -36,8 +35,8 @@ describe('AccidentalResolutionTests', () => { for (let degree = 0; degree < 7; degree++) { const noteValue = noteValueForDegree(ks, degree, 4); const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.Default); - expect(spelling.degree, `ks=${ks} degree=${degree}`).to.equal(degree); - expect(spelling.accidentalOffset, `ks=${ks} degree=${degree}`).to.equal( + expect(spelling.degree, `ks=${ks} degree=${degree}`).toBe(degree); + expect(spelling.accidentalOffset, `ks=${ks} degree=${degree}`).toBe( ModelUtils.getKeySignatureAccidentalOffset(ks, degree) ); @@ -48,7 +47,7 @@ describe('AccidentalResolutionTests', () => { false, null ); - expect(accidental, `ks=${ks} degree=${degree}`).to.equal(AccidentalType.None); + expect(accidental, `ks=${ks} degree=${degree}`).toBe(AccidentalType.None); } } }); @@ -57,50 +56,50 @@ describe('AccidentalResolutionTests', () => { const ks = KeySignature.FSharp; const noteValue = 65; // F natural const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.Default); - expect(spelling.degree).to.equal(2); // E - expect(spelling.accidentalOffset).to.equal(1); // E# + expect(spelling.degree).toBe(2); // E + expect(spelling.accidentalOffset).toBe(1); // E# const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.Default, spelling, false, null); - expect(accidental).to.equal(AccidentalType.None); + expect(accidental).toBe(AccidentalType.None); }); it('spells Cb in Cb major for pitch B natural', () => { const ks = KeySignature.Cb; const noteValue = 59; // B natural const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.Default); - expect(spelling.degree).to.equal(0); // C - expect(spelling.accidentalOffset).to.equal(-1); // Cb + expect(spelling.degree).toBe(0); // C + expect(spelling.accidentalOffset).toBe(-1); // Cb const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.Default, spelling, false, null); - expect(accidental).to.equal(AccidentalType.None); + expect(accidental).toBe(AccidentalType.None); }); it('forces flat spelling preference when requested', () => { const ks = KeySignature.C; const noteValue = 61; // C# / Db const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.ForceFlat); - expect(spelling.degree).to.equal(1); // D - expect(spelling.accidentalOffset).to.equal(-1); // Db + expect(spelling.degree).toBe(1); // D + expect(spelling.accidentalOffset).toBe(-1); // Db const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.ForceFlat, spelling, false, null); - expect(accidental).to.equal(AccidentalType.Flat); + expect(accidental).toBe(AccidentalType.Flat); }); it('forces sharp spelling preference when requested', () => { const ks = KeySignature.C; const noteValue = 61; // C# / Db const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.ForceSharp); - expect(spelling.degree).to.equal(0); // C - expect(spelling.accidentalOffset).to.equal(1); // C# + expect(spelling.degree).toBe(0); // C + expect(spelling.accidentalOffset).toBe(1); // C# const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.ForceSharp, spelling, false, null); - expect(accidental).to.equal(AccidentalType.Sharp); + expect(accidental).toBe(AccidentalType.Sharp); }); it('force natural displays a natural accidental when key signature would otherwise apply one', () => { const ks = KeySignature.D; // F#, C# const noteValue = 65; // F natural const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.ForceNatural); - expect(spelling.degree).to.equal(3); // F - expect(spelling.accidentalOffset).to.equal(0); // natural + expect(spelling.degree).toBe(3); // F + expect(spelling.accidentalOffset).toBe(0); // natural const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.ForceNatural, spelling, false, null); - expect(accidental).to.equal(AccidentalType.Natural); + expect(accidental).toBe(AccidentalType.Natural); }); it('force none suppresses accidentals regardless of spelling', () => { @@ -108,7 +107,7 @@ describe('AccidentalResolutionTests', () => { const noteValue = 61; // C# const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.ForceNone); const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.ForceNone, spelling, false, null); - expect(accidental).to.equal(AccidentalType.None); + expect(accidental).toBe(AccidentalType.None); }); it('no accidental when current accidental already matches', () => { @@ -116,7 +115,7 @@ describe('AccidentalResolutionTests', () => { const noteValue = 61; // C# const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.Default); const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.Default, spelling, false, 1); - expect(accidental).to.equal(AccidentalType.None); + expect(accidental).toBe(AccidentalType.None); }); it('quarter tone accidentals are chosen when quarter bend is true', () => { @@ -124,6 +123,6 @@ describe('AccidentalResolutionTests', () => { const noteValue = 61; // C# -> requires sharp const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.Default); const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.Default, spelling, true, null); - expect(accidental).to.equal(AccidentalType.SharpQuarterNoteUp); + expect(accidental).toBe(AccidentalType.SharpQuarterNoteUp); }); }); \ No newline at end of file diff --git a/packages/alphatab/test/model/Beat.test.ts b/packages/alphatab/test/model/Beat.test.ts index 27cc0d294..fb34910b2 100644 --- a/packages/alphatab/test/model/Beat.test.ts +++ b/packages/alphatab/test/model/Beat.test.ts @@ -1,16 +1,15 @@ +import { describe, expect, it } from 'vitest'; import { Beat } from '@coderline/alphatab/model/Beat'; import { Note } from '@coderline/alphatab/model/Note'; -import { expect } from 'chai'; - describe('BeatTests', () => { it('add-stringed-note', () => { const beat = new Beat(); const note = new Note(); note.string = 2; beat.addNote(note); - expect(beat.notes.length).to.be.equal(1); - expect(beat.hasNoteOnString(2)).to.be.equal(true); - expect(beat.getNoteOnString(2)).to.be.equal(note); + expect(beat.notes.length).toBe(1); + expect(beat.hasNoteOnString(2)).toBe(true); + expect(beat.getNoteOnString(2)).toBe(note); }); it('remove-stringed-note', () => { @@ -19,8 +18,8 @@ describe('BeatTests', () => { note.string = 1; beat.addNote(note); beat.removeNote(note); - expect(beat.notes.length).to.be.equal(0); - expect(beat.hasNoteOnString(2)).to.be.equal(false); - expect(beat.getNoteOnString(2)).to.be.equal(null); + expect(beat.notes.length).toBe(0); + expect(beat.hasNoteOnString(2)).toBe(false); + expect(beat.getNoteOnString(2)).toBe(null); }); }); diff --git a/packages/alphatab/test/model/Color.test.ts b/packages/alphatab/test/model/Color.test.ts index 80c56c0bd..33240a0d5 100644 --- a/packages/alphatab/test/model/Color.test.ts +++ b/packages/alphatab/test/model/Color.test.ts @@ -1,46 +1,45 @@ +import { describe, expect, it } from 'vitest'; import { Color } from '@coderline/alphatab/model/Color'; -import { expect } from 'chai'; - describe('ColorTests', () => { it('fromJson-number', () => { const color = Color.fromJson(-635386); - expect(color!.rgba).to.equal('#F64E06'); + expect(color!.rgba).toBe('#F64E06'); }); it('fromJson-#RGB', () => { const color = Color.fromJson('#0f0'); - expect(color!.rgba).to.equal('#00FF00'); + expect(color!.rgba).toBe('#00FF00'); }); it('fromJson-#RGBA', () => { const color = Color.fromJson('#0f09'); - expect(color!.rgba).to.equal('rgba(0,255,0,0.6)'); + expect(color!.rgba).toBe('rgba(0,255,0,0.6)'); }); it('fromJson-#RRGGBB', () => { const color = Color.fromJson('#f64e06'); - expect(color!.rgba).to.equal('#F64E06'); + expect(color!.rgba).toBe('#F64E06'); }); it('fromJson-#RRGGBBAA', () => { const color = Color.fromJson('#f64e0600'); - expect(color!.rgba).to.equal('rgba(246,78,6,0)'); + expect(color!.rgba).toBe('rgba(246,78,6,0)'); }); it('fromJson-rgb', () => { const color = Color.fromJson('rgb(246,78,6)'); - expect(color!.rgba).to.equal('#F64E06'); + expect(color!.rgba).toBe('#F64E06'); }); it('fromJson-rgba', () => { const color = Color.fromJson('rgba(246,78,6,0)'); - expect(color!.rgba).to.equal('rgba(246,78,6,0)'); + expect(color!.rgba).toBe('rgba(246,78,6,0)'); }); }); diff --git a/packages/alphatab/test/model/ComparisonHelpers.ts b/packages/alphatab/test/model/ComparisonHelpers.ts index 8b022b5a7..0ca8b167a 100644 --- a/packages/alphatab/test/model/ComparisonHelpers.ts +++ b/packages/alphatab/test/model/ComparisonHelpers.ts @@ -2,8 +2,6 @@ import { JsonConverter } from '@coderline/alphatab/model/JsonConverter'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; import type { Score } from '@coderline/alphatab/model/Score'; import { TestPlatform } from 'test/TestPlatform'; -import { assert } from 'chai'; - /** * @partial * @internal @@ -142,36 +140,36 @@ export class ComparisonHelpers { const actualType = typeof actual; if (actualType !== expectedType) { - assert.fail(`Type Mismatch on hierarchy: ${path}, actual<'${actualType}'> != expected<'${expectedType}'>`); + throw new Error(`Type Mismatch on hierarchy: ${path}, actual<'${actualType}'> != expected<'${expectedType}'>`); } switch (actualType) { case 'boolean': if ((actual as boolean) !== (expected as boolean)) { - assert.fail( + throw new Error( `Boolean mismatch on hierarchy: ${path}, actual<'${actual}'> != expected<'${expected}'>` ); } break; case 'number': if (Math.abs((actual as number) - (expected as number)) >= 0.000001) { - assert.fail( + throw new Error( `Number mismatch on hierarchy: ${path}, actual<'${actual}'> != expected<'${expected}'>` ); } break; case 'object': if ((actual === null) !== (expected === null)) { - assert.fail(`Null mismatch on hierarchy: ${path}, actual<'${actual}'> != expected<'${expected}'>`); + throw new Error(`Null mismatch on hierarchy: ${path}, actual<'${actual}'> != expected<'${expected}'>`); } else if (actual) { if (Array.isArray(actual) !== Array.isArray(expected)) { - assert.fail(`IsArray mismatch on hierarchy: ${path}`); + throw new Error(`IsArray mismatch on hierarchy: ${path}`); } else if (Array.isArray(actual) && Array.isArray(expected)) { const actualArray = TestPlatform.typedArrayAsUnknownArray(actual); const expectedArray = TestPlatform.typedArrayAsUnknownArray(expected); if (actualArray.length !== expectedArray.length) { - assert.fail( + throw new Error( `Array Length mismatch on hierarchy: ${path}, actual<${actualArray.length}> != expected<${expectedArray.length}>` ); } else { @@ -187,7 +185,7 @@ export class ComparisonHelpers { } } else if (expected instanceof Map) { if (!(actual instanceof Map)) { - assert.fail( + throw new Error( `Map mismatch on hierarchy: ${path}, actual<'${actual}'> != expected<'${expected}'>` ); } else { @@ -223,7 +221,7 @@ export class ComparisonHelpers { const actualKeyList = actualKeys.join(','); const expectedKeyList = expectedKeys.join(','); if (actualKeyList !== expectedKeyList) { - assert.fail( + throw new Error( `Object Keys mismatch on hierarchy: ${path}, actual<'${actualKeyList}'> != expected<'${expectedKeyList}'>` ); } else { @@ -245,14 +243,14 @@ export class ComparisonHelpers { break; case 'string': if ((actual as string) !== (expected as string)) { - assert.fail( + throw new Error( `String mismatch on hierarchy: ${path}, actual<'${actual}'> != expected<'${expected}'>` ); } break; case 'undefined': if (actual !== expected) { - assert.fail(`null mismatch on hierarchy: ${path}, actual<'${actual}'> != expected<'${expected}'>`); + throw new Error(`null mismatch on hierarchy: ${path}, actual<'${actual}'> != expected<'${expected}'>`); } break; } @@ -268,7 +266,6 @@ export class ComparisonHelpers { path: string, _ignoreKeys: string[] | null ): boolean { - assert.fail(`Cannot compare unknown object types on path ${path}`); - return false; + throw new Error(`Cannot compare unknown object types on path ${path}`); } } diff --git a/packages/alphatab/test/model/Font.test.ts b/packages/alphatab/test/model/Font.test.ts index d416c6968..b3b1760bf 100644 --- a/packages/alphatab/test/model/Font.test.ts +++ b/packages/alphatab/test/model/Font.test.ts @@ -1,15 +1,14 @@ +import { describe, expect, it } from 'vitest'; import { Font, FontStyle, FontWeight } from '@coderline/alphatab/model/Font'; -import { expect } from 'chai'; - describe('FontTests', () => { function parseText(text: string, expected: Font) { const font = Font.fromJson(text); - expect(font!.families.join(', ')).to.equal(expected.families.join(', ')); - expect(font!.isBold).to.equal(expected.isBold); - expect(font!.isItalic).to.equal(expected.isItalic); - expect(font!.size).to.equal(expected.size); - expect(font!.style).to.equal(expected.style); - expect(font!.weight).to.equal(expected.weight); + expect(font!.families.join(', ')).toBe(expected.families.join(', ')); + expect(font!.isBold).toBe(expected.isBold); + expect(font!.isItalic).toBe(expected.isItalic); + expect(font!.size).toBe(expected.size); + expect(font!.style).toBe(expected.style); + expect(font!.weight).toBe(expected.weight); } it('parses-full', () => { @@ -83,7 +82,7 @@ describe('FontTests', () => { }); function toCssStringTest(f: Font, expected: string) { - expect(f.toCssString()).to.equal(expected); + expect(f.toCssString()).toBe(expected); } it('css-string-tests', () => { diff --git a/packages/alphatab/test/model/HeaderFooterStyle.test.ts b/packages/alphatab/test/model/HeaderFooterStyle.test.ts index bdc78ea43..a9189ed70 100644 --- a/packages/alphatab/test/model/HeaderFooterStyle.test.ts +++ b/packages/alphatab/test/model/HeaderFooterStyle.test.ts @@ -1,42 +1,41 @@ +import { describe, expect, it } from 'vitest'; import { Score } from '@coderline/alphatab/model/Score'; import { HeaderFooterStyle } from '@coderline/alphatab/model/Score'; -import { expect } from 'chai'; - describe('HeaderFooterStyleTests', () => { it('buildTextSimple', () => { const score = new Score(); score.title = 'Title'; const style = new HeaderFooterStyle('%TITLE%'); - expect(style.buildText(score)).to.equal('Title'); + expect(style.buildText(score)).toBe('Title'); }); it('buildTextMultiple', () => { const score = new Score(); score.title = 'Title'; const style = new HeaderFooterStyle('%TITLE% %TITLE%'); - expect(style.buildText(score)).to.equal('Title Title'); + expect(style.buildText(score)).toBe('Title Title'); }); it('buildTextReuse', () => { const score = new Score(); score.title = 'Title'; const style = new HeaderFooterStyle('%TITLE% %TITLE%'); - expect(style.buildText(score)).to.equal('Title Title'); - expect(style.buildText(score)).to.equal('Title Title'); + expect(style.buildText(score)).toBe('Title Title'); + expect(style.buildText(score)).toBe('Title Title'); }); it('buildTextMultipleUnknown', () => { const score = new Score(); score.title = 'Title'; const style = new HeaderFooterStyle('%TITLE% %TITLE% %UNKNOWN% %INVALID%'); - expect(style.buildText(score)).to.equal('Title Title '); + expect(style.buildText(score)).toBe('Title Title '); }); it('buildTextEmptyIfMissingPlaceholderValue', () => { const score = new Score(); score.words = ''; const style = new HeaderFooterStyle('Words by %WORDS%'); - expect(style.buildText(score)).to.equal(''); + expect(style.buildText(score)).toBe(''); }); it('buildTextAll', () => { @@ -51,6 +50,6 @@ describe('HeaderFooterStyleTests', () => { score.copyright = 'Copyright'; const style = new HeaderFooterStyle('%TITLE% %SUBTITLE% %ARTIST% %ALBUM% %WORDS% %MUSIC% %TABBER% %COPYRIGHT%'); - expect(style.buildText(score)).to.equal('Title Subtitle Artist Album Words Music Tab Copyright'); + expect(style.buildText(score)).toBe('Title Subtitle Artist Album Words Music Tab Copyright'); }); }); diff --git a/packages/alphatab/test/model/JsonConverter.test.ts b/packages/alphatab/test/model/JsonConverter.test.ts index f68a942f0..0ee729c72 100644 --- a/packages/alphatab/test/model/JsonConverter.test.ts +++ b/packages/alphatab/test/model/JsonConverter.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { SettingsSerializer } from '@coderline/alphatab/generated/SettingsSerializer'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; @@ -8,7 +9,6 @@ import { JsonConverter } from '@coderline/alphatab/model/JsonConverter'; import type { Score } from '@coderline/alphatab/model/Score'; import { FingeringMode, NotationElement, NotationMode, TabRhythmMode } from '@coderline/alphatab/NotationSettings'; import { Settings } from '@coderline/alphatab/Settings'; -import { assert, expect } from 'chai'; import { TestPlatform } from 'test/TestPlatform'; import { ComparisonHelpers } from './ComparisonHelpers'; @@ -40,7 +40,7 @@ describe('JsonConverterTest', () => { null ); } catch (e) { - assert.fail(String(e)); + throw new Error(String(e)); } } @@ -170,14 +170,14 @@ describe('JsonConverterTest', () => { SettingsSerializer.fromJson(settings, raw); - expect(settings.core.enableLazyLoading).to.equal(false); - expect(settings.core.logLevel).to.equal(LogLevel.Error); - expect(settings.display.layoutMode).to.equal(LayoutMode.Horizontal); - expect(settings.display.scale).to.equal(5); - expect(settings.notation.rhythmMode).to.equal(TabRhythmMode.ShowWithBars); - expect(settings.display.resources.mainGlyphColor.r).to.equal(255); - expect(settings.display.resources.mainGlyphColor.g).to.equal(0); - expect(settings.display.resources.mainGlyphColor.b).to.equal(0); + expect(settings.core.enableLazyLoading).toBe(false); + expect(settings.core.logLevel).toBe(LogLevel.Error); + expect(settings.display.layoutMode).toBe(LayoutMode.Horizontal); + expect(settings.display.scale).toBe(5); + expect(settings.notation.rhythmMode).toBe(TabRhythmMode.ShowWithBars); + expect(settings.display.resources.mainGlyphColor.r).toBe(255); + expect(settings.display.resources.mainGlyphColor.g).toBe(0); + expect(settings.display.resources.mainGlyphColor.b).toBe(0); }); /*@target web*/ @@ -202,13 +202,13 @@ describe('JsonConverterTest', () => { SettingsSerializer.fromJson(settings, raw); - expect(settings.core.enableLazyLoading).to.equal(false); - expect(settings.core.logLevel).to.equal(LogLevel.Error); - expect(settings.display.layoutMode).to.equal(LayoutMode.Horizontal); - expect(settings.display.scale).to.equal(5); - expect(settings.notation.rhythmMode).to.equal(TabRhythmMode.ShowWithBars); - expect(settings.display.resources.mainGlyphColor.r).to.equal(255); - expect(settings.display.resources.mainGlyphColor.g).to.equal(0); - expect(settings.display.resources.mainGlyphColor.b).to.equal(0); + expect(settings.core.enableLazyLoading).toBe(false); + expect(settings.core.logLevel).toBe(LogLevel.Error); + expect(settings.display.layoutMode).toBe(LayoutMode.Horizontal); + expect(settings.display.scale).toBe(5); + expect(settings.notation.rhythmMode).toBe(TabRhythmMode.ShowWithBars); + expect(settings.display.resources.mainGlyphColor.r).toBe(255); + expect(settings.display.resources.mainGlyphColor.g).toBe(0); + expect(settings.display.resources.mainGlyphColor.b).toBe(0); }); }); diff --git a/packages/alphatab/test/model/KeySignatureUtils.test.ts b/packages/alphatab/test/model/KeySignatureUtils.test.ts index e0c5cc2ad..7464ecfa3 100644 --- a/packages/alphatab/test/model/KeySignatureUtils.test.ts +++ b/packages/alphatab/test/model/KeySignatureUtils.test.ts @@ -1,41 +1,40 @@ +import { describe, expect, it } from 'vitest'; import { KeySignature } from '@coderline/alphatab/model/KeySignature'; import { KeySignatureType } from '@coderline/alphatab/model/KeySignatureType'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; -import { expect } from 'chai'; - describe('KeySignatureUtilsTests', () => { it('sharp key signatures apply accidentals in F C G D A E B order', () => { const ksG = KeySignature.G; // 1 sharp -> F# - expect(ModelUtils.getKeySignatureAccidentalOffset(ksG, 3)).to.equal(1); // F - expect(ModelUtils.getKeySignatureAccidentalOffset(ksG, 0)).to.equal(0); // C - expect(ModelUtils.getKeySignatureAccidentalOffset(ksG, 6)).to.equal(0); // B + expect(ModelUtils.getKeySignatureAccidentalOffset(ksG, 3)).toBe(1); // F + expect(ModelUtils.getKeySignatureAccidentalOffset(ksG, 0)).toBe(0); // C + expect(ModelUtils.getKeySignatureAccidentalOffset(ksG, 6)).toBe(0); // B const ksD = KeySignature.D; // 2 sharps -> F#, C# - expect(ModelUtils.getKeySignatureAccidentalOffset(ksD, 3)).to.equal(1); // F - expect(ModelUtils.getKeySignatureAccidentalOffset(ksD, 0)).to.equal(1); // C - expect(ModelUtils.getKeySignatureAccidentalOffset(ksD, 4)).to.equal(0); // G + expect(ModelUtils.getKeySignatureAccidentalOffset(ksD, 3)).toBe(1); // F + expect(ModelUtils.getKeySignatureAccidentalOffset(ksD, 0)).toBe(1); // C + expect(ModelUtils.getKeySignatureAccidentalOffset(ksD, 4)).toBe(0); // G }); it('flat key signatures apply accidentals in B E A D G C F order', () => { const ksF = KeySignature.F; // 1 flat -> Bb - expect(ModelUtils.getKeySignatureAccidentalOffset(ksF, 6)).to.equal(-1); // B - expect(ModelUtils.getKeySignatureAccidentalOffset(ksF, 2)).to.equal(0); // E + expect(ModelUtils.getKeySignatureAccidentalOffset(ksF, 6)).toBe(-1); // B + expect(ModelUtils.getKeySignatureAccidentalOffset(ksF, 2)).toBe(0); // E const ksBb = KeySignature.Bb; // 2 flats -> Bb, Eb - expect(ModelUtils.getKeySignatureAccidentalOffset(ksBb, 6)).to.equal(-1); // B - expect(ModelUtils.getKeySignatureAccidentalOffset(ksBb, 2)).to.equal(-1); // E - expect(ModelUtils.getKeySignatureAccidentalOffset(ksBb, 5)).to.equal(0); // A + expect(ModelUtils.getKeySignatureAccidentalOffset(ksBb, 6)).toBe(-1); // B + expect(ModelUtils.getKeySignatureAccidentalOffset(ksBb, 2)).toBe(-1); // E + expect(ModelUtils.getKeySignatureAccidentalOffset(ksBb, 5)).toBe(0); // A }); it('major tonic degree matches expected scale degree', () => { - expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.C, KeySignatureType.Major)).to.equal(0); // C - expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.G, KeySignatureType.Major)).to.equal(4); // G - expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.Eb, KeySignatureType.Major)).to.equal(2); // Eb + expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.C, KeySignatureType.Major)).toBe(0); // C + expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.G, KeySignatureType.Major)).toBe(4); // G + expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.Eb, KeySignatureType.Major)).toBe(2); // Eb }); it('minor tonic degree matches expected scale degree', () => { - expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.C, KeySignatureType.Minor)).to.equal(5); // A - expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.G, KeySignatureType.Minor)).to.equal(2); // E - expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.Bb, KeySignatureType.Minor)).to.equal(4); // G (relative minor) + expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.C, KeySignatureType.Minor)).toBe(5); // A + expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.G, KeySignatureType.Minor)).toBe(2); // E + expect(ModelUtils.getKeySignatureTonicDegree(KeySignature.Bb, KeySignatureType.Minor)).toBe(4); // G (relative minor) }); }); \ No newline at end of file diff --git a/packages/alphatab/test/model/Lyrics.test.ts b/packages/alphatab/test/model/Lyrics.test.ts index 5b26292b4..1ff0e1bff 100644 --- a/packages/alphatab/test/model/Lyrics.test.ts +++ b/packages/alphatab/test/model/Lyrics.test.ts @@ -1,11 +1,10 @@ +import { describe, expect, it } from 'vitest'; import { GpxImporter } from '@coderline/alphatab/importer/GpxImporter'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; import { Lyrics } from '@coderline/alphatab/model/Lyrics'; import type { Score } from '@coderline/alphatab/model/Score'; import { Settings } from '@coderline/alphatab/Settings'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; - describe('LyricsTests', () => { async function loadLyricsTemplateFile(): Promise { const path: string = 'test-data/lyrics/template.gpx'; @@ -20,7 +19,7 @@ describe('LyricsTests', () => { const lyrics: Lyrics = new Lyrics(); lyrics.text = text; lyrics.finish(); - expect(lyrics.chunks.join(',')).to.equal(chunks.join(',')); + expect(lyrics.chunks.join(',')).toBe(chunks.join(',')); } it('apply-single-line-first-bar', async () => { @@ -29,14 +28,14 @@ describe('LyricsTests', () => { lyrics.text = 'AAA BBB CCC DDD EEE'; lyrics.startBar = 0; score.tracks[0].applyLyrics([lyrics]); - expect(1).to.equal(1); - expect('AAA').to.equal('AAA'); - expect('BBB').to.equal('BBB'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics).to.not.be.ok; - expect('CCC').to.equal('CCC'); - expect(1).to.equal(1); - expect('DDD').to.equal('DDD'); - expect('EEE').to.equal('EEE'); + expect(1).toBe(1); + expect('AAA').toBe('AAA'); + expect('BBB').toBe('BBB'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics).not.toBeTruthy(); + expect('CCC').toBe('CCC'); + expect(1).toBe(1); + expect('DDD').toBe('DDD'); + expect('EEE').toBe('EEE'); }); it('apply-single-line-bar-offset', async () => { @@ -46,14 +45,14 @@ describe('LyricsTests', () => { lyrics.startBar = 2; score.tracks[0].applyLyrics([lyrics]); - expect(1).to.equal(1); - expect('AAA').to.equal('AAA'); - expect('BBB').to.equal('BBB'); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].lyrics).to.not.be.ok; - expect('CCC').to.equal('CCC'); - expect(1).to.equal(1); - expect('DDD').to.equal('DDD'); - expect('EEE').to.equal('EEE'); + expect(1).toBe(1); + expect('AAA').toBe('AAA'); + expect('BBB').toBe('BBB'); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].lyrics).not.toBeTruthy(); + expect('CCC').toBe('CCC'); + expect(1).toBe(1); + expect('DDD').toBe('DDD'); + expect('EEE').toBe('EEE'); }); it('apply-multi-line-first-bar', async () => { @@ -67,19 +66,19 @@ describe('LyricsTests', () => { lyrics2.startBar = 0; score.tracks[0].applyLyrics([lyrics1, lyrics2]); - expect(2).to.equal(2); - expect('AAA').to.equal('AAA'); - expect('111').to.equal('111'); - expect('BBB').to.equal('BBB'); - expect('222').to.equal('222'); - expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics).to.not.be.ok; - expect('CCC').to.equal('CCC'); - expect('333').to.equal('333'); - expect(2).to.equal(2); - expect('DDD').to.equal('DDD'); - expect('444').to.equal('444'); - expect('EEE').to.equal('EEE'); - expect('555').to.equal('555'); + expect(2).toBe(2); + expect('AAA').toBe('AAA'); + expect('111').toBe('111'); + expect('BBB').toBe('BBB'); + expect('222').toBe('222'); + expect(score.tracks[0].staves[0].bars[0].voices[0].beats[2].lyrics).not.toBeTruthy(); + expect('CCC').toBe('CCC'); + expect('333').toBe('333'); + expect(2).toBe(2); + expect('DDD').toBe('DDD'); + expect('444').toBe('444'); + expect('EEE').toBe('EEE'); + expect('555').toBe('555'); }); it('apply-multi-line-bar-offset', async () => { @@ -93,22 +92,22 @@ describe('LyricsTests', () => { lyrics2.startBar = 1; score.tracks[0].applyLyrics([lyrics1, lyrics2]); - expect(2).to.equal(2); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].lyrics![0]).to.not.be.ok; - expect('111').to.equal('111'); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].lyrics![0]).to.not.be.ok; - expect('222').to.equal('222'); - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].lyrics).to.not.be.ok; - expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].lyrics![0]).to.not.be.ok; - expect('333').to.equal('333'); - expect(2).to.equal(2); - expect('AAA').to.equal('AAA'); - expect('444').to.equal('444'); - expect('BBB').to.equal('BBB'); - expect('555').to.equal('555'); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].lyrics).to.not.be.ok; - expect('CCC').to.equal('CCC'); - expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].lyrics![1]).to.not.be.ok; + expect(2).toBe(2); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[0].lyrics![0]).not.toBeTruthy(); + expect('111').toBe('111'); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[1].lyrics![0]).not.toBeTruthy(); + expect('222').toBe('222'); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[2].lyrics).not.toBeTruthy(); + expect(score.tracks[0].staves[0].bars[1].voices[0].beats[3].lyrics![0]).not.toBeTruthy(); + expect('333').toBe('333'); + expect(2).toBe(2); + expect('AAA').toBe('AAA'); + expect('444').toBe('444'); + expect('BBB').toBe('BBB'); + expect('555').toBe('555'); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[2].lyrics).not.toBeTruthy(); + expect('CCC').toBe('CCC'); + expect(score.tracks[0].staves[0].bars[2].voices[0].beats[3].lyrics![1]).not.toBeTruthy(); }); it('spaces', () => { diff --git a/packages/alphatab/test/model/ModelUtils.test.ts b/packages/alphatab/test/model/ModelUtils.test.ts index 7d78f5252..781d8598d 100644 --- a/packages/alphatab/test/model/ModelUtils.test.ts +++ b/packages/alphatab/test/model/ModelUtils.test.ts @@ -1,12 +1,11 @@ +import { describe, expect, it } from 'vitest'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; import { NoteAccidentalMode } from '@coderline/alphatab/model/NoteAccidentalMode'; -import { expect } from 'chai'; - describe('ModelUtilsTests', () => { function trimTest(tex: string, expectedBars: number) { const score = ScoreLoader.loadAlphaTex(tex); - expect(score.masterBars.length).to.equal(expectedBars); + expect(score.masterBars.length).toBe(expectedBars); } it('trimEmptyBarsAtEndFullyEmpty', () => { @@ -41,10 +40,10 @@ describe('ModelUtilsTests', () => { describe('parseTuning', () => { function test(s:string, toneValue:number, accidental:NoteAccidentalMode, octave:number) { const result = ModelUtils.parseTuning(s); - expect(result).to.be.ok; - expect(result!.tone.noteValue).to.equal(toneValue); - expect(result!.tone.accidentalMode).to.equal(accidental); - expect(result!.octave).to.equal(octave); + expect(result).toBeTruthy(); + expect(result!.tone.noteValue).toBe(toneValue); + expect(result!.tone.accidentalMode).toBe(accidental); + expect(result!.octave).toBe(octave); } it('octave-c', () => test('C4', 0, NoteAccidentalMode.Default, 5)) diff --git a/packages/alphatab/test/model/NoteSteps.test.ts b/packages/alphatab/test/model/NoteSteps.test.ts index eed9961c5..c3f4c533c 100644 --- a/packages/alphatab/test/model/NoteSteps.test.ts +++ b/packages/alphatab/test/model/NoteSteps.test.ts @@ -1,18 +1,17 @@ +import { describe, expect, it } from 'vitest'; import { Clef } from '@coderline/alphatab/model/Clef'; import { KeySignature } from '@coderline/alphatab/model/KeySignature'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; import { NoteAccidentalMode } from '@coderline/alphatab/model/NoteAccidentalMode'; import { AccidentalHelper } from '@coderline/alphatab/rendering/utils/AccidentalHelper'; -import { expect } from 'chai'; - describe('NoteStepsTests', () => { it('calculates known steps for C4 in G2 and F4 clef', () => { const spelling = ModelUtils.resolveSpelling(KeySignature.C, 60, NoteAccidentalMode.Default); // C4 const stepsG2 = AccidentalHelper.calculateNoteSteps(Clef.G2, spelling); const stepsF4 = AccidentalHelper.calculateNoteSteps(Clef.F4, spelling); - expect(stepsG2).to.equal(10); - expect(stepsF4).to.equal(-2); + expect(stepsG2).toBe(10); + expect(stepsF4).toBe(-2); }); it('octave shift changes steps by 7', () => { @@ -20,7 +19,7 @@ describe('NoteStepsTests', () => { const spellingC5 = ModelUtils.resolveSpelling(KeySignature.C, 72, NoteAccidentalMode.Default); // C5 const stepsC4 = AccidentalHelper.calculateNoteSteps(Clef.G2, spellingC4); const stepsC5 = AccidentalHelper.calculateNoteSteps(Clef.G2, spellingC5); - expect(stepsC4 - stepsC5).to.equal(7); + expect(stepsC4 - stepsC5).toBe(7); }); it('adjacent diatonic degrees differ by one step', () => { @@ -28,7 +27,7 @@ describe('NoteStepsTests', () => { const spellingD4 = ModelUtils.resolveSpelling(KeySignature.C, 62, NoteAccidentalMode.Default); // D4 const stepsC4 = AccidentalHelper.calculateNoteSteps(Clef.G2, spellingC4); const stepsD4 = AccidentalHelper.calculateNoteSteps(Clef.G2, spellingD4); - expect(stepsC4 - stepsD4).to.equal(1); + expect(stepsC4 - stepsD4).toBe(1); }); it('same pitch with different spelling yields different steps', () => { @@ -39,6 +38,6 @@ describe('NoteStepsTests', () => { const stepsSharp = AccidentalHelper.calculateNoteSteps(Clef.G2, spellingSharp); const stepsFlat = AccidentalHelper.calculateNoteSteps(Clef.G2, spellingFlat); - expect(stepsSharp - stepsFlat).to.equal(1); // C# (degree 0) above Db (degree 1) + expect(stepsSharp - stepsFlat).toBe(1); // C# (degree 0) above Db (degree 1) }); }); \ No newline at end of file diff --git a/packages/alphatab/test/model/NoteStepsAdditional.test.ts b/packages/alphatab/test/model/NoteStepsAdditional.test.ts index d36c8e247..3a474efbb 100644 --- a/packages/alphatab/test/model/NoteStepsAdditional.test.ts +++ b/packages/alphatab/test/model/NoteStepsAdditional.test.ts @@ -1,16 +1,15 @@ +import { describe, expect, it } from 'vitest'; import { Clef } from '@coderline/alphatab/model/Clef'; import { KeySignature } from '@coderline/alphatab/model/KeySignature'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; import { NoteAccidentalMode } from '@coderline/alphatab/model/NoteAccidentalMode'; import { AccidentalHelper } from '@coderline/alphatab/rendering/utils/AccidentalHelper'; -import { expect } from 'chai'; - describe('NoteStepsAdditionalTests', () => { it('same pitch yields different steps across clefs', () => { const spelling = ModelUtils.resolveSpelling(KeySignature.C, 60, NoteAccidentalMode.Default); // C4 const stepsG2 = AccidentalHelper.calculateNoteSteps(Clef.G2, spelling); const stepsC4 = AccidentalHelper.calculateNoteSteps(Clef.C4, spelling); - expect(stepsG2 - stepsC4).to.equal(8); + expect(stepsG2 - stepsC4).toBe(8); }); it('enharmonic spelling changes steps (C# vs Db)', () => { @@ -21,6 +20,6 @@ describe('NoteStepsAdditionalTests', () => { const stepsSharp = AccidentalHelper.calculateNoteSteps(Clef.G2, spellingSharp); const stepsFlat = AccidentalHelper.calculateNoteSteps(Clef.G2, spellingFlat); - expect(stepsSharp - stepsFlat).to.equal(1); + expect(stepsSharp - stepsFlat).toBe(1); }); }); \ No newline at end of file diff --git a/packages/alphatab/test/model/QuarterToneAccidentals.test.ts b/packages/alphatab/test/model/QuarterToneAccidentals.test.ts index 5ea377c87..9186e329b 100644 --- a/packages/alphatab/test/model/QuarterToneAccidentals.test.ts +++ b/packages/alphatab/test/model/QuarterToneAccidentals.test.ts @@ -1,16 +1,15 @@ +import { describe, expect, it } from 'vitest'; import { AccidentalType } from '@coderline/alphatab/model/AccidentalType'; import { KeySignature } from '@coderline/alphatab/model/KeySignature'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; import { NoteAccidentalMode } from '@coderline/alphatab/model/NoteAccidentalMode'; -import { expect } from 'chai'; - describe('QuarterToneAccidentalsTests', () => { it('uses natural quarter tone when no key signature offset is required', () => { const ks = KeySignature.C; const noteValue = 60; // C4 const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.Default); const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.Default, spelling, true, null); - expect(accidental).to.equal(AccidentalType.NaturalQuarterNoteUp); + expect(accidental).toBe(AccidentalType.NaturalQuarterNoteUp); }); it('uses sharp quarter tone for positive offset', () => { @@ -18,7 +17,7 @@ describe('QuarterToneAccidentalsTests', () => { const noteValue = 61; // C# const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.ForceSharp); const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.ForceSharp, spelling, true, null); - expect(accidental).to.equal(AccidentalType.SharpQuarterNoteUp); + expect(accidental).toBe(AccidentalType.SharpQuarterNoteUp); }); it('uses flat quarter tone for negative offset', () => { @@ -26,6 +25,6 @@ describe('QuarterToneAccidentalsTests', () => { const noteValue = 61; // Db const spelling = ModelUtils.resolveSpelling(ks, noteValue, NoteAccidentalMode.ForceFlat); const accidental = ModelUtils.computeAccidentalForSpelling(ks, NoteAccidentalMode.ForceFlat, spelling, true, null); - expect(accidental).to.equal(AccidentalType.FlatQuarterNoteUp); + expect(accidental).toBe(AccidentalType.FlatQuarterNoteUp); }); }); \ No newline at end of file diff --git a/packages/alphatab/test/model/TuningParser.test.ts b/packages/alphatab/test/model/TuningParser.test.ts index e10b24982..b2cc62833 100644 --- a/packages/alphatab/test/model/TuningParser.test.ts +++ b/packages/alphatab/test/model/TuningParser.test.ts @@ -1,7 +1,6 @@ +import { describe, expect, it } from 'vitest'; import { Tuning } from '@coderline/alphatab/model/Tuning'; import { ModelUtils } from '@coderline/alphatab/model/ModelUtils'; -import { expect } from 'chai'; - describe('TuningParserTest', () => { it('standard', () => { const standard: Tuning = Tuning.getDefaultTuningFor(6)!; @@ -12,7 +11,7 @@ describe('TuningParserTest', () => { tuning[i] = ModelUtils.getTuningForText(tuningText[i]); tuningText2[i] = Tuning.getTextForTuning(tuning[i], true); } - expect(tuning.join(',')).to.equal(standard.tunings.join(',')); - expect(tuningText2.join(',')).to.equal(tuningText.join(',')); + expect(tuning.join(',')).toBe(standard.tunings.join(',')); + expect(tuningText2.join(',')).toBe(tuningText.join(',')); }); }); diff --git a/packages/alphatab/test/platform/Json.test.ts b/packages/alphatab/test/platform/Json.test.ts index cf494d3e7..1d8c75584 100644 --- a/packages/alphatab/test/platform/Json.test.ts +++ b/packages/alphatab/test/platform/Json.test.ts @@ -1,41 +1,40 @@ +import { describe, expect, it } from 'vitest'; import { Json } from '@coderline/alphatab/platform/Json'; -import { expect } from 'chai'; - describe('JsonTests', () => { it('quoteJsonStringEmpty', () => { - expect(Json.quoteJsonString('')).to.equal('""'); + expect(Json.quoteJsonString('')).toBe('""'); }); it('quoteJsonStringAscii', () => { - expect(Json.quoteJsonString('Test')).to.equal('"Test"'); + expect(Json.quoteJsonString('Test')).toBe('"Test"'); }); it('quoteJsonStringQuote', () => { - expect(Json.quoteJsonString('"')).to.equal('"\\""'); + expect(Json.quoteJsonString('"')).toBe('"\\""'); }); it('quoteJsonStringEscapes', () => { - expect(Json.quoteJsonString('\b')).to.equal('"\\b"'); - expect(Json.quoteJsonString('\t')).to.equal('"\\t"'); - expect(Json.quoteJsonString('\n')).to.equal('"\\n"'); + expect(Json.quoteJsonString('\b')).toBe('"\\b"'); + expect(Json.quoteJsonString('\t')).toBe('"\\t"'); + expect(Json.quoteJsonString('\n')).toBe('"\\n"'); /*@target web*/ - expect(Json.quoteJsonString('\f')).to.equal('"\\f"'); - expect(Json.quoteJsonString('\r')).to.equal('"\\r"'); - expect(Json.quoteJsonString('\\')).to.equal('"\\\\"'); + expect(Json.quoteJsonString('\f')).toBe('"\\f"'); + expect(Json.quoteJsonString('\r')).toBe('"\\r"'); + expect(Json.quoteJsonString('\\')).toBe('"\\\\"'); }); it('quoteJsonStringNonReadable', () => { - expect(Json.quoteJsonString('\u001B\u001B')).to.equal('"\\u001b\\u001b"'); + expect(Json.quoteJsonString('\u001B\u001B')).toBe('"\\u001b\\u001b"'); }); it('quoteJsonStringSurrogates', () => { - expect(Json.quoteJsonString('\udc00\udc00')).to.equal('"\\udc00\\udc00"'); + expect(Json.quoteJsonString('\udc00\udc00')).toBe('"\\udc00\\udc00"'); }); it('quoteJsonStringSurrogatePair', () => { // cat emoji 😸 - expect(Json.quoteJsonString('\uD83D\uDE38')).to.equal('"😸"'); + expect(Json.quoteJsonString('\uD83D\uDE38')).toBe('"😸"'); // hand emoji (color adjusted) 🤘🏻 - expect(Json.quoteJsonString('\uD83E\uDD18\uD83C\uDFFB')).to.equal('"🤘🏻"'); + expect(Json.quoteJsonString('\uD83E\uDD18\uD83C\uDFFB')).toBe('"🤘🏻"'); }); }); diff --git a/packages/alphatab/test/rendering/BoundsLookupPartialUpdate.test.ts b/packages/alphatab/test/rendering/BoundsLookupPartialUpdate.test.ts index 6d0fc6a89..67ed11b62 100644 --- a/packages/alphatab/test/rendering/BoundsLookupPartialUpdate.test.ts +++ b/packages/alphatab/test/rendering/BoundsLookupPartialUpdate.test.ts @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest'; import { Bar } from '@coderline/alphatab/model/Bar'; import { Beat } from '@coderline/alphatab/model/Beat'; import { MasterBar } from '@coderline/alphatab/model/MasterBar'; @@ -11,8 +12,6 @@ import { Bounds } from '@coderline/alphatab/rendering/utils/Bounds'; import { BoundsLookup } from '@coderline/alphatab/rendering/utils/BoundsLookup'; import { MasterBarBounds } from '@coderline/alphatab/rendering/utils/MasterBarBounds'; import { StaffSystemBounds } from '@coderline/alphatab/rendering/utils/StaffSystemBounds'; -import { expect } from 'chai'; - // Covers the partial-render preservation path: ScoreRenderer.render reuses an existing // BoundsLookup when renderHints.firstChangedMasterBar is set, VerticalLayoutBase prunes the // changed range via BoundsLookup.clearFromMasterBar, and BoundsLookup.finish must remain @@ -91,30 +90,30 @@ describe('BoundsLookupPartialUpdate', () => { system.visualBounds = makeBounds(10, 20, 100, 50); system.realBounds = makeBounds(10, 20, 100, 80); - expect(system.isFinished).to.equal(false); + expect(system.isFinished).toBe(false); system.finish(2); - expect(system.isFinished).to.equal(true); - expect(system.visualBounds.x).to.equal(20); - expect(system.realBounds.w).to.equal(200); + expect(system.isFinished).toBe(true); + expect(system.visualBounds.x).toBe(20); + expect(system.realBounds.w).toBe(200); // second finish() call must be a no-op - otherwise preserved systems get double-scaled system.finish(2); - expect(system.visualBounds.x).to.equal(20); - expect(system.realBounds.w).to.equal(200); + expect(system.visualBounds.x).toBe(20); + expect(system.realBounds.w).toBe(200); }); it('BoundsLookup.resetForPartialUpdate reopens the lookup for registrations', () => { const lookup = new BoundsLookup(); lookup.finish(1); - expect(lookup.isFinished).to.equal(true); + expect(lookup.isFinished).toBe(true); lookup.resetForPartialUpdate(); - expect(lookup.isFinished).to.equal(false); + expect(lookup.isFinished).toBe(false); }); it('BoundsLookup.clearFromMasterBar keeps preserved entries and drops the changed range', () => { @@ -122,27 +121,27 @@ describe('BoundsLookupPartialUpdate', () => { const score = buildScore(10, 2); const lookup = populateLookup(score, 5); - expect(lookup.staffSystems.length).to.equal(2); - expect(lookup.findMasterBarByIndex(0)).to.not.equal(null); - expect(lookup.findMasterBarByIndex(9)).to.not.equal(null); + expect(lookup.staffSystems.length).toBe(2); + expect(lookup.findMasterBarByIndex(0)).not.toBe(null); + expect(lookup.findMasterBarByIndex(9)).not.toBe(null); // partial render targeting system 1 - clear from the first bar of system 1 lookup.clearFromMasterBar(5); // system 0 survives with its bars intact - expect(lookup.staffSystems.length).to.equal(1); - expect(lookup.findMasterBarByIndex(0)).to.not.equal(null); - expect(lookup.findMasterBarByIndex(4)).to.not.equal(null); + expect(lookup.staffSystems.length).toBe(1); + expect(lookup.findMasterBarByIndex(0)).not.toBe(null); + expect(lookup.findMasterBarByIndex(4)).not.toBe(null); // everything from bar 5 onward is gone - expect(lookup.findMasterBarByIndex(5)).to.equal(null); - expect(lookup.findMasterBarByIndex(9)).to.equal(null); + expect(lookup.findMasterBarByIndex(5)).toBe(null); + expect(lookup.findMasterBarByIndex(9)).toBe(null); // beat lookup: beats in preserved bars still findable, beats in cleared bars are not const preservedBeat = score.tracks[0].staves[0].bars[2].voices[0].beats[0]; const clearedBeat = score.tracks[0].staves[0].bars[7].voices[0].beats[0]; - expect(lookup.findBeat(preservedBeat)).to.not.equal(null); - expect(lookup.findBeat(clearedBeat)).to.equal(null); + expect(lookup.findBeat(preservedBeat)).not.toBe(null); + expect(lookup.findBeat(clearedBeat)).toBe(null); }); it('clearFromMasterBar + re-register preserves already-scaled bounds and scales only new ones', () => { @@ -182,11 +181,11 @@ describe('BoundsLookupPartialUpdate', () => { // finish again at the same scale - preserved system must NOT be re-scaled lookup.finish(2); - expect(preservedSystem0.realBounds.x).to.equal(preservedRealX); - expect(preservedSystem0.realBounds.w).to.equal(preservedRealW); + expect(preservedSystem0.realBounds.x).toBe(preservedRealX); + expect(preservedSystem0.realBounds.w).toBe(preservedRealW); // the newly registered system gets scaled exactly once - expect(newSystem.isFinished).to.equal(true); - expect(newSystem.realBounds.w).to.equal(2000); + expect(newSystem.isFinished).toBe(true); + expect(newSystem.realBounds.w).toBe(2000); }); }); diff --git a/packages/alphatab/test/visualTests/features/BoundsLookup.test.ts b/packages/alphatab/test/visualTests/features/BoundsLookup.test.ts index 665803582..667cdcbe2 100644 --- a/packages/alphatab/test/visualTests/features/BoundsLookup.test.ts +++ b/packages/alphatab/test/visualTests/features/BoundsLookup.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { Color } from '@coderline/alphatab/model/Color'; import { VisualTestHelper, VisualTestOptions } from '../VisualTestHelper'; import { AlphaSkiaCanvas } from '@coderline/alphaskia'; diff --git a/packages/alphatab/test/visualTests/features/EffectsAndAnnotations.test.ts b/packages/alphatab/test/visualTests/features/EffectsAndAnnotations.test.ts index 1d096492a..d35532d43 100644 --- a/packages/alphatab/test/visualTests/features/EffectsAndAnnotations.test.ts +++ b/packages/alphatab/test/visualTests/features/EffectsAndAnnotations.test.ts @@ -1,8 +1,8 @@ +import { describe, expect, it } from 'vitest'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { BeatBarreEffectInfo } from '@coderline/alphatab/rendering/effects/BeatBarreEffectInfo'; import { Settings } from '@coderline/alphatab/Settings'; -import { expect } from 'chai'; import { TestPlatform } from 'test/TestPlatform'; import { VisualTestHelper, VisualTestOptions, VisualTestRun } from 'test/visualTests/VisualTestHelper'; @@ -191,7 +191,7 @@ describe('EffectsAndAnnotationsTests', () => { ); score.stylesheet.hideDynamics = true; - expect(score.tracks[0].staves[0].displayTranspositionPitch).to.equal(0); + expect(score.tracks[0].staves[0].displayTranspositionPitch).toBe(0); await VisualTestHelper.runVisualTestFull( new VisualTestOptions( @@ -219,36 +219,36 @@ describe('EffectsAndAnnotationsTests', () => { }); it('roman-numbers', () => { - expect(BeatBarreEffectInfo.toRoman(0)).to.equal(''); - expect(BeatBarreEffectInfo.toRoman(1)).to.equal('I'); - expect(BeatBarreEffectInfo.toRoman(2)).to.equal('II'); - expect(BeatBarreEffectInfo.toRoman(3)).to.equal('III'); - expect(BeatBarreEffectInfo.toRoman(4)).to.equal('IV'); - expect(BeatBarreEffectInfo.toRoman(5)).to.equal('V'); - expect(BeatBarreEffectInfo.toRoman(6)).to.equal('VI'); - expect(BeatBarreEffectInfo.toRoman(7)).to.equal('VII'); - expect(BeatBarreEffectInfo.toRoman(8)).to.equal('VIII'); - expect(BeatBarreEffectInfo.toRoman(9)).to.equal('IX'); - expect(BeatBarreEffectInfo.toRoman(10)).to.equal('X'); - expect(BeatBarreEffectInfo.toRoman(11)).to.equal('XI'); - expect(BeatBarreEffectInfo.toRoman(12)).to.equal('XII'); - expect(BeatBarreEffectInfo.toRoman(13)).to.equal('XIII'); - expect(BeatBarreEffectInfo.toRoman(14)).to.equal('XIV'); - expect(BeatBarreEffectInfo.toRoman(15)).to.equal('XV'); - expect(BeatBarreEffectInfo.toRoman(16)).to.equal('XVI'); - expect(BeatBarreEffectInfo.toRoman(17)).to.equal('XVII'); - expect(BeatBarreEffectInfo.toRoman(18)).to.equal('XVIII'); - expect(BeatBarreEffectInfo.toRoman(19)).to.equal('XIX'); - expect(BeatBarreEffectInfo.toRoman(20)).to.equal('XX'); - expect(BeatBarreEffectInfo.toRoman(21)).to.equal('XXI'); - expect(BeatBarreEffectInfo.toRoman(22)).to.equal('XXII'); - expect(BeatBarreEffectInfo.toRoman(23)).to.equal('XXIII'); - expect(BeatBarreEffectInfo.toRoman(24)).to.equal('XXIV'); - expect(BeatBarreEffectInfo.toRoman(25)).to.equal('XXV'); - expect(BeatBarreEffectInfo.toRoman(26)).to.equal('XXVI'); - expect(BeatBarreEffectInfo.toRoman(27)).to.equal('XXVII'); - expect(BeatBarreEffectInfo.toRoman(28)).to.equal('XXVIII'); - expect(BeatBarreEffectInfo.toRoman(29)).to.equal('XXIX'); + expect(BeatBarreEffectInfo.toRoman(0)).toBe(''); + expect(BeatBarreEffectInfo.toRoman(1)).toBe('I'); + expect(BeatBarreEffectInfo.toRoman(2)).toBe('II'); + expect(BeatBarreEffectInfo.toRoman(3)).toBe('III'); + expect(BeatBarreEffectInfo.toRoman(4)).toBe('IV'); + expect(BeatBarreEffectInfo.toRoman(5)).toBe('V'); + expect(BeatBarreEffectInfo.toRoman(6)).toBe('VI'); + expect(BeatBarreEffectInfo.toRoman(7)).toBe('VII'); + expect(BeatBarreEffectInfo.toRoman(8)).toBe('VIII'); + expect(BeatBarreEffectInfo.toRoman(9)).toBe('IX'); + expect(BeatBarreEffectInfo.toRoman(10)).toBe('X'); + expect(BeatBarreEffectInfo.toRoman(11)).toBe('XI'); + expect(BeatBarreEffectInfo.toRoman(12)).toBe('XII'); + expect(BeatBarreEffectInfo.toRoman(13)).toBe('XIII'); + expect(BeatBarreEffectInfo.toRoman(14)).toBe('XIV'); + expect(BeatBarreEffectInfo.toRoman(15)).toBe('XV'); + expect(BeatBarreEffectInfo.toRoman(16)).toBe('XVI'); + expect(BeatBarreEffectInfo.toRoman(17)).toBe('XVII'); + expect(BeatBarreEffectInfo.toRoman(18)).toBe('XVIII'); + expect(BeatBarreEffectInfo.toRoman(19)).toBe('XIX'); + expect(BeatBarreEffectInfo.toRoman(20)).toBe('XX'); + expect(BeatBarreEffectInfo.toRoman(21)).toBe('XXI'); + expect(BeatBarreEffectInfo.toRoman(22)).toBe('XXII'); + expect(BeatBarreEffectInfo.toRoman(23)).toBe('XXIII'); + expect(BeatBarreEffectInfo.toRoman(24)).toBe('XXIV'); + expect(BeatBarreEffectInfo.toRoman(25)).toBe('XXV'); + expect(BeatBarreEffectInfo.toRoman(26)).toBe('XXVI'); + expect(BeatBarreEffectInfo.toRoman(27)).toBe('XXVII'); + expect(BeatBarreEffectInfo.toRoman(28)).toBe('XXVIII'); + expect(BeatBarreEffectInfo.toRoman(29)).toBe('XXIX'); }); it('barre', async () => { diff --git a/packages/alphatab/test/visualTests/features/General.test.ts b/packages/alphatab/test/visualTests/features/General.test.ts index 9c46858c7..6b5b934ed 100644 --- a/packages/alphatab/test/visualTests/features/General.test.ts +++ b/packages/alphatab/test/visualTests/features/General.test.ts @@ -1,8 +1,8 @@ +import { describe, expect, it } from 'vitest'; import { StaveProfile } from '@coderline/alphatab/StaveProfile'; import { Settings } from '@coderline/alphatab/Settings'; import { VisualTestHelper } from 'test/visualTests/VisualTestHelper'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; import { Logger } from '@coderline/alphatab/Logger'; import { BarStyle, BarSubElement } from '@coderline/alphatab/model/Bar'; import { BeatStyle, BeatSubElement } from '@coderline/alphatab/model/Beat'; @@ -172,7 +172,7 @@ describe('GeneralTests', () => { const coloredDuration = coloredEnd - coloredStart; const defaultDuration = defaultEnd - defaultStart; - expect(coloredDuration - defaultDuration).to.be.lessThan(120); + expect(coloredDuration - defaultDuration).toBeLessThan(120); Logger.info('Test-color-performance', 'Colored', i, coloredDuration); Logger.info('Test-color-performance', 'Default', i, defaultDuration); diff --git a/packages/alphatab/test/visualTests/features/GuitarTabs.test.ts b/packages/alphatab/test/visualTests/features/GuitarTabs.test.ts index dcf7020bd..1617b2904 100644 --- a/packages/alphatab/test/visualTests/features/GuitarTabs.test.ts +++ b/packages/alphatab/test/visualTests/features/GuitarTabs.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { StaveProfile } from '@coderline/alphatab/StaveProfile'; import { TabRhythmMode } from '@coderline/alphatab/NotationSettings'; import { Settings } from '@coderline/alphatab/Settings'; diff --git a/packages/alphatab/test/visualTests/features/Layout.test.ts b/packages/alphatab/test/visualTests/features/Layout.test.ts index 262fa3573..c2a12bac7 100644 --- a/packages/alphatab/test/visualTests/features/Layout.test.ts +++ b/packages/alphatab/test/visualTests/features/Layout.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { Settings } from '@coderline/alphatab/Settings'; import { VisualTestHelper, VisualTestOptions, VisualTestRun } from 'test/visualTests/VisualTestHelper'; diff --git a/packages/alphatab/test/visualTests/features/MultiVoice.test.ts b/packages/alphatab/test/visualTests/features/MultiVoice.test.ts index 2c21ece9b..418fee55a 100644 --- a/packages/alphatab/test/visualTests/features/MultiVoice.test.ts +++ b/packages/alphatab/test/visualTests/features/MultiVoice.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { Settings } from '@coderline/alphatab/Settings'; import { TestPlatform } from 'test/TestPlatform'; diff --git a/packages/alphatab/test/visualTests/features/MusicNotation.test.ts b/packages/alphatab/test/visualTests/features/MusicNotation.test.ts index 2339a1a3d..9016987a2 100644 --- a/packages/alphatab/test/visualTests/features/MusicNotation.test.ts +++ b/packages/alphatab/test/visualTests/features/MusicNotation.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { NotationElement } from '@coderline/alphatab/NotationSettings'; import { Settings } from '@coderline/alphatab/Settings'; diff --git a/packages/alphatab/test/visualTests/features/NotationElements.test.ts b/packages/alphatab/test/visualTests/features/NotationElements.test.ts index adcd10ba3..a80dcf7b2 100644 --- a/packages/alphatab/test/visualTests/features/NotationElements.test.ts +++ b/packages/alphatab/test/visualTests/features/NotationElements.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { Settings } from '@coderline/alphatab/Settings'; import { VisualTestHelper, VisualTestOptions } from 'test/visualTests/VisualTestHelper'; diff --git a/packages/alphatab/test/visualTests/features/NotationLegend.test.ts b/packages/alphatab/test/visualTests/features/NotationLegend.test.ts index 331429e86..035f35958 100644 --- a/packages/alphatab/test/visualTests/features/NotationLegend.test.ts +++ b/packages/alphatab/test/visualTests/features/NotationLegend.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { Settings } from '@coderline/alphatab/Settings'; import { VisualTestHelper, VisualTestOptions, VisualTestRun } from 'test/visualTests/VisualTestHelper'; diff --git a/packages/alphatab/test/visualTests/features/PrefixOverhead.test.ts b/packages/alphatab/test/visualTests/features/PrefixOverhead.test.ts index e479b4a38..a517ccbe7 100644 --- a/packages/alphatab/test/visualTests/features/PrefixOverhead.test.ts +++ b/packages/alphatab/test/visualTests/features/PrefixOverhead.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { SystemsLayoutMode } from '@coderline/alphatab/DisplaySettings'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { Settings } from '@coderline/alphatab/Settings'; diff --git a/packages/alphatab/test/visualTests/features/SpecialNotes.test.ts b/packages/alphatab/test/visualTests/features/SpecialNotes.test.ts index 389027d72..8a50c2c4c 100644 --- a/packages/alphatab/test/visualTests/features/SpecialNotes.test.ts +++ b/packages/alphatab/test/visualTests/features/SpecialNotes.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { VisualTestHelper, VisualTestOptions, VisualTestRun } from 'test/visualTests/VisualTestHelper'; describe('SpecialNotesTests', () => { diff --git a/packages/alphatab/test/visualTests/features/SpecialTracks.test.ts b/packages/alphatab/test/visualTests/features/SpecialTracks.test.ts index 448c30d17..00c7e6a6c 100644 --- a/packages/alphatab/test/visualTests/features/SpecialTracks.test.ts +++ b/packages/alphatab/test/visualTests/features/SpecialTracks.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { VisualTestHelper } from 'test/visualTests/VisualTestHelper'; diff --git a/packages/alphatab/test/visualTests/features/SystemSpacing.test.ts b/packages/alphatab/test/visualTests/features/SystemSpacing.test.ts index 8abacdd9d..5a562f92a 100644 --- a/packages/alphatab/test/visualTests/features/SystemSpacing.test.ts +++ b/packages/alphatab/test/visualTests/features/SystemSpacing.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { Settings } from '@coderline/alphatab/Settings'; import { VisualTestHelper } from 'test/visualTests/VisualTestHelper'; diff --git a/packages/alphatab/test/visualTests/features/SystemsLayout.test.ts b/packages/alphatab/test/visualTests/features/SystemsLayout.test.ts index d4f810fe3..afdb098c4 100644 --- a/packages/alphatab/test/visualTests/features/SystemsLayout.test.ts +++ b/packages/alphatab/test/visualTests/features/SystemsLayout.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { SystemsLayoutMode } from '@coderline/alphatab/DisplaySettings'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { Settings } from '@coderline/alphatab/Settings'; diff --git a/packages/alphatab/test/visualTests/issues/BrokenRenders.test.ts b/packages/alphatab/test/visualTests/issues/BrokenRenders.test.ts index e9ecf815a..26f0a017a 100644 --- a/packages/alphatab/test/visualTests/issues/BrokenRenders.test.ts +++ b/packages/alphatab/test/visualTests/issues/BrokenRenders.test.ts @@ -1,8 +1,8 @@ +import { describe, expect, it } from 'vitest'; import { TestPlatform } from 'test/TestPlatform'; import { VisualTestHelper, VisualTestOptions, VisualTestRun } from '../VisualTestHelper'; import { Settings } from '@coderline/alphatab/Settings'; import { XmlDocument } from '@coderline/alphatab/xml/XmlDocument'; -import { expect } from 'chai'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import type { RenderFinishedEventArgs } from '@coderline/alphatab/rendering/RenderFinishedEventArgs'; import { ScoreRenderer } from '@coderline/alphatab/rendering/ScoreRenderer'; @@ -83,8 +83,8 @@ describe('BrokenRendersTests', () => { const xml = new XmlDocument(); xml.parse(r.renderResult as string); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('svg'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('svg'); } } }); diff --git a/packages/alphatab/test/visualTests/issues/TranspositionTonality.test.ts b/packages/alphatab/test/visualTests/issues/TranspositionTonality.test.ts index 82d492d7e..d96647f25 100644 --- a/packages/alphatab/test/visualTests/issues/TranspositionTonality.test.ts +++ b/packages/alphatab/test/visualTests/issues/TranspositionTonality.test.ts @@ -1,3 +1,4 @@ +import { describe, it } from 'vitest'; import { ScoreLoader } from '@coderline/alphatab/importer/ScoreLoader'; import { LayoutMode } from '@coderline/alphatab/LayoutMode'; import { Settings } from '@coderline/alphatab/Settings'; diff --git a/packages/alphatab/test/xml/XmlParse.test.ts b/packages/alphatab/test/xml/XmlParse.test.ts index 8b2de0b94..2ed047eab 100644 --- a/packages/alphatab/test/xml/XmlParse.test.ts +++ b/packages/alphatab/test/xml/XmlParse.test.ts @@ -1,81 +1,80 @@ +import { describe, expect, it } from 'vitest'; import { XmlDocument } from '@coderline/alphatab/xml/XmlDocument'; import { XmlNodeType } from '@coderline/alphatab/xml/XmlNode'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; - describe('XmlParseTest', () => { it('parseSimple', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('root'); - expect(xml.firstElement!.childNodes.length).to.equal(0); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('root'); + expect(xml.firstElement!.childNodes.length).toBe(0); }); it('parseShorthand', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('root'); - expect(xml.firstElement!.childNodes.length).to.equal(0); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('root'); + expect(xml.firstElement!.childNodes.length).toBe(0); }); it('parseSingleAttribute', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('root'); - expect(xml.firstElement!.getAttribute('att')).to.equal('v'); - expect(xml.firstElement!.childNodes.length).to.equal(0); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('root'); + expect(xml.firstElement!.getAttribute('att')).toBe('v'); + expect(xml.firstElement!.childNodes.length).toBe(0); }); it('parseMultipleAttributes', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('root'); - expect(xml.firstElement!.getAttribute('att')).to.equal('v'); - expect(xml.firstElement!.getAttribute('att2')).to.equal('v2'); - expect(xml.firstElement!.childNodes.length).to.equal(0); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('root'); + expect(xml.firstElement!.getAttribute('att')).toBe('v'); + expect(xml.firstElement!.getAttribute('att2')).toBe('v2'); + expect(xml.firstElement!.childNodes.length).toBe(0); }); it('parseSimpleText', () => { const s: string = 'Text'; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('root'); - expect(xml.firstElement!.childNodes.length).to.equal(1); - expect(xml.firstElement!.childNodes[0].nodeType).to.equal(XmlNodeType.Text); - expect(xml.firstElement!.childNodes[0].value).to.equal('Text'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('root'); + expect(xml.firstElement!.childNodes.length).toBe(1); + expect(xml.firstElement!.childNodes[0].nodeType).toBe(XmlNodeType.Text); + expect(xml.firstElement!.childNodes[0].value).toBe('Text'); }); it('parseChild', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('root'); - expect(xml.firstElement!.childNodes.length).to.equal(1); - expect(xml.firstElement!.childNodes[0].nodeType).to.equal(XmlNodeType.Element); - expect(xml.firstElement!.childNodes[0].localName).to.equal('cc'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('root'); + expect(xml.firstElement!.childNodes.length).toBe(1); + expect(xml.firstElement!.childNodes[0].nodeType).toBe(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[0].localName).toBe('cc'); }); it('parseMultiChild', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('root'); - expect(xml.firstElement!.childNodes.length).to.equal(2); - expect(xml.firstElement!.childNodes[0].nodeType).to.equal(XmlNodeType.Element); - expect(xml.firstElement!.childNodes[0].localName).to.equal('cc'); - expect(xml.firstElement!.childNodes[1].nodeType).to.equal(XmlNodeType.Element); - expect(xml.firstElement!.childNodes[1].localName).to.equal('cc'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('root'); + expect(xml.firstElement!.childNodes.length).toBe(2); + expect(xml.firstElement!.childNodes[0].nodeType).toBe(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[0].localName).toBe('cc'); + expect(xml.firstElement!.childNodes[1].nodeType).toBe(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[1].localName).toBe('cc'); }); it('parseComments', () => { @@ -83,44 +82,44 @@ describe('XmlParseTest', () => { 'value'; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('test'); - expect(xml.firstElement!.childNodes.length).to.equal(2); - expect(xml.firstElement!.childNodes[0].nodeType).to.equal(XmlNodeType.Element); - expect(xml.firstElement!.childNodes[0].localName).to.equal('cc'); - expect(xml.firstElement!.childNodes[0].getAttribute('c')).to.equal('d'); - expect(xml.firstElement!.childNodes[1].nodeType).to.equal(XmlNodeType.Element); - expect(xml.firstElement!.childNodes[1].localName).to.equal('cc'); - expect(xml.firstElement!.childNodes[1].childNodes.length).to.equal(1); - expect(xml.firstElement!.childNodes[1].childNodes[0].nodeType).to.equal(XmlNodeType.Text); - expect(xml.firstElement!.childNodes[1].childNodes[0].value).to.equal('value'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('test'); + expect(xml.firstElement!.childNodes.length).toBe(2); + expect(xml.firstElement!.childNodes[0].nodeType).toBe(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[0].localName).toBe('cc'); + expect(xml.firstElement!.childNodes[0].getAttribute('c')).toBe('d'); + expect(xml.firstElement!.childNodes[1].nodeType).toBe(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[1].localName).toBe('cc'); + expect(xml.firstElement!.childNodes[1].childNodes.length).toBe(1); + expect(xml.firstElement!.childNodes[1].childNodes[0].nodeType).toBe(XmlNodeType.Text); + expect(xml.firstElement!.childNodes[1].childNodes[0].value).toBe('value'); }); it('parseDoctype', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('test'); - expect(xml.firstElement!.childNodes.length).to.equal(2); - expect(xml.firstElement!.childNodes[0].nodeType).to.equal(XmlNodeType.Element); - expect(xml.firstElement!.childNodes[0].localName).to.equal('cc'); - expect(xml.firstElement!.childNodes[1].nodeType).to.equal(XmlNodeType.Element); - expect(xml.firstElement!.childNodes[1].localName).to.equal('cc'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('test'); + expect(xml.firstElement!.childNodes.length).toBe(2); + expect(xml.firstElement!.childNodes[0].nodeType).toBe(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[0].localName).toBe('cc'); + expect(xml.firstElement!.childNodes[1].nodeType).toBe(XmlNodeType.Element); + expect(xml.firstElement!.childNodes[1].localName).toBe('cc'); }); it('parseXmlHeadTest', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; - expect(xml.firstElement!.localName).to.equal('root'); + expect(xml.firstElement).toBeTruthy(); + expect(xml.firstElement!.localName).toBe('root'); }); it('parseFull', async () => { const s = await TestPlatform.loadFileAsString('test-data/xml/GPIF.xml'); const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.firstElement).to.be.ok; + expect(xml.firstElement).toBeTruthy(); }); }); diff --git a/packages/alphatab/test/xml/XmllWrite.test.ts b/packages/alphatab/test/xml/XmllWrite.test.ts index 1a913d739..3cf6538bd 100644 --- a/packages/alphatab/test/xml/XmllWrite.test.ts +++ b/packages/alphatab/test/xml/XmllWrite.test.ts @@ -1,82 +1,81 @@ +import { describe, expect, it } from 'vitest'; import { XmlDocument } from '@coderline/alphatab/xml/XmlDocument'; import { XmlNode, XmlNodeType } from '@coderline/alphatab/xml/XmlNode'; -import { expect } from 'chai'; - describe('XmlWriteTest', () => { it('writeSimple', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString()).to.equal(''); + expect(xml.toFormattedString()).toBe(''); }); it('writeSingleAttribute', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString()).to.equal(''); + expect(xml.toFormattedString()).toBe(''); }); it('writeMultipleAttributes', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString()).to.equal(''); + expect(xml.toFormattedString()).toBe(''); }); it('writeSimpleText', () => { const s: string = 'Text'; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString()).to.equal(s); + expect(xml.toFormattedString()).toBe(s); }); it('writeSimpleTextFormatted', () => { const s: string = 'Text'; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString(' ')).to.equal(s); + expect(xml.toFormattedString(' ')).toBe(s); }); it('writeChild', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString()).to.equal(''); - expect(xml.toFormattedString(' ')).to.equal('\n \n'); - expect(xml.toFormattedString(' ')).to.equal('\n \n'); + expect(xml.toFormattedString()).toBe(''); + expect(xml.toFormattedString(' ')).toBe('\n \n'); + expect(xml.toFormattedString(' ')).toBe('\n \n'); }); it('writeNumber', () => { const s: string = '0.5'; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString()).to.equal('0.5'); + expect(xml.toFormattedString()).toBe('0.5'); }); it('writeMultiChild', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString()).to.equal(''); - expect(xml.toFormattedString(' ')).to.equal('\n \n \n'); - expect(xml.toFormattedString(' ')).to.equal('\n \n \n'); + expect(xml.toFormattedString()).toBe(''); + expect(xml.toFormattedString(' ')).toBe('\n \n \n'); + expect(xml.toFormattedString(' ')).toBe('\n \n \n'); }); it('writeXmlHeadTest', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString('', true)).to.equal(''); - expect(xml.toFormattedString(' ', true)).to.equal('\n'); + expect(xml.toFormattedString('', true)).toBe(''); + expect(xml.toFormattedString(' ', true)).toBe('\n'); }); it('writeDoctype', () => { const s: string = ''; const xml: XmlDocument = new XmlDocument(); xml.parse(s); - expect(xml.toFormattedString()).to.equal(s); - expect(xml.toFormattedString(' ')).to.equal('\n'); + expect(xml.toFormattedString()).toBe(s); + expect(xml.toFormattedString(' ')).toBe('\n'); }); it('writeEscapedAttributeValues', () => { @@ -88,7 +87,7 @@ describe('XmlWriteTest', () => { xml.firstElement!.attributes.set('amp', '&'); xml.firstElement!.attributes.set('apos', "'"); xml.firstElement!.attributes.set('quot', '"'); - expect(xml.toFormattedString()).to.equal(''); + expect(xml.toFormattedString()).toBe(''); }); it('writeComment', () => { const s: string = ''; @@ -101,6 +100,6 @@ describe('XmlWriteTest', () => { alphaTabComment.nodeType = XmlNodeType.Comment; alphaTabComment.value = 'Written by alphaTab'; xml.firstElement!.addChild(alphaTabComment); - expect(xml.toFormattedString()).to.equal(''); + expect(xml.toFormattedString()).toBe(''); }); }); diff --git a/packages/alphatab/test/zip/ZipReaderWriter.test.ts b/packages/alphatab/test/zip/ZipReaderWriter.test.ts index fff4d2f0e..3ee641ea8 100644 --- a/packages/alphatab/test/zip/ZipReaderWriter.test.ts +++ b/packages/alphatab/test/zip/ZipReaderWriter.test.ts @@ -1,18 +1,17 @@ +import { describe, expect, it } from 'vitest'; import { ByteBuffer } from '@coderline/alphatab/io/ByteBuffer'; import { IOHelper } from '@coderline/alphatab/io/IOHelper'; import { ZipEntry } from '@coderline/alphatab/zip/ZipEntry'; import { ZipReader } from '@coderline/alphatab/zip/ZipReader'; import { ZipWriter } from '@coderline/alphatab/zip/ZipWriter'; import { TestPlatform } from 'test/TestPlatform'; -import { expect } from 'chai'; - describe('ZipReaderWriter', () => { it('simple-read', async () => { const data = await TestPlatform.loadFile('test-data/guitarpro7/score-info.gp'); const reader = new ZipReader(ByteBuffer.fromBuffer(data)); const entries = reader.read(); - expect(entries.map(e => e.fileName).join(',')).to.equal( + expect(entries.map(e => e.fileName).join(',')).toBe( 'Content/,BinaryStylesheet,LayoutConfiguration,PartConfiguration,Preferences.json,score.gpif,VERSION' ); expect( @@ -20,7 +19,7 @@ describe('ZipReaderWriter', () => { .map(e => e.data.length) .map(i => i.toString()) .join(',') - ).to.equal('0,19651,14,27,192,22998,3'); + ).toBe('0,19651,14,27,192,22998,3'); }); it('simple-roundtrip', () => { @@ -49,13 +48,13 @@ describe('ZipReaderWriter', () => { const reader = new ZipReader(data); const entries = reader.read(); - expect(entries[0].fileName).to.equal('File01.txt'); - expect(IOHelper.toString(entries[0].data, 'utf-8')).to.equal('File01'); + expect(entries[0].fileName).toBe('File01.txt'); + expect(IOHelper.toString(entries[0].data, 'utf-8')).toBe('File01'); - expect(entries[2].fileName).to.equal('File02.txt'); - expect(IOHelper.toString(entries[2].data, 'utf-8')).to.equal('File02'); + expect(entries[2].fileName).toBe('File02.txt'); + expect(IOHelper.toString(entries[2].data, 'utf-8')).toBe('File02'); - expect(entries[3].fileName).to.equal('LargeFile'); - expect(IOHelper.toString(entries[3].data, 'utf-8')).to.equal(text); + expect(entries[3].fileName).toBe('LargeFile'); + expect(IOHelper.toString(entries[3].data, 'utf-8')).toBe(text); }); }); diff --git a/packages/alphatab/tsconfig.json b/packages/alphatab/tsconfig.json index 8ff166663..4c409eded 100644 --- a/packages/alphatab/tsconfig.json +++ b/packages/alphatab/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.base.json" } \ No newline at end of file diff --git a/packages/alphatab/vitest.config.ts b/packages/alphatab/vitest.config.ts new file mode 100644 index 000000000..e60cfba6d --- /dev/null +++ b/packages/alphatab/vitest.config.ts @@ -0,0 +1,6 @@ +import { defineVitestConfig } from '../tooling/src/vitest'; + +export default defineVitestConfig({ + setupFiles: ['./test/global-hooks.ts'], + truncateThreshold: 0 +}); diff --git a/packages/alphatex/package.json b/packages/alphatex/package.json index 66969dd80..9b68420e8 100644 --- a/packages/alphatex/package.json +++ b/packages/alphatex/package.json @@ -5,13 +5,16 @@ "scripts": { "lint": "biome lint", "typecheck": "tsc --noEmit", + "test": "vitest run", + "test-web": "npm run test", "generate": "tsx scripts/generate.ts" }, "devDependencies": { "rimraf": "^6.1.3", "tslib": "^2.8.1", "tsx": "^4.21.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.1.5" }, "type": "module" } diff --git a/packages/alphatex/vitest.config.ts b/packages/alphatex/vitest.config.ts new file mode 100644 index 000000000..cb8d7de0d --- /dev/null +++ b/packages/alphatex/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineVitestConfig } from '../tooling/src/vitest'; + +export default defineVitestConfig(); diff --git a/packages/csharp/package.json b/packages/csharp/package.json index 27612d9e8..583f3df1f 100644 --- a/packages/csharp/package.json +++ b/packages/csharp/package.json @@ -9,7 +9,8 @@ "transpile": "tsx scripts/transpile.ts", "typecheck": "tsc --noEmit", "build": "npm run transpile && cd src && dotnet build -c Release", - "test": "cd src && dotnet test -c Release" + "test": "cd src && dotnet test -c Release", + "test-ci": "cd src && dotnet test -c Release --logger GitHubActions --logger \"console;verbosity=normal\"" }, "devDependencies": { "@coderline/alphatab-transpiler": "*", diff --git a/packages/csharp/src/AlphaTab.Test/AlphaTab.Test.csproj b/packages/csharp/src/AlphaTab.Test/AlphaTab.Test.csproj index 5b98406ad..2cdd745a4 100644 --- a/packages/csharp/src/AlphaTab.Test/AlphaTab.Test.csproj +++ b/packages/csharp/src/AlphaTab.Test/AlphaTab.Test.csproj @@ -10,6 +10,7 @@ + diff --git a/packages/csharp/src/AlphaTab.Test/Test/Globals.cs b/packages/csharp/src/AlphaTab.Test/Test/Globals.cs index 61f1e303c..b8cf08b94 100644 --- a/packages/csharp/src/AlphaTab.Test/Test/Globals.cs +++ b/packages/csharp/src/AlphaTab.Test/Test/Globals.cs @@ -44,7 +44,7 @@ public static string UseSnapshotValue(string baseName, string hint) { if (!string.IsNullOrEmpty(hint)) { - baseName += $": {hint}"; + baseName += $" > {hint}"; } var value = SnapshotAssertionCounters.GetValueOrDefault(baseName) + 1; @@ -56,7 +56,6 @@ public static string UseSnapshotValue(string baseName, string hint) internal class NotExpector { private readonly T? _actual; - public NotExpector Be => this; private readonly string? _message; public NotExpector(T? actual, string? message = null) @@ -92,10 +91,99 @@ public void Ok() } } - public void Undefined() + public void ToBe(object? expected) + { + Equal(expected); + } + + public void ToEqual(object? expected, string? message = null) + { + Equal(expected, message); + } + + public void ToBeTruthy() + { + Ok(); + } + + public void ToBeFalsy() + { + if (_actual is null) + { + Assert.Fail(_message ?? "Expected non-falsy value"); + return; + } + if (_actual is bool b) + { + Assert.IsTrue(b, _message); + return; + } + if (_actual is string s) + { + Assert.IsFalse(string.IsNullOrEmpty(s), _message); + return; + } + if (_actual is IConvertible c) + { + Assert.AreNotEqual(0.0, c.ToDouble(System.Globalization.CultureInfo.InvariantCulture), _message); + return; + } + } + + public void ToContain(object element) + { + if (_actual is ICollection collection) + { + CollectionAssert.DoesNotContain(collection, element, _message); + } + else + { + Assert.Fail("Contain can only be used with collection operands"); + } + } + + public void ToHaveLength(int length) + { + if (_actual is ICollection collection) + { + Assert.AreNotEqual(length, collection.Count, _message); + } + else + { + Assert.Fail("Length can only be used with collection operands"); + } + } + + public void ToBeGreaterThan(double expected) + { + if (_actual is IComparable d) + { + Assert.IsFalse(d.CompareTo(expected) > 0, _message); + } + } + + public void ToBeLessThan(double expected) + { + if (_actual is IComparable d) + { + Assert.IsFalse(d.CompareTo(expected) < 0, _message); + } + } + + public void ToBeNull() { Assert.IsNotNull(_actual, _message); } + + public void ToBeUndefined() + { + Assert.IsNotNull(_actual, _message); + } + + public void ToBeInstanceOf(Type expected) + { + Assert.IsNotInstanceOfType(_actual, expected, _message); + } } internal class Expector @@ -109,16 +197,11 @@ public Expector(T? actual, string? message = null) _message = message; } - public Expector To => this; - public NotExpector Not() { return new NotExpector(_actual, _message); } - public Expector Be => this; - public Expector Have => this; - public void Equal(object? expected, string? message = null) { if (expected is int i && _actual is double) @@ -179,19 +262,94 @@ public void ToBe(object expected) expected = (double)i; } + if (expected is double d && _actual is int) + { + expected = (int)d; + } + Assert.AreEqual(expected, _actual, _message); } - public void Ok() + public void ToBeTruthy() { - Assert.AreNotEqual(default!, _actual, _message); + Ok(); + } + + public void ToBeFalsy() + { + if (_actual is null) + { + return; + } + if (_actual is bool b) + { + Assert.IsFalse(b, _message); + return; + } + if (_actual is string s) + { + Assert.IsTrue(string.IsNullOrEmpty(s), _message); + return; + } + if (_actual is IConvertible c) + { + Assert.AreEqual(0.0, c.ToDouble(System.Globalization.CultureInfo.InvariantCulture), _message); + return; + } + Assert.Fail(_message ?? "Expected a falsy value"); + } + + public void ToBeCloseTo(double expected, int decimals = 2) + { + var delta = System.Math.Pow(10, -decimals) / 2; + CloseTo(expected, delta); + } + + public void ToContain(object element) + { + Contain(element); + } + + public void ToHaveLength(int length) + { + Length(length); + } + + public void ToBeGreaterThan(double expected, string? message = null) + { + GreaterThan(expected, message); + } + + public void ToBeLessThan(double expected) + { + LessThan(expected); } - public void Undefined() + public void ToBeInstanceOf(Type expected) + { + Assert.IsInstanceOfType(_actual, expected, _message); + } + + public void ToBeNull() { Assert.IsNull(_actual, _message); } + public void ToBeUndefined() + { + Assert.IsNull(_actual, _message); + } + + public void ToThrow(Type expected) + { + Throw(expected); + } + + public void Ok() + { + Assert.AreNotEqual(default!, _actual, _message); + } + public void Length(int length) { if (_actual is ICollection collection) @@ -216,29 +374,6 @@ public void Contain(object element) } } - public void True() - { - if (_actual is bool b) - { - Assert.IsTrue(b, _message); - } - else - { - Assert.Fail("ToBeTrue can only be used on bools:"); - } - } - - public void False() - { - if (_actual is bool b) - { - Assert.IsFalse(b, _message); - } - else - { - Assert.Fail("ToBeFalse can only be used on bools:"); - } - } public void Throw(Type expected) @@ -295,7 +430,7 @@ public void ToMatchSnapshot(string hint = "") .DisplayName; parts.Add(testName ?? ""); - var snapshotName = TestGlobals.UseSnapshotValue(string.Join(" ", parts), hint); + var snapshotName = TestGlobals.UseSnapshotValue(string.Join(" > ", parts), hint); var error = snapshotFile.Match(snapshotName, _actual); if (!string.IsNullOrEmpty(error)) diff --git a/packages/csharp/src/AlphaTab/Core/EcmaScript/Object.cs b/packages/csharp/src/AlphaTab/Core/EcmaScript/Object.cs index afa5dabc4..0e1cb339d 100644 --- a/packages/csharp/src/AlphaTab/Core/EcmaScript/Object.cs +++ b/packages/csharp/src/AlphaTab/Core/EcmaScript/Object.cs @@ -62,11 +62,18 @@ public static IList> Entries(object v) private static Func CompilePropertyAccessor(PropertyInfo propertyInfo) { - var param = Expression.Parameter(typeof(object)); - var castParam = Expression.Convert(param, propertyInfo.DeclaringType!); - var accessor = Expression.Property(castParam, propertyInfo); - var castReturn = Expression.Convert(accessor, typeof(object)); - return Expression.Lambda>(castReturn, param) - .Compile(); + try + { + var param = Expression.Parameter(typeof(object)); + var castParam = Expression.Convert(param, propertyInfo.DeclaringType!); + var accessor = Expression.Property(castParam, propertyInfo); + var castReturn = Expression.Convert(accessor, typeof(object)); + return Expression.Lambda>(castReturn, param) + .Compile(); + } + catch(Exception e) + { + throw new InvalidOperationException($"Failed to compile simple property accessor for property {propertyInfo.DeclaringType!.FullName}.{propertyInfo.Name}", e); + } } } diff --git a/packages/csharp/src/AlphaTab/Core/TypeHelper.cs b/packages/csharp/src/AlphaTab/Core/TypeHelper.cs index 13c918e0b..0ee832c13 100644 --- a/packages/csharp/src/AlphaTab/Core/TypeHelper.cs +++ b/packages/csharp/src/AlphaTab/Core/TypeHelper.cs @@ -70,7 +70,7 @@ public static T Find(this IList list, Func predicate) return list.FirstOrDefault(predicate); } - public static int FindIndex(this IList list, Func predicate) + public static double FindIndex(this IList list, Func predicate) { var index = 0; foreach (var item in list) diff --git a/packages/kotlin/src/android/src/test/java/alphaTab/core/TestGlobals.kt b/packages/kotlin/src/android/src/test/java/alphaTab/core/TestGlobals.kt index d11c47383..e60c9e6db 100644 --- a/packages/kotlin/src/android/src/test/java/alphaTab/core/TestGlobals.kt +++ b/packages/kotlin/src/android/src/test/java/alphaTab/core/TestGlobals.kt @@ -73,23 +73,88 @@ class NotExpector(private val actual: T, private val message: String? = null) } } + fun toBe(expected: Any?) { + equal(expected) + } + + fun toEqual(expected: Any?, message: String? = null) { + equal(expected, message) + } + + fun toBeTruthy() { + ok() + } + + fun toBeFalsy() { + when (actual) { + null -> Assert.fail(message ?: "Expected non-falsy value") + is Boolean -> Assert.assertTrue(message, actual) + is String -> Assert.assertFalse(message, actual.isEmpty()) + is Number -> Assert.assertNotEquals(message, 0.0, actual.toDouble(), 0.0) + } + } + + fun toContain(value: Any) { + if (actual is Iterable<*>) { + Assert.assertFalse( + message ?: "Expected collection ${actual.joinToString(",")} to not contain $value", + actual.contains(value) + ) + } else { + Assert.fail("toContain can only be used with Iterable operands"); + } + } + + fun toHaveLength(expected: Double) { + when (actual) { + is alphaTab.collections.List<*> -> Assert.assertNotEquals(message, expected.toInt(), actual.length.toInt()) + is alphaTab.collections.DoubleList -> Assert.assertNotEquals(message, expected.toInt(), actual.length.toInt()) + is alphaTab.collections.BooleanList -> Assert.assertNotEquals(message, expected.toInt(), actual.length.toInt()) + else -> Assert.fail("toHaveLength can only be used with collection operands") + } + } + + fun toBeGreaterThan(expected: Double) { + if (actual is Number) { + Assert.assertFalse( + message ?: "Expected $actual to not be greater than $expected", + actual.toDouble() > expected + ) + } else { + Assert.fail("toBeGreaterThan can only be used with numeric operands") + } + } + + fun toBeLessThan(expected: Double) { + if (actual is Number) { + Assert.assertFalse( + message ?: "Expected $actual to not be less than $expected", + actual.toDouble() < expected + ) + } else { + Assert.fail("toBeLessThan can only be used with numeric operands") + } + } + + fun toBeNull() { + Assert.assertNotNull(message, actual) + } - fun undefined() { + fun toBeUndefined() { Assert.assertNotNull(message, actual) } + fun toBeInstanceOf(expected: kotlin.reflect.KClass<*>) { + Assert.assertFalse( + message ?: "Expected ${actual?.let { it::class.qualifiedName }} to not be instance of ${expected.qualifiedName}", + expected.isInstance(actual) + ) + } } class Expector(private val actual: T, private val message: String? = null) { - val to - get() = this - - fun not() = NotExpector(actual, message) - - val be - get() = this - val have - get() = this + val not + get() = NotExpector(actual, message) fun equal(expected: Any?, message: String? = null) { var actualToCheck = actual @@ -188,26 +253,67 @@ class Expector(private val actual: T, private val message: String? = null) { } } - fun undefined() { - Assert.assertNull(message, actual) + fun toBe(expected: Any?) { + equal(expected) } - fun `true`() { - if (actual is Boolean) { - Assert.assertTrue(message, actual); - } else { - Assert.fail("toBeTrue can only be used on booleans:"); - } + fun toEqual(expected: Any?, message: String? = null) { + equal(expected, message) } - fun `false`() { - if (actual is Boolean) { - Assert.assertFalse(message, actual); - } else { - Assert.fail("toBeFalse can only be used on booleans:"); + fun toBeTruthy() { + ok() + } + + fun toBeFalsy() { + when (actual) { + null -> return + is Boolean -> Assert.assertFalse(message, actual) + is String -> Assert.assertTrue(message, actual.isEmpty()) + is Number -> Assert.assertEquals(message, 0.0, actual.toDouble(), 0.0) + else -> Assert.fail(message ?: "Expected a falsy value") } } + fun toBeCloseTo(expected: Double, decimals: Double = 2.0) { + val delta = Math.pow(10.0, -decimals) / 2 + closeTo(expected, delta) + } + + fun toContain(value: Any) { + contain(value) + } + + fun toHaveLength(expected: Double) { + length(expected) + } + + fun toBeGreaterThan(expected: Double, message: String? = null) { + greaterThan(expected, message) + } + + fun toBeLessThan(expected: Double) { + lessThan(expected) + } + + fun toBeInstanceOf(expected: KClass<*>) { + Assert.assertTrue( + message ?: "Expected ${actual?.let { it::class.qualifiedName }} to be instance of ${expected.qualifiedName}", + expected.isInstance(actual) + ) + } + + fun toBeNull() { + Assert.assertNull(message, actual) + } + + fun toBeUndefined() { + Assert.assertNull(message, actual) + } + + fun toThrow(expected: KClass) { + `throw`(expected) + } fun `throw`(expected: KClass) { val actual = actual @@ -252,7 +358,7 @@ class Expector(private val actual: T, private val message: String? = null) { val testName = testMethodInfo.getAnnotation(TestName::class.java)!!.name parts.push(testName) - val snapshotName = TestGlobals.useSnapshotValue(parts.joinToString(" "), hint); + val snapshotName = TestGlobals.useSnapshotValue(parts.joinToString(" > "), hint); val error = snapshotFile.match(snapshotName, actual) if (!error.isNullOrEmpty()) { @@ -280,7 +386,7 @@ class TestGlobals { fun useSnapshotValue(baseName: String, hint: String): String { var fullName = baseName if (hint.isNotEmpty()) { - fullName += ": $hint"; + fullName += " > $hint"; } val value = diff --git a/packages/lsp/package.json b/packages/lsp/package.json index 77b3a4b35..78f1c8eb1 100644 --- a/packages/lsp/package.json +++ b/packages/lsp/package.json @@ -31,7 +31,8 @@ "typecheck": "tsc --noEmit", "build": "vite build", "dev": "vite build --watch", - "test": "mocha" + "test": "vitest run", + "test-web": "npm run test" }, "dependencies": { "@coderline/alphatab": "^1.9.0", @@ -41,16 +42,13 @@ "devDependencies": { "@biomejs/biome": "^2.4.10", "@microsoft/api-extractor": "^7.57.7", - "@types/chai": "^5.2.2", - "@types/mocha": "^10.0.10", "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", - "mocha": "^11.7.4", "rimraf": "^6.1.3", "tslib": "^2.8.1", "tsx": "^4.21.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" }, "bin": "./dist/server.mjs", "main": "./dist/server.mjs", diff --git a/packages/lsp/test/placeholder.test.ts b/packages/lsp/test/placeholder.test.ts index c716174a1..4be560bd7 100644 --- a/packages/lsp/test/placeholder.test.ts +++ b/packages/lsp/test/placeholder.test.ts @@ -1,3 +1,5 @@ -describe('placeholder', ()=>{ - it('tests') -}); \ No newline at end of file +import { describe, it } from 'vitest'; + +describe('placeholder', () => { + it.todo('tests'); +}); diff --git a/packages/lsp/vitest.config.ts b/packages/lsp/vitest.config.ts new file mode 100644 index 000000000..cb8d7de0d --- /dev/null +++ b/packages/lsp/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineVitestConfig } from '../tooling/src/vitest'; + +export default defineVitestConfig(); diff --git a/packages/monaco/package.json b/packages/monaco/package.json index e8a93c1e4..c82670415 100644 --- a/packages/monaco/package.json +++ b/packages/monaco/package.json @@ -28,7 +28,8 @@ "typecheck": "tsc --noEmit", "build": "vite build", "dev": "vite build --watch", - "test": "mocha" + "test": "vitest run", + "test-web": "npm run test" }, "dependencies": { "@coderline/alphatab": "^1.9.0", @@ -41,16 +42,13 @@ "devDependencies": { "@biomejs/biome": "^2.4.10", "@microsoft/api-extractor": "^7.57.7", - "@types/chai": "^5.2.2", - "@types/mocha": "^10.0.10", "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", - "mocha": "^11.7.4", "rimraf": "^6.1.3", "tslib": "^2.8.1", "tsx": "^4.21.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" }, "bin": "./dist/alphaTab.monaco.mjs", "main": "./dist/alphaTab.monaco.mjs", diff --git a/packages/monaco/test/placeholder.test.ts b/packages/monaco/test/placeholder.test.ts index c716174a1..4be560bd7 100644 --- a/packages/monaco/test/placeholder.test.ts +++ b/packages/monaco/test/placeholder.test.ts @@ -1,3 +1,5 @@ -describe('placeholder', ()=>{ - it('tests') -}); \ No newline at end of file +import { describe, it } from 'vitest'; + +describe('placeholder', () => { + it.todo('tests'); +}); diff --git a/packages/monaco/vitest.config.ts b/packages/monaco/vitest.config.ts new file mode 100644 index 000000000..cb8d7de0d --- /dev/null +++ b/packages/monaco/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineVitestConfig } from '../tooling/src/vitest'; + +export default defineVitestConfig(); diff --git a/packages/playground/package.json b/packages/playground/package.json index 3c58c7c54..c0fd4d4ac 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -17,6 +17,8 @@ "scripts": { "lint": "biome lint", "typecheck": "tsc --noEmit", + "test": "vitest run", + "test-web": "npm run test", "dev": "vite" }, "devDependencies": { @@ -24,6 +26,7 @@ "tslib": "^2.8.1", "typescript": "^5.9.3", "vite": "^7.3.2", - "vite-tsconfig-paths": "^6.1.1" + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" } } diff --git a/packages/playground/vitest.config.ts b/packages/playground/vitest.config.ts new file mode 100644 index 000000000..cb8d7de0d --- /dev/null +++ b/packages/playground/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineVitestConfig } from '../tooling/src/vitest'; + +export default defineVitestConfig(); diff --git a/packages/tooling/package.json b/packages/tooling/package.json index 8967bca2a..cb56fbb6a 100644 --- a/packages/tooling/package.json +++ b/packages/tooling/package.json @@ -4,11 +4,18 @@ "type": "module", "description": "Additional build tooling for alphaTab like common build configurations", "private": true, + "scripts": { + "test": "vitest run", + "test-web": "npm run test" + }, "devDependencies": { "@microsoft/api-extractor": "^7.57.7", "@rollup/plugin-terser": "^1.0.0", "@rollup/plugin-typescript": "^12.3.0", "rollup-plugin-license": "^3.7.0", - "typescript": "^5.9.3" + "rollup-plugin-node-externals": "^8.1.2", + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^6.1.1", + "vitest": "^4.1.5" } } diff --git a/packages/tooling/src/vitest.ts b/packages/tooling/src/vitest.ts new file mode 100644 index 000000000..ba60e6ba7 --- /dev/null +++ b/packages/tooling/src/vitest.ts @@ -0,0 +1,40 @@ +import { appendFileSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import tsconfigPaths from 'vite-tsconfig-paths'; +import { defineConfig } from 'vitest/config'; + +class SummaryLabelReporter { + constructor(private readonly label: string) {} + onInit() { + if (process.env.GITHUB_STEP_SUMMARY) { + appendFileSync(process.env.GITHUB_STEP_SUMMARY, `# ${this.label}\n`); + } + } +} + +export interface VitestPackageOptions { + setupFiles?: string[]; + truncateThreshold?: number; + testTimeout?: number; +} + +export function defineVitestConfig(options: VitestPackageOptions = {}) { + const pkg = JSON.parse(readFileSync(path.join(process.cwd(), 'package.json'), 'utf8')); + const reporters = + process.env.GITHUB_ACTIONS === 'true' + ? ['default', 'github-actions', new SummaryLabelReporter(pkg.name)] + : ['default']; + return defineConfig({ + plugins: [tsconfigPaths()], + test: { + include: ['test/**/*.test.ts'], + testTimeout: options.testTimeout ?? 10000, + setupFiles: options.setupFiles, + passWithNoTests: true, + chaiConfig: options.truncateThreshold !== undefined + ? { truncateThreshold: options.truncateThreshold } + : undefined, + reporters + } + }); +} diff --git a/packages/tooling/vitest.config.ts b/packages/tooling/vitest.config.ts new file mode 100644 index 000000000..0295e2914 --- /dev/null +++ b/packages/tooling/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineVitestConfig } from './src/vitest'; + +export default defineVitestConfig(); diff --git a/packages/transpiler/package.json b/packages/transpiler/package.json index 73e2af725..276fee3f8 100644 --- a/packages/transpiler/package.json +++ b/packages/transpiler/package.json @@ -5,6 +5,11 @@ "description": "The transpiler toolkit to translate alphaTab to C# and Kotlin", "private": true, "scripts": { - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "test": "vitest run", + "test-web": "npm run test" + }, + "devDependencies": { + "vitest": "^4.1.5" } } diff --git a/packages/transpiler/src/csharp/CSharpAstTransformer.ts b/packages/transpiler/src/csharp/CSharpAstTransformer.ts index 04afe2b78..ce1535afe 100644 --- a/packages/transpiler/src/csharp/CSharpAstTransformer.ts +++ b/packages/transpiler/src/csharp/CSharpAstTransformer.ts @@ -1254,6 +1254,10 @@ export default class CSharpAstTransformer { } } + // vitest signature: it(name, options?, fn). Options object is optional. + const fnArgIndex = + d.arguments.length >= 3 && ts.isObjectLiteralExpression(d.arguments[1]) ? 2 : 1; + name = this.context.toMethodNameCase(name); const csMethod: cs.MethodDeclaration = { parent: parent, @@ -1271,7 +1275,7 @@ export default class CSharpAstTransformer { parent: null, nodeType: cs.SyntaxKind.PrimitiveTypeNode, type: cs.PrimitiveType.Void, - tsNode: d.arguments[1] + tsNode: d.arguments[fnArgIndex] } as cs.PrimitiveTypeNode, visibility: cs.Visibility.Public, tsNode: d, @@ -1300,7 +1304,7 @@ export default class CSharpAstTransformer { ] }); - const testFunction = d.arguments![1] as ts.ArrowFunction; + const testFunction = d.arguments![fnArgIndex] as ts.ArrowFunction; csMethod.isAsync = !!testFunction.modifiers && !!testFunction.modifiers.find(m => m.kind === ts.SyntaxKind.AsyncKeyword); @@ -1308,7 +1312,7 @@ export default class CSharpAstTransformer { csMethod.returnType = { nodeType: cs.SyntaxKind.TypeReference, parent: csMethod, - tsNode: d.arguments[1], + tsNode: d.arguments[fnArgIndex], isAsync: true, reference: { nodeType: cs.SyntaxKind.PrimitiveTypeNode, @@ -1343,7 +1347,10 @@ export default class CSharpAstTransformer { const sourcePath = d.getSourceFile().fileName; const snapshotFilePath = path.resolve(sourcePath, '..', '__snapshots__', `${path.basename(sourcePath)}.snap`); if (fs.existsSync(snapshotFilePath)) { - const relative = path.relative(path.dirname(this.context.compilerOptions.configFilePath as string), snapshotFilePath); + const relative = path.relative( + path.dirname(this.context.compilerOptions.configFilePath as string), + snapshotFilePath + ); csMethod.attributes.push({ parent: csMethod, nodeType: cs.SyntaxKind.Attribute, @@ -4214,7 +4221,20 @@ export default class CSharpAstTransformer { } if (memberAccess.tsSymbol) { - const parentSymbol = (memberAccess.tsSymbol as any).parent as ts.Symbol; + let parentSymbol = (memberAccess.tsSymbol as any).parent as ts.Symbol | undefined; + if (!parentSymbol) { + const propertyDeclaration = memberAccess.tsSymbol.declarations?.find( + d => ts.isPropertyDeclaration(d) || ts.isPropertySignature(d) + ); + if (propertyDeclaration) { + parentSymbol = + propertyDeclaration.parent && + (ts.isClassLike(propertyDeclaration.parent) || + ts.isInterfaceDeclaration(propertyDeclaration.parent)) + ? this.context.typeChecker.getSymbolAtLocation(propertyDeclaration.parent.name!) + : undefined; + } + } if (parentSymbol) { const renamed = this.getSymbolName(parentSymbol!, memberAccess.tsSymbol!); if (renamed) { diff --git a/packages/transpiler/src/csharp/CSharpEmitterContext.ts b/packages/transpiler/src/csharp/CSharpEmitterContext.ts index 03e71f7d8..04a5c9d7d 100644 --- a/packages/transpiler/src/csharp/CSharpEmitterContext.ts +++ b/packages/transpiler/src/csharp/CSharpEmitterContext.ts @@ -1845,6 +1845,8 @@ export default class CSharpEmitterContext { if (contextualType.symbol) { switch (contextualType.symbol.name) { case 'ArrayLike': + case 'Assertion': + case 'SnapshotMatcher': return true; } diff --git a/packages/transpiler/src/kotlin/KotlinAstTransformer.ts b/packages/transpiler/src/kotlin/KotlinAstTransformer.ts index ae7844e48..8060d215c 100644 --- a/packages/transpiler/src/kotlin/KotlinAstTransformer.ts +++ b/packages/transpiler/src/kotlin/KotlinAstTransformer.ts @@ -580,12 +580,7 @@ export default class KotlinAstTransformer extends CSharpAstTransformer { return super.visitTestClass(d, registerInNamespace); } - protected override convertPropertyToInvocation(parentSymbol: ts.Symbol, _symbol: ts.Symbol): boolean { - switch (parentSymbol.name) { - // chai assertions - case 'Assertion': - return true; - } + protected override convertPropertyToInvocation(_parentSymbol: ts.Symbol, _symbol: ts.Symbol): boolean { return false; } diff --git a/packages/transpiler/vitest.config.ts b/packages/transpiler/vitest.config.ts new file mode 100644 index 000000000..cb8d7de0d --- /dev/null +++ b/packages/transpiler/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineVitestConfig } from '../tooling/src/vitest'; + +export default defineVitestConfig(); diff --git a/packages/vite/.env b/packages/vite/.env deleted file mode 100644 index ce5c0bc60..000000000 --- a/packages/vite/.env +++ /dev/null @@ -1 +0,0 @@ -FORCE_COLOR=1 \ No newline at end of file diff --git a/packages/vite/.mocharc.json b/packages/vite/.mocharc.json deleted file mode 100644 index bb6993a9d..000000000 --- a/packages/vite/.mocharc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extension": [ - "ts" - ], - "node-option": [ - "env-file=.env", - "experimental-specifier-resolution=node", - "import=tsx/esm", - "no-warnings" - ], - "spec": "test/**/*.test.ts", - "timeout": "10000" -} \ No newline at end of file diff --git a/packages/vite/package.json b/packages/vite/package.json index b73fccebe..eea32874e 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -39,7 +39,8 @@ "lint": "biome lint", "typecheck": "tsc --noEmit", "build": "vite build", - "test": "mocha" + "test": "vitest run", + "test-web": "npm run test" }, "dependencies": { "magic-string": "^0.30.21", @@ -49,20 +50,16 @@ "node": ">=20.19.0" }, "devDependencies": { - "@biomejs/biome": "^2.4.10", - "@microsoft/api-extractor": "^7.57.7", - "@types/chai": "^5.2.3", - "@types/mocha": "^10.0.10", - "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", - "mocha": "^11.7.5", - "rimraf": "^6.1.3", - "rollup-plugin-node-externals": "^9.0.1", - "terser": "^5.46.1", + "@biomejs/biome": "^2.3.14", + "@microsoft/api-extractor": "^7.56.3", + "@types/node": "^25.2.2", + "rimraf": "^6.1.2", + "rollup-plugin-node-externals": "^8.1.2", + "terser": "^5.46.0", "tslib": "^2.8.1", "tsx": "^4.21.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "vitest": "^4.1.5" }, "files": [ "/dist/**", diff --git a/packages/vite/test/Vite.test.ts b/packages/vite/test/Vite.test.ts index e32c00dac..976a00f15 100644 --- a/packages/vite/test/Vite.test.ts +++ b/packages/vite/test/Vite.test.ts @@ -1,10 +1,10 @@ import fs from 'node:fs'; import path from 'node:path'; -import { expect } from 'chai'; +import { describe, expect, it } from 'vitest'; import { alphaTab } from '../src/alphaTab.vite'; describe('Vite', () => { - it('bundle-correctly', async () => { + it('bundle-correctly', { timeout: 30000 }, async () => { const bundlerProject = './test-data/project'; const cwd = process.cwd(); @@ -40,7 +40,7 @@ describe('Vite', () => { path.join(bundlerProject, 'dist', 'soundfont', 'sonivox.sf2') ]; for (const file of files) { - expect(fs.existsSync(file)).to.eq(true, `File '${file}' Missing`); + expect(fs.existsSync(file), `File '${file}' Missing`).toBe(true); } const dir = await fs.promises.readdir(path.join(bundlerProject, 'dist', 'assets'), { withFileTypes: true }); @@ -55,33 +55,33 @@ describe('Vite', () => { if (file.name.startsWith('index-')) { // ensure new worker has worker import - expect(text.match(/new [^ ]+\.alphaTabWorker\(new [^ ]+\.alphaTabUrl/)).to.be.ok; + expect(text.match(/new [^ ]+\.alphaTabWorker\(new [^ ]+\.alphaTabUrl/)).toBeTruthy(); // ensure worker bootstrapping script is references - expect(text).to.include('assets/alphaTab.worker-'); + expect(text).toContain('assets/alphaTab.worker-'); // ensure worklet bootstrapper script is references - expect(text).to.include('assets/alphaTab.worklet-'); + expect(text).toContain('assets/alphaTab.worklet-'); // without custom chunking the app will bundle alphatab directly - expect(text).to.include(".at-surface"); + expect(text).toContain(".at-surface"); // ensure __ALPHATAB_VITE__ got replaced - expect(text).to.not.include("__ALPHATAB_VITE__"); + expect(text).not.toContain("__ALPHATAB_VITE__"); appValidated = true; } else if (file.name.startsWith('alphaTab.worker-')) { - expect(text).to.include('initializeWorker()'); + expect(text).toContain('initializeWorker()'); // without custom chunking the app will bundle alphatab directly - expect(text).to.include(".at-surface"); + expect(text).toContain(".at-surface"); workerValidated = true; } else if (file.name.startsWith('alphaTab.worklet-')) { - expect(text).to.include('initializeAudioWorklet()'); + expect(text).toContain('initializeAudioWorklet()'); // without custom chunking the app will bundle alphatab directly - expect(text).to.include(".at-surface"); + expect(text).toContain(".at-surface"); workletValidated = true; } } } - expect(appValidated).to.eq(true, 'Missing app validation'); - expect(workerValidated).to.eq(true, 'Missing worker validation'); - expect(workletValidated).to.eq(true, 'Missing worklet validation'); - }).timeout(30000); + expect(appValidated, 'Missing app validation').toBe(true); + expect(workerValidated, 'Missing worker validation').toBe(true); + expect(workletValidated, 'Missing worklet validation').toBe(true); + }); }); diff --git a/packages/vite/vitest.config.ts b/packages/vite/vitest.config.ts new file mode 100644 index 000000000..cb8d7de0d --- /dev/null +++ b/packages/vite/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineVitestConfig } from '../tooling/src/vitest'; + +export default defineVitestConfig(); diff --git a/packages/webpack/.env b/packages/webpack/.env deleted file mode 100644 index ce5c0bc60..000000000 --- a/packages/webpack/.env +++ /dev/null @@ -1 +0,0 @@ -FORCE_COLOR=1 \ No newline at end of file diff --git a/packages/webpack/.mocharc.json b/packages/webpack/.mocharc.json deleted file mode 100644 index bb6993a9d..000000000 --- a/packages/webpack/.mocharc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extension": [ - "ts" - ], - "node-option": [ - "env-file=.env", - "experimental-specifier-resolution=node", - "import=tsx/esm", - "no-warnings" - ], - "spec": "test/**/*.test.ts", - "timeout": "10000" -} \ No newline at end of file diff --git a/packages/webpack/package.json b/packages/webpack/package.json index 99010bf70..723068913 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -39,7 +39,8 @@ "lint": "biome lint", "typecheck": "tsc --noEmit", "build": "vite build", - "test": "mocha" + "test": "vitest run", + "test-web": "npm run test" }, "dependencies": { "webpack": "^5.105.4" @@ -48,19 +49,15 @@ "node": ">=20.19.0" }, "devDependencies": { - "@biomejs/biome": "^2.4.10", - "@types/chai": "^5.2.3", - "@types/mocha": "^10.0.10", - "@types/node": "^25.6.0", - "assert": "^2.1.0", - "chai": "^6.2.2", + "@biomejs/biome": "^2.3.14", + "@types/node": "^25.2.2", "html-webpack-plugin": "^5.6.6", - "mocha": "^11.7.5", - "rimraf": "^6.1.3", + "rimraf": "^6.1.2", "tslib": "^2.8.1", "tsx": "^4.21.0", "typescript": "^5.9.3", - "webpack-cli": "^7.0.2" + "vitest": "^4.1.5", + "webpack-cli": "^6.0.1" }, "files": [ "/dist/**", diff --git a/packages/webpack/test/WebPack.test.ts b/packages/webpack/test/WebPack.test.ts index dbea983c0..104a17b5c 100644 --- a/packages/webpack/test/WebPack.test.ts +++ b/packages/webpack/test/WebPack.test.ts @@ -1,12 +1,12 @@ import fs from 'node:fs'; import path from 'node:path'; -import { expect } from 'chai'; import HtmlWebpackPlugin from 'html-webpack-plugin'; +import { describe, expect, it } from 'vitest'; import webpack from 'webpack'; import { AlphaTabWebPackPlugin } from '../src/alphaTab.webpack'; describe('WebPack', () => { - it('bundle-correctly', async () => { + it('bundle-correctly', { timeout: 30000 }, async () => { const bundlerProject = './test-data/project'; // biome-ignore lint/suspicious/noAsyncPromiseExecutor: resolve/reject called accordingly await new Promise(async (resolve, reject) => { @@ -76,7 +76,7 @@ describe('WebPack', () => { path.join(bundlerProject, 'out', 'soundfont', 'sonivox.sf2') ]; for (const file of files) { - expect(fs.existsSync(file)).to.eq(true, `File '${file}' Missing`); + expect(fs.existsSync(file), `File '${file}' Missing`).toBe(true); } const dir = await fs.promises.readdir(path.join(bundlerProject, 'out'), { withFileTypes: true }); @@ -93,45 +93,45 @@ describe('WebPack', () => { if (file.name.startsWith('app-')) { // ensure new worker has worker import - expect(text).to.include( + expect(text).toContain( 'new Environment.alphaTabWorker(new Environment.alphaTabUrl(/* worker import */' ); // ensure worklet bootstrapper exists - expect(text).to.include('/* worklet bootstrap */ async function(__webpack_worklet__) {'); + expect(text).toContain('/* worklet bootstrap */ async function(__webpack_worklet__) {'); // without custom bundling the app will bundle alphatab directly - expect(text).to.include('class AlphaTabApiBase'); + expect(text).toContain('class AlphaTabApiBase'); // ensure the library mode is active as needed - expect(text).to.include('alphaTabApp = __webpack_exports__'); + expect(text).toContain('alphaTabApp = __webpack_exports__'); // ensure __ALPHATAB_WEBPACK__ got replaced - expect(text).to.not.include('__ALPHATAB_WEBPACK__'); + expect(text).not.toContain('__ALPHATAB_WEBPACK__'); appValidated = true; } else if (file.name.endsWith('.js')) { if (text.includes('class AlphaTabApiBase')) { // ensure the library mode is does not affect chunks - expect(text).to.not.include('alphaTabApp = __webpack_exports__'); + expect(text).not.toContain('alphaTabApp = __webpack_exports__'); coreFileValidated = true; // found core file (imported by worker and worklet) } else if (text.includes('initializeAudioWorklet()')) { // ensure the library mode is does not affect chunks - expect(text).to.not.include('alphaTabApp = __webpack_exports__'); + expect(text).not.toContain('alphaTabApp = __webpack_exports__'); // ensure chunk installer is there - expect(text).to.include('webpack/runtime/alphaTab audio worker chunk loading'); + expect(text).toContain('webpack/runtime/alphaTab audio worker chunk loading'); workletValidated = true; } else if (text.includes('initializeWorker()')) { // ensure the library mode is does not affect chunks - expect(text).to.not.include('alphaTabApp = __webpack_exports__'); + expect(text).not.toContain('alphaTabApp = __webpack_exports__'); // ensure chunk loader is there - expect(text).to.include('webpack/runtime/importScripts chunk loading'); + expect(text).toContain('webpack/runtime/importScripts chunk loading'); workerValidated = true; } } } } - expect(appValidated).to.eq(true, 'Missing app validation'); - expect(coreFileValidated).to.eq(true, 'Missing core file validation'); - expect(workerValidated).to.eq(true, 'Missing worker validation'); - expect(workletValidated).to.eq(true, 'Missing worklet validation'); - }).timeout(30000); + expect(appValidated, 'Missing app validation').toBe(true); + expect(coreFileValidated, 'Missing core file validation').toBe(true); + expect(workerValidated, 'Missing worker validation').toBe(true); + expect(workletValidated, 'Missing worklet validation').toBe(true); + }); }); diff --git a/packages/webpack/vitest.config.ts b/packages/webpack/vitest.config.ts new file mode 100644 index 000000000..cb8d7de0d --- /dev/null +++ b/packages/webpack/vitest.config.ts @@ -0,0 +1,3 @@ +import { defineVitestConfig } from '../tooling/src/vitest'; + +export default defineVitestConfig();