diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a50842a62c3..eb5cc2855c1 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -13,10 +13,10 @@ name: "CodeQL" on: push: - branches: [ master, 19.1.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ] + branches: [ master, 19.2.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ] pull_request: # The branches below must be a subset of the branches above - branches: [ master, 19.1.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ] + branches: [ master, 19.2.x, 18.2.x, 17.2.x, 16.1.x, 15.1.x ] schedule: - cron: '33 4 * * 4' diff --git a/README.md b/README.md index 6007d3649a5..f3814bcd357 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,7 @@ Some of the Angular chart types included are: [Polar chart](https://www.infragis |stepper|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/stepper/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/stepper)|13.0.0| |switch|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/switch/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/switch)|2.0.0||||| |tabs|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/tabs/tabs/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tabs)|5.1.0|||| +|tile manager|:white_check_mark:||[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tile-manager)|19.2.0|||| |time picker|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/time-picker/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/time-picker)|5.3.0|||| |toast|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/toast/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/toast)|5.1.0|||| |tree|:white_check_mark:|[Readme](https://github.com/IgniteUI/igniteui-angular/blob/master/projects/igniteui-angular/src/lib/tree/README.md)|[Docs](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tree)|12.0.0|||| @@ -162,6 +163,8 @@ Some of the Angular chart types included are: [Polar chart](https://www.infragis |18.1.0|22-Jul-24|[Milestone #33](https://github.com/IgniteUI/igniteui-angular/blob/master/ROADMAP.md#milestone-33-due-by-jul-2024)| |18.2.0|25-Oct-24|[Milestone #34](https://github.com/IgniteUI/igniteui-angular/blob/master/ROADMAP.md#milestone-34-version-182-released-oct-25th-2024)| |19.0.0|25-Nov-24|[Milestone #35](https://github.com/IgniteUI/igniteui-angular/blob/master/ROADMAP.md#milestone-35-version-190-released-nov-25th-2024)| +|19.1.0|27-Feb-25|[Milestone #36](https://github.com/IgniteUI/igniteui-angular/blob/master/ROADMAP.md#milestone-36--version-191-released-feb-27th-2025)| +|19.2.0|16-Apr-25|[Milestone #37]()| ### Components available in [igniteui-angular-charts](https://www.npmjs.com/package/igniteui-angular-charts) diff --git a/angular.json b/angular.json index 2ea33070c81..6c621e0426a 100644 --- a/angular.json +++ b/angular.json @@ -191,6 +191,17 @@ "zone.js/testing", "hammerjs" ], + "styles": [ + "src/styles/styles.scss" + ], + "assets": [ + "projects/igniteui-angular/src/assets" + ], + "stylePreprocessorOptions": { + "includePaths": [ + "node_modules" + ] + }, "tsConfig": "projects/igniteui-angular/tsconfig.spec.json", "karmaConfig": "projects/igniteui-angular/karma.conf.js" } diff --git a/package-lock.json b/package-lock.json index f6d891967a7..e3e87ad7908 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,17 +9,17 @@ "version": "0.0.0", "hasInstallScript": true, "dependencies": { - "@angular/animations": "^19.2.3", - "@angular/common": "^19.2.3", - "@angular/compiler": "^19.2.3", - "@angular/core": "^19.2.3", - "@angular/elements": "^19.2.3", - "@angular/forms": "^19.2.3", - "@angular/platform-browser": "^19.2.3", - "@angular/platform-browser-dynamic": "^19.2.3", - "@angular/platform-server": "^19.2.3", - "@angular/router": "^19.2.3", - "@angular/ssr": "^19.2.4", + "@angular/animations": "^19.2.5", + "@angular/common": "^19.2.5", + "@angular/compiler": "^19.2.5", + "@angular/core": "^19.2.5", + "@angular/elements": "^19.2.5", + "@angular/forms": "^19.2.5", + "@angular/platform-browser": "^19.2.5", + "@angular/platform-browser-dynamic": "^19.2.5", + "@angular/platform-server": "^19.2.5", + "@angular/router": "^19.2.5", + "@angular/ssr": "^19.2.6", "@igniteui/material-icons-extended": "^3.1.0", "@lit-labs/ssr-dom-shim": "^1.3.0", "@types/source-map": "0.5.2", @@ -33,16 +33,16 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^19.2.4", - "@angular-devkit/schematics": "^19.2.4", + "@angular-devkit/build-angular": "^19.2.6", + "@angular-devkit/schematics": "^19.2.6", "@angular-eslint/builder": "^19.3.0", "@angular-eslint/eslint-plugin": "^19.3.0", "@angular-eslint/eslint-plugin-template": "^19.3.0", "@angular-eslint/schematics": "^19.3.0", "@angular-eslint/template-parser": "^19.3.0", - "@angular/cli": "^19.2.4", - "@angular/compiler-cli": "^19.2.3", - "@angular/language-service": "^19.2.3", + "@angular/cli": "^19.2.6", + "@angular/compiler-cli": "^19.2.5", + "@angular/language-service": "^19.2.5", "@angularclass/hmr": "^3.0.0", "@microsoft/signalr": "^7.0.12", "@types/estree": "^1.0.0", @@ -82,11 +82,11 @@ "karma-parallel": "^0.3.1", "karma-spec-reporter": "^0.0.36", "lit-html": "^3.2.1", - "ng-packagr": "^19.2.0", + "ng-packagr": "^19.2.1", "postcss": "^8.5.1", "postcss-scss": "^4.0.6", "prettier": "^3.3.3", - "puppeteer": "^24.4.0", + "puppeteer": "^24.5.0", "sass-embedded": "^1.83.4", "sass-true": "^8.1.0", "sassdoc": "^2.7.4", @@ -122,13 +122,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1902.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.4.tgz", - "integrity": "sha512-YTLiJ7uVItZTAxRuSgASP0M5qILESWH8xGmfR+YWR1JiJem09DWEOpWeLdha1BFzUui5L+6j1btzh4FUHJOtAg==", + "version": "0.1902.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.6.tgz", + "integrity": "sha512-Dx6yPxpaE5AhP6UtrVRDCc9Ihq9B65LAbmIh3dNOyeehratuaQS0TYNKjbpaevevJojW840DTg80N+CrlfYp9g==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.2.4", + "@angular-devkit/core": "19.2.6", "rxjs": "7.8.1" }, "engines": { @@ -148,17 +148,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.4.tgz", - "integrity": "sha512-OO8jlLY1SKUbcx3xx4LhbHcecAE9CnMrvIGMOgeKflDI7W57kYUI1lg86k/+Xm76/H2XlbsHdwLKOfFAupfl7g==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.6.tgz", + "integrity": "sha512-alYn3PSsiQML9PzU1VKbmYnIP2ULK/AqfjdeJFh8r6m8ZjUvX1zDy9TdAfC6fykQ2mGHyChteRckbx9uVOyhwQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1902.4", - "@angular-devkit/build-webpack": "0.1902.4", - "@angular-devkit/core": "19.2.4", - "@angular/build": "19.2.4", + "@angular-devkit/architect": "0.1902.6", + "@angular-devkit/build-webpack": "0.1902.6", + "@angular-devkit/core": "19.2.6", + "@angular/build": "19.2.6", "@babel/core": "7.26.10", "@babel/generator": "7.26.10", "@babel/helper-annotate-as-pure": "7.25.9", @@ -169,7 +169,7 @@ "@babel/preset-env": "7.26.9", "@babel/runtime": "7.26.10", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "19.2.4", + "@ngtools/webpack": "19.2.6", "@vitejs/plugin-basic-ssl": "1.2.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", @@ -223,7 +223,7 @@ "@angular/localize": "^19.0.0 || ^19.2.0-next.0", "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0", "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0", - "@angular/ssr": "^19.2.4", + "@angular/ssr": "^19.2.6", "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", "jest": "^29.5.0", @@ -361,13 +361,13 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1902.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.4.tgz", - "integrity": "sha512-TWZsnPMR2JvrQapO7kg4YbUgrKxu74TCYOZZrGfIA7CCIthykflWevMPGZmrTAh3mXX414P31XmoBQViXUe7iQ==", + "version": "0.1902.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.6.tgz", + "integrity": "sha512-SZe2Nk39lJIJmtXWU+zhKaFy0xoU8N7387bvjhO0AoNQeRBaaJ5SrRLXX2jUzGUuVgGVF+plaVooKrmEOeM6ug==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1902.4", + "@angular-devkit/architect": "0.1902.6", "rxjs": "7.8.1" }, "engines": { @@ -391,9 +391,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.4.tgz", - "integrity": "sha512-dL6AmCQsKh+CFVvO/jxX8qZpamVwt9r4iIo7fYcAI2+mTSDGxxBGWbS+onIfdPFuRp2HgKa+AT6WiHmRqu63AA==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.6.tgz", + "integrity": "sha512-WFgiYhrDMq83UNaGRAneIM7CYYdBozD+yYA9BjoU8AgBLKtrvn6S8ZcjKAk5heoHtY/u8pEb0mwDTz9gxFmJZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -429,13 +429,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.4.tgz", - "integrity": "sha512-WaFe95ncm1A+QTlUHxQcFyGKIn67xgqGX7WCj8R0QlKOS0hLKx97SG4p19uwHlww0lmAcwk/QJP6G6sPL/CJ9w==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.6.tgz", + "integrity": "sha512-YTAxNnT++5eflx19OUHmOWu597/TbTel+QARiZCv1xQw99+X8DCKKOUXtqBRd53CAHlREDI33Rn/JLY3NYgMLQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.2.4", + "@angular-devkit/core": "19.2.6", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", "ora": "5.4.1", @@ -571,9 +571,9 @@ } }, "node_modules/@angular/animations": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.3.tgz", - "integrity": "sha512-HQexOmwEJFX3sHLspOCi7dVOdPW5Ad4jH6tJsf+zABkF0GjgIVf4jewe1uE5ZLKgoflr9f9vpcpy39IWl00kWw==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.5.tgz", + "integrity": "sha512-m4RtY3z1JuHFCh6OrOHxo25oKEigBDdR/XmdCfXIwfTiObZzNA7VQhysgdrb9IISO99kXbjZUYKDtLzgWT8Klg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -582,18 +582,19 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "19.2.3" + "@angular/common": "19.2.5", + "@angular/core": "19.2.5" } }, "node_modules/@angular/build": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.4.tgz", - "integrity": "sha512-poCXvmwKri3snWa9zVJ2sW7wyJatZjkwnH6GUBdJrM2dXRQ+LYLk/oXqEjlSRBYNna7P1ZcKNqBbzu0/SnnngA==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.6.tgz", + "integrity": "sha512-+VBLb4ZPLswwJmgfsTFzGex+Sq/WveNc+uaIWyHYjwnuI17NXe1qAAg1rlp72CqGn0cirisfOyAUwPc/xZAgTg==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1902.4", + "@angular-devkit/architect": "0.1902.6", "@babel/core": "7.26.10", "@babel/helper-annotate-as-pure": "7.25.9", "@babel/helper-split-export-declaration": "7.24.7", @@ -616,7 +617,7 @@ "sass": "1.85.0", "semver": "7.7.1", "source-map-support": "0.5.21", - "vite": "6.2.0", + "vite": "6.2.4", "watchpack": "2.4.2" }, "engines": { @@ -633,7 +634,7 @@ "@angular/localize": "^19.0.0 || ^19.2.0-next.0", "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0", "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0", - "@angular/ssr": "^19.2.4", + "@angular/ssr": "^19.2.6", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^19.0.0 || ^19.2.0-next.0", @@ -720,9 +721,9 @@ "license": "MIT" }, "node_modules/@angular/build/node_modules/vite": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz", - "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", + "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", "dev": true, "license": "MIT", "dependencies": { @@ -792,18 +793,18 @@ } }, "node_modules/@angular/cli": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.4.tgz", - "integrity": "sha512-YmZYrxdGBwSZsrnpS6vr9gQ8+PrZHzwyYW/3jU2NRAMtl0ZlipDyfpLIDgrfqYPeumzr7+SKtJYVvlsMnjkN4g==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.6.tgz", + "integrity": "sha512-eZhFOSsDUHKaciwcWdU5C54ViAvPPdZJf42So93G2vZWDtEq6Uk47huocn1FY9cMhDvURfYLNrrLMpUDtUSsSA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1902.4", - "@angular-devkit/core": "19.2.4", - "@angular-devkit/schematics": "19.2.4", + "@angular-devkit/architect": "0.1902.6", + "@angular-devkit/core": "19.2.6", + "@angular-devkit/schematics": "19.2.6", "@inquirer/prompts": "7.3.2", "@listr2/prompt-adapter-inquirer": "2.0.18", - "@schematics/angular": "19.2.4", + "@schematics/angular": "19.2.6", "@yarnpkg/lockfile": "1.1.0", "ini": "5.0.0", "jsonc-parser": "3.3.1", @@ -826,9 +827,9 @@ } }, "node_modules/@angular/common": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.3.tgz", - "integrity": "sha512-cYOMRXFb6Sjtg9BI3bE/Ave+xU234jQmHYj7hBxr3MiqRSVJL4niy10KiA/Jiz6y76V5QfZfS+0aE65VuoqAvg==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.5.tgz", + "integrity": "sha512-vFCBdas4C5PxP6ts/4TlRddWD3DUmI3aaO0QZdZvqyLHy428t84ruYdsJXKaeD8ie2U4/9F3a1tsklclRG/BBA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -837,14 +838,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "19.2.3", + "@angular/core": "19.2.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.3.tgz", - "integrity": "sha512-TL/JIU7vzSWD+IrMq2PAiHZi7IUFSRhdHo8q6/WuZ8SQmbuXCK2pJvHZpTtUdLswdPeD/UVhkhTAhQzEyEdZVg==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.5.tgz", + "integrity": "sha512-34J+HubQjwkbZ0AUtU5sa4Zouws9XtP/fKaysMQecoYJTZ3jewzLSRu3aAEZX1Y4gIrcVVKKIxM6oWoXKwYMOA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -854,9 +855,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.3.tgz", - "integrity": "sha512-ePh/7A6eEDAyfVn8QgLcAvrxhXBAf6mTqB/3+HwQeXLaka1gtN6xvZ6cjLEegP4s6kcYGhdfdLwzCcy0kjsY5g==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.5.tgz", + "integrity": "sha512-b2cG41r6lilApXLlvja1Ra2D00dM3BxmQhoElKC1tOnpD6S3/krlH1DOnBB2I55RBn9iv4zdmPz1l8zPUSh7DQ==", "dev": true, "license": "MIT", "dependencies": { @@ -878,14 +879,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "19.2.3", + "@angular/compiler": "19.2.5", "typescript": ">=5.5 <5.9" } }, "node_modules/@angular/core": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.3.tgz", - "integrity": "sha512-uNDbQBDWdAfL8JhgG2l9eTEbikovZ+SthLUKERyR4fL7AVGSx85LjNySRuq4WAL4eiD1cRN1UUgu8o+WKqF/ow==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.5.tgz", + "integrity": "sha512-NNEz1sEZz1mBpgf6Tz3aJ9b8KjqpTiMYhHfCYA9h9Ipe4D8gUmOsvPHPK2M755OX7p7PmUmzp1XCUHYrZMVHRw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -899,9 +900,9 @@ } }, "node_modules/@angular/elements": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-19.2.3.tgz", - "integrity": "sha512-ua0d79r3z5xc4a8k0eHN9Y1acsIOIYXzCaRnqfainBmXZ5CecBUhG1uoJ3xcpxNV5PxQugZLkqZrEvXqAqLhbA==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-19.2.5.tgz", + "integrity": "sha512-LIGi0VdmVEh1LCuWLJAtx2EzHROcYQ2vv1RQf8LDK8NDLZNi7fglisupg+V4MSaxbETbO9YzIoISq7C3G0mHJA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -910,14 +911,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "19.2.3", + "@angular/core": "19.2.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/forms": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.3.tgz", - "integrity": "sha512-JEgNKiZd3taYBg9lsMvoana5cv1QGke8xkuryc9zesHPJjhw9QHllmDPOW2HyUuwPqXZ/YkHiuCMOk+4qPjsAw==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.5.tgz", + "integrity": "sha512-2Zvy3qK1kOxiAX9fdSaeG48q7oyO/4RlMYlg1w+ra9qX1SrgwF3OQ2P2Vs+ojg1AxN3z9xFp4aYaaID/G2LZAw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -926,16 +927,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "19.2.3", - "@angular/core": "19.2.3", - "@angular/platform-browser": "19.2.3", + "@angular/common": "19.2.5", + "@angular/core": "19.2.5", + "@angular/platform-browser": "19.2.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.2.3.tgz", - "integrity": "sha512-qq54VhRTk8jxnqXN6Q4wK1W7ewSkD0kdhii0Sif25gbkNvfDfqd1PjtnojelG81sN8XhBeMBcDhtbmEQX4nqHg==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.2.5.tgz", + "integrity": "sha512-Q1L0NxDwsbP4T27uc+aHThBCaqHwuI20iuuvTVy7+QK8kRrpBDgnmNuJ4a0KSfe9xw1CMW48V9HdxhWA9DqCyg==", "dev": true, "license": "MIT", "engines": { @@ -943,9 +944,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.3.tgz", - "integrity": "sha512-bz5mvUkCS8SxaMInjPgi/2dD7vpWkZePQesvr/bBRNQbYSE4cGTbovXcVl3X5hIxs5JoC6Het0lS2IxDq7j6qg==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.5.tgz", + "integrity": "sha512-Lshy++X16cvl6OPvfzMySpsqEaCPKEJmDjz7q7oSt96oxlh6LvOeOUVLjsNyrNaIt9NadpWoqjlu/I9RTPJkpw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -954,9 +955,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "19.2.3", - "@angular/common": "19.2.3", - "@angular/core": "19.2.3" + "@angular/animations": "19.2.5", + "@angular/common": "19.2.5", + "@angular/core": "19.2.5" }, "peerDependenciesMeta": { "@angular/animations": { @@ -965,9 +966,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.3.tgz", - "integrity": "sha512-PHmmtdGxSfe9HL8xR4g3PspnEaPqTEOGyzNviAHugfkZCgXCdSbYs36d3i0nPwhExMAeuIVXbbJyouDn2kyeOw==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.5.tgz", + "integrity": "sha512-15in8u4552EcdWNTXY2h0MKuJbk3AuXwWr0zVTum4CfB/Ss2tNTrDEdWhgAbhnUI0e9jZQee/fhBbA1rleMYrA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -976,16 +977,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "19.2.3", - "@angular/compiler": "19.2.3", - "@angular/core": "19.2.3", - "@angular/platform-browser": "19.2.3" + "@angular/common": "19.2.5", + "@angular/compiler": "19.2.5", + "@angular/core": "19.2.5", + "@angular/platform-browser": "19.2.5" } }, "node_modules/@angular/platform-server": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-19.2.3.tgz", - "integrity": "sha512-04Wv3N1+We3E0+TcZP4x1KtHSiSx2cNrQVuC0FGftfvAZiSr8DtYye6ji7zxTGGRg5uKBwVAUvTEAbT56FNm8Q==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-19.2.5.tgz", + "integrity": "sha512-F23ph7vPobssJ5oil2qkPwRTKw7KaNqAORu3Y7pUAAn+K+KMO8v/wzGMcOdln/BjTSCR/FjOnZv8k8lpju/9iw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0", @@ -995,17 +996,17 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "19.2.3", - "@angular/compiler": "19.2.3", - "@angular/core": "19.2.3", - "@angular/platform-browser": "19.2.3", + "@angular/common": "19.2.5", + "@angular/compiler": "19.2.5", + "@angular/core": "19.2.5", + "@angular/platform-browser": "19.2.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/router": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.3.tgz", - "integrity": "sha512-yYVMT7CceKqE+fBXxkhkAqEQUEdY/BHtLQr1vP9rEnAf30vwKghDEresugfegY6Ch4IGKTBtDG/QGmxWszgUAQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.5.tgz", + "integrity": "sha512-9pSfmdNXLjaOKj0kd4UxBC7sFdCFOnRGbftp397G3KWqsLsGSKmNFzqhXNeA5QHkaVxnpmpm8HzXU+zYV5JwSg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1014,16 +1015,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "19.2.3", - "@angular/core": "19.2.3", - "@angular/platform-browser": "19.2.3", + "@angular/common": "19.2.5", + "@angular/core": "19.2.5", + "@angular/platform-browser": "19.2.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/ssr": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-19.2.4.tgz", - "integrity": "sha512-3yG8YkCyMRt+z3ZICLJvq1GMmBGtNEWGnR/FyOrJ+VAT5WSgUbDA4MsTjUPdHlVbtg52J+NcXq+sw8GOXJwY+g==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-19.2.6.tgz", + "integrity": "sha512-iaALhm8YMpWzZa7ukHEZrVSc9HjldQGnXOcB3DJkZiB5wyjet+mgbIR2CNJgw32CKoCBgFJPfkbX88HMtPPBWQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -4681,9 +4682,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.4.tgz", - "integrity": "sha512-I2vG9Yb0W/PR5+quBmSUk6uGa4xN/YvfJk+30bFDB/CpJlTQEo+3AOFCDYcDOxrbtjON80VdFYPypQ5ztbpdYw==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.6.tgz", + "integrity": "sha512-/jWpZUoMru3YbRJAPZ2KroUSzE6Ak5Hav219raYQaBXVtyLAvFE5VC1/CiH0wTYnb/dyjxzWq38ftOr/vv0+tg==", "dev": true, "license": "MIT", "engines": { @@ -5292,9 +5293,9 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.8.0.tgz", - "integrity": "sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.9.0.tgz", + "integrity": "sha512-8+xM+cFydYET4X/5/3yZMHs7sjS6c9I6H5I3xJdb6cinzxWUT/I2QVw4avxCQ8QDndwdHkG/FiSZIrCjAbaKvQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5659,14 +5660,14 @@ } }, "node_modules/@schematics/angular": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.4.tgz", - "integrity": "sha512-P7fphIPbqHHYRVRPiFl7RAHYPYhINGSUYOXrcThVBBsgKQBX18oNdUWvhZA6ylwK/9T21XB20VyLjNy0d78H1Q==", + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.6.tgz", + "integrity": "sha512-fmbF9ONmEZqxHocCwOSWG2mHp4a22d1uW+DZUBUgZSBUFIrnFw42deOxDq8mkZOZ1Tc73UpLN2GKI7iJeUqS2A==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "19.2.4", - "@angular-devkit/schematics": "19.2.4", + "@angular-devkit/core": "19.2.6", + "@angular-devkit/schematics": "19.2.6", "jsonc-parser": "3.3.1" }, "engines": { @@ -6370,9 +6371,9 @@ "dev": true }, "node_modules/@types/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { @@ -7458,33 +7459,41 @@ "dev": true }, "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "dev": true, "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.1.tgz", - "integrity": "sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.2.tgz", + "integrity": "sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "bare-events": "^2.0.0", + "bare-events": "^2.5.4", "bare-path": "^3.0.0", - "bare-stream": "^2.0.0" + "bare-stream": "^2.6.4" }, "engines": { - "bare": ">=1.7.0" + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, "node_modules/bare-os": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.0.tgz", - "integrity": "sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -8267,9 +8276,9 @@ } }, "node_modules/chromium-bidi": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-2.1.2.tgz", - "integrity": "sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-3.0.0.tgz", + "integrity": "sha512-ZOGRDAhBMX1uxL2Cm2TDuhImbrsEz5A/tTcVU6RpXEWaTNUNwsHW6njUXizh51Ir6iqHbKAfhA2XK33uBcLo5A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -16170,9 +16179,9 @@ } }, "node_modules/ng-packagr": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-19.2.0.tgz", - "integrity": "sha512-bDyB9tmXMCL/4IhKcX84zGQlQrZhPhdCaomdJocz6EN57cZWdTP7SGhrswzpdGJY+y89855detet27oJLgR3IQ==", + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-19.2.1.tgz", + "integrity": "sha512-IVyI0a1BV8Ct4Q3bCtlMRyYxNt22RBVJ0P4dnmhLXV6mxwoNwQaYGR48DxkTc/ZMcMGri8O6ZwytbTQni1vcPA==", "dev": true, "license": "MIT", "dependencies": { @@ -18119,18 +18128,18 @@ } }, "node_modules/puppeteer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.4.0.tgz", - "integrity": "sha512-E4JhJzjS8AAI+6N/b+Utwarhz6zWl3+MR725fal+s3UlOlX2eWdsvYYU+Q5bXMjs9eZEGkNQroLkn7j11s2k1Q==", + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.5.0.tgz", + "integrity": "sha512-3m0B48gj1A8cK01ma49WwjE8mg4i9UmnR2lP64rwBiLacJ2V20FpT67MgSUyzfz9BcHMQQweuF6Q854mnIYTqg==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.8.0", - "chromium-bidi": "2.1.2", + "@puppeteer/browsers": "2.9.0", + "chromium-bidi": "3.0.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1413902", - "puppeteer-core": "24.4.0", + "puppeteer-core": "24.5.0", "typed-query-selector": "^2.12.0" }, "bin": { @@ -18141,14 +18150,14 @@ } }, "node_modules/puppeteer-core": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.4.0.tgz", - "integrity": "sha512-eFw66gCnWo0X8Hyf9KxxJtms7a61NJVMiSaWfItsFPzFBsjsWdmcNlBdsA1WVwln6neoHhsG+uTVesKmTREn/g==", + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.5.0.tgz", + "integrity": "sha512-vqibSk7xGOoqOlPUk3H+Iz02b4jCEd5QxaiuXclqyyBrJ6ZK22mXkg9HBSpyZePq6vKWh5ZAqUilSnbF2bv4Jg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.8.0", - "chromium-bidi": "2.1.2", + "@puppeteer/browsers": "2.9.0", + "chromium-bidi": "3.0.0", "debug": "^4.4.0", "devtools-protocol": "0.0.1413902", "typed-query-selector": "^2.12.0", @@ -22770,9 +22779,9 @@ } }, "node_modules/vite": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz", - "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", + "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", "dev": true, "license": "MIT", "peer": true, diff --git a/package.json b/package.json index f73e2620f3a..0387095f0e5 100644 --- a/package.json +++ b/package.json @@ -58,17 +58,17 @@ }, "private": true, "dependencies": { - "@angular/animations": "^19.2.3", - "@angular/common": "^19.2.3", - "@angular/compiler": "^19.2.3", - "@angular/core": "^19.2.3", - "@angular/elements": "^19.2.3", - "@angular/forms": "^19.2.3", - "@angular/platform-browser": "^19.2.3", - "@angular/platform-browser-dynamic": "^19.2.3", - "@angular/platform-server": "^19.2.3", - "@angular/router": "^19.2.3", - "@angular/ssr": "^19.2.4", + "@angular/animations": "^19.2.5", + "@angular/common": "^19.2.5", + "@angular/compiler": "^19.2.5", + "@angular/core": "^19.2.5", + "@angular/elements": "^19.2.5", + "@angular/forms": "^19.2.5", + "@angular/platform-browser": "^19.2.5", + "@angular/platform-browser-dynamic": "^19.2.5", + "@angular/platform-server": "^19.2.5", + "@angular/router": "^19.2.5", + "@angular/ssr": "^19.2.6", "@igniteui/material-icons-extended": "^3.1.0", "@lit-labs/ssr-dom-shim": "^1.3.0", "@types/source-map": "0.5.2", @@ -82,16 +82,16 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^19.2.4", - "@angular-devkit/schematics": "^19.2.4", + "@angular-devkit/build-angular": "^19.2.6", + "@angular-devkit/schematics": "^19.2.6", "@angular-eslint/builder": "^19.3.0", "@angular-eslint/eslint-plugin": "^19.3.0", "@angular-eslint/eslint-plugin-template": "^19.3.0", "@angular-eslint/schematics": "^19.3.0", "@angular-eslint/template-parser": "^19.3.0", - "@angular/cli": "^19.2.4", - "@angular/compiler-cli": "^19.2.3", - "@angular/language-service": "^19.2.3", + "@angular/cli": "^19.2.6", + "@angular/compiler-cli": "^19.2.5", + "@angular/language-service": "^19.2.5", "@angularclass/hmr": "^3.0.0", "@microsoft/signalr": "^7.0.12", "@types/estree": "^1.0.0", @@ -131,11 +131,11 @@ "karma-parallel": "^0.3.1", "karma-spec-reporter": "^0.0.36", "lit-html": "^3.2.1", - "ng-packagr": "^19.2.0", + "ng-packagr": "^19.2.1", "postcss": "^8.5.1", "postcss-scss": "^4.0.6", "prettier": "^3.3.3", - "puppeteer": "^24.4.0", + "puppeteer": "^24.5.0", "sass-embedded": "^1.83.4", "sass-true": "^8.1.0", "sassdoc": "^2.7.4", diff --git a/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts b/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts index e577e37b21c..2a6bd5dc461 100644 --- a/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts +++ b/projects/igniteui-angular-elements/src/app/custom-strategy.spec.ts @@ -1,4 +1,5 @@ import { IgxColumnComponent, IgxGridComponent, IgxHierarchicalGridComponent } from 'igniteui-angular'; +import { html } from 'lit-html'; import { firstValueFrom, fromEvent, skip, timer } from 'rxjs'; import { ComponentRefKey, IgcNgElement } from './custom-strategy'; import hgridData from '../assets/data/projects-hgrid.js'; @@ -51,6 +52,47 @@ describe('Elements: ', () => { const gridComponent = (await gridEl.ngElementStrategy[ComponentRefKey]).instance as IgxGridComponent; const columnComponent = (await columnEl.ngElementStrategy[ComponentRefKey]).instance as IgxColumnComponent; expect(gridComponent.columnList.toArray()).toContain(columnComponent); + + columnEl.remove(); + await firstValueFrom(timer(10 /* SCHEDULE_DELAY: DESTROY + QUERY */ * 3)); + expect(gridComponent.columnList.toArray()).toEqual([]); + }); + + it(`should keep IgcNgElement instance in template of another IgcNgElement #15678`, async () => { + const gridEl = document.createElement("igc-grid"); + testContainer.appendChild(gridEl); + const columnEl = document.createElement("igc-column") as IgcNgElement; + gridEl.appendChild(columnEl); + gridEl.primaryKey = 'id'; + gridEl.data = [{ id: '1' }]; + (gridEl as any).detailTemplate = (ctx) => { + return html`
+ +
`; + } + + // TODO: Better way to wait - potentially expose the queue or observable for update on the strategy + await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2)); + + // sigh (ã€‚īšã€‚*) + (gridEl as any).toggleRow('1'); + await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2)); + + let detailGrid = document.querySelector('#child1'); + expect(detailGrid).toBeDefined(); + let detailGridComponent = (await detailGrid?.ngElementStrategy[ComponentRefKey])?.instance as IgxGridComponent; + expect(detailGridComponent).toBeDefined(); + + // close and re-expand row detail: + (gridEl as any).toggleRow('1'); + await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2)); + (gridEl as any).toggleRow('1'); + await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2)); + + detailGrid = document.querySelector('#child1'); + expect(detailGrid).toBeDefined(); + detailGridComponent = (await detailGrid?.ngElementStrategy[ComponentRefKey])?.instance as IgxGridComponent; + expect(detailGridComponent).toBeDefined("Detail child grid was destroyed on re-expand"); }); }); @@ -103,6 +145,29 @@ describe('Elements: ', () => { expect(paginator.totalRecords).toEqual(gridEl.data.length); }); + it(`should correctly apply column template when set through event`, async () => { + const gridEl = document.createElement("igc-grid"); + + const columnID = document.createElement("igc-column"); + columnID.setAttribute("field", "ProductID"); + gridEl.appendChild(columnID); + const columnName = document.createElement("igc-column"); + columnName.setAttribute("field", "ProductName"); + gridEl.appendChild(columnName); + + gridEl.data = SampleTestData.foodProductData(); + gridEl.addEventListener("columnInit", (args: CustomEvent) => { + args.detail.headerTemplate = (ctx) => html`Templated ${args.detail.field}`; + }); + testContainer.appendChild(gridEl); + + // TODO: Better way to wait - potentially expose the queue or observable for update on the strategy + await firstValueFrom(timer(10 /* SCHEDULE_DELAY */ * 2)); + + const header = document.getElementsByTagName("igx-grid-header").item(0) as HTMLElement; + expect(header.innerText).toEqual('Templated ProductID'); + }); + it(`should initialize pivot grid with state persistence component`, async () => { const gridEl = document.createElement("igc-pivot-grid"); diff --git a/projects/igniteui-angular-elements/src/app/custom-strategy.ts b/projects/igniteui-angular-elements/src/app/custom-strategy.ts index a114035ff5b..1907cba1fe7 100644 --- a/projects/igniteui-angular-elements/src/app/custom-strategy.ts +++ b/projects/igniteui-angular-elements/src/app/custom-strategy.ts @@ -1,7 +1,8 @@ -import { ApplicationRef, ChangeDetectorRef, ComponentFactory, ComponentRef, Injector, OnChanges, QueryList, Type, ViewContainerRef, reflectComponentType } from '@angular/core'; -import { NgElement } from '@angular/elements'; -import { fromEvent } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; +import { ApplicationRef, ChangeDetectorRef, ComponentFactory, ComponentRef, DestroyRef, EventEmitter, Injector, OnChanges, QueryList, Type, ViewContainerRef, reflectComponentType } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { NgElement, NgElementStrategyEvent } from '@angular/elements'; +import { fromEvent, Observable } from 'rxjs'; +import { map, takeUntil } from 'rxjs/operators'; import { ComponentConfig, ContentQueryMeta } from './component-config'; import { ComponentNgElementStrategy, ComponentNgElementStrategyFactory, extractProjectableNodes, isFunction } from './ng-element-strategy'; @@ -23,11 +24,15 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { // public override componentRef: ComponentRef|null = null; protected element: IgcNgElement; + /** The parent _component_'s element (a.k.a the semantic parent, rather than the DOM one after projection) */ + protected parentElement?: WeakRef; /** Native Angular parent (if any) the Element is created under, usually as template of dynamic component (e.g. HGrid row island paginator) */ protected angularParent: ComponentRef; /** Cached child instances per query prop. Used for dynamic components's child templates that normally persist in Angular runtime */ protected cachedChildComponents: Map[]> = new Map(); private setComponentRef: (value: ComponentRef) => void; + /** The maximum depth at which event arguments are processed and angular components wrapped with Proxies, that handle template set */ + private maxEventProxyDepth = 3; /** * Resolvable component reference. @@ -38,21 +43,29 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { */ public [ComponentRefKey] = new Promise>((resolve, _) => this.setComponentRef = resolve); - private _templateWrapper: TemplateWrapperComponent; + private _templateWrapperRef: ComponentRef; protected get templateWrapper(): TemplateWrapperComponent { - if (!this._templateWrapper) { + if (!this._templateWrapperRef) { const componentRef = (this as any).componentRef as ComponentRef; const viewRef = componentRef.injector.get(ViewContainerRef); - this._templateWrapper = viewRef.createComponent(TemplateWrapperComponent).instance; + this._templateWrapperRef = viewRef.createComponent(TemplateWrapperComponent); } - return this._templateWrapper; + return this._templateWrapperRef.instance; + } + + private _configSelectors: string; + public get configSelectors(): string { + if (!this._configSelectors) { + this._configSelectors = this.config.map(x => x.selector).join(','); + } + return this._configSelectors; } constructor(private _componentFactory: ComponentFactory, private _injector: Injector, private config: ComponentConfig[]) { super(_componentFactory, _injector); } - override async initializeComponent(element: HTMLElement) { + protected override async initializeComponent(element: HTMLElement) { if (!element.isConnected) { // D.P. 2022-09-20 do not initialize on connectedCallback that is not actually connected // connectedCallback may be called once your element is no longer connected @@ -65,14 +78,13 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { // TODO: Fail handling or cancellation needed? (this as any).componentRef = {}; - const toBeOrphanedChildren = Array.from(element.children).filter(x => !this._componentFactory.ngContentSelectors.some(sel => x.matches(sel))); - for (const iterator of toBeOrphanedChildren) { - // TODO: special registration OR config for custom - } + // const toBeOrphanedChildren = Array.from(element.children).filter(x => !this._componentFactory.ngContentSelectors.some(sel => x.matches(sel))); + // for (const iterator of toBeOrphanedChildren) { + // // TODO: special registration OR config for custom + // } let parentInjector: Injector; let parentAnchor: ViewContainerRef; - const parents: IgcNgElement[] = []; - let parentConfig: ComponentConfig; + const parents: WeakRef[] = []; const componentConfig = this.config?.find(x => x.component === this._componentFactory.componentType); const configParents = componentConfig?.parents @@ -87,11 +99,11 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { reflectComponentType(x.component).selector ]).join(',')); if (node) { - parents.push(node); + parents.push(new WeakRef(node)); } } // select closest of all possible config parents - let parent = parents[0]; + let parent = parents[0]?.deref(); // Collected parents may include direct Angular HGrids, so only wait for configured parent elements: const configParent = configParents.find(x => x.selector === parent?.tagName.toLocaleLowerCase()); @@ -102,7 +114,8 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { // ngElementStrategy getter is protected and also has initialization logic, though that should be safe at this point if (parent?.ngElementStrategy) { this.angularParent = parent.ngElementStrategy.angularParent; - const parentComponentRef = await parent?.ngElementStrategy[ComponentRefKey]; + this.parentElement = new WeakRef(parent); + let parentComponentRef = await parent?.ngElementStrategy[ComponentRefKey]; parentInjector = parentComponentRef?.injector; // TODO: Consider general solution (as in Parent w/ @igxAnchor tag) @@ -110,7 +123,7 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { || element.tagName.toLocaleLowerCase() === 'igc-paginator') { // NOPE: viewcontainerRef will re-render this node again, no option for rootNode :S // this.componentRef = parentAnchor.createComponent(this.componentFactory.componentType, { projectableNodes, injector: childInjector }); - const parentComponentRef = await parent?.ngElementStrategy[ComponentRefKey]; + parentComponentRef = await parent?.ngElementStrategy[ComponentRefKey]; parentAnchor = parentComponentRef?.instance.anchor; } } else if ((parent as any)?.__componentRef) { @@ -171,44 +184,44 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { // componentRef should also likely be protected: const componentRef = (this as any).componentRef as ComponentRef; - for (let i = 0; i < parents.length; i++) { - const parent = parents[i]; - - // find the respective config entry - parentConfig = configParents.find(x => x.selector === parent?.tagName.toLocaleLowerCase()); - - if (!parentConfig) { - continue; - } - - const componentType = this._componentFactory.componentType; - // TODO - look into more cases where query expects a certain base class but gets a subclass. - // Related to https://github.com/IgniteUI/igniteui-angular/pull/12134#discussion_r983147259 - const contentQueries = parentConfig.contentQueries.filter(x => x.childType === componentType || x.childType === componentConfig.provideAs); + const parentQueries = this.getParentContentQueries(componentConfig, parents, configParents); - for (const query of contentQueries) { - if (i > 0 && !query.descendants) { - continue; + for (const { parent, query } of parentQueries) { + if (query.isQueryList) { + parent.ngElementStrategy.scheduleQueryUpdate(query.property); + if (this.angularParent) { + // Cache the component in the parent (currently only paginator for HGrid), + // so it is kept in the query even when detached from DOM + this.addToParentCache(parent, query.property); } - + } else { const parentRef = await parent.ngElementStrategy[ComponentRefKey]; - if (query.isQueryList) { - parent.ngElementStrategy.scheduleQueryUpdate(query.property); - if (this.angularParent) { - // Cache the component in the parent (currently only paginator for HGrid), - // so it is kept in the query even when detached from DOM - this.addToParentCache(parent, query.property); - } - } else { - parentRef.instance[query.property] = componentRef.instance; - parentRef.changeDetectorRef.detectChanges(); - } + parentRef.instance[query.property] = componentRef.instance; + parentRef.changeDetectorRef.detectChanges(); } } if (['igc-grid', 'igc-tree-grid', 'igc-hierarchical-grid'].includes(element.tagName.toLocaleLowerCase())) { this.patchGridPopups(); } + + // instead of duplicating super.disconnect() w/ the scheduled destroy: + componentRef.onDestroy(() => { + if (this._templateWrapperRef) { + this._templateWrapperRef.destroy(); + this._templateWrapperRef = null; + } + + // also schedule query updates on all parents: + this.getParentContentQueries(componentConfig, parents, configParents) + .filter(x => x.parent?.isConnected && x.query.isQueryList) + .forEach(({ parent, query }) => { + parent.ngElementStrategy.scheduleQueryUpdate(query.property); + if (this.angularParent) { + this.removeFromParentCache(parent, query.property); + } + }); + }); } public override setInputValue(property: string, value: any, transform?: (value: any) => any): void { @@ -233,6 +246,14 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { } value = this.templateWrapper.addTemplate(value); // TODO: discard oldValue + + // check template for any angular-element components + this.templateWrapper.templateRendered.pipe(takeUntilDestroyed(componentRef.injector.get(DestroyRef))).subscribe((element) => { + element.querySelectorAll(this.configSelectors)?.forEach((c) => { + // tie to angularParent lifecycle for cached scenarios like detailTemplate: + c.ngElementStrategy.angularParent = componentRef; + }); + }); } if (componentRef && componentConfig?.boolProps?.includes(property)) { // bool coerce: @@ -329,23 +350,47 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { } private addToParentCache(parentElement: IgcNgElement, queryName: string) { - var cachedComponents = parentElement.ngElementStrategy.cachedChildComponents.get(queryName) || []; + const cachedComponents = parentElement.ngElementStrategy.cachedChildComponents.get(queryName) || []; cachedComponents.push((this as any).componentRef.instance); parentElement.ngElementStrategy.cachedChildComponents.set(queryName, cachedComponents); } - //#endregion schedule query update - /** - * assignTemplateCallback - */ - public assignTemplateCallback(templateProp: string, callback: any) { - const componentRef = (this as any).componentRef as ComponentRef; - if (componentRef) { - const templateRef = this.templateWrapper.addTemplate(callback); - componentRef.instance[templateProp] = templateRef; - componentRef.changeDetectorRef.detectChanges(); + private removeFromParentCache(parentElement: IgcNgElement, queryName: string) { + let cachedComponents = parentElement.ngElementStrategy.cachedChildComponents.get(queryName) || []; + cachedComponents = cachedComponents.filter(x => x !== (this as any).componentRef.instance); + parentElement.ngElementStrategy.cachedChildComponents.set(queryName, cachedComponents); + } + + /** Get all matching content questions from all parents */ + private getParentContentQueries(componentConfig: ComponentConfig, parents: WeakRef[], configParents: ComponentConfig[]): { parent: IgcNgElement, query: ContentQueryMeta }[] { + const queries: { parent: IgcNgElement, query: ContentQueryMeta }[] = []; + + for (let i = 0; i < parents.length; i++) { + const parent = parents[i]?.deref(); + + // find the respective config entry + const parentConfig = configParents.find(x => x.selector === parent?.tagName.toLocaleLowerCase()); + if (!parentConfig) { + continue; + } + + const componentType = this._componentFactory.componentType; + // TODO - look into more cases where query expects a certain base class but gets a subclass. + // Related to https://github.com/IgniteUI/igniteui-angular/pull/12134#discussion_r983147259 + const contentQueries = parentConfig.contentQueries.filter(x => x.childType === componentType || x.childType === componentConfig.provideAs); + + for (const query of contentQueries) { + if (i > 0 && !query.descendants) { + continue; + } + queries.push({ parent, query }); + } } + + return queries; } + //#endregion schedule query update + //#region Grid popups hide on scroll /** @@ -381,13 +426,101 @@ class IgxCustomNgElementStrategy extends ComponentNgElementStrategy { } //#endregion - override disconnect(): void { + public override disconnect(): void { if (this.angularParent) { this.angularParent.onDestroy(() => super.disconnect()); } else { super.disconnect(); } } + + //#region Handle event args that return reference to components, since they return angular ref and not custom elements. + /** Sets up listeners for the component's outputs so that the events stream emits the events. */ + protected override initializeOutputs(componentRef: ComponentRef): void { + const eventEmitters: Observable[] = this._componentFactory.outputs.map( + ({ propName, templateName }) => { + const emitter: EventEmitter = componentRef.instance[propName]; + return emitter.pipe(map((value: any) => ({ name: templateName, value: this.patchOutputComponents(propName, value) }))); + }, + ); + + (this as any).eventEmitters.next(eventEmitters); + } + + protected patchOutputComponents(eventName: string, eventArgs: any) { + // Single out only `columnInit` event for now. If more events pop up will require a config generation. + if (eventName !== "columnInit") { + return eventArgs; + } + return this.createProxyForComponentValue(eventArgs, 1).value; + } + + /** + * Nested search of event args that contain angular components and replace them with proxies. + * If event args are array of angular component instances should return array of proxies of each of those instances. + * If event args are object that has a single property being angular component should return same object except the angular component being a proxy of itself. + */ + protected createProxyForComponentValue(value: any, depth: number): { value: any, hasProxies: boolean } { + if (depth > this.maxEventProxyDepth) { + return { value, hasProxies: false }; + } + + let hasProxies = false; + // TO DO!: Not very reliable as it is a very internal API and could be subject to change. If something comes up, should be changed. + if (value?.__ngContext__) { + const componentConfig = this.config.find((info: ComponentConfig) => value.constructor === info.component); + if (componentConfig?.templateProps) { + return { value: this.createElementsComponentProxy(value, componentConfig), hasProxies: true }; + } + } else if (Array.isArray(value)) { + if (!value[0]) { + return { value, hasProxies: false }; + } else { + // For array limit their parsing to first level and check if first item has created proxy inside. + const firstItem = this.createProxyForComponentValue(value[0], this.maxEventProxyDepth); + if (firstItem.hasProxies) { + const mappedArray = value.slice(1, value.length).map(item => this.createProxyForComponentValue(item, depth + 1)); + mappedArray.unshift(firstItem); + return { value: mappedArray, hasProxies: true }; + } + } + } else if (typeof value === "object" && Object.entries(value).length && !(value instanceof Event)) { + for (const [key, item] of Object.entries(value)) { + if (!item) { + value[key] = item; + } else { + const parsedItem = this.createProxyForComponentValue(item, depth + 1); + value[key] = parsedItem.value; + hasProxies = parsedItem.hasProxies || hasProxies; + } + } + } + + return { value, hasProxies }; + } + + /** Create proxy for a component that handles setting template props, making sure it provides correct TemplateRef and not Lit template */ + protected createElementsComponentProxy(component: any, config: ComponentConfig) { + const parentThis = this; + return new Proxy(component, { + set(target: any, prop: string, newValue: any) { + // For now handle only template props + if (config.templateProps.includes(prop)) { + const oldRef = target[prop]; + const oldValue = oldRef && parentThis.templateWrapper.getTemplateFunction(oldRef); + if (oldValue === newValue) { + newValue = oldRef; + } else { + newValue = parentThis.templateWrapper.addTemplate(newValue); + } + } + target[prop] = newValue; + + return true; + } + }); + } + //#endregion } /** diff --git a/projects/igniteui-angular-elements/src/app/wrapper/wrapper.component.ts b/projects/igniteui-angular-elements/src/app/wrapper/wrapper.component.ts index 35ba746cd94..5e782714f5f 100644 --- a/projects/igniteui-angular-elements/src/app/wrapper/wrapper.component.ts +++ b/projects/igniteui-angular-elements/src/app/wrapper/wrapper.component.ts @@ -1,4 +1,5 @@ import { ChangeDetectorRef, Component, QueryList, TemplateRef, ViewChildren } from '@angular/core'; +import { Subject } from 'rxjs'; import { TemplateRefWrapper } from './template-ref-wrapper'; import { render, TemplateResult } from 'lit-html'; @@ -14,6 +15,7 @@ type TemplateFunction = (arg: any) => TemplateResult; export class TemplateWrapperComponent { public templateFunctions: TemplateFunction[] = []; + public templateRendered = new Subject(); /** * All template refs @@ -27,6 +29,7 @@ export class TemplateWrapperComponent { public litRender(container: HTMLElement, templateFunc: (arg: any) => TemplateResult, arg: any) { render(templateFunc(arg), container); + this.templateRendered.next(container); } public addTemplate(templateFunc: TemplateFunction): TemplateRef { diff --git a/projects/igniteui-angular-elements/src/index.html b/projects/igniteui-angular-elements/src/index.html index c1db7ce6a44..765bb001461 100644 --- a/projects/igniteui-angular-elements/src/index.html +++ b/projects/igniteui-angular-elements/src/index.html @@ -195,7 +195,11 @@

Flat Grid (MRL column layout)

ctx.cell.editValue = e.detail.newValue} single-select> `; - grid1.detailTemplate = (ctx) => html`
Stock: ${ctx.implicit.InStock}
`; + grid1.detailTemplate = (ctx) => { + return html`
+ +
`; + } grid2.querySelector('igc-column[field="ProductName"]').inlineEditorTemplate = (ctx) => html` @@ -320,7 +324,9 @@

Flat Grid (MRL column layout)

- diff --git a/projects/igniteui-angular/karma.conf.js b/projects/igniteui-angular/karma.conf.js index fabb87455a3..5147239377b 100644 --- a/projects/igniteui-angular/karma.conf.js +++ b/projects/igniteui-angular/karma.conf.js @@ -10,8 +10,7 @@ module.exports = function (config) { files: [ { pattern: '../../node_modules/hammerjs/hammer.min.js', watched: false }, { pattern: '../../node_modules/hammer-simulator/index.js', watched: false }, - { pattern: './test.css', watched: false }, - { pattern: '../../dist/igniteui-angular/styles/igniteui-angular.css', watched: false } + { pattern: './test.css', watched: false } ], plugins: [ 'karma-parallel', diff --git a/projects/igniteui-angular/karma.watch.conf.js b/projects/igniteui-angular/karma.watch.conf.js index bc83a9064bc..b2b6da11a2b 100644 --- a/projects/igniteui-angular/karma.watch.conf.js +++ b/projects/igniteui-angular/karma.watch.conf.js @@ -8,8 +8,7 @@ module.exports = function (config) { files: [ { pattern: '../../node_modules/hammerjs/hammer.min.js', watched: false }, { pattern: '../../node_modules/hammer-simulator/index.js', watched: false }, - { pattern: './test.css', watched: false }, - { pattern: '../../dist/igniteui-angular/styles/igniteui-angular.css', watched: false } + { pattern: './test.css', watched: false } ], plugins: [ 'karma-jasmine', diff --git a/projects/igniteui-angular/package.json b/projects/igniteui-angular/package.json index 19932f8f91e..a883e6c1147 100644 --- a/projects/igniteui-angular/package.json +++ b/projects/igniteui-angular/package.json @@ -93,7 +93,7 @@ } }, "igxDevDependencies": { - "@igniteui/angular-schematics": "~19.1.14315" + "@igniteui/angular-schematics": "~19.2.1440" }, "ng-update": { "migrations": "./migrations/migration-collection.json", diff --git a/projects/igniteui-angular/src/assets/images/avatar/1.jpg b/projects/igniteui-angular/src/assets/images/avatar/1.jpg new file mode 100644 index 00000000000..28d3021c939 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/1.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/10.jpg b/projects/igniteui-angular/src/assets/images/avatar/10.jpg new file mode 100644 index 00000000000..99ca93d34a6 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/10.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/11.jpg b/projects/igniteui-angular/src/assets/images/avatar/11.jpg new file mode 100644 index 00000000000..a93271e1469 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/11.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/12.jpg b/projects/igniteui-angular/src/assets/images/avatar/12.jpg new file mode 100644 index 00000000000..1c89b4e9b48 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/12.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/13.jpg b/projects/igniteui-angular/src/assets/images/avatar/13.jpg new file mode 100644 index 00000000000..5ec2f4fbdb7 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/13.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/14.jpg b/projects/igniteui-angular/src/assets/images/avatar/14.jpg new file mode 100644 index 00000000000..773eade87c4 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/14.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/15.jpg b/projects/igniteui-angular/src/assets/images/avatar/15.jpg new file mode 100644 index 00000000000..cacf3848060 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/15.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/16.jpg b/projects/igniteui-angular/src/assets/images/avatar/16.jpg new file mode 100644 index 00000000000..75f77fc1c2f Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/16.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/17.jpg b/projects/igniteui-angular/src/assets/images/avatar/17.jpg new file mode 100644 index 00000000000..4fda8c3964d Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/17.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/18.jpg b/projects/igniteui-angular/src/assets/images/avatar/18.jpg new file mode 100644 index 00000000000..a3e3e193322 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/18.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/19.jpg b/projects/igniteui-angular/src/assets/images/avatar/19.jpg new file mode 100644 index 00000000000..d73abae2c20 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/19.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/2.jpg b/projects/igniteui-angular/src/assets/images/avatar/2.jpg new file mode 100644 index 00000000000..dd992e87625 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/2.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/20.jpg b/projects/igniteui-angular/src/assets/images/avatar/20.jpg new file mode 100644 index 00000000000..b6d8717e3f9 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/20.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/21.jpg b/projects/igniteui-angular/src/assets/images/avatar/21.jpg new file mode 100644 index 00000000000..a9138245dd6 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/21.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/22.jpg b/projects/igniteui-angular/src/assets/images/avatar/22.jpg new file mode 100644 index 00000000000..34a1392aca1 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/22.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/23.jpg b/projects/igniteui-angular/src/assets/images/avatar/23.jpg new file mode 100644 index 00000000000..2ac66665e8c Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/23.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/24.jpg b/projects/igniteui-angular/src/assets/images/avatar/24.jpg new file mode 100644 index 00000000000..e9cf1e56006 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/24.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/3.jpg b/projects/igniteui-angular/src/assets/images/avatar/3.jpg new file mode 100644 index 00000000000..46fba71dd18 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/3.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/4.jpg b/projects/igniteui-angular/src/assets/images/avatar/4.jpg new file mode 100644 index 00000000000..096ca437e74 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/4.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/5.jpg b/projects/igniteui-angular/src/assets/images/avatar/5.jpg new file mode 100644 index 00000000000..27087306321 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/5.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/6.jpg b/projects/igniteui-angular/src/assets/images/avatar/6.jpg new file mode 100644 index 00000000000..8fbf99325ea Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/6.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/7.jpg b/projects/igniteui-angular/src/assets/images/avatar/7.jpg new file mode 100644 index 00000000000..87c0818dc03 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/7.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/8.jpg b/projects/igniteui-angular/src/assets/images/avatar/8.jpg new file mode 100644 index 00000000000..52f96f184b6 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/8.jpg differ diff --git a/projects/igniteui-angular/src/assets/images/avatar/9.jpg b/projects/igniteui-angular/src/assets/images/avatar/9.jpg new file mode 100644 index 00000000000..7175dc3c5d8 Binary files /dev/null and b/projects/igniteui-angular/src/assets/images/avatar/9.jpg differ diff --git a/projects/igniteui-angular/src/lib/accordion/accordion.component.spec.ts b/projects/igniteui-angular/src/lib/accordion/accordion.component.spec.ts index 0e3a5a85b6b..0a92c5ce0ce 100644 --- a/projects/igniteui-angular/src/lib/accordion/accordion.component.spec.ts +++ b/projects/igniteui-angular/src/lib/accordion/accordion.component.spec.ts @@ -4,7 +4,6 @@ import { waitForAsync, TestBed, fakeAsync, ComponentFixture, tick } from '@angul import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxExpansionPanelBodyComponent, IgxExpansionPanelComponent, IgxExpansionPanelHeaderComponent, IgxExpansionPanelTitleDirective } from '../expansion-panel/public_api'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { UIInteractions } from '../test-utils/ui-interactions.spec'; import { IAccordionCancelableEventArgs, IAccordionEventArgs, IgxAccordionComponent } from './accordion.component'; import { slideInLeft, slideOutRight } from 'igniteui-angular/animations'; @@ -14,10 +13,9 @@ const PANEL_TAG = 'IGX-EXPANSION-PANEL'; const ACCORDION_TAG = 'IGX-ACCORDION'; describe('Rendering Tests', () => { - configureTestSuite(); let fix: ComponentFixture; let accordion: IgxAccordionComponent; - beforeAll( + beforeEach( waitForAsync(() => { TestBed.configureTestingModule({ imports: [ diff --git a/projects/igniteui-angular/src/lib/action-strip/action-strip.component.spec.ts b/projects/igniteui-angular/src/lib/action-strip/action-strip.component.spec.ts index 52e5cca1dbb..b3772ad8e94 100644 --- a/projects/igniteui-angular/src/lib/action-strip/action-strip.component.spec.ts +++ b/projects/igniteui-angular/src/lib/action-strip/action-strip.component.spec.ts @@ -1,7 +1,6 @@ import { IgxActionStripComponent, IgxActionStripMenuItemDirective } from './action-strip.component'; import { Component, ViewChild, ElementRef, ViewContainerRef } from '@angular/core'; -import { configureTestSuite } from '../test-utils/configure-suite'; -import { TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { wait } from '../test-utils/ui-interactions.spec'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -17,8 +16,8 @@ describe('igxActionStrip', () => { let parentContainer: ElementRef; let innerContainer: ViewContainerRef; - configureTestSuite(() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxActionStripComponent, @@ -26,8 +25,8 @@ describe('igxActionStrip', () => { IgxActionStripMenuTestingComponent, IgxActionStripCombinedMenuTestingComponent ] - }); - }); + }).compileComponents(); + })); describe('Unit tests: ', () => { diff --git a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts index 44dd12f7b0d..4a86a58fdf4 100644 --- a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts +++ b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts @@ -3,7 +3,6 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxGridComponent } from '../../grids/grid/public_api'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { IgxHierarchicalGridActionStripComponent } from '../../test-utils/hierarchical-grid-components.spec'; @@ -21,8 +20,7 @@ describe('igxGridEditingActions #grid ', () => { let fixture; let actionStrip: IgxActionStripComponent; let grid: IgxGridComponent; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts index 8f1fdfb8024..3bf7db5b94d 100644 --- a/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts +++ b/projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.spec.ts @@ -1,6 +1,5 @@ import { Component, ViewChild, OnInit } from '@angular/core'; import { IgxActionStripComponent } from '../action-strip.component'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { TestBed, waitForAsync } from '@angular/core/testing'; import { IgxGridComponent } from '../../grids/grid/public_api'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -15,8 +14,7 @@ describe('igxGridPinningActions #grid ', () => { let fixture; let actionStrip: IgxActionStripComponent; let grid: IgxGridComponent; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/avatar/avatar.component.spec.ts b/projects/igniteui-angular/src/lib/avatar/avatar.component.spec.ts index ca076b9da35..5f13ec83de7 100644 --- a/projects/igniteui-angular/src/lib/avatar/avatar.component.spec.ts +++ b/projects/igniteui-angular/src/lib/avatar/avatar.component.spec.ts @@ -3,10 +3,7 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxAvatarComponent, IgxAvatarType, IgxAvatarSize } from './avatar.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; - describe('Avatar', () => { - configureTestSuite(); const baseClass = 'igx-avatar'; const classes = { @@ -20,7 +17,7 @@ describe('Avatar', () => { icon: `${baseClass}--icon` }; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ InitAvatarComponent, diff --git a/projects/igniteui-angular/src/lib/badge/badge.component.spec.ts b/projects/igniteui-angular/src/lib/badge/badge.component.spec.ts index f2158afc6e1..d6654f0974e 100644 --- a/projects/igniteui-angular/src/lib/badge/badge.component.spec.ts +++ b/projects/igniteui-angular/src/lib/badge/badge.component.spec.ts @@ -3,11 +3,8 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxBadgeComponent, IgxBadgeType } from './badge.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; - describe('Badge', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ InitBadgeComponent, diff --git a/projects/igniteui-angular/src/lib/banner/banner.component.spec.ts b/projects/igniteui-angular/src/lib/banner/banner.component.spec.ts index f1099d42607..90390efdf62 100644 --- a/projects/igniteui-angular/src/lib/banner/banner.component.spec.ts +++ b/projects/igniteui-angular/src/lib/banner/banner.component.spec.ts @@ -3,7 +3,6 @@ import { TestBed, ComponentFixture, tick, fakeAsync, waitForAsync } from '@angul import { By } from '@angular/platform-browser'; import { IgxBannerComponent } from './banner.component'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { IgxIconComponent } from '../icon/icon.component'; import { IgxBannerActionsDirective } from './banner.directives'; import { IgxCardComponent, IgxCardContentDirective, IgxCardHeaderComponent } from '../card/card.component'; @@ -24,8 +23,7 @@ describe('igxBanner', () => { let bannerTextElement: DebugElement = null; let bannerActionsElement: DebugElement = null; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts b/projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts index c76b35c653f..6f9977c0778 100644 --- a/projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts +++ b/projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts @@ -1,7 +1,6 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { TestBed, fakeAsync, flushMicrotasks, waitForAsync } from '@angular/core/testing'; import { ButtonGroupAlignment, IgxButtonGroupComponent } from './buttonGroup.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { UIInteractions, wait } from '../test-utils/ui-interactions.spec'; import { IgxButtonDirective } from '../directives/button/button.directive'; @@ -46,8 +45,7 @@ class Button { describe('IgxButtonGroup', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts b/projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts index 99c1576adbf..f1198142af2 100644 --- a/projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts +++ b/projects/igniteui-angular/src/lib/calendar/calendar-multi-view.component.spec.ts @@ -2,7 +2,6 @@ import { Component, ViewChild } from '@angular/core'; import { ComponentFixture, TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { UIInteractions, wait } from '../test-utils/ui-interactions.spec'; import { ymd } from '../test-utils/helper-utils.spec'; import { IgxCalendarComponent } from './public_api'; @@ -13,9 +12,8 @@ import { HelperTestFunctions } from '../test-utils/calendar-helper-utils'; describe('Multi-View Calendar - ', () => { let fixture: ComponentFixture let calendar: any; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts b/projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts index 273c263963c..1a4454e13af 100644 --- a/projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts +++ b/projects/igniteui-angular/src/lib/calendar/calendar.component.spec.ts @@ -30,7 +30,6 @@ import { DateRangeType, } from "../core/dates/dateRange"; -import { configureTestSuite } from "../test-utils/configure-suite"; import { IgxDayItemComponent } from "./days-view/day-item.component"; import { HelperTestFunctions } from "../test-utils/calendar-helper-utils"; @@ -128,9 +127,8 @@ describe("IgxCalendar - ", () => { }); describe("Basic -", () => { - configureTestSuite({ checkLeaks: true }); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.spec.ts b/projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.spec.ts index e0f5eea075a..3759cc71e98 100644 --- a/projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.spec.ts +++ b/projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.spec.ts @@ -1,6 +1,5 @@ import { Component, DebugElement, ViewChild } from "@angular/core"; import { IgxDaysViewComponent } from "./days-view.component"; -import { configureTestSuite } from "../../test-utils/configure-suite"; import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; import { By } from "@angular/platform-browser"; import { UIInteractions } from "../../test-utils/ui-interactions.spec"; @@ -11,10 +10,9 @@ import { ScrollDirection } from "../calendar"; const TODAY = new Date(2024, 6, 12); describe("Days View Component", () => { - configureTestSuite(); const baseClass = "igx-days-view"; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [InitDaysViewComponent], }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.spec.ts b/projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.spec.ts index 2bb0d16d68f..2827fb99c23 100644 --- a/projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.spec.ts +++ b/projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.spec.ts @@ -4,12 +4,10 @@ import { FormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxMonthPickerComponent } from './month-picker.component'; import { IFormattingOptions, IgxCalendarView } from '../calendar'; describe('IgxMonthPicker', () => { - configureTestSuite(); beforeEach(() => { TestBed.configureTestingModule({ diff --git a/projects/igniteui-angular/src/lib/card/card.spec.ts b/projects/igniteui-angular/src/lib/card/card.spec.ts index 35ae76aab43..a43fbd40916 100644 --- a/projects/igniteui-angular/src/lib/card/card.spec.ts +++ b/projects/igniteui-angular/src/lib/card/card.spec.ts @@ -12,13 +12,11 @@ import { IgxCardContentDirective, } from './card.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { IgxButtonDirective } from '../directives/button/button.directive'; import { IgxIconComponent } from '../icon/icon.component'; import { IgxIconButtonDirective } from '../directives/button/icon-button.directive'; describe('Card', () => { - configureTestSuite(); // TODO: Refactor card tests to reuse components const baseClass = 'igx-card'; @@ -62,7 +60,7 @@ describe('Card', () => { media: `${baseClass}__media` }; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ InitCardComponent, diff --git a/projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts b/projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts index 3e7a5fed677..b99e6ec5007 100644 --- a/projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts +++ b/projects/igniteui-angular/src/lib/carousel/carousel.component.spec.ts @@ -6,18 +6,16 @@ import { ISlideEventArgs } from './carousel.component'; import { UIInteractions, wait } from '../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxSlideComponent } from './slide.component'; import { IgxCarouselIndicatorDirective, IgxCarouselNextButtonDirective, IgxCarouselPrevButtonDirective } from './carousel.directives'; import { CarouselIndicatorsOrientation, CarouselAnimationType } from './enums'; describe('Carousel', () => { - configureTestSuite(); let fixture; let carousel: IgxCarouselComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/checkbox/checkbox.component.spec.ts b/projects/igniteui-angular/src/lib/checkbox/checkbox.component.spec.ts index cb70e0e51a8..436883f1145 100644 --- a/projects/igniteui-angular/src/lib/checkbox/checkbox.component.spec.ts +++ b/projects/igniteui-angular/src/lib/checkbox/checkbox.component.spec.ts @@ -4,12 +4,10 @@ import { UntypedFormBuilder, FormsModule, ReactiveFormsModule, Validators, NgFor import { By } from '@angular/platform-browser'; import { IgxCheckboxComponent } from './checkbox.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; describe('IgxCheckbox', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -198,6 +196,8 @@ describe('IgxCheckbox', () => { const fixture = TestBed.createComponent(IgxCheckboxComponent); const checkboxInstance = fixture.componentInstance; + // For test fixture destroy + checkboxInstance.id = "root1"; checkboxInstance.disabled = true; const nativeCheckbox = checkboxInstance.nativeInput.nativeElement as HTMLInputElement; const nativeLabel = checkboxInstance.nativeLabel.nativeElement as HTMLLabelElement; diff --git a/projects/igniteui-angular/src/lib/chips/chip.spec.ts b/projects/igniteui-angular/src/lib/chips/chip.spec.ts index d60e87f74da..3aa27a14a12 100644 --- a/projects/igniteui-angular/src/lib/chips/chip.spec.ts +++ b/projects/igniteui-angular/src/lib/chips/chip.spec.ts @@ -7,7 +7,6 @@ import { IgxPrefixDirective } from './../directives/prefix/prefix.directive'; import { IgxLabelDirective } from './../directives/label/label.directive'; import { IgxSuffixDirective } from './../directives/suffix/suffix.directive'; import { UIInteractions, wait } from '../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { ControlsFunction } from '../test-utils/controls-functions.spec'; import { IgxIconComponent } from '../icon/icon.component'; import { getComponentSize } from '../core/utils'; @@ -103,8 +102,7 @@ describe('IgxChip', () => { let fix: ComponentFixture; let chipArea; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TestChipComponent, TestChipsLabelAndSuffixComponent] }).compileComponents(); @@ -142,6 +140,8 @@ describe('IgxChip', () => { it('should change chip variant', () => { const fixture = TestBed.createComponent(IgxChipComponent); const igxChip = fixture.componentInstance; + // For test fixture destroy + igxChip.id = "root1"; igxChip.variant = 'danger'; @@ -370,6 +370,7 @@ describe('IgxChip', () => { expect(secondChipComp.selectedChanging.emit).not.toHaveBeenCalled(); expect(secondChipComp.selectedChanged.emit).not.toHaveBeenCalled(); + // console.log('id', secondChipComp.id); }); }); diff --git a/projects/igniteui-angular/src/lib/chips/chips-area.spec.ts b/projects/igniteui-angular/src/lib/chips/chips-area.spec.ts index 66ce7cb05a1..8184038e650 100644 --- a/projects/igniteui-angular/src/lib/chips/chips-area.spec.ts +++ b/projects/igniteui-angular/src/lib/chips/chips-area.spec.ts @@ -3,7 +3,6 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxChipComponent } from './chip.component'; import { IgxChipsAreaComponent } from './chips-area.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { wait, UIInteractions } from '../test-utils/ui-interactions.spec'; import { IgxIconComponent } from '../icon/icon.component'; import { IgxPrefixDirective } from './public_api'; @@ -102,16 +101,14 @@ class TestChipReorderComponent { describe('IgxChipsArea ', () => { - configureTestSuite(); const CHIP_REMOVE_BUTTON = 'igx-chip__remove'; - const CHIP_SELECT_ICON = 'igx-chip__select'; const CHIP_AREA_CLASS = 'igx-chip-area'; let fix; let chipArea: IgxChipsAreaComponent; let chipAreaElement; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ TestChipComponent, diff --git a/projects/igniteui-angular/src/lib/combo/combo.component.spec.ts b/projects/igniteui-angular/src/lib/combo/combo.component.spec.ts index 5f4c0bdc924..a3cfa04b310 100644 --- a/projects/igniteui-angular/src/lib/combo/combo.component.spec.ts +++ b/projects/igniteui-angular/src/lib/combo/combo.component.spec.ts @@ -1,6 +1,6 @@ import { AsyncPipe } from '@angular/common'; import { AfterViewInit, ChangeDetectorRef, Component, DebugElement, ElementRef, Injectable, OnDestroy, OnInit, ViewChild } from '@angular/core'; -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { FormsModule, NgControl, NgForm, NgModel, ReactiveFormsModule, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; @@ -15,7 +15,6 @@ import { IForOfState } from '../directives/for-of/for_of.directive'; import { IgxInputState } from '../directives/input/input.directive'; import { IgxLabelDirective } from '../input-group/public_api'; import { AbsoluteScrollStrategy, ConnectedPositioningStrategy } from '../services/public_api'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { UIInteractions, wait } from '../test-utils/ui-interactions.spec'; import { IgxComboAddItemComponent } from './combo-add-item.component'; import { IgxComboDropDownComponent } from './combo-dropdown.component'; @@ -87,6 +86,11 @@ describe('igxCombo', () => { }); mockSelection.get.and.returnValue(new Set([])); const mockDocument = jasmine.createSpyObj('DOCUMENT', [], { 'defaultView': { getComputedStyle: () => null }}); + jasmine.getEnv().allowRespy(true); + + afterAll(() => { + jasmine.getEnv().allowRespy(false); + }); it('should correctly implement interface methods - ControlValueAccessor ', () => { combo = new IgxComboComponent( @@ -986,8 +990,8 @@ describe('igxCombo', () => { }); describe('Combo feature tests: ', () => { - configureTestSuite(() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxComboSampleComponent, @@ -998,8 +1002,8 @@ describe('igxCombo', () => { IgxComboFormComponent, IgxComboInTemplatedFormComponent ] - }); - }); + }).compileComponents(); + })); describe('Initialization and rendering tests: ', () => { beforeEach(() => { diff --git a/projects/igniteui-angular/src/lib/core/styles/components/icon-button/_icon-button-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/icon-button/_icon-button-theme.scss index 0b3f0ed4712..ad2ea91c001 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/icon-button/_icon-button-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/icon-button/_icon-button-theme.scss @@ -243,7 +243,7 @@ } } - [igxIconButton='flat'].igx-button--focused { + %igx-icon-button--flat.igx-button--focused { background: var-get($flat-theme, 'focus-background'); color: var-get($flat-theme, 'focus-foreground'); @@ -388,7 +388,7 @@ } } - [igxIconButton='outlined'].igx-button--focused { + %igx-icon-button--outlined.igx-button--focused { background: var-get($outlined-theme, 'focus-background'); color: var-get($outlined-theme, 'focus-foreground'); diff --git a/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss b/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss index a48422df79f..04f05cfc23b 100644 --- a/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss +++ b/projects/igniteui-angular/src/lib/core/styles/components/input/_input-group-theme.scss @@ -686,6 +686,10 @@ position: relative; grid-area: 1 / 2; + + %form-group-label { + color: var-get($theme, 'idle-secondary-color'); + } } %igx-input-group__notch--border { @@ -913,6 +917,14 @@ background: var-get($theme, 'search-disabled-background'); box-shadow: var-get($theme, 'search-disabled-shadow'); border-color: var-get($theme, 'disabled-border-color'); + + igx-prefix, + [igxPrefix], + igx-suffix, + [igxSuffix] { + background: inherit; + color: var-get($theme, 'disabled-text-color'); + } } %form-group-bundle-main--border { @@ -1667,6 +1679,11 @@ [igxPrefix] { display: none; } + + igx-suffix, + [igxSuffix] { + color: var(--igx-input-group-input-suffix-color--focused, var(--ig-gray-900)); + } } // Bundle @@ -1831,9 +1848,14 @@ transform-origin: top left; margin-top: 0 !important; height: auto; - margin-block-end: rem(4px); color: var-get($theme, 'idle-secondary-color'); + @if $variant == 'fluent' { + margin-block-end: rem(5px); + } @else { + margin-block-end: rem(4px); + } + [dir='rtl'] & { transform-origin: top right; } diff --git a/projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts b/projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts index bc8812b713b..154cbce8cab 100644 --- a/projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts +++ b/projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts @@ -194,7 +194,7 @@ export abstract class BaseFilteringStrategy implements IFilteringStrategy { item.value = key ? new Date(key) : key; } else if (column.dataType === GridColumnDataType.Time) { const date = key ? new Date(key) : key; - key = date ? new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds()) : key; + key = date ? new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()) : key; item.value = key ? new Date(key) : key; } else if (column.dataType === GridColumnDataType.Date) { const date = key ? new Date(key) : key; diff --git a/projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.spec.ts b/projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.spec.ts index ed43b525456..9dc575b3222 100644 --- a/projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.spec.ts +++ b/projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.spec.ts @@ -4,7 +4,6 @@ import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxCalendarComponent } from '../../calendar/public_api'; import { IgxButtonDirective } from '../../directives/button/button.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxPickerActionsDirective } from '../picker-icons.common'; import { IgxCalendarContainerComponent } from './calendar-container.component'; @@ -12,8 +11,7 @@ import { IgxCalendarContainerComponent } from './calendar-container.component'; describe('Calendar Container', () => { let fixture: ComponentFixture; let container: IgxCalendarContainerComponent; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxDatePickerTestComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts b/projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts index ce2e34b41a1..4777e412448 100644 --- a/projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts +++ b/projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts @@ -1,9 +1,8 @@ import { DateTimeUtil } from './date-time.util'; import { DatePart, DatePartInfo } from '../../directives/date-time-editor/date-time-editor.common'; import { DataType } from '../../data-operations/data-util'; -import localeBg from "@angular/common/locales/bg"; import { registerLocaleData } from '@angular/common'; - +import localeBg from "@angular/common/locales/bg"; const reduceToDictionary = (parts: DatePartInfo[]) => parts.reduce((obj, x) => { obj[x.type] = x; @@ -11,9 +10,7 @@ const reduceToDictionary = (parts: DatePartInfo[]) => parts.reduce((obj, x) => { }, {}); describe(`DateTimeUtil Unit tests`, () => { - registerLocaleData(localeBg); - describe('Date Time Parsing', () => { it('should correctly parse all date time parts (base)', () => { let result = DateTimeUtil.parseDateTimeFormat('dd/MM/yyyy HH:mm:ss:SS a'); diff --git a/projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts b/projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts index a85061000d8..d208aed8cd2 100644 --- a/projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts +++ b/projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts @@ -5,7 +5,6 @@ import { UIInteractions } from '../test-utils/ui-interactions.spec'; import { IgxHintDirective, IgxInputGroupComponent, IgxInputState, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from '../input-group/public_api'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { IFormattingViews, IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective, WEEKDAYS } from '../calendar/public_api'; import { IgxCalendarContainerComponent } from '../date-common/calendar-container/calendar-container.component'; import { IgxDatePickerComponent } from './date-picker.component'; @@ -26,7 +25,6 @@ import localeES from "@angular/common/locales/es"; import localeBg from "@angular/common/locales/bg"; import { IgxDateTimeEditorDirective } from '../directives/date-time-editor/public_api'; -const CSS_CLASS_CALENDAR = 'igx-calendar'; const CSS_CLASS_DATE_PICKER = 'igx-date-picker'; const DATE_PICKER_TOGGLE_ICON = 'calendar_today'; @@ -37,8 +35,7 @@ const CSS_CLASS_INPUT_GROUP_INVALID = 'igx-input-group--invalid'; describe('IgxDatePicker', () => { describe('Integration tests', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts b/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts index 1479ce05425..01d03dc791d 100644 --- a/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts +++ b/projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts @@ -7,7 +7,6 @@ import { FormsModule, ReactiveFormsModule, UntypedFormBuilder, UntypedFormContro import { By } from '@angular/platform-browser'; import { ControlsFunction } from '../test-utils/controls-functions.spec'; import { UIInteractions } from '../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { HelperTestFunctions } from '../test-utils/calendar-helper-utils'; import { CancelableEventArgs } from '../core/utils'; import { DateRange, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent } from './date-range-picker-inputs.common'; @@ -308,8 +307,7 @@ describe('IgxDateRangePicker', () => { describe('Single Input', () => { let singleInputElement: DebugElement; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -815,8 +813,7 @@ describe('IgxDateRangePicker', () => { describe('Two Inputs', () => { let startInput: DebugElement; let endInput: DebugElement; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1388,8 +1385,7 @@ describe('IgxDateRangePicker', () => { }); describe('Rendering', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/dialog/dialog.component.spec.ts b/projects/igniteui-angular/src/lib/dialog/dialog.component.spec.ts index 798560e991d..8b32c55e33c 100644 --- a/projects/igniteui-angular/src/lib/dialog/dialog.component.spec.ts +++ b/projects/igniteui-angular/src/lib/dialog/dialog.component.spec.ts @@ -4,7 +4,6 @@ import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { UIInteractions } from '../test-utils/ui-interactions.spec'; import { IDialogCancellableEventArgs, IDialogEventArgs, IgxDialogComponent } from './dialog.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { useAnimation } from '@angular/animations'; import { PositionSettings, HorizontalAlignment, VerticalAlignment } from '../services/overlay/utilities'; import { IgxToggleDirective } from '../directives/toggle/toggle.directive'; @@ -17,8 +16,7 @@ const OVERLAY_MODAL_WRAPPER_CLASS = `${OVERLAY_MAIN_CLASS}__wrapper--modal`; const CLASS_OVERLAY_CONTENT_MODAL = `${OVERLAY_MAIN_CLASS}__content--modal`; describe('Dialog', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.spec.ts index 5d4fac049d4..882f7c6ac61 100644 --- a/projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.spec.ts @@ -3,7 +3,6 @@ import { TestBed, tick, fakeAsync, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxAutocompleteDirective, AutocompleteOverlaySettings } from './autocomplete.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { IgxInputDirective } from '../input/input.directive'; import { IgxInputGroupComponent, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from '../../input-group/public_api'; @@ -25,9 +24,8 @@ describe('IgxAutocomplete', () => { let group: IgxInputGroupComponent; let input: IgxInputDirective; let dropDown: IgxDropDownComponent; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/directives/button/button.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/button/button.directive.spec.ts index f4fbdd53c10..bfceddb34f1 100644 --- a/projects/igniteui-angular/src/lib/directives/button/button.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/button/button.directive.spec.ts @@ -3,14 +3,12 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxButtonDirective } from './button.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxRippleDirective } from '../ripple/ripple.directive'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; const BUTTON_COMFORTABLE = 'igx-button'; describe('IgxButton', () => { - configureTestSuite({ checkLeaks: true }); const baseClass = BUTTON_COMFORTABLE; const classes = { @@ -20,7 +18,7 @@ describe('IgxButton', () => { fab: `${baseClass}--fab`, }; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/directives/button/icon-button.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/button/icon-button.directive.spec.ts index bb6fae9134e..cde17b254e5 100644 --- a/projects/igniteui-angular/src/lib/directives/button/icon-button.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/button/icon-button.directive.spec.ts @@ -1,5 +1,4 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Component, ViewChild } from '@angular/core'; import { IgxIconButtonDirective } from './icon-button.directive'; @@ -8,7 +7,6 @@ import { By } from '@angular/platform-browser'; import { IgxIconComponent } from '../../icon/icon.component'; describe('IgxIconButton', () => { - configureTestSuite(); const baseClass = 'igx-icon-button'; const classes = { @@ -17,7 +15,7 @@ describe('IgxIconButton', () => { outlined: `${baseClass}--outlined`, }; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.spec.ts index 2dd6467d45e..3ea35f42e65 100644 --- a/projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.spec.ts @@ -7,7 +7,6 @@ import { FormsModule, UntypedFormGroup, UntypedFormBuilder, ReactiveFormsModule, import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxInputGroupComponent, IgxInputDirective } from '../../input-group/public_api'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { ControlsFunction } from '../../test-utils/controls-functions.spec'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { ViewEncapsulation } from '@angular/core'; @@ -499,8 +498,7 @@ describe('IgxDateTimeEditor', () => { let inputElement: DebugElement; let dateTimeEditorDirective: IgxDateTimeEditorDirective; describe('Key interaction tests', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1286,8 +1284,7 @@ describe('IgxDateTimeEditor', () => { describe('Form control tests: ', () => { let form: UntypedFormGroup; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/directives/divider/divider.spec.ts b/projects/igniteui-angular/src/lib/directives/divider/divider.spec.ts index 026868321b6..3c6eaa204ce 100644 --- a/projects/igniteui-angular/src/lib/directives/divider/divider.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/divider/divider.spec.ts @@ -2,11 +2,9 @@ import { Component } from '@angular/core'; import { TestBed, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxDividerDirective, IgxDividerType } from './divider.directive'; describe('Divider', () => { - configureTestSuite(); const baseClass = 'igx-divider'; const classes = { @@ -17,7 +15,7 @@ describe('Divider', () => { let fixture: ComponentFixture; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TestDividerComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.spec.ts b/projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.spec.ts index 6a3acf17d69..2fc26885b7c 100644 --- a/projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.spec.ts @@ -2,7 +2,6 @@ import { Component, ViewChildren, QueryList, ViewChild, ElementRef, TemplateRef, import { TestBed, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { UIInteractions, wait} from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { first } from 'rxjs/operators'; import { IgxInsertDropStrategy, IgxAppendDropStrategy, IgxPrependDropStrategy } from './drag-drop.strategy'; import { @@ -22,8 +21,7 @@ describe('General igxDrag/igxDrop', () => { let dropAreaRects = { top: 0, left: 0, right: 0, bottom: 0}; let dragDirsRects = [{ top: 0, left: 0, right: 0, bottom: 0}]; - configureTestSuite({ checkLeaks: true }); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TestDragDropComponent] }) @@ -1393,8 +1391,7 @@ describe('General igxDrag/igxDrop', () => { }); describe('Linked igxDrag/igxDrop ', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ TestDragDropLinkedSingleComponent, @@ -1876,8 +1873,7 @@ describe('Linked igxDrag/igxDrop ', () => { }); describe('Nested igxDrag elements', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TestDragDropNestedComponent] }) diff --git a/projects/igniteui-angular/src/lib/directives/filter/filter.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/filter/filter.directive.spec.ts index dd91e2c86da..ce4387a8ae6 100644 --- a/projects/igniteui-angular/src/lib/directives/filter/filter.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/filter/filter.directive.spec.ts @@ -4,11 +4,8 @@ import { IgxListItemComponent } from '../../list/list-item.component'; import { IgxListComponent } from '../../list/list.component'; import { IgxFilterDirective, IgxFilterOptions, IgxFilterPipe } from './filter.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; - describe('Filter', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [DeclarativeListTestComponent, DynamicListTestComponent], providers: [ diff --git a/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts index e960b7b34e6..8f0e8c5385b 100644 --- a/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.spec.ts @@ -3,13 +3,11 @@ import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxFocusTrapDirective } from './focus-trap.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; describe('igxFocusTrap', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, TrapFocusTestComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/directives/focus/focus.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/focus/focus.directive.spec.ts index 6c7a947f00c..30875d5ef94 100644 --- a/projects/igniteui-angular/src/lib/directives/focus/focus.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/focus/focus.directive.spec.ts @@ -3,7 +3,6 @@ import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxFocusDirective } from './focus.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { EditorProvider } from '../../core/edit-provider'; import { IgxCheckboxComponent } from '../../checkbox/checkbox.component'; import { IgxDatePickerComponent } from '../../date-picker/public_api'; @@ -12,8 +11,7 @@ import { IgxRadioComponent } from '../../radio/radio.component'; import { IgxSwitchComponent } from '../../switch/switch.component'; describe('igxFocus', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.spec.ts index 7c5872e7e4f..d4e2e4f1d3a 100644 --- a/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.spec.ts @@ -17,13 +17,12 @@ import { Pipe, PipeTransform } from '@angular/core'; -import { TestBed, ComponentFixture } from '@angular/core/testing'; +import { TestBed, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { BehaviorSubject, Observable } from 'rxjs'; import { IForOfState, IgxForOfDirective } from './for_of.directive'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxForOfScrollSyncService } from './for_of.sync.service'; import { PlatformUtil } from '../../core/utils'; @@ -42,10 +41,10 @@ describe('IgxForOf directive -', () => { }); describe('empty virtual component', () => { - configureTestSuite((() => { + beforeEach(waitForAsync(() => { return TestBed.configureTestingModule({ imports: [EmptyVirtualComponent] - }); + }).compileComponents(); })); it('should initialize empty directive', () => { @@ -59,10 +58,10 @@ describe('IgxForOf directive -', () => { describe('horizontal virtual component', () => { let fix: ComponentFixture; - configureTestSuite((() => { + beforeEach(waitForAsync(() => { return TestBed.configureTestingModule({ imports: [HorizontalVirtualComponent] - }); + }).compileComponents(); })); beforeEach(() => { @@ -222,10 +221,12 @@ describe('IgxForOf directive -', () => { describe('vertical virtual component', () => { let fix: ComponentFixture; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [VerticalVirtualNoDataComponent, VerticalVirtualComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + VerticalVirtualNoDataComponent, VerticalVirtualComponent + ] + }).compileComponents(); })); beforeEach(() => { @@ -386,10 +387,12 @@ describe('IgxForOf directive -', () => { describe('vertical virtual component no data', () => { let fix: ComponentFixture; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [VerticalVirtualNoDataComponent, VerticalVirtualComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + VerticalVirtualNoDataComponent, VerticalVirtualComponent + ] + }).compileComponents(); })); beforeEach(() => { @@ -422,10 +425,12 @@ describe('IgxForOf directive -', () => { describe('vertical and horizontal virtual component', () => { let fix: ComponentFixture; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [VirtualComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + VirtualComponent + ] + }).compileComponents(); })); beforeEach(() => { @@ -1002,10 +1007,12 @@ describe('IgxForOf directive -', () => { }); describe('variable size component', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [VirtualVariableSizeComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + VirtualVariableSizeComponent + ] + }).compileComponents(); })); it('should update display container classes when content state changes from virtualized to non-virtualized.', () => { @@ -1043,10 +1050,12 @@ describe('IgxForOf directive -', () => { }); describe('remote virtual component', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [RemoteVirtualizationComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + RemoteVirtualizationComponent + ] + }).compileComponents(); })); it('should allow remote virtualization', async () => { @@ -1080,10 +1089,12 @@ describe('IgxForOf directive -', () => { }); describe('remote virtual component with specified igxForTotalItemCount', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [RemoteVirtCountComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + RemoteVirtCountComponent + ] + }).compileComponents(); })); it('should apply remote virtualization correctly', async () => { @@ -1117,10 +1128,12 @@ describe('IgxForOf directive -', () => { }); describe('no width and height component', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoWidthAndHeightComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoWidthAndHeightComponent + ] + }).compileComponents(); })); it('should use itemSize when no width or height are provided', () => { @@ -1136,10 +1149,12 @@ describe('IgxForOf directive -', () => { }); describe('even odd first last functions', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [LocalVariablesComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + LocalVariablesComponent + ] + }).compileComponents(); })); it('should differentiate even odd items', () => { @@ -1164,10 +1179,12 @@ describe('IgxForOf directive -', () => { }); describe('`as` syntax', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [LocalVariablesAsComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + LocalVariablesAsComponent + ] + }).compileComponents(); })); it('should get correct data using `as` syntax', () => { @@ -1185,10 +1202,12 @@ describe('IgxForOf directive -', () => { describe('on destroy', () => { let fix: ComponentFixture; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [VerticalVirtualDestroyComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + VerticalVirtualDestroyComponent + ] + }).compileComponents(); })); beforeEach(() => { @@ -1230,10 +1249,12 @@ describe('IgxForOf directive -', () => { describe('on create new instance', () => { let fix: ComponentFixture; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [VerticalVirtualCreateComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + VerticalVirtualCreateComponent + ] + }).compileComponents(); })); beforeEach(() => { @@ -1241,7 +1262,6 @@ describe('IgxForOf directive -', () => { fix.componentInstance.data = dg.generateVerticalData(fix.componentInstance.cols); fix.componentRef.hostView.detectChanges(); fix.detectChanges(); - }); it('should reset scroll position if new component is created.', async () => { diff --git a/projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.spec.ts index b9df489d53b..d7fbf5bec89 100644 --- a/projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.spec.ts @@ -4,7 +4,6 @@ import { FormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { defineComponents, IgcRatingComponent } from 'igniteui-webcomponents'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgcFormControlDirective } from './form-control.directive'; describe('IgcFormControlDirective - ', () => { @@ -16,8 +15,7 @@ describe('IgcFormControlDirective - ', () => { describe('Unit tests: ', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { defineComponents(IgcRatingComponent); })); @@ -62,8 +60,7 @@ describe('IgcFormControlDirective - ', () => { }); describe('ngModel two-way binding tests: ', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ IgxFormsControlComponent diff --git a/projects/igniteui-angular/src/lib/directives/hint/hint.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/hint/hint.directive.spec.ts index a01c7b0c00d..b7561ac161c 100644 --- a/projects/igniteui-angular/src/lib/directives/hint/hint.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/hint/hint.directive.spec.ts @@ -2,15 +2,13 @@ import { Component } from '@angular/core'; import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxHintDirective } from './hint.directive'; describe('IgxHint', () => { - configureTestSuite(); const HINT_START_CSS_CLASS = 'igx-input-group__hint-item--start'; const HINT_END_CSS_CLASS = 'igx-input-group__hint-item--end'; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ HintComponent, diff --git a/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts index f5711dae3fe..5142e7030fd 100644 --- a/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/input/input.directive.spec.ts @@ -4,7 +4,6 @@ import { FormsModule, UntypedFormBuilder, ReactiveFormsModule, Validators, Untyp import { By } from '@angular/platform-browser'; import { IgxInputGroupComponent } from '../../input-group/input-group.component'; import { IgxInputDirective, IgxInputState } from './input.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { IgxLabelDirective } from '../label/label.directive'; import { IgxSuffixDirective } from '../suffix/suffix.directive'; @@ -25,8 +24,7 @@ const INPUT_GROUP_VALID_CSS_CLASS = 'igx-input-group--valid'; const INPUT_GROUP_INVALID_CSS_CLASS = 'igx-input-group--invalid'; describe('IgxInput', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ InputComponent, diff --git a/projects/igniteui-angular/src/lib/directives/layout/layout.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/layout/layout.directive.spec.ts index a849f18f2b1..0a416c690ae 100644 --- a/projects/igniteui-angular/src/lib/directives/layout/layout.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/layout/layout.directive.spec.ts @@ -3,11 +3,8 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxFlexDirective, IgxLayoutDirective } from './layout.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; - describe('IgxLayoutDirective', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TestFlexLayoutComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/directives/mask/mask.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/mask/mask.directive.spec.ts index 875da952d73..3bd850f15f6 100644 --- a/projects/igniteui-angular/src/lib/directives/mask/mask.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/mask/mask.directive.spec.ts @@ -3,7 +3,6 @@ import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { IgxMaskDirective } from './mask.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { Replaced } from './mask-parsing.service'; import { By } from '@angular/platform-browser'; @@ -11,9 +10,8 @@ import { IgxInputGroupComponent } from '../../input-group/input-group.component' import { IgxInputDirective } from '../input/input.directive'; describe('igxMask', () => { - configureTestSuite(); // TODO: Refactor tests to reuse components - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ AlphanumSpaceMaskComponent, diff --git a/projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.spec.ts index b8c3c2391f6..eaf9a19cba3 100644 --- a/projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.spec.ts @@ -3,14 +3,12 @@ import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { IgxRadioGroupDirective } from './radio-group.directive'; import { FormsModule, ReactiveFormsModule, UntypedFormGroup, UntypedFormBuilder, FormGroup, FormControl } from '@angular/forms'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { By } from '@angular/platform-browser'; import { IgxRadioComponent } from '../../radio/radio.component'; describe('IgxRadioGroupDirective', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ FormsModule, diff --git a/projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.spec.ts index 4cdf44f240a..71f5face630 100644 --- a/projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.spec.ts @@ -9,14 +9,12 @@ import { import { TestBed, ComponentFixture, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { IgxScrollInertiaDirective } from './scroll_inertia.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { wait } from '../../test-utils/ui-interactions.spec'; describe('Scroll Inertia Directive - Rendering', () => { let fix: ComponentFixture; - configureTestSuite({ checkLeaks: true }); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ IgxTestScrollInertiaDirective, diff --git a/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.spec.ts index 7e8ea0514a5..faa0a923117 100644 --- a/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.spec.ts @@ -3,12 +3,10 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { IgxTextHighlightDirective, IActiveHighlightInfo} from './text-highlight.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxTextHighlightService } from './text-highlight.service'; describe('IgxHighlight', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ HighlightLoremIpsumComponent @@ -299,6 +297,17 @@ describe('IgxHighlight', () => { expect(() => component.highlight.activateIfNecessary()).not.toThrowError(); }); + it('Should not throw when attempting to activate a non-existing group.', () => { + const fix = TestBed.createComponent(HighlightLoremIpsumComponent); + fix.detectChanges(); + + const component: HighlightLoremIpsumComponent = fix.debugElement.componentInstance; + component.highlightText('a'); + component.groupName = 'test1'; + fix.detectChanges(); + + expect(() => component.highlight.activateIfNecessary()).not.toThrowError(); + }); }); @Component({ diff --git a/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts b/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts index 80869480496..5a7a1794f7e 100644 --- a/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts +++ b/projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts @@ -318,7 +318,7 @@ export class IgxTextHighlightDirective implements AfterViewInit, AfterViewChecke public activateIfNecessary(): void { const group = this.service.highlightGroupsMap.get(this.groupName); - if (group.index >= 0 && group.column === this.column && group.row === this.row && compareMaps(this.metadata, group.metadata)) { + if (group && group.index >= 0 && group.column === this.column && group.row === this.row && compareMaps(this.metadata, group.metadata)) { this.activate(group.index); } } diff --git a/projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.spec.ts index b87e51cecc9..777675ef759 100644 --- a/projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.spec.ts @@ -2,12 +2,10 @@ import { Component, DebugElement, Directive, ElementRef, HostListener, ViewChild import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxTextSelectionDirective } from './text-selection.directive'; describe('IgxSelection', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ TriggerTextSelectionComponent, diff --git a/projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.spec.ts index 8f2b114d605..8180148ca75 100644 --- a/projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.spec.ts @@ -9,15 +9,13 @@ import { } from '../../services/public_api'; import { CancelableEventArgs } from '../../core/utils'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { first } from 'rxjs/operators'; import { OffsetMode } from '../../services/overlay/utilities'; describe('IgxToggle', () => { - configureTestSuite(); const HIDDEN_TOGGLER_CLASS = 'igx-toggle--hidden'; const TOGGLER_CLASS = 'igx-toggle'; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -507,7 +505,6 @@ describe('IgxToggle', () => { })); describe('overlay settings', () => { - // configureTestSuite(); it('should pass correct defaults from IgxToggleActionDirective and respect outsideClickClose', fakeAsync(() => { const fixture = TestBed.createComponent(IgxToggleActionTestComponent); fixture.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts b/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts index b4305593956..8ad613b4861 100644 --- a/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.spec.ts @@ -3,7 +3,6 @@ import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxTooltipSingleTargetComponent, IgxTooltipMultipleTargetsComponent, IgxTooltipPlainStringComponent, IgxTooltipWithToggleActionComponent } from '../../test-utils/tooltip-components.spec'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { HorizontalAlignment, VerticalAlignment, AutoPositionStrategy } from '../../services/public_api'; import { IgxTooltipDirective } from './tooltip.directive'; import { IgxTooltipTargetDirective } from './tooltip-target.directive'; @@ -12,13 +11,12 @@ const HIDDEN_TOOLTIP_CLASS = 'igx-tooltip--hidden'; const TOOLTIP_CLASS = 'igx-tooltip'; describe('IgxTooltip', () => { - configureTestSuite(); let fix; let tooltipNativeElement; let tooltipTarget: IgxTooltipTargetDirective; let button; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -36,7 +34,6 @@ describe('IgxTooltip', () => { }); describe('Single target with single tooltip', () => { - // configureTestSuite(); beforeEach(waitForAsync(() => { fix = TestBed.createComponent(IgxTooltipSingleTargetComponent); fix.detectChanges(); @@ -272,7 +269,6 @@ describe('IgxTooltip', () => { })); describe('Tooltip events', () => { - // configureTestSuite(); it('should emit the proper events when hovering/unhovering target', fakeAsync(() => { spyOn(tooltipTarget.tooltipShow, 'emit'); spyOn(tooltipTarget.tooltipHide, 'emit'); @@ -379,7 +375,6 @@ describe('IgxTooltip', () => { }); describe('Tooltip touch', () => { - // configureTestSuite(); it('IgxTooltip is shown/hidden when touching/untouching its target', fakeAsync(() => { touchElement(button); flush(); @@ -447,7 +442,6 @@ describe('IgxTooltip', () => { }); describe('Plain string tooltip input', () => { - // configureTestSuite(); beforeEach(waitForAsync(() => { fix = TestBed.createComponent(IgxTooltipPlainStringComponent); fix.detectChanges(); @@ -476,7 +470,6 @@ describe('IgxTooltip', () => { }); describe('Multiple targets with single tooltip', () => { - // configureTestSuite(); let targetOne: IgxTooltipTargetDirective; let targetTwo: IgxTooltipTargetDirective; let buttonOne; diff --git a/projects/igniteui-angular/src/lib/drop-down/drop-down.component.spec.ts b/projects/igniteui-angular/src/lib/drop-down/drop-down.component.spec.ts index d1285e3e6af..4aa4089fef9 100644 --- a/projects/igniteui-angular/src/lib/drop-down/drop-down.component.spec.ts +++ b/projects/igniteui-angular/src/lib/drop-down/drop-down.component.spec.ts @@ -9,7 +9,6 @@ import { ISelectionEventArgs } from './drop-down.common'; import { IgxTabContentComponent, IgxTabHeaderComponent, IgxTabItemComponent, IgxTabsComponent } from '../tabs/tabs/public_api'; import { UIInteractions, wait } from '../test-utils/ui-interactions.spec'; import { CancelableEventArgs, IBaseCancelableBrowserEventArgs } from '../core/utils'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { take } from 'rxjs/operators'; import { IgxDropDownGroupComponent } from './drop-down-group.component'; import { IgxForOfDirective } from '../directives/for-of/for_of.directive'; @@ -182,8 +181,7 @@ describe('IgxDropDown ', () => { }); describe('User interaction tests', () => { describe('Selection & key navigation', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -836,8 +834,7 @@ describe('IgxDropDown ', () => { })); }); describe('Other', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -929,8 +926,7 @@ describe('IgxDropDown ', () => { describe('Virtualization tests', () => { let scroll: IgxForOfDirective; let items; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1039,8 +1035,7 @@ describe('IgxDropDown ', () => { }); describe('Rendering', () => { describe('Grouped items', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1102,8 +1097,7 @@ describe('IgxDropDown ', () => { }); }); describe('Style and display density', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1136,8 +1130,7 @@ describe('IgxDropDown ', () => { }); describe('Input properties', () => { const customDDId = 'test-id-list'; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1206,8 +1199,7 @@ describe('IgxDropDown ', () => { }); }); describe('Anchor element', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts b/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts index b91939122ea..1095ef78351 100644 --- a/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts +++ b/projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.spec.ts @@ -6,7 +6,6 @@ import { IgxExpansionPanelComponent } from './expansion-panel.component'; import { ExpansionPanelHeaderIconPosition, IgxExpansionPanelHeaderComponent } from './expansion-panel-header.component'; import { IgxGridComponent } from '../grids/grid/public_api'; import { IgxExpansionPanelDescriptionDirective, IgxExpansionPanelIconDirective, IgxExpansionPanelTitleDirective } from './expansion-panel.directives'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { By } from '@angular/platform-browser'; import { IgxExpansionPanelBodyComponent } from './expansion-panel-body.component'; import { IgxListComponent } from '../list/list.component'; @@ -33,8 +32,7 @@ const enum IconPositionClass { } describe('igxExpansionPanel', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -49,7 +47,6 @@ describe('igxExpansionPanel', () => { describe('General tests: ', () => { - // configureTestSuite(); it('Should initialize the expansion panel component properly', () => { const fixture: ComponentFixture = TestBed.createComponent(IgxExpansionPanelListComponent); fixture.detectChanges(); @@ -294,7 +291,6 @@ describe('igxExpansionPanel', () => { }); describe('Expansion tests: ', () => { - // configureTestSuite(); const verifyPanelExpansionState = ( collapsed: boolean, panel: IgxExpansionPanelComponent, @@ -966,7 +962,6 @@ describe('igxExpansionPanel', () => { }); describe('Aria tests', () => { - // configureTestSuite(); it('Should properly apply default aria properties', fakeAsync(() => { const fixture = TestBed.createComponent(IgxExpansionPanelListComponent); fixture.detectChanges(); @@ -1089,7 +1084,6 @@ describe('igxExpansionPanel', () => { }); describe('Rendering tests: ', () => { - // configureTestSuite(); it('Should apply all appropriate classes on combo initialization', fakeAsync(() => { const fixture: ComponentFixture = TestBed.createComponent(IgxExpansionPanelSampleComponent); fixture.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.spec.ts b/projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.spec.ts index c01a57ec3ec..343d6d9a7b5 100644 --- a/projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.spec.ts +++ b/projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.spec.ts @@ -4,7 +4,6 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { noop } from 'rxjs'; import { IgxAngularAnimationService } from '../services/animation/angular-animation-service'; import { AnimationService } from '../services/animation/animation'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { ANIMATION_TYPE, ToggleAnimationPlayer } from './toggle-animation-component'; import { growVerIn, growVerOut } from 'igniteui-angular/animations'; @@ -15,9 +14,8 @@ class MockTogglePlayer extends ToggleAnimationPlayer { } describe('Toggle animation component', () => { - configureTestSuite(); const mockBuilder = jasmine.createSpyObj('mockBuilder', ['build'], {}); - beforeAll(() => { + beforeEach(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule diff --git a/projects/igniteui-angular/src/lib/grids/columns/column.component.ts b/projects/igniteui-angular/src/lib/grids/columns/column.component.ts index dce87662e5b..2e12acbf698 100644 --- a/projects/igniteui-angular/src/lib/grids/columns/column.component.ts +++ b/projects/igniteui-angular/src/lib/grids/columns/column.component.ts @@ -405,23 +405,38 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy } /** - * @hidden + * Emitted when the column is hidden or shown. + * + * ```html + * + * + * ``` + * */ @Output() public hiddenChange = new EventEmitter(); - /** @hidden */ + /** + * Emitted when the column expanded or collapsed. + * + * ```html + * + * + * ``` + * + */ @Output() public expandedChange = new EventEmitter(); /** @hidden */ @Output() public collapsibleChange = new EventEmitter(); + /** @hidden */ @Output() public visibleWhenCollapsedChange = new EventEmitter(); - /** @hidden */ + /** @hidden @internal */ @Output() public columnChange = new EventEmitter(); @@ -861,13 +876,25 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy public additionalTemplateContext: any; /** - * @hidden + * Emitted when the column width changes. + * + * ```html + * + * + * ``` + * */ @Output() public widthChange = new EventEmitter(); /** - * @hidden + * Emitted when the column is pinned/unpinned. + * + * ```html + * + * + * ``` + * */ @Output() public pinnedChange = new EventEmitter(); diff --git a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts index fb89132ee38..d63252357ed 100644 --- a/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts +++ b/projects/igniteui-angular/src/lib/grids/grid-base.directive.ts @@ -26,8 +26,8 @@ import { OnInit, Optional, Output, - QueryList, TemplateRef, + QueryList, ViewChild, ViewChildren, ViewContainerRef @@ -994,13 +994,25 @@ export abstract class IgxGridBaseDirective implements GridType, public gridCopy = new EventEmitter(); /** - * @hidden @internal + * Emitted when the rows are expanded or collapsed. + * + * @example + * ```html + * + * ``` */ @Output() public expansionStatesChange = new EventEmitter>(); /* blazorInclude */ - /** @hidden @internal */ + /** + * Emitted when the rows are selected or deselected. + * + * @example + * ```html + * + * ``` + */ @Output() public selectedRowsChange = new EventEmitter(); @@ -1038,7 +1050,7 @@ export abstract class IgxGridBaseDirective implements GridType, public rowPinned = new EventEmitter(); /** - * Emmited when the active node is changed. + * Emitted when the active node is changed. * * @example * ``` diff --git a/projects/igniteui-angular/src/lib/grids/grid/cell.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/cell.spec.ts index 15965570927..aff3c464c83 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/cell.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/cell.spec.ts @@ -1,9 +1,8 @@ import { Component, ViewChild, OnInit, NgZone, DebugElement } from '@angular/core'; -import { TestBed, fakeAsync } from '@angular/core/testing'; +import { TestBed, fakeAsync, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './public_api'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { HammerGesturesManager } from '../../core/touch'; import { PlatformUtil } from '../../core/utils'; @@ -22,11 +21,12 @@ describe('IgxGrid - Cell component #grid', () => { let cellElem: DebugElement; let firstCell: CellType; let firstCellElem: CellType; - - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, NoScrollsComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, NoScrollsComponent + ] + }).compileComponents(); })); beforeEach(() => { @@ -155,11 +155,11 @@ describe('IgxGrid - Cell component #grid', () => { let fix; let grid: IgxGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [NoopAnimationsModule, VirtualGridComponent], providers: [{ provide: NgZone, useFactory: () => new TestNgZone() }] - }); + }).compileComponents(); })); beforeEach(fakeAsync(() => { @@ -268,10 +268,12 @@ describe('IgxGrid - Cell component #grid', () => { }); describe('iOS tests', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, NoScrollsComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, NoScrollsComponent + ] + }).compileComponents(); })); it('Should not attach doubletap handler for non-iOS', () => { @@ -324,10 +326,12 @@ describe('IgxGrid - Cell component #grid', () => { }); describe('No column widths', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, NoColumnWidthGridComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, NoColumnWidthGridComponent + ] + }).compileComponents(); })); it('should not make last column width 0 when no column width is set', () => { @@ -342,10 +346,12 @@ describe('IgxGrid - Cell component #grid', () => { }); describe('Cells styles', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, ConditionalCellStyleTestComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, ConditionalCellStyleTestComponent + ] + }).compileComponents(); })); it('should be able to conditionally style cells', fakeAsync(() => { @@ -372,10 +378,12 @@ describe('IgxGrid - Cell component #grid', () => { }); describe('Cell properties', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, IgxGridDateTimeColumnComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, IgxGridDateTimeColumnComponent + ] + }).compileComponents(); })); it('verify that value of the cell title is correctly', fakeAsync(() => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/column-group.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/column-group.spec.ts index 9e25636960f..e78c32fe29c 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/column-group.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/column-group.spec.ts @@ -7,7 +7,6 @@ import { IgxColumnGroupComponent } from '../columns/column-group.component'; import { By } from '@angular/platform-browser'; import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxGridHeaderComponent } from '../headers/grid-header.component'; import { GridSummaryFunctions, GridFunctions } from '../../test-utils/grid-functions.spec'; import { wait } from '../../test-utils/ui-interactions.spec'; @@ -28,11 +27,11 @@ const GRID_COL_GROUP_THEAD_GROUP_CLASS = 'igx-grid-thead__group'; describe('IgxGrid - multi-column headers #grid', () => { - let fixture: ComponentFixture; let grid: IgxGridComponent; let componentInstance; + let fixture: ComponentFixture; + let grid: IgxGridComponent; + let componentInstance; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1204,7 +1203,6 @@ describe('IgxGrid - multi-column headers #grid', () => { }); describe('Column moving ', () => { - // configureTestSuite(); beforeEach(fakeAsync(() => { fixture = TestBed.createComponent(ColumnGroupTestComponent); fixture.detectChanges(); diff --git a/projects/igniteui-angular/src/lib/grids/grid/column-hiding.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/column-hiding.spec.ts index cf8e1a00c68..75f886a5bf1 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/column-hiding.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/column-hiding.spec.ts @@ -1,12 +1,11 @@ import { DebugElement } from '@angular/core'; -import { TestBed, fakeAsync, tick, ComponentFixture } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { ColumnHidingTestComponent, ColumnGroupsHidingTestComponent } from '../../test-utils/grid-base-components.spec'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { GridSelectionMode, ColumnDisplayOrder } from '../common/enums'; import { ControlsFunction } from '../../test-utils/controls-functions.spec'; import { IgxColumnActionsComponent } from '../column-actions/column-actions.component'; @@ -23,14 +22,14 @@ describe('Column Hiding UI #grid', () => { const verifyColumnIsHidden = GridFunctions.verifyColumnIsHidden; const getColumnHidingButton = GridFunctions.getColumnHidingButton; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, ColumnHidingTestComponent, ColumnGroupsHidingTestComponent ] - }); + }).compileComponents(); })); describe('Basic', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/column-moving.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/column-moving.spec.ts index 9735f4b849f..5d527637f60 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/column-moving.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/column-moving.spec.ts @@ -1,5 +1,5 @@ import { DebugElement } from '@angular/core'; -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -12,7 +12,6 @@ import { MultiColumnHeadersComponent } from '../../test-utils/grid-samples.spec'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxGridComponent } from './grid.component'; import { GridSelectionFunctions, GridFunctions } from '../../test-utils/grid-functions.spec'; import { SortingDirection } from '../../data-operations/sorting-strategy'; @@ -25,8 +24,9 @@ describe('IgxGrid - Column Moving #grid', () => { const COLUMN_RESIZE_CLASS = '.igx-grid-th__resize-line'; let fixture; let grid: IgxGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ FormsModule, NoopAnimationsModule, @@ -35,15 +35,14 @@ describe('IgxGrid - Column Moving #grid', () => { MovableColumnsLargeComponent, MultiColumnHeadersComponent ] - }); + }).compileComponents(); })); describe('', () => { beforeEach(() => { fixture = TestBed.createComponent(MovableColumnsComponent); - fixture.detectChanges(); grid = fixture.componentInstance.grid; - grid.moving = true; + fixture.detectChanges(); }); it('Should be able to reorder columns.', fakeAsync(() => { @@ -717,9 +716,8 @@ describe('IgxGrid - Column Moving #grid', () => { describe('', () => { beforeEach(() => { fixture = TestBed.createComponent(MovableTemplatedColumnsComponent); - fixture.detectChanges(); grid = fixture.componentInstance.grid; - grid.moving = true; + fixture.detectChanges(); }); it('Should reorder movable columns with templated headers.', (async () => { @@ -753,9 +751,8 @@ describe('IgxGrid - Column Moving #grid', () => { describe('', () => { beforeEach(() => { fixture = TestBed.createComponent(MovableColumnsLargeComponent); - fixture.detectChanges(); grid = fixture.componentInstance.grid; - grid.moving = true; + fixture.detectChanges(); }); it('Should be able to scroll forwards to reorder columns that are out of view.', (async () => { @@ -1349,7 +1346,7 @@ describe('IgxGrid - Column Moving #grid', () => { expect(grid.getColumnByName('ID').pinned).toBeFalsy(); })); - + it('Pinning - Should not be able to programmatically move unpinned column if disablePinning is enabled for all unpinned columns', (async () => { // step 1 - pin some columns grid.getColumnByName('Address').pinned = true; @@ -1386,9 +1383,9 @@ describe('IgxGrid - Column Moving #grid', () => { describe('', () => { beforeEach(() => { fixture = TestBed.createComponent(MultiColumnHeadersComponent); - fixture.detectChanges(); grid = fixture.componentInstance.grid; grid.moving = true; + fixture.detectChanges(); }); it('MCH - should reorder only columns on the same level (top level simple column).', (async () => { @@ -1880,7 +1877,7 @@ describe('IgxGrid - Column Moving #grid', () => { expect(columnsList[4].field).toEqual('Missing'); })); - it('MCH - should not break selection and keyboard navigation when reordering columns.', (async () => { + it('MCH - should not break selection and keyboard navigation when reordering columns.', async () => { // step 1 - select a cell from 'ContactName' column const cell = grid.gridAPI.get_cell_by_index(0, 'ContactName'); @@ -1913,7 +1910,7 @@ describe('IgxGrid - Column Moving #grid', () => { GridSelectionFunctions.verifySelectedRange(grid, 0, 0, 3, 3); expect(grid.getSelectedData()).toEqual([{ContactName: 'Maria Anders' }]); - })); + }); it('MCH - should pin only top level columns.', (async () => { fixture.componentInstance.isPinned = true; diff --git a/projects/igniteui-angular/src/lib/grids/grid/column-pinning.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/column-pinning.spec.ts index f710cf93840..4868ab888ff 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/column-pinning.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/column-pinning.spec.ts @@ -9,7 +9,6 @@ import { ColumnPinningWithTemplateTestComponent } from '../../test-utils/grid-base-components.spec'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { ControlsFunction } from '../../test-utils/controls-functions.spec'; import { IgxColumnActionsComponent } from '../column-actions/column-actions.component'; import { wait } from '../../test-utils/ui-interactions.spec'; @@ -23,9 +22,7 @@ describe('Column Pinning UI #grid', () => { const verifyCheckbox = ControlsFunction.verifyCheckbox; const verifyColumnIsPinned = GridFunctions.verifyColumnIsPinned; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/grid/column-resizing.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/column-resizing.spec.ts index b510df76d26..37278bb6e6b 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/column-resizing.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/column-resizing.spec.ts @@ -1,5 +1,5 @@ import { Component, DebugElement, OnInit, ViewChild } from '@angular/core'; -import { TestBed, fakeAsync, tick, ComponentFixture } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Calendar } from '../../calendar/public_api'; @@ -8,7 +8,6 @@ import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { GridTemplateStrings, ColumnDefinitions } from '../../test-utils/template-strings.spec'; import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { MultiColumnHeadersComponent } from '../../test-utils/grid-samples.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; import { IgxCellHeaderTemplateDirective, IgxCellTemplateDirective } from '../columns/templates.directive'; import { IgxAvatarComponent } from '../../avatar/avatar.component'; @@ -21,8 +20,8 @@ describe('IgxGrid - Deferred Column Resizing #grid', () => { const COLUMN_HEADER_GROUP_CLASS = '.igx-grid-thead__item'; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ MultiColumnHeadersComponent, NoopAnimationsModule, @@ -33,7 +32,7 @@ describe('IgxGrid - Deferred Column Resizing #grid', () => { ColGridComponent, ColPercentageGridComponent ] - }); + }).compileComponents(); })); describe('Base tests: ', () => { @@ -587,7 +586,7 @@ describe('IgxGrid - Deferred Column Resizing #grid', () => { expect(grid.columnList.get(0).width).toBe('25%'); grid.columnList.get(0).autosize(); fixture.detectChanges(); - expect(grid.columnList.get(0).width).toBe('31%'); + expect(grid.columnList.get(0).width).toBe('32%'); })); it('should autosize column with % width on double click.', fakeAsync(() => { @@ -599,7 +598,7 @@ describe('IgxGrid - Deferred Column Resizing #grid', () => { UIInteractions.simulateMouseEvent('dblclick', headerResArea, 0, 0); tick(200); fixture.detectChanges(); - expect(grid.columnList.get(0).width).toBe('31%'); + expect(grid.columnList.get(0).width).toBe('32%'); })); }); diff --git a/projects/igniteui-angular/src/lib/grids/grid/column-selection.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/column-selection.spec.ts index e8ad627d92a..98e69072263 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/column-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/column-selection.spec.ts @@ -1,5 +1,4 @@ -import { TestBed, ComponentFixture, fakeAsync, tick } from '@angular/core/testing'; -import { configureTestSuite } from '../../test-utils/configure-suite'; +import { TestBed, ComponentFixture, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { IgxGridComponent } from './grid.component'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { ProductsComponent, ColumnSelectionGroupTestComponent } from '../../test-utils/grid-samples.spec'; @@ -31,10 +30,12 @@ describe('IgxGrid - Column Selection #grid', () => { let fix: ComponentFixture; let grid: IgxGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [ProductsComponent, ColumnSelectionGroupTestComponent, NoopAnimationsModule] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + ProductsComponent, ColumnSelectionGroupTestComponent, NoopAnimationsModule + ] + }).compileComponents(); })); describe('Base tests: ', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/column.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/column.spec.ts index 7f4ee5f57d5..591b01000ed 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/column.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/column.spec.ts @@ -17,7 +17,6 @@ import { IgxGridPercentColumnComponent, IgxGridDateTimeColumnComponent } from '../../test-utils/grid-samples.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; @@ -39,8 +38,8 @@ describe('IgxGrid - Column properties #grid', () => { const COLUMN_HEADER_CLASS = '.igx-grid-th'; const COLUMN_HEADER_GROUP_CLASS = '.igx-grid-thead__item'; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ ColumnCellFormatterComponent, ColumnHiddenFromMarkupComponent, @@ -58,7 +57,7 @@ describe('IgxGrid - Column properties #grid', () => { ResizableColumnsComponent, DOMAttributesAsSettersComponent ] - }); + }).compileComponents(); })); it('should correctly initialize column templates', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-add-row.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-add-row.spec.ts index 00d47b7d39d..c04441e4637 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-add-row.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-add-row.spec.ts @@ -1,7 +1,6 @@ import { IgxGridComponent } from './public_api'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; -import { configureTestSuite } from '../../test-utils/configure-suite'; +import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { DebugElement } from '@angular/core'; import { GridFunctions, GridSummaryFunctions } from '../../test-utils/grid-functions.spec'; import { @@ -38,8 +37,9 @@ describe('IgxGrid - Row Adding #grid', () => { const endEvent = new AnimationEvent('animationend'); animationElem.dispatchEvent(endEvent); }; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxAddRowComponent, @@ -48,7 +48,7 @@ describe('IgxGrid - Row Adding #grid', () => { ColumnLayoutTestComponent, DefaultGridMasterDetailComponent ] - }); + }).compileComponents(); })); describe('General tests', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-cell-editing.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-cell-editing.spec.ts index 7cfb9e4dc46..3dc024909d5 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-cell-editing.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-cell-editing.spec.ts @@ -1,9 +1,8 @@ -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './public_api'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; import { @@ -25,8 +24,9 @@ const CELL_CLASS_IN_EDIT_MODE = 'igx-grid__td--editing'; const EDITED_CELL_CSS_CLASS = 'igx-grid__td--edited'; describe('IgxGrid - Cell Editing #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, CellEditingTestComponent, @@ -34,7 +34,7 @@ describe('IgxGrid - Cell Editing #grid', () => { ColumnEditablePropertyTestComponent, SelectionWithTransactionsComponent ] - }); + }).compileComponents(); })); describe('Base Tests', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-cell-selection.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-cell-selection.spec.ts index a3a6f9795f0..0f4e5dae2ae 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-cell-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-cell-selection.spec.ts @@ -1,7 +1,6 @@ -import { TestBed, fakeAsync, tick, ComponentFixture } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './public_api'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { SelectionWithScrollsComponent, SelectionWithTransactionsComponent, @@ -20,8 +19,8 @@ import { DropPosition } from '../moving/moving.service'; import { IgxGridGroupByRowComponent } from './groupby-row.component'; describe('IgxGrid - Cell selection #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, SelectionWithScrollsComponent, @@ -29,7 +28,7 @@ describe('IgxGrid - Cell selection #grid', () => { CellSelectionNoneComponent, CellSelectionSingleComponent ] - }); + }).compileComponents(); })); describe('Base', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-clipboard.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-clipboard.spec.ts index 09e9552301e..72a109ee81e 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-clipboard.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-clipboard.spec.ts @@ -1,8 +1,7 @@ -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './public_api'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxGridClipboardComponent } from '../../test-utils/grid-samples.spec'; import { CancelableEventArgs } from '../../core/utils'; import { take } from 'rxjs/operators'; @@ -14,10 +13,12 @@ describe('IgxGrid - Clipboard #grid', () => { let fix: ComponentFixture; let grid: IgxGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [IgxGridClipboardComponent, NoopAnimationsModule] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + IgxGridClipboardComponent, NoopAnimationsModule + ] + }).compileComponents(); })); beforeEach(() => { @@ -35,7 +36,7 @@ describe('IgxGrid - Clipboard #grid', () => { const eventData = dispatchCopyEventOnGridBody(fix); expect(copySpy).toHaveBeenCalledTimes(1); expect(eventData). - + toEqual('ProductNameHeader\tDownloads\tReleased\r\n** Ignite UI for JavaScript **\t254\tfalse\r\n** NetAdvantage **\t127\ttrue\r\n'); }); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-collapsible-columns.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-collapsible-columns.spec.ts index a7cbe6fefc7..fa9b478f5c1 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-collapsible-columns.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-collapsible-columns.spec.ts @@ -1,7 +1,6 @@ -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { IgxGridComponent } from './grid.component'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { CollapsibleColumnGroupTestComponent, CollapsibleGroupsTemplatesTestComponent, @@ -23,15 +22,15 @@ describe('IgxGrid - multi-column headers #grid', () => { let countryCol; let emptyCol; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, CollapsibleColumnGroupTestComponent, CollapsibleGroupsTemplatesTestComponent, CollapsibleGroupsDynamicColComponent ] - }); + }).compileComponents(); })); describe('Base Tests', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-advanced.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-advanced.spec.ts index 8e591807f24..9593b9e24b3 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-advanced.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-advanced.spec.ts @@ -1,8 +1,7 @@ -import { fakeAsync, TestBed, tick, flush, ComponentFixture } from '@angular/core/testing'; +import { fakeAsync, TestBed, tick, flush, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxNumberFilteringOperand, IgxStringFilteringOperand @@ -31,8 +30,8 @@ import { QueryBuilderSelectors } from '../../query-builder/query-builder.common' import { IgxHGridRemoteOnDemandComponent } from '../hierarchical-grid/hierarchical-grid.spec'; describe('IgxGrid - Advanced Filtering #grid - ', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridAdvancedFilteringColumnGroupComponent, @@ -46,7 +45,7 @@ describe('IgxGrid - Advanced Filtering #grid - ', () => { IgxHierarchicalGridExportComponent, IgxHGridRemoteOnDemandComponent ] - }); + }).compileComponents(); })); describe('General tests - ', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts index 1f10776b013..4a274ce9815 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering-ui.spec.ts @@ -1,11 +1,10 @@ import { DebugElement } from '@angular/core'; -import { fakeAsync, TestBed, tick, flush, ComponentFixture } from '@angular/core/testing'; +import { fakeAsync, TestBed, tick, flush, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxInputDirective } from '../../directives/input/input.directive'; import { IgxGridComponent } from './grid.component'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxNumberFilteringOperand, IgxDateFilteringOperand, @@ -66,9 +65,8 @@ describe('IgxGrid - Filtering Row UI actions #grid', () => { registerLocaleData(localeDe); registerLocaleData(localeFr); - - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridFilteringComponent, @@ -78,7 +76,7 @@ describe('IgxGrid - Filtering Row UI actions #grid', () => { IgxGridDatesFilteringComponent, IgxGridFilteringNumericComponent ] - }); + }).compileComponents(); })); describe(null, () => { @@ -1753,7 +1751,7 @@ describe('IgxGrid - Filtering Row UI actions #grid', () => { })); it(`Should remove first condition chip when click 'clear' button and focus 'more' icon.`, fakeAsync(() => { - grid.getColumnByName('ProductName').width = '160px'; + grid.getColumnByName('ProductName').width = '200px'; tick(DEBOUNCE_TIME); fix.detectChanges(); @@ -3191,8 +3189,8 @@ describe('IgxGrid - Filtering Row UI actions #grid', () => { }); describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridFilteringComponent, @@ -3203,7 +3201,7 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { IgxGridExternalESFComponent, IgxGridExternalESFTemplateComponent ] - }); + }).compileComponents(); })); describe(null, () => { @@ -4366,10 +4364,10 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { // Verify display container height. const displayContainer = searchComponent.querySelector('igx-display-container'); const displayContainerRect = displayContainer.getBoundingClientRect(); - expect(displayContainerRect.height).toBe(240, 'incorrect search display container height'); + expect(displayContainerRect.height > 210 && displayContainerRect.height < 220).toBe(true, 'incorrect search display container height'); // Verify rendered list items count. const listItems = displayContainer.querySelectorAll('igx-list-item'); - expect(listItems.length).toBe(10, 'incorrect rendered list items count'); + expect(listItems.length).toBe(9, 'incorrect rendered list items count'); })); it('should correctly display all items in search list after filtering it', (async () => { @@ -7035,13 +7033,13 @@ describe('IgxGrid - Filtering actions - Excel style filtering #grid', () => { describe('IgxGrid - Custom Filtering Strategy #grid', () => { let fix: ComponentFixture; let grid: IgxGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, CustomFilteringStrategyComponent ] - }); + }).compileComponents(); })); beforeEach(fakeAsync(() => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering.spec.ts index ea11c13df6a..5a6c9d66863 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-filtering.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-filtering.spec.ts @@ -1,9 +1,8 @@ -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { FilteringLogic, IFilteringExpression } from '../../data-operations/filtering-expression.interface'; import { IgxGridComponent } from './grid.component'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxChipComponent } from '../../chips/public_api'; import { IgxStringFilteringOperand, @@ -21,12 +20,12 @@ import { NoopFilteringStrategy } from '../../data-operations/filtering-strategy' import { ExpressionUI } from '../filtering/excel-style/common'; describe('IgxGrid - Filtering actions #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ IgxGridFilteringComponent, NoopAnimationsModule ] - }); + }).compileComponents(); })); let fix; let grid; @@ -1159,13 +1158,13 @@ describe('IgxGrid - Filtering actions #grid', () => { }); describe('IgxGrid - Filtering expression tree bindings #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridFilteringBindingComponent ] - }); + }).compileComponents(); })); let fix; let grid: IgxGridComponent; diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav-headers.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav-headers.spec.ts index a78181b71ee..d7a37146f98 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav-headers.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav-headers.spec.ts @@ -1,10 +1,9 @@ -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; import { clearGridSubs, setupGridScrollDetection } from '../../test-utils/helper-utils.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { SelectionWithScrollsComponent, MRLTestComponent, @@ -24,10 +23,12 @@ describe('IgxGrid - Headers Keyboard navigation #grid', () => { let fix; let grid: IgxGridComponent; let gridHeader: IgxGridHeaderRowComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [SelectionWithScrollsComponent, NoopAnimationsModule] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + SelectionWithScrollsComponent, NoopAnimationsModule + ] + }).compileComponents(); })); beforeEach(() => { @@ -727,10 +728,12 @@ describe('IgxGrid - Headers Keyboard navigation #grid', () => { let fix; let grid: IgxGridComponent; let gridHeader: IgxGridHeaderRowComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [MRLTestComponent, NoopAnimationsModule] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + MRLTestComponent, NoopAnimationsModule + ] + }).compileComponents(); })); beforeEach(() => { @@ -929,10 +932,12 @@ describe('IgxGrid - Headers Keyboard navigation #grid', () => { let fix; let grid: IgxGridComponent; let gridHeader: IgxGridHeaderRowComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [ColumnGroupsNavigationTestComponent, NoopAnimationsModule] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + ColumnGroupsNavigationTestComponent, NoopAnimationsModule + ] + }).compileComponents(); })); beforeEach(() => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav.spec.ts index 98865bad8c4..b5d9f025d2d 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-keyBoardNav.spec.ts @@ -1,11 +1,10 @@ -import { TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { IGridCellEventArgs, IActiveNodeChangeEventArgs } from '../common/events'; import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; import { clearGridSubs, setupGridScrollDetection } from '../../test-utils/helper-utils.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { VirtualGridComponent, NoScrollsComponent, @@ -25,10 +24,12 @@ describe('IgxGrid - Keyboard navigation #grid', () => { let fix; let grid: IgxGridComponent; let gridContent: DebugElement; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoScrollsComponent, NoopAnimationsModule] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoScrollsComponent, NoopAnimationsModule + ] + }).compileComponents(); })); beforeEach(() => { @@ -206,10 +207,12 @@ describe('IgxGrid - Keyboard navigation #grid', () => { let fix; let grid: IgxGridComponent; let gridContent: DebugElement; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, VirtualGridComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + VirtualGridComponent, NoopAnimationsModule + ] + }).compileComponents(); })); beforeEach(() => { @@ -686,10 +689,12 @@ describe('IgxGrid - Keyboard navigation #grid', () => { }); describe('Group By navigation ', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [IgxGridGroupByComponent, NoopAnimationsModule] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + IgxGridGroupByComponent, NoopAnimationsModule + ] + }).compileComponents(); })); let fix; diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-mrl-keyboard-nav.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-mrl-keyboard-nav.spec.ts index b9ba2d1ae66..13fa654dde0 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-mrl-keyboard-nav.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-mrl-keyboard-nav.spec.ts @@ -4,7 +4,6 @@ import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { SampleTestData } from '../../test-utils/sample-test-data.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; import { clearGridSubs, setupGridScrollDetection } from '../../test-utils/helper-utils.spec'; import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; @@ -22,9 +21,7 @@ const CELL_BLOCK = `.${GRID_MRL_BLOCK}`; describe('IgxGrid Multi Row Layout - Keyboard navigation #grid', () => { let fix: ComponentFixture; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, ColumnLayoutTestComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-row-editing.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-row-editing.spec.ts index bc7a2bd02cd..9d5435d1bb2 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-row-editing.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-row-editing.spec.ts @@ -8,7 +8,6 @@ import { IgxColumnComponent } from '../columns/column.component'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; import { IgxStringFilteringOperand, IgxNumberFilteringOperand } from '../../data-operations/filtering-condition'; import { TransactionType, Transaction } from '../../services/public_api'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; import { clearGridSubs, setElementSize, setupGridScrollDetection } from '../../test-utils/helper-utils.spec'; import { GridFunctions, GridSummaryFunctions } from '../../test-utils/grid-functions.spec'; @@ -37,8 +36,8 @@ const COLUMN_HEADER_GROUP_CLASS = '.igx-grid-thead__item'; const DEBOUNCETIME = 30; describe('IgxGrid - Row Editing #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridRowEditingComponent, @@ -50,7 +49,7 @@ describe('IgxGrid - Row Editing #grid', () => { IgxGridCustomRowEditTemplateComponent, VirtualGridComponent ] - }); + }).compileComponents(); })); describe('General tests', () => { @@ -73,6 +72,7 @@ describe('IgxGrid - Row Editing #grid', () => { }); it('Should throw a warning when [rowEditable] is set on a grid w/o [primaryKey]', () => { + jasmine.getEnv().allowRespy(true); grid.primaryKey = null; grid.rowEditable = false; fix.detectChanges(); @@ -89,6 +89,7 @@ describe('IgxGrid - Row Editing #grid', () => { fix.detectChanges(); expect(console.warn).toHaveBeenCalledWith('The grid must have a `primaryKey` specified when using `rowEditable`!'); expect(console.warn).toHaveBeenCalledTimes(1); + jasmine.getEnv().allowRespy(false); }); it('Should be able to enter edit mode on dblclick, enter and f2', () => { @@ -150,7 +151,6 @@ describe('IgxGrid - Row Editing #grid', () => { spyOn(grid.cellEdit, 'emit').and.callThrough(); spyOn(grid.cellEditDone, 'emit').and.callThrough(); spyOn(grid.cellEditExit, 'emit').and.callThrough(); - spyOn(grid.cellEditExit, 'emit').and.callThrough(); spyOn(grid.rowEditEnter, 'emit').and.callThrough(); spyOn(grid.rowEdit, 'emit').and.callThrough(); spyOn(grid.rowEditExit, 'emit').and.callThrough(); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-row-pinning.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-row-pinning.spec.ts index 7c8d7bb8ba7..bc7e5b42feb 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-row-pinning.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-row-pinning.spec.ts @@ -1,11 +1,10 @@ import { ViewChild, Component, DebugElement, OnInit, QueryList } from '@angular/core'; -import { TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { IgxGridDetailTemplateDirective } from '../public_api'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { ColumnPinningPosition, RowPinningPosition } from '../common/enums'; import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; @@ -26,9 +25,8 @@ describe('Row Pinning #grid', () => { let fix; let grid: IgxGridComponent; - - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, GridRowConditionalStylingComponent, @@ -38,7 +36,7 @@ describe('Row Pinning #grid', () => { GridRowPinningWithTransactionsComponent, GridRowPinningWithInitialPinningComponent ] - }); + }).compileComponents(); })); describe('', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-row-selection.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-row-selection.spec.ts index d842c41ab56..bea538461a7 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-row-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-row-selection.spec.ts @@ -3,7 +3,6 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; import { IgxStringFilteringOperand, IgxNumberFilteringOperand, IgxBooleanFilteringOperand } from '../../data-operations/filtering-condition'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { RowSelectionComponent, SelectionWithScrollsComponent, @@ -25,9 +24,8 @@ const SCROLL_DEBOUNCETIME = 100; describe('IgxGrid - Row Selection #grid', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-summary.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-summary.spec.ts index 6506ab34d91..b40998cd154 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-summary.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-summary.spec.ts @@ -1,11 +1,10 @@ īģŋimport { Component, DebugElement, ViewChild } from '@angular/core'; -import { fakeAsync, TestBed, tick, ComponentFixture, flush } from '@angular/core/testing'; +import { fakeAsync, TestBed, tick, ComponentFixture, flush, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; import { GridFunctions, GridSummaryFunctions } from '../../test-utils/grid-functions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { ProductsComponent, SummaryColumnComponent, @@ -32,8 +31,8 @@ describe('IgxGrid - Summaries #grid', () => { const EMPTY_SUMMARY_CLASS = 'igx-grid-summary--empty'; const DEBOUNCETIME = 30; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, CustomSummariesComponent, @@ -43,7 +42,7 @@ describe('IgxGrid - Summaries #grid', () => { SummariesGroupByComponent, SummariesGroupByTransactionsComponent ] - }); + }).compileComponents(); })); describe('Base tests: ', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-toolbar.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-toolbar.spec.ts index c844b346d9f..a1e0c06b827 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-toolbar.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-toolbar.spec.ts @@ -1,9 +1,8 @@ import { Component, ViewChild } from '@angular/core'; -import { TestBed, fakeAsync, ComponentFixture, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, ComponentFixture, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { AbsoluteScrollStrategy, GlobalPositionStrategy, IgxCsvExporterService, IgxExcelExporterService } from '../../services/public_api'; import { IgxGridComponent } from './public_api'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { GridFunctions } from "../../test-utils/grid-functions.spec"; import { By } from "@angular/platform-browser"; import { IgxGridToolbarComponent } from '../toolbar/grid-toolbar.component'; @@ -35,8 +34,9 @@ const DATA = [ ]; describe('IgxGrid - Grid Toolbar #grid - ', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, DefaultToolbarComponent, @@ -46,7 +46,7 @@ describe('IgxGrid - Grid Toolbar #grid - ', () => { IgxExcelExporterService, IgxCsvExporterService ] - }); + }).compileComponents(); })); describe('Basic Tests - ', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid-validation.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid-validation.spec.ts index 9a4ca70578f..d66bc8239c1 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid-validation.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid-validation.spec.ts @@ -1,4 +1,4 @@ -import { fakeAsync, flush, TestBed, tick } from '@angular/core/testing'; +import { fakeAsync, flush, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { Validators } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -6,7 +6,6 @@ import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators' import { IgxInputDirective } from '../../directives/input/input.directive'; import { IgxTooltipTargetDirective } from '../../directives/tooltip/tooltip-target.directive'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { GridFunctions, GridSelectionFunctions } from '../../test-utils/grid-functions.spec'; import { IgxGridCustomEditorsComponent, @@ -21,8 +20,8 @@ import { IgxGridComponent } from './grid.component'; describe('IgxGrid - Validation #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridValidationTestBaseComponent, @@ -30,7 +29,7 @@ describe('IgxGrid - Validation #grid', () => { IgxGridCustomEditorsComponent, IgxTreeGridValidationTestComponent ] - }); + }).compileComponents(); })); describe('Basic Validation - ', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.component.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.component.spec.ts index 3fb6cb02b76..5327e4d28e6 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.component.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.component.spec.ts @@ -15,7 +15,6 @@ import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { BasicGridComponent } from '../../test-utils/grid-base-components.spec'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; import { IgxStringFilteringOperand, IgxNumberFilteringOperand } from '../../data-operations/filtering-condition'; -import { configureTestSuite, skipLeakCheck } from '../../test-utils/configure-suite'; import { GridSelectionMode, Size } from '../common/enums'; import { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree'; import { FilteringLogic } from '../../data-operations/filtering-expression.interface'; @@ -37,10 +36,8 @@ describe('IgxGrid Component Tests #grid', () => { const TBODY_CLASS = '.igx-grid__tbody-content'; const THEAD_CLASS = '.igx-grid-thead'; - configureTestSuite({ checkLeaks: true }); - describe('IgxGrid - input properties', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -676,6 +673,7 @@ describe('IgxGrid Component Tests #grid', () => { }); it('should throw a warning when primaryKey is set to a non-existing data field', () => { + jasmine.getEnv().allowRespy(true); const warnSpy = spyOn(console, 'warn'); const fixture = TestBed.createComponent(IgxGridTestComponent); const grid = fixture.componentInstance.grid; @@ -703,11 +701,12 @@ describe('IgxGrid Component Tests #grid', () => { expect(console.warn).toHaveBeenCalledWith( `Field "${grid.primaryKey}" is not defined in the data. Set \`primaryKey\` to a valid field.` ); + jasmine.getEnv().allowRespy(false); }); }); describe('IgxGrid - virtualization tests', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -840,7 +839,7 @@ describe('IgxGrid Component Tests #grid', () => { }); describe('IgxGrid - default rendering for rows and columns', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1501,8 +1500,7 @@ describe('IgxGrid Component Tests #grid', () => { expect(fix.componentInstance.grid.calcHeight).toBeGreaterThan(fix.componentInstance.grid.renderedRowHeight * 10); })); - it('should render correct columns if after scrolling right container size changes so that all columns become visible.', - skipLeakCheck(async () => { + it('should render correct columns if after scrolling right container size changes so that all columns become visible.', async () => { const fix = TestBed.createComponent(IgxGridDefaultRenderingComponent); fix.detectChanges(); const grid = fix.componentInstance.grid; @@ -1523,9 +1521,8 @@ describe('IgxGrid Component Tests #grid', () => { expect(headers.length).toEqual(5); for (let i = 0; i < headers.length; i++) { expect(headers[i].context.column.field).toEqual(grid.columnList.get(i).field); - // Note: We use skipLeakCheck because using `headers[i].context` messes up memory leak detection } - })); + }); it('Should render date and number values based on default formatting', fakeAsync(() => { const fixture = TestBed.createComponent(IgxGridFormattingComponent); @@ -2010,14 +2007,13 @@ describe('IgxGrid Component Tests #grid', () => { }); describe('IgxGrid - min/max width constraints rules', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridDefaultRenderingComponent ] - }) - .compileComponents(); + }).compileComponents(); })); describe('min/max in px', () => { @@ -2271,15 +2267,14 @@ describe('IgxGrid Component Tests #grid', () => { }); describe('IgxGrid - API methods', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridDefaultRenderingComponent, IgxGridWrappedInContComponent ] - }) - .compileComponents(); + }).compileComponents(); })); it(`When edit a cell onto filtered data through grid method, the row should @@ -2534,7 +2529,7 @@ describe('IgxGrid Component Tests #grid', () => { // note: it leaks when grid.groupBy() is executed because template-outlet doesn't destroy the viewrefs // to be addressed in a separate PR - it(`Verify that getRowByIndex and RowType API returns correct data`, skipLeakCheck(() => { + it(`Verify that getRowByIndex and RowType API returns correct data`, () => { const fix = TestBed.createComponent(IgxGridDefaultRenderingComponent); fix.componentInstance.initColumnsRows(35, 5); fix.detectChanges(); @@ -2693,7 +2688,7 @@ describe('IgxGrid Component Tests #grid', () => { expect(thirdRow instanceof IgxGroupByRow).toBe(true); expect(thirdRow.index).toBe(2); expect(thirdRow.viewIndex).toBe(7); - })); + }); it('Verify that getRowByIndex returns correct data when paging is enabled', fakeAsync(() => { const fix = TestBed.createComponent(IgxGridWrappedInContComponent); @@ -2742,14 +2737,13 @@ describe('IgxGrid Component Tests #grid', () => { describe('IgxGrid - Integration with other Igx Controls', () => { let fix; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridInsideIgxTabsComponent ] - }) - .compileComponents(); + }).compileComponents(); })); beforeEach(waitForAsync(() => { @@ -2904,14 +2898,13 @@ describe('IgxGrid Component Tests #grid', () => { }); describe('IgxGrid - footer section', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridWithCustomFooterComponent ] - }) - .compileComponents(); + }).compileComponents(); })); it('should be able to display custom content', () => { @@ -2931,14 +2924,13 @@ describe('IgxGrid Component Tests #grid', () => { describe('IgxGrid - with custom pagination template', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridWithCustomPaginationTemplateComponent ] - }) - .compileComponents(); + }).compileComponents(); })); it('should have access to grid context', fakeAsync(() => { @@ -2967,14 +2959,13 @@ describe('IgxGrid Component Tests #grid', () => { const MAX_FOCUS = 120; let observer: MutationObserver; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridPerformanceComponent ] - }) - .compileComponents(); + }).compileComponents(); })); afterEach(() => { @@ -3158,15 +3149,14 @@ describe('IgxGrid Component Tests #grid', () => { }); describe('Setting null data', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridNoDataComponent, IgxGridTestComponent ] - }) - .compileComponents(); + }).compileComponents(); })); it('should not throw error when data is null', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.component.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.component.ts index dbc7171abdd..ddf918f42b7 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.component.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.component.ts @@ -168,13 +168,23 @@ export class IgxGridComponent extends IgxGridBaseDirective implements GridType, public dataPreLoad = new EventEmitter(); /** - * @hidden + * Emitted when grouping is performed. + * + * @example + * ```html + * + * ``` */ @Output() public groupingExpressionsChange = new EventEmitter(); /** - * @hidden @internal + * Emitted when groups are expanded/collapsed. + * + * @example + * ```html + * + * ``` */ @Output() public groupingExpansionStateChange = new EventEmitter(); diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.crud.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.crud.spec.ts index a8490204787..ef2a2639de1 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.crud.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.crud.spec.ts @@ -1,9 +1,8 @@ import { Component, ViewChild } from '@angular/core'; -import { TestBed, fakeAsync } from '@angular/core/testing'; +import { TestBed, fakeAsync, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxGridComponent } from './grid.component'; import { wait } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IGridEditEventArgs } from '../common/events'; @@ -14,10 +13,12 @@ describe('IgxGrid - CRUD operations #grid', () => { let grid; let data; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, DefaultCRUDGridComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, DefaultCRUDGridComponent + ] + }).compileComponents(); })); beforeEach(fakeAsync(() => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.groupby.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.groupby.spec.ts index 1f38b49654f..a3d968f03d0 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.groupby.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.groupby.spec.ts @@ -12,7 +12,6 @@ import { IgxGridRowComponent } from './grid-row.component'; import { IgxChipComponent } from '../../chips/chip.component'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; import { DefaultSortingStrategy, ISortingExpression, SortingDirection } from '../../data-operations/sorting-strategy'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { DataParent, SampleTestData } from '../../test-utils/sample-test-data.spec'; import { MultiColumnHeadersWithGroupingComponent } from '../../test-utils/grid-samples.spec'; import { GridSelectionFunctions, GridFunctions, GRID_SCROLL_CLASS } from '../../test-utils/grid-functions.spec'; @@ -34,8 +33,8 @@ describe('IgxGrid - GroupBy #grid', () => { const DISABLED_CHIP = 'igx-chip--disabled'; const CHIP = 'igx-chip'; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, DefaultGridComponent, @@ -49,7 +48,7 @@ describe('IgxGrid - GroupBy #grid', () => { GridGroupByStateComponent, MultiColumnHeadersWithGroupingComponent ] - }); + }).compileComponents(); })); const checkGroups = (groupRows, expectedGroupOrder, grExpr?) => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.master-detail.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.master-detail.spec.ts index befa0a1dda2..059c522d602 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.master-detail.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.master-detail.spec.ts @@ -1,6 +1,5 @@ import { Component, ViewChild, OnInit, DebugElement, QueryList, TemplateRef } from '@angular/core'; -import { TestBed, ComponentFixture, fakeAsync, tick } from '@angular/core/testing'; -import { configureTestSuite } from '../../test-utils/configure-suite'; +import { TestBed, ComponentFixture, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { By } from '@angular/platform-browser'; import { UIInteractions, wait, waitForActiveNodeChange } from '../../test-utils/ui-interactions.spec'; @@ -32,15 +31,15 @@ describe('IgxGrid Master Detail #grid', () => { let fix: ComponentFixture; let grid: IgxGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, DefaultGridMasterDetailComponent, AllExpandedGridMasterDetailComponent, MRLMasterDetailComponent ] - }); + }).compileComponents(); })); describe('Basic', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.integration.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.integration.spec.ts index 355a3db62a4..72569e18ea7 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.integration.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.integration.spec.ts @@ -1,5 +1,4 @@ -īģŋimport { configureTestSuite } from '../../test-utils/configure-suite'; -import { TestBed, waitForAsync, ComponentFixture } from '@angular/core/testing'; +īģŋimport { TestBed, waitForAsync, ComponentFixture } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; @@ -30,8 +29,9 @@ describe('IgxGrid - multi-row-layout Integration #grid - ', () => { let fixture: ComponentFixture; let grid: IgxGridComponent; const COLUMN_HEADER_CLASS = '.igx-grid-th'; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, ColumnLayoutPinningTestComponent, @@ -40,7 +40,7 @@ describe('IgxGrid - multi-row-layout Integration #grid - ', () => { ColumnLayoutGroupingTestComponent, ColumnLayoutResizingTestComponent ] - }); + }).compileComponents(); })); describe('Hiding ', () => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.spec.ts index 99f6964f9ac..cbaee4b0fcd 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.multi-row-layout.spec.ts @@ -1,4 +1,4 @@ -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; +īģŋimport { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { IgxGridComponent } from './grid.component'; import { Component, ViewChild } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -7,7 +7,6 @@ import { By } from '@angular/platform-browser'; import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { wait } from '../../test-utils/ui-interactions.spec'; import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { ICellPosition } from '../common/events'; import { GridFunctions, GRID_MRL_BLOCK } from '../../test-utils/grid-functions.spec'; import { IgxColumnGroupComponent } from '../columns/column-group.component'; @@ -18,14 +17,15 @@ const GRID_MRL_BLOCK_CLASS = `.${GRID_MRL_BLOCK}`; describe('IgxGrid - multi-row-layout #grid', () => { const DEBOUNCE_TIME = 60; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, ColumnLayoutTestComponent, ColumnLayoutAndGroupsTestComponent ] - }); + }).compileComponents(); })); it('should initialize a grid with 1 column group', fakeAsync(() => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.nested.props.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.nested.props.spec.ts index 89b15856800..fe0a7974229 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.nested.props.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.nested.props.spec.ts @@ -1,5 +1,4 @@ -import { configureTestSuite } from '../../test-utils/configure-suite'; -import { TestBed, ComponentFixture, fakeAsync } from '@angular/core/testing'; +import { TestBed, ComponentFixture, fakeAsync, waitForAsync } from '@angular/core/testing'; import { IgxGridComponent } from './grid.component'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; @@ -207,10 +206,12 @@ describe('Grid - nested data source properties #grid', () => { fixture.detectChanges(); }; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, NestedPropertiesGridComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, NestedPropertiesGridComponent + ] + }).compileComponents(); })); beforeEach(fakeAsync(() => { @@ -339,10 +340,12 @@ describe('Grid nested data advanced editing #grid', () => { fixture.detectChanges(); }; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, NestedPropertiesGrid2Component] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, NestedPropertiesGrid2Component + ] + }).compileComponents(); })); beforeEach(() => { @@ -497,10 +500,12 @@ describe('Edit cell with data of type Array #grid', () => { fixture.detectChanges(); }; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, NestedPropertyGridComponent] - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, NestedPropertyGridComponent + ] + }).compileComponents(); })); beforeEach(fakeAsync(() => { diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts index 010ae6454ba..ce7b4d1ed96 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.pagination.spec.ts @@ -1,9 +1,8 @@ -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { GridWithUndefinedDataComponent } from '../../test-utils/grid-samples.spec'; import { PagingComponent, RemotePagingComponent } from '../../test-utils/grid-base-components.spec'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { wait } from '../../test-utils/ui-interactions.spec'; import { IgxNumberFilteringOperand } from '../../data-operations/filtering-condition'; import { GridFunctions, PAGER_CLASS } from '../../test-utils/grid-functions.spec'; @@ -31,12 +30,16 @@ const verifyGridPager = (fix, rowsCount, firstCellValue, pagerText, buttonsVisib }; describe('IgxGrid - Grid Paging #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, PagingComponent, + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + PagingComponent, GridWithUndefinedDataComponent, - RemotePagingComponent] - }); + RemotePagingComponent + ] + }).compileComponents(); })); let fix; diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.pinning.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.pinning.spec.ts index 58b2290ba50..7fb0029c904 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.pinning.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.pinning.spec.ts @@ -2,7 +2,6 @@ import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { ColumnPinningPosition, GridSelectionMode } from '../common/enums'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; import { @@ -32,9 +31,7 @@ describe('IgxGrid - Column Pinning #grid', () => { const DEBOUNCETIME = 30; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.search.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.search.spec.ts index c8adbe31b2a..b08bfb5b24e 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.search.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.search.spec.ts @@ -7,7 +7,6 @@ import { GridWithAvatarComponent, GroupableGridSearchComponent, ScrollableGridSe import { IForOfState } from '../../directives/for-of/for_of.directive'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { GridColumnDataType } from '../../data-operations/data-util'; @@ -23,9 +22,7 @@ describe('IgxGrid - search API #grid', () => { let fix: ComponentFixture; let component; let grid: IgxGridComponent; let fixNativeElement; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/grid/grid.sorting.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/grid.sorting.spec.ts index dd924f4b7df..3611ecc5a7d 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/grid.sorting.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/grid.sorting.spec.ts @@ -1,7 +1,6 @@ -import { TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { IgxGridComponent } from './grid.component'; import { DefaultSortingStrategy, FormattedValuesSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; import { GridDeclaredColumnsComponent, SortByParityComponent, GridWithPrimaryKeyComponent, SortByAnotherColumnComponent, SortOnInitComponent, IgxGridFormattedValuesSortingComponent } from '../../test-utils/grid-samples.spec'; @@ -16,8 +15,8 @@ describe('IgxGrid - Grid Sorting #grid', () => { let fixture; let grid: IgxGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ GridDeclaredColumnsComponent, SortByParityComponent, @@ -25,7 +24,7 @@ describe('IgxGrid - Grid Sorting #grid', () => { NoopAnimationsModule, IgxGridFormattedValuesSortingComponent ] - }); + }).compileComponents(); })); beforeEach(() => { @@ -630,7 +629,7 @@ describe('IgxGrid - Grid Sorting #grid', () => { // Verify that the grid is NOT sorted. expect(GridFunctions.getValueFromCellElement(GridFunctions.getCurrentCellFromGrid(grid, 0, 1))).toEqual('Jane'); - + expect(GridFunctions.getValueFromCellElement(GridFunctions.getCurrentCellFromGrid(grid, grid.data.length - 1, 1))).toEqual('Connor'); expect(GridFunctions.getColumnSortingIndex(firstHeaderCell)).toEqual(1); @@ -647,7 +646,7 @@ describe('IgxGrid - Grid Sorting #grid', () => { // Verify that the grid is NOT sorted. expect(GridFunctions.getValueFromCellElement(GridFunctions.getCurrentCellFromGrid(grid, 0, 1))).toEqual('Jane'); - + expect(GridFunctions.getValueFromCellElement(GridFunctions.getCurrentCellFromGrid(grid, grid.data.length - 1, 1))).toEqual('Connor'); expect(GridFunctions.getColumnSortingIndex(firstHeaderCell)).toEqual(1); diff --git a/projects/igniteui-angular/src/lib/grids/grid/row-drag.directive.spec.ts b/projects/igniteui-angular/src/lib/grids/grid/row-drag.directive.spec.ts index 1b7be355e42..7d272f46d73 100644 --- a/projects/igniteui-angular/src/lib/grids/grid/row-drag.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/grid/row-drag.directive.spec.ts @@ -1,9 +1,8 @@ import { Component, ViewChild, DebugElement, QueryList, TemplateRef } from '@angular/core'; -import { TestBed, ComponentFixture } from '@angular/core/testing'; +import { TestBed, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; import { DataParent, SampleTestData } from '../../test-utils/sample-test-data.spec'; import { Point } from '../../services/public_api'; @@ -59,14 +58,16 @@ describe('Row Drag Tests', () => { let rows: IgxRowDirective[]; let dragRows: DebugElement[]; let rowToDrag: IgxRowDirective; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridRowDraggableComponent ] - }); + }).compileComponents(); })); + beforeEach(() => { fixture = TestBed.createComponent(IgxGridRowDraggableComponent); grid = fixture.componentInstance.instance; @@ -407,13 +408,14 @@ describe('Row Drag Tests', () => { let grid: IgxGridComponent; let rows: IgxRowDirective[]; let dragRows: DebugElement[]; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridRowCustomGhostDraggableComponent ] - }); + }).compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(IgxGridRowCustomGhostDraggableComponent); @@ -492,13 +494,14 @@ describe('Row Drag Tests', () => { let dragGridRows: IgxRowDirective[]; let dropGridRows: IgxRowDirective[]; let dragRows: DebugElement[]; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridFeaturesRowDragComponent ] - }); + }).compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(IgxGridFeaturesRowDragComponent); @@ -944,14 +947,15 @@ describe('Row Drag Tests', () => { let dragGrid: IgxHierarchicalGridComponent; let dragRows: DebugElement[]; let pointerMoveToDropEvent: PointerEvent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxHierarchicalGridTestComponent, IgxHierarchicalGridCustomGhostTestComponent ] - }); + }).compileComponents(); })); it('should be able to drag row on every hierarchical level', () => { fixture = TestBed.createComponent(IgxHierarchicalGridTestComponent); @@ -1093,13 +1097,14 @@ describe('Row Drag Tests', () => { let dragGrid: IgxTreeGridComponent; let dragRows: DebugElement[]; let pointerMoveToDropEvent: PointerEvent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxTreeGridTestComponent ] - }); + }).compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(IgxTreeGridTestComponent); diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-add-row.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-add-row.spec.ts index b78c525c4a4..265d9764ece 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-add-row.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-add-row.spec.ts @@ -1,6 +1,5 @@ -import { TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { IgxHierarchicalGridComponent } from './public_api'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxActionStripComponent } from '../../action-strip/public_api'; import { IgxHierarchicalGridActionStripComponent } from '../../test-utils/hierarchical-grid-components.spec'; @@ -17,10 +16,13 @@ describe('IgxHierarchicalGrid - Add Row UI #tGrid', () => { const endEvent = new AnimationEvent('animationend'); animationElem.dispatchEvent(endEvent); }; - configureTestSuite((() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, IgxHierarchicalGridActionStripComponent] - }); + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, IgxHierarchicalGridActionStripComponent + ] + }).compileComponents(); })); describe(' Basic', () => { diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts index 77b686f5836..6dcf55889e9 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.integration.spec.ts @@ -1,4 +1,3 @@ -import { configureTestSuite } from '../../test-utils/configure-suite'; import { TestBed, tick, fakeAsync, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -33,9 +32,7 @@ describe('IgxHierarchicalGrid Integration #hGrid', () => { const FILTERING_ROW_CLASS = 'igx-grid-filtering-row'; const FILTERING_CELL_CLASS = 'igx-grid-filtering-cell'; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.navigation.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.navigation.spec.ts index 86bb053cfac..5a885124a4f 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.navigation.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.navigation.spec.ts @@ -1,4 +1,3 @@ -import { configureTestSuite } from '../../test-utils/configure-suite'; import { TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Component, ViewChild, DebugElement} from '@angular/core'; @@ -11,7 +10,6 @@ import { clearGridSubs, setupHierarchicalGridScrollDetection } from '../../test- import { GridFunctions } from '../../test-utils/grid-functions.spec'; import { IgxGridCellComponent } from '../cell.component'; import { IGridCellEventArgs, IgxColumnComponent, IPathSegment } from '../public_api'; -import { IgxHierarchicalGridNavigationService } from './hierarchical-grid-navigation.service'; const DEBOUNCE_TIME = 50; const GRID_CONTENT_CLASS = '.igx-grid__tbody-content'; @@ -22,9 +20,8 @@ describe('IgxHierarchicalGrid Navigation', () => { let hierarchicalGrid: IgxHierarchicalGridComponent; let baseHGridContent: DebugElement; const defaultTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.selection.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.selection.spec.ts index 6da658015d2..910a4ae8648 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.selection.spec.ts @@ -1,4 +1,3 @@ -import { configureTestSuite } from '../../test-utils/configure-suite'; import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxHierarchicalGridComponent } from './hierarchical-grid.component'; @@ -26,9 +25,7 @@ describe('IgxHierarchicalGrid selection #hGrid', () => { let rowIsland2; const gridData = SampleTestData.generateHGridData(5, 3); - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts index 7960c35a376..c4186f15c9f 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.spec.ts @@ -1,4 +1,3 @@ -import { configureTestSuite } from '../../test-utils/configure-suite'; import { TestBed, fakeAsync, tick, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IGridCreatedEventArgs } from './public_api'; @@ -24,9 +23,8 @@ import { getComponentSize } from '../../core/utils'; import { setElementSize } from '../../test-utils/helper-utils.spec'; describe('Basic IgxHierarchicalGrid #hGrid', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -639,6 +637,7 @@ describe('Basic IgxHierarchicalGrid #hGrid', () => { }); it('should throw a warning when primaryKey is set to a non-existing data field', () => { + jasmine.getEnv().allowRespy(true); spyOn(console, 'warn'); hierarchicalGrid.primaryKey = 'testField'; fixture.componentInstance.rowIsland.primaryKey = 'testField-rowIsland'; @@ -667,6 +666,7 @@ describe('Basic IgxHierarchicalGrid #hGrid', () => { expect(console.warn).toHaveBeenCalledWith( `Field "${rowIsland.primaryKey}" is not defined in the data. Set \`primaryKey\` to a valid field.` ); + jasmine.getEnv().allowRespy(false); }); }); diff --git a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.virtualization.spec.ts b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.virtualization.spec.ts index 20b6e94edef..77585a088cc 100644 --- a/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.virtualization.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.virtualization.spec.ts @@ -1,5 +1,4 @@ -import { configureTestSuite } from '../../test-utils/configure-suite'; -import { TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Component, ViewChild } from '@angular/core'; import { IgxHierarchicalGridComponent } from './hierarchical-grid.component'; @@ -20,14 +19,15 @@ import { firstValueFrom } from 'rxjs'; describe('IgxHierarchicalGrid Virtualization #hGrid', () => { let fixture; let hierarchicalGrid: IgxHierarchicalGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxHierarchicalGridTestBaseComponent, IgxHierarchicalGridDefaultComponent ] - }); + }).compileComponents(); })); beforeEach(() => { @@ -439,14 +439,15 @@ describe('IgxHierarchicalGrid Virtualization #hGrid', () => { }); describe('IgxHierarchicalGrid Virtualization Custom Scenarios #hGrid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxHierarchicalGridTestBaseComponent, IgxHierarchicalGridNoScrollTestComponent ] - }); + }).compileComponents(); })); it('should show scrollbar after expanding a row with data loaded after initial view initialization', async () => { diff --git a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.component.ts b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.component.ts index 64ebfce8054..e72a2b1b52c 100644 --- a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.component.ts +++ b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.component.ts @@ -108,8 +108,14 @@ export class IgxPivotDataSelectorComponent { public columnsExpanded = true; /** - * @hidden - */ + * Emitted when the columns panel is expanded or collapsed. + * + * @example + * ```html + * + * ``` + */ @Output() public columnsExpandedChange = new EventEmitter(); @@ -133,8 +139,14 @@ export class IgxPivotDataSelectorComponent { public rowsExpanded = true; /** - * @hidden - */ + * Emitted when the rows panel is expanded or collapsed. + * + * @example + * ```html + * + * ``` + */ @Output() public rowsExpandedChange = new EventEmitter(); @@ -158,8 +170,14 @@ export class IgxPivotDataSelectorComponent { public filtersExpanded = true; /** - * @hidden - */ + * Emitted when the filters panel is expanded or collapsed. + * + * @example + * ```html + * + * ``` + */ @Output() public filtersExpandedChange = new EventEmitter(); @@ -183,8 +201,14 @@ export class IgxPivotDataSelectorComponent { public valuesExpanded = true; /** - * @hidden - */ + * Emitted when the values panel is expanded or collapsed. + * + * @example + * ```html + * + * ``` + */ @Output() public valuesExpandedChange = new EventEmitter(); diff --git a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.spec.ts b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.spec.ts index 58edcbce8e2..ccadda4f213 100644 --- a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.spec.ts @@ -1,5 +1,5 @@ import { DebugElement } from "@angular/core"; -import { fakeAsync, TestBed } from "@angular/core/testing"; +import { fakeAsync, TestBed, waitForAsync } from "@angular/core/testing"; import { By } from "@angular/platform-browser"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; import { IgxCheckboxComponent } from "../../checkbox/checkbox.component"; @@ -7,7 +7,6 @@ import { SortingDirection } from "../../data-operations/sorting-strategy"; import { IgxExpansionPanelHeaderComponent } from '../../expansion-panel/expansion-panel-header.component'; import { IgxExpansionPanelComponent } from '../../expansion-panel/expansion-panel.component'; import { IgxInputDirective } from "../../input-group/public_api"; -import { configureTestSuite } from "../../test-utils/configure-suite"; import { IgxPivotGridTestBaseComponent } from "../../test-utils/pivot-grid-samples.spec"; import { UIInteractions, wait } from "../../test-utils/ui-interactions.spec"; import { PivotGridType } from "../common/grid.interface"; @@ -22,11 +21,13 @@ import { setElementSize } from '../../test-utils/helper-utils.spec'; describe("Pivot data selector", () => { - configureTestSuite(() => { - return TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, IgxPivotDataSelectorComponent], - }); - }); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, IgxPivotDataSelectorComponent + ] + }).compileComponents(); + })); it("should initialize standalone before a grid is set ", () => { const fixture = TestBed.createComponent(IgxPivotDataSelectorComponent); @@ -41,14 +42,14 @@ describe("Pivot data selector integration", () => { let selector: IgxPivotDataSelectorComponent; let pivotItems: (IPivotDimension | IPivotValue)[]; - configureTestSuite(() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxPivotGridTestBaseComponent ] - }); - }); + }).compileComponents(); + })); beforeEach(fakeAsync(() => { fixture = TestBed.createComponent(IgxPivotGridTestBaseComponent); diff --git a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-keyboard-nav.spec.ts b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-keyboard-nav.spec.ts index 4d73ef8cd31..316aeb956a9 100644 --- a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-keyboard-nav.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-keyboard-nav.spec.ts @@ -1,7 +1,6 @@ -import { TestBed, fakeAsync, ComponentFixture } from '@angular/core/testing'; +import { TestBed, fakeAsync, ComponentFixture, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; import { IgxPivotGridMultipleRowComponent, IgxPivotGridTestBaseComponent } from '../../test-utils/pivot-grid-samples.spec'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; @@ -19,13 +18,14 @@ describe('IgxPivotGrid - Keyboard navigation #pivotGrid', () => { describe('General Keyboard Navigation', () => { let fixture: ComponentFixture; let pivotGrid: IgxPivotGridComponent; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxPivotGridMultipleRowComponent ] - }); + }).compileComponents(); })); beforeEach(fakeAsync(() => { @@ -265,13 +265,14 @@ describe('IgxPivotGrid - Keyboard navigation #pivotGrid', () => { }); describe('Row Dimension Expand/Collapse Keyboard Interactions', () => { let fixture: ComponentFixture; - configureTestSuite((() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxPivotGridTestBaseComponent ] - }); + }).compileComponents(); })); beforeEach(fakeAsync(() => { diff --git a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.pipes.spec.ts b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.pipes.spec.ts index 1befe0c2abc..b0215cf73cb 100644 --- a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.pipes.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.pipes.spec.ts @@ -1,5 +1,4 @@ import { NoopPivotDimensionsStrategy } from '../../data-operations/pivot-strategy'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxPivotDateDimension } from './pivot-grid-dimensions'; import { IgxPivotAggregate, IgxPivotDateAggregate, IgxPivotNumericAggregate, IgxPivotTimeAggregate } from './pivot-grid-aggregate'; import { IPivotConfiguration } from './pivot-grid.interface'; @@ -18,7 +17,6 @@ describe('Pivot pipes #pivotGrid', () => { let pivotConfig: IPivotConfiguration; let cloneStrategy: IDataCloneStrategy; - configureTestSuite(); beforeEach(() => { data = [ { diff --git a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.spec.ts b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.spec.ts index 21b047ebe44..59cc8c6f836 100644 --- a/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.spec.ts @@ -7,7 +7,6 @@ import { IgxChipsAreaComponent } from '../../chips/chips-area.component'; import { DefaultPivotSortingStrategy } from '../../data-operations/pivot-sort-strategy'; import { DimensionValuesFilteringStrategy, NoopPivotDimensionsStrategy } from '../../data-operations/pivot-strategy'; import { ISortingExpression, SortingDirection } from '../../data-operations/sorting-strategy'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { GridFunctions, GridSelectionFunctions } from '../../test-utils/grid-functions.spec'; import { PivotGridFunctions } from '../../test-utils/pivot-grid-functions.spec'; import { IgxPivotGridFlexContainerComponent, IgxPivotGridTestBaseComponent, IgxPivotGridTestComplexHierarchyComponent, IgxTotalSaleAggregate } from '../../test-utils/pivot-grid-samples.spec'; @@ -29,9 +28,8 @@ const CSS_CLASS_ITEM = 'igx-drop-down__item'; const ACTIVE_CELL_CSS_CLASS = '.igx-grid-th--active'; describe('IgxPivotGrid #pivotGrid', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/state.directive.spec.ts b/projects/igniteui-angular/src/lib/grids/state.directive.spec.ts index f247c370d02..998ca85f70b 100644 --- a/projects/igniteui-angular/src/lib/grids/state.directive.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/state.directive.spec.ts @@ -1,4 +1,4 @@ -import { TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { IgxGridComponent } from './grid/public_api'; import { Component, TemplateRef, ViewChild } from '@angular/core'; import { SampleTestData } from '../test-utils/sample-test-data.spec'; @@ -11,7 +11,6 @@ import { IgxBooleanFilteringOperand } from '../data-operations/filtering-conditi import { IGroupingState } from '../data-operations/groupby-state.interface'; import { IGroupByExpandState } from '../data-operations/groupby-expand-state.interface'; import { GridSelectionMode } from './common/enums'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { FilteringLogic } from '../data-operations/filtering-expression.interface'; import { DefaultSortingStrategy, ISortingExpression, SortingDirection } from '../data-operations/sorting-strategy'; import { GridSelectionRange } from './common/types'; @@ -21,15 +20,15 @@ import { IgxColumnComponent, IgxColumnGroupComponent, IgxColumnLayoutComponent, import { IColumnState, IGridState } from './state-base.directive'; describe('IgxGridState - input properties #grid', () => { - configureTestSuite((() => { - return TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, IgxGridStateComponent, IgxGridStateWithOptionsComponent, IgxGridStateWithDetailsComponent ] - }); + }).compileComponents(); })); it('should initialize an IgxGridState with default options object', () => { diff --git a/projects/igniteui-angular/src/lib/grids/state.hierarchicalgrid.spec.ts b/projects/igniteui-angular/src/lib/grids/state.hierarchicalgrid.spec.ts index fa0dedff940..8db8589fd49 100644 --- a/projects/igniteui-angular/src/lib/grids/state.hierarchicalgrid.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/state.hierarchicalgrid.spec.ts @@ -5,7 +5,6 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IGroupingExpression } from '../data-operations/grouping-expression.interface'; import { IFilteringExpressionsTree, FilteringExpressionsTree } from '../data-operations/filtering-expressions-tree'; import { IPagingState } from '../data-operations/paging-state.interface'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { IgxHierarchicalGridComponent } from './hierarchical-grid/hierarchical-grid.component'; import { IgxRowIslandComponent } from './hierarchical-grid/row-island.component'; import { FilteringLogic } from '../data-operations/filtering-expression.interface'; @@ -20,9 +19,8 @@ import { IColumnState, IGridState } from './state-base.directive'; describe('IgxHierarchicalGridState - input properties #hGrid', () => { let fix; let grid; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxHierarchicalGridTestExpandedBaseComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/grids/state.pivotgrid.spec.ts b/projects/igniteui-angular/src/lib/grids/state.pivotgrid.spec.ts index 0eb12a4d4d3..7ef2e6779cc 100644 --- a/projects/igniteui-angular/src/lib/grids/state.pivotgrid.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/state.pivotgrid.spec.ts @@ -3,7 +3,6 @@ import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { first, take } from 'rxjs/operators'; import { NoopPivotDimensionsStrategy } from '../data-operations/pivot-strategy'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { IgxPivotGridPersistanceComponent } from '../test-utils/pivot-grid-samples.spec'; import { IgxPivotNumericAggregate } from './pivot-grid/pivot-grid-aggregate'; import { IgxPivotDateDimension } from './pivot-grid/pivot-grid-dimensions'; @@ -11,10 +10,9 @@ import { IPivotDimension, IPivotGridRecord } from './pivot-grid/pivot-grid.inter import { IgxPivotRowDimensionHeaderComponent } from './pivot-grid/pivot-row-dimension-header.component'; describe('IgxPivotGridState #pivotGrid :', () => { - configureTestSuite(); let fixture; let pivotGrid; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxPivotGridPersistanceComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/grids/state.treegrid.spec.ts b/projects/igniteui-angular/src/lib/grids/state.treegrid.spec.ts index 8674e05af1c..db4e5c9e9e2 100644 --- a/projects/igniteui-angular/src/lib/grids/state.treegrid.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/state.treegrid.spec.ts @@ -10,7 +10,6 @@ import { IgxNumberFilteringOperand } from '../data-operations/filtering-conditio import { IGroupingState } from '../data-operations/groupby-state.interface'; import { IGroupByExpandState } from '../data-operations/groupby-expand-state.interface'; import { GridSelectionMode } from './common/enums'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { FilteringLogic } from '../data-operations/filtering-expression.interface'; import { IgxTreeGridComponent } from './tree-grid/public_api'; import { ISortingExpression } from '../data-operations/sorting-strategy'; @@ -20,10 +19,9 @@ import { IgxColumnComponent } from './public_api'; import { IColumnState, IGridState } from './state-base.directive'; describe('IgxTreeGridState - input properties #tGrid', () => { - configureTestSuite(); let fix; let grid; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxTreeGridTreeDataTestComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-add-row-ui.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-add-row-ui.spec.ts index a39d1e5f610..f6ab0075d97 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-add-row-ui.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-add-row-ui.spec.ts @@ -3,7 +3,6 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxTreeGridComponent } from './public_api'; import { IgxTreeGridEditActionsComponent, IgxTreeGridEditActionsPinningComponent } from '../../test-utils/tree-grid-components.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxActionStripComponent } from '../../action-strip/public_api'; import { IgxTreeGridRowComponent } from './tree-grid-row.component'; @@ -12,7 +11,6 @@ import { IRowDataCancelableEventArgs } from '../public_api'; import { wait } from '../../test-utils/ui-interactions.spec'; describe('IgxTreeGrid - Add Row UI #tGrid', () => { - configureTestSuite(); let fix; let treeGrid: IgxTreeGridComponent; let actionStrip: IgxActionStripComponent; @@ -23,7 +21,7 @@ describe('IgxTreeGrid - Add Row UI #tGrid', () => { animationElem.dispatchEvent(endEvent); }; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-crud.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-crud.spec.ts index c51c83f6be9..f1b79c17189 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-crud.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-crud.spec.ts @@ -7,7 +7,6 @@ import { TreeGridFunctions } from '../../test-utils/tree-grid-functions.spec'; import { first } from 'rxjs/operators'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { DropPosition } from '../moving/moving.service'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; import { DebugElement } from '@angular/core'; @@ -16,11 +15,10 @@ const CELL_CSS_CLASS = '.igx-grid__td'; describe('IgxTreeGrid - CRUD #tGrid', () => { - configureTestSuite(); let treeGrid: IgxTreeGridComponent; let gridContent: DebugElement; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-expanding.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-expanding.spec.ts index 068c6726ca7..015bb9bed97 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-expanding.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-expanding.spec.ts @@ -10,7 +10,6 @@ import { IgxTreeGridCustomExpandersTemplateComponent } from '../../test-utils/tree-grid-components.spec'; import { TreeGridFunctions } from '../../test-utils/tree-grid-functions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { first } from 'rxjs/operators'; import { wait } from '../../test-utils/ui-interactions.spec'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; @@ -21,11 +20,10 @@ import { IgxTreeGridAPIService } from './tree-grid-api.service'; import { CellType } from '../public_api'; describe('IgxTreeGrid - Expanding / Collapsing #tGrid', () => { - configureTestSuite(); let fix; let treeGrid: IgxTreeGridComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-filtering.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-filtering.spec.ts index f1294b90361..c940140e95b 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-filtering.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-filtering.spec.ts @@ -4,7 +4,6 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxTreeGridComponent } from './public_api'; import { IgxTreeGridFilteringComponent, IgxTreeGridFilteringESFTemplatesComponent, IgxTreeGridFilteringRowEditingComponent } from '../../test-utils/tree-grid-components.spec'; import { TreeGridFunctions } from '../../test-utils/tree-grid-functions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxStringFilteringOperand, IgxNumberFilteringOperand, IgxDateFilteringOperand } from '../../data-operations/filtering-condition'; import { FilteringStrategy } from '../../data-operations/filtering-strategy'; import { TreeGridFilteringStrategy, TreeGridFormattedValuesFilteringStrategy, TreeGridMatchingRecordsOnlyFilteringStrategy } from './tree-grid.filtering.strategy'; @@ -18,11 +17,10 @@ import { GridColumnDataType } from '../../data-operations/data-util'; const IGX_CHECKBOX_LABEL = '.igx-checkbox__label'; describe('IgxTreeGrid - Filtering actions #tGrid', () => { - configureTestSuite(); let fix; let grid; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -757,7 +755,7 @@ describe('IgxTreeGrid - Filtering actions #tGrid', () => { tGrid.columns[0].dataType = GridColumnDataType.String; fix.detectChanges(); spyOn(console, 'error'); - + GridFunctions.clickExcelFilterIcon(fix, 'ID'); fix.detectChanges(); tick(); @@ -772,7 +770,7 @@ describe('IgxTreeGrid - Filtering actions #tGrid', () => { GridFunctions.clickApplyExcelStyleFiltering(fix, null, 'igx-tree-grid'); fix.detectChanges(); tick(); - + expect(console.error).not.toHaveBeenCalled(); })); }); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.pipe.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.pipe.spec.ts index f3b7941d6ce..a7648fc9124 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.pipe.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.pipe.spec.ts @@ -2,19 +2,17 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { DefaultSortingStrategy } from 'igniteui-angular'; import { IGroupingExpression } from '../../data-operations/grouping-expression.interface'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { IgxTreeGridSimpleComponent, IgxTreeGridPrimaryForeignKeyComponent } from '../../test-utils/tree-grid-components.spec'; import { IgxTreeGridGroupingPipe } from './tree-grid.grouping.pipe'; describe('TreeGrid Grouping Pipe', () => { - configureTestSuite(); let groupPipe: IgxTreeGridGroupingPipe; let data: any[]; let grid: any; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxTreeGridSimpleComponent, IgxTreeGridPrimaryForeignKeyComponent] }).compileComponents(); @@ -178,18 +176,18 @@ describe('TreeGrid Grouping Pipe', () => { expect(JSON.stringify(result)).toEqual(expectedResult); }; - + const groupedByPTO = '[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"},{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":null,"Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"},{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":null,"Age":42,"OnPTO":false,"JobTitle":"Vice President"},{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":null,"Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"},{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":null,"OnPTO":false,"Age":39,"JobTitle":"Software Developer"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"},{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":null,"Age":61,"OnPTO":false,"JobTitle":"Director"},{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":null,"Age":50,"OnPTO":false,"JobTitle":"Director"},{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":null,"Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"},{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":null,"OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"},{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":null,"OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"false (13)","_Igx_Hidden_Data_":{"OnPTO":false}},{"CK":[{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"},{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":null,"Age":35,"OnPTO":true,"JobTitle":"Software Developer"},{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":null,"OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"},{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":null,"Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"},{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":null,"OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"}],"Employees":"true (5)","_Igx_Hidden_Data_":{"OnPTO":true}}]'; - + const groupedByParentID = '[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":null,"Age":42,"OnPTO":false,"JobTitle":"Vice President"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"},{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":null,"Age":61,"OnPTO":false,"JobTitle":"Director"}],"Employees":"-1 (4)","_Igx_Hidden_Data_":{"ParentID":-1}},{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"}],"Employees":"147 (3)","_Igx_Hidden_Data_":{"ParentID":147}},{"CK":[{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":null,"Age":35,"OnPTO":true,"JobTitle":"Software Developer"},{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":null,"Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"}],"Employees":"317 (2)","_Igx_Hidden_Data_":{"ParentID":317}},{"CK":[{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":null,"OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"},{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":null,"Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"}],"Employees":"847 (2)","_Igx_Hidden_Data_":{"ParentID":847}},{"CK":[{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":null,"OnPTO":false,"Age":39,"JobTitle":"Software Developer"}],"Employees":"663 (1)","_Igx_Hidden_Data_":{"ParentID":663}},{"CK":[{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":null,"Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"}],"Employees":"19 (1)","_Igx_Hidden_Data_":{"ParentID":19}},{"CK":[{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":null,"Age":50,"OnPTO":false,"JobTitle":"Director"},{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":null,"OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"17 (2)","_Igx_Hidden_Data_":{"ParentID":17}},{"CK":[{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":null,"Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"},{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":null,"OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"},{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":null,"OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"}],"Employees":"12 (3)","_Igx_Hidden_Data_":{"ParentID":12}}]'; - + const groupedByJobTitle = '[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"},{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":null,"Age":61,"OnPTO":false,"JobTitle":"Director"},{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":null,"Age":50,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Director (4)","_Igx_Hidden_Data_":{"JobTitle":"Director"}},{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"},{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":null,"Age":35,"OnPTO":true,"JobTitle":"Software Developer"},{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":null,"OnPTO":false,"Age":39,"JobTitle":"Software Developer"},{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":null,"OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"Software Developer (5)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"},{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":null,"Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"},{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":null,"Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"},{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":null,"OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"}],"Employees":"Associate Software Developer (4)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}},{"CK":[{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":null,"Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"},{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":null,"OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"},{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":null,"OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"}],"Employees":"Senior Software Developer (3)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":null,"Age":42,"OnPTO":false,"JobTitle":"Vice President"}],"Employees":"Vice President (1)","_Igx_Hidden_Data_":{"JobTitle":"Vice President"}},{"CK":[{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":null,"Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"}],"Employees":"Senior Software Developer, TL (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer, TL"}}]'; - + const groupedByJobTitleCaseSensitive = '[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Director (2)","_Igx_Hidden_Data_":{"JobTitle":"Director"}},{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Software developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"}],"Employees":"Software Developer (3)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}}]'; - + const groupedByPTODescJobTitle = '[{"CK":[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"},{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":null,"Age":61,"OnPTO":false,"JobTitle":"Director"},{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":null,"Age":50,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Director (4)","_Igx_Hidden_Data_":{"JobTitle":"Director"}},{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"},{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":null,"OnPTO":false,"Age":39,"JobTitle":"Software Developer"},{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":null,"OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"Software Developer (4)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":null,"Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"}],"Employees":"Senior Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":null,"Age":42,"OnPTO":false,"JobTitle":"Vice President"}],"Employees":"Vice President (1)","_Igx_Hidden_Data_":{"JobTitle":"Vice President"}},{"CK":[{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":null,"Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"},{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":null,"Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"},{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":null,"OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"}],"Employees":"Associate Software Developer (3)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}}],"Employees":"false (13)","_Igx_Hidden_Data_":{"OnPTO":false}},{"CK":[{"CK":[{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"}],"Employees":"Associate Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}},{"CK":[{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":null,"Age":35,"OnPTO":true,"JobTitle":"Software Developer"}],"Employees":"Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":null,"OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"},{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":null,"OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"}],"Employees":"Senior Software Developer (2)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":null,"Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"}],"Employees":"Senior Software Developer, TL (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer, TL"}}],"Employees":"true (5)","_Igx_Hidden_Data_":{"OnPTO":true}}]'; - + const groupedByPTOJobDescPID = '[{"CK":[{"CK":[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"},{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":null,"Age":61,"OnPTO":false,"JobTitle":"Director"}],"Employees":"-1 (3)","_Igx_Hidden_Data_":{"ParentID":-1}},{"CK":[{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":null,"Age":50,"OnPTO":false,"JobTitle":"Director"}],"Employees":"17 (1)","_Igx_Hidden_Data_":{"ParentID":17}}],"Employees":"Director (4)","_Igx_Hidden_Data_":{"JobTitle":"Director"}},{"CK":[{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"}],"Employees":"147 (2)","_Igx_Hidden_Data_":{"ParentID":147}},{"CK":[{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":null,"OnPTO":false,"Age":39,"JobTitle":"Software Developer"}],"Employees":"663 (1)","_Igx_Hidden_Data_":{"ParentID":663}},{"CK":[{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":null,"OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"17 (1)","_Igx_Hidden_Data_":{"ParentID":17}}],"Employees":"Software Developer (4)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"CK":[{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":null,"Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"}],"Employees":"317 (1)","_Igx_Hidden_Data_":{"ParentID":317}}],"Employees":"Senior Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"CK":[{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":null,"Age":42,"OnPTO":false,"JobTitle":"Vice President"}],"Employees":"-1 (1)","_Igx_Hidden_Data_":{"ParentID":-1}}],"Employees":"Vice President (1)","_Igx_Hidden_Data_":{"JobTitle":"Vice President"}},{"CK":[{"CK":[{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":null,"Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"}],"Employees":"847 (1)","_Igx_Hidden_Data_":{"ParentID":847}},{"CK":[{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":null,"Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"},{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":null,"OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"}],"Employees":"12 (2)","_Igx_Hidden_Data_":{"ParentID":12}}],"Employees":"Associate Software Developer (3)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}}],"Employees":"false (13)","_Igx_Hidden_Data_":{"OnPTO":false}},{"CK":[{"CK":[{"CK":[{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"}],"Employees":"147 (1)","_Igx_Hidden_Data_":{"ParentID":147}}],"Employees":"Associate Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}},{"CK":[{"CK":[{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":null,"Age":35,"OnPTO":true,"JobTitle":"Software Developer"}],"Employees":"317 (1)","_Igx_Hidden_Data_":{"ParentID":317}}],"Employees":"Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"CK":[{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":null,"OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"}],"Employees":"847 (1)","_Igx_Hidden_Data_":{"ParentID":847}},{"CK":[{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":null,"OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"}],"Employees":"12 (1)","_Igx_Hidden_Data_":{"ParentID":12}}],"Employees":"Senior Software Developer (2)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"CK":[{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":null,"Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"}],"Employees":"19 (1)","_Igx_Hidden_Data_":{"ParentID":19}}],"Employees":"Senior Software Developer, TL (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer, TL"}}],"Employees":"true (5)","_Igx_Hidden_Data_":{"OnPTO":true}}]'; - + const groupedByHireDate = '[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":"Sun Apr 20 2008","Age":55,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Apr 20, 2008 (1)","_Igx_Hidden_Data_":{"HireDate":"Apr 20, 2008"}},{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":"Sun Jul 03 2011","Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"}],"Employees":"Jul 3, 2011 (1)","_Igx_Hidden_Data_":{"HireDate":"Jul 3, 2011"}},{"CK":[{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":"Sun Jul 19 2009","Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"}],"Employees":"Jul 19, 2009 (1)","_Igx_Hidden_Data_":{"HireDate":"Jul 19, 2009"}},{"CK":[{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":"Thu Sep 18 2014","Age":31,"OnPTO":false,"JobTitle":"Software Developer"}],"Employees":"Sep 18, 2014 (1)","_Igx_Hidden_Data_":{"HireDate":"Sep 18, 2014"}},{"CK":[{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":"Sat Oct 17 2015","Age":35,"OnPTO":true,"JobTitle":"Software Developer"}],"Employees":"Oct 17, 2015 (1)","_Igx_Hidden_Data_":{"HireDate":"Oct 17, 2015"}},{"CK":[{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":"Wed Nov 11 2009","Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"}],"Employees":"Nov 11, 2009 (1)","_Igx_Hidden_Data_":{"HireDate":"Nov 11, 2009"}},{"CK":[{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":"Sat Feb 22 2014","Age":42,"OnPTO":false,"JobTitle":"Vice President"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":"Sat Feb 22 2014","Age":49,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Feb 22, 2014 (2)","_Igx_Hidden_Data_":{"HireDate":"Feb 22, 2014"}},{"CK":[{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":"Sun May 04 2014","OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"},{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":"Sun May 04 2014","Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"}],"Employees":"May 4, 2014 (2)","_Igx_Hidden_Data_":{"HireDate":"May 4, 2014"}},{"CK":[{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":"Sat Dec 09 2017","Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"},{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":"Sat Dec 09 2017","Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"}],"Employees":"Dec 9, 2017 (2)","_Igx_Hidden_Data_":{"HireDate":"Dec 9, 2017"}},{"CK":[{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":"Thu Apr 22 2010","OnPTO":false,"Age":39,"JobTitle":"Software Developer"},{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":"Thu Apr 22 2010","OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"},{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":"Thu Apr 22 2010","OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"Apr 22, 2010 (3)","_Igx_Hidden_Data_":{"HireDate":"Apr 22, 2010"}},{"CK":[{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":"Mon Feb 01 2010","Age":61,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Feb 1, 2010 (1)","_Igx_Hidden_Data_":{"HireDate":"Feb 1, 2010"}},{"CK":[{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":"Tue Dec 18 2007","Age":50,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Dec 18, 2007 (1)","_Igx_Hidden_Data_":{"HireDate":"Dec 18, 2007"}},{"CK":[{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":"Wed Apr 18 2018","OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"}],"Employees":"Apr 18, 2018 (1)","_Igx_Hidden_Data_":{"HireDate":"Apr 18, 2018"}}]'; }); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.spec.ts index 6b5a95619ef..e4821139a78 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.spec.ts @@ -1,6 +1,5 @@ import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { clearGridSubs, setupGridScrollDetection } from '../../test-utils/helper-utils.spec'; import { IgxTreeGridGroupByAreaTestComponent, IgxTreeGridGroupingComponent } from '../../test-utils/tree-grid-components.spec'; import { IgxTreeGridGroupByAreaComponent } from '../grouping/tree-grid-group-by-area.component'; @@ -9,9 +8,8 @@ import { IgxTreeGridComponent } from './tree-grid.component'; import { DefaultSortingStrategy } from '../../data-operations/sorting-strategy'; describe('IgxTreeGrid', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-indentation.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-indentation.spec.ts index fb7bc86cfad..1320524d0d1 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-indentation.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-indentation.spec.ts @@ -6,18 +6,16 @@ import { TreeGridFunctions, NUMBER_CELL_CSS_CLASS } from '../../test-utils/tree- import { By } from '@angular/platform-browser'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { DropPosition } from '../moving/moving.service'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { SortingDirection } from '../../data-operations/sorting-strategy'; const GRID_RESIZE_CLASS = '.igx-grid-th__resize-handle'; describe('IgxTreeGrid - Indentation #tGrid', () => { - configureTestSuite(); let fix; let treeGrid: IgxTreeGridComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxTreeGridSimpleComponent, IgxTreeGridPrimaryForeignKeyComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-integration.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-integration.spec.ts index 7c94d029538..d02235cd5e2 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-integration.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-integration.spec.ts @@ -13,7 +13,6 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { TreeGridFunctions } from '../../test-utils/tree-grid-functions.spec'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; import { By } from '@angular/platform-browser'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxNumberFilteringOperand, IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; import { IgxHierarchicalTransactionService } from '../../services/transaction/igx-hierarchical-transaction'; import { HierarchicalTransaction, TransactionType } from '../../services/public_api'; @@ -28,11 +27,10 @@ const CSS_CLASS_ROW_EDITED = 'igx-grid__tr--edited'; const GRID_RESIZE_CLASS = '.igx-grid-th__resize-handle'; describe('IgxTreeGrid - Integration #tGrid', () => { - configureTestSuite(); let fix: ComponentFixture; let treeGrid: IgxTreeGridComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -81,7 +79,6 @@ describe('IgxTreeGrid - Integration #tGrid', () => { }); describe('Child Collection', () => { - // configureTestSuite(); beforeEach(() => { fix = TestBed.createComponent(IgxTreeGridSimpleComponent); fix.detectChanges(); @@ -259,6 +256,7 @@ describe('IgxTreeGrid - Integration #tGrid', () => { TreeGridFunctions.verifyTreeColumn(fix, 'ID', 5); treeGrid.moving = true; + fix.detectChanges(); const header = TreeGridFunctions.getHeaderCell(fix, 'ID').nativeElement; UIInteractions.simulatePointerEvent('pointerdown', header, 50, 50); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-keyBoardNav.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-keyBoardNav.spec.ts index 110a3f47aee..798d06c4682 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-keyBoardNav.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-keyBoardNav.spec.ts @@ -4,7 +4,6 @@ import { IgxTreeGridComponent } from './public_api'; import { IgxTreeGridWithNoScrollsComponent, IgxTreeGridWithScrollsComponent } from '../../test-utils/tree-grid-components.spec'; import { TreeGridFunctions } from '../../test-utils/tree-grid-functions.spec'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { clearGridSubs, setupGridScrollDetection } from '../../test-utils/helper-utils.spec'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; import { DebugElement } from '@angular/core'; @@ -14,8 +13,7 @@ import { firstValueFrom } from 'rxjs'; const DEBOUNCETIME = 30; describe('IgxTreeGrid - Key Board Navigation #tGrid', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -433,7 +431,7 @@ describe('IgxTreeGrid - Key Board Navigation #tGrid', () => { UIInteractions.triggerEventHandlerKeyDown('ArrowUp', gridContent); if (i <= 4) await firstValueFrom(treeGrid.verticalScrollContainer.chunkLoad); - else + else await wait(); fix.detectChanges(); TreeGridFunctions.verifyTreeGridCellSelected(treeGrid, cell, false); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-multi-cell-selection.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-multi-cell-selection.spec.ts index 2f60b96a835..cf503fba4b2 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-multi-cell-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-multi-cell-selection.spec.ts @@ -1,6 +1,5 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxTreeGridSelectionKeyComponent, IgxTreeGridSelectionComponent, @@ -14,9 +13,8 @@ import { GridSelectionFunctions, GridSummaryFunctions, GridFunctions } from '../ import { GridSelectionMode } from '../common/enums'; describe('IgxTreeGrid - Multi Cell selection #tGrid', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-search.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-search.spec.ts index 6410a77fcdf..05358d95fcf 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-search.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-search.spec.ts @@ -6,7 +6,6 @@ import { IgxTreeGridPrimaryForeignKeyComponent, IgxTreeGridSummariesScrollingComponent } from '../../test-utils/tree-grid-components.spec'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; import { wait } from '../../test-utils/ui-interactions.spec'; import { SortingDirection } from '../../data-operations/sorting-strategy'; @@ -15,12 +14,11 @@ const HIGHLIGHT_CLASS = 'igx-highlight'; const ACTIVE_CLASS = 'igx-highlight__active'; describe('IgxTreeGrid - search API #tGrid', () => { - configureTestSuite(); let fix; let fixNativeElement; let treeGrid: IgxTreeGridComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-selection.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-selection.spec.ts index f6d5bc3ccd3..305eb6319ae 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-selection.spec.ts @@ -19,7 +19,6 @@ import { TREE_ROW_DIV_SELECTION_CHECKBOX_CSS_CLASS } from '../../test-utils/tree-grid-functions.spec'; import { IgxStringFilteringOperand, IgxNumberFilteringOperand } from '../../data-operations/filtering-condition'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; import { IgxActionStripComponent } from '../../action-strip/public_api'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; @@ -32,7 +31,6 @@ import { SortingDirection } from '../../data-operations/sorting-strategy'; import { IgxGridCell } from '../public_api'; describe('IgxTreeGrid - Selection #tGrid', () => { - configureTestSuite(); let fix; let treeGrid: IgxTreeGridComponent; let actionStrip: IgxActionStripComponent; @@ -42,7 +40,7 @@ describe('IgxTreeGrid - Selection #tGrid', () => { const endEvent = new AnimationEvent('animationend'); animationElem.dispatchEvent(endEvent); }; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-sorting.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-sorting.spec.ts index 15e6505ce6b..9d51e633787 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-sorting.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-sorting.spec.ts @@ -2,17 +2,15 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { IgxTreeGridComponent } from './tree-grid.component'; import { IgxTreeGridSortingComponent } from '../../test-utils/tree-grid-components.spec'; import { TreeGridFunctions } from '../../test-utils/tree-grid-functions.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; describe('IgxTreeGrid - Sorting #tGrid', () => { - configureTestSuite(); let fix; let treeGrid: IgxTreeGridComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxTreeGridSortingComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-summaries.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-summaries.spec.ts index f9c46c8c52d..ab3607c4667 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-summaries.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-summaries.spec.ts @@ -8,7 +8,6 @@ import { IgxTreeGridSummariesScrollingComponent, IgxTreeGridSummariesKeyScroliingComponent } from '../../test-utils/tree-grid-components.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { clearGridSubs, setupGridScrollDetection } from '../../test-utils/helper-utils.spec'; import { wait, UIInteractions } from '../../test-utils/ui-interactions.spec'; import { GridSummaryFunctions, GridFunctions } from '../../test-utils/grid-functions.spec'; @@ -18,10 +17,9 @@ import { IgxTreeGridComponent } from './tree-grid.component'; import { IgxSummaryRow, IgxTreeGridRow } from '../grid-public-row'; describe('IgxTreeGrid - Summaries #tGrid', () => { - configureTestSuite(); const DEBOUNCETIME = 30; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.spec.ts b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.spec.ts index 8312cf7dab8..02010f95047 100644 --- a/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.spec.ts +++ b/projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.spec.ts @@ -1,7 +1,6 @@ import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxTreeGridComponent } from './tree-grid.component'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { By } from '@angular/platform-browser'; import { IgxTreeGridWrappedInContComponent, @@ -20,12 +19,11 @@ import { setElementSize } from '../../test-utils/helper-utils.spec'; describe('IgxTreeGrid Component Tests #tGrid', () => { - configureTestSuite(); const TBODY_CLASS = '.igx-grid__tbody-content'; let fix; let grid: IgxTreeGridComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -154,6 +152,7 @@ describe('IgxTreeGrid Component Tests #tGrid', () => { }); it('should throw a warning when primaryKey is set to a non-existing data field', () => { + jasmine.getEnv().allowRespy(true); const warnSpy = spyOn(console, 'warn'); grid.primaryKey = 'testField'; fix.detectChanges(); @@ -178,6 +177,7 @@ describe('IgxTreeGrid Component Tests #tGrid', () => { expect(console.warn).toHaveBeenCalledWith( `Field "${grid.primaryKey}" is not defined in the data. Set \`primaryKey\` to a valid field.` ); + jasmine.getEnv().allowRespy(false); }); }); diff --git a/projects/igniteui-angular/src/lib/icon/icon.component.spec.ts b/projects/igniteui-angular/src/lib/icon/icon.component.spec.ts index 18cd4bc7b75..3694a5fa2f3 100644 --- a/projects/igniteui-angular/src/lib/icon/icon.component.spec.ts +++ b/projects/igniteui-angular/src/lib/icon/icon.component.spec.ts @@ -5,11 +5,9 @@ import { IgxIconService } from "./icon.service"; import { IconFamily } from './types'; import type { IconType } from './types'; -import { configureTestSuite } from "../test-utils/configure-suite"; import { By } from "@angular/platform-browser"; describe("Icon", () => { - configureTestSuite(); describe("Component", () => { let fixture: ComponentFixture; diff --git a/projects/igniteui-angular/src/lib/icon/icon.service.spec.ts b/projects/igniteui-angular/src/lib/icon/icon.service.spec.ts index 2474450df60..bc891edaf02 100644 --- a/projects/igniteui-angular/src/lib/icon/icon.service.spec.ts +++ b/projects/igniteui-angular/src/lib/icon/icon.service.spec.ts @@ -2,7 +2,6 @@ import { TestBed, fakeAsync } from "@angular/core/testing"; import { IconFamily, IconMeta } from "./types"; import { IgxIconService } from './icon.service'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { first } from 'rxjs/operators'; import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { Component, inject } from "@angular/core"; @@ -11,7 +10,6 @@ import { By } from "@angular/platform-browser"; import { IgxTheme, THEME_TOKEN, ThemeToken } from "igniteui-angular"; describe("Icon Service", () => { - configureTestSuite(); const FAMILY: IconFamily = { name: "awesome", meta: { className: "my-awesome-icons", type: "font" }, diff --git a/projects/igniteui-angular/src/lib/input-group/input-group.component.spec.ts b/projects/igniteui-angular/src/lib/input-group/input-group.component.spec.ts index aad2e9a4dc0..4777403e2f6 100644 --- a/projects/igniteui-angular/src/lib/input-group/input-group.component.spec.ts +++ b/projects/igniteui-angular/src/lib/input-group/input-group.component.spec.ts @@ -4,7 +4,6 @@ import { By } from '@angular/platform-browser'; import { IgxInputGroupComponent } from './input-group.component'; import { UIInteractions } from '../test-utils/ui-interactions.spec'; import { IgxInputDirective } from '../directives/input/input.directive'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { IgxPrefixDirective, IgxSuffixDirective } from '../chips/public_api'; import { IGX_INPUT_GROUP_TYPE, IgxInputGroupType } from './inputGroupType'; @@ -14,8 +13,7 @@ const INPUT_GROUP_BORDER_CSS_CLASS = 'igx-input-group--border'; const INPUT_GROUP_SEARCH_CSS_CLASS = 'igx-input-group--search'; describe('IgxInputGroup', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ InputGroupComponent, diff --git a/projects/igniteui-angular/src/lib/list/list.component.spec.ts b/projects/igniteui-angular/src/lib/list/list.component.spec.ts index 4b427f3c7d8..8b730256a3a 100644 --- a/projects/igniteui-angular/src/lib/list/list.component.spec.ts +++ b/projects/igniteui-angular/src/lib/list/list.component.spec.ts @@ -1,5 +1,5 @@ import { QueryList } from '@angular/core'; -import { fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxListItemComponent } from './list-item.component'; import { IgxListPanState } from './list.common'; @@ -27,13 +27,13 @@ import { ListDirectivesComponent, ListWithSelectedItemComponent } from '../test-utils/list-components.spec'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { wait } from '../test-utils/ui-interactions.spec'; import { GridFunctions } from '../test-utils/grid-functions.spec'; describe('List', () => { - configureTestSuite(() => { - return TestBed.configureTestingModule({ + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ imports: [ CustomEmptyListComponent, EmptyListComponent, @@ -48,8 +48,8 @@ describe('List', () => { ListDirectivesComponent, ListWithSelectedItemComponent ] - }); - }); + }).compileComponents(); + })); it('should initialize igx-list with item and header', () => { const fixture = TestBed.createComponent(ListWithHeaderComponent); diff --git a/projects/igniteui-angular/src/lib/navbar/navbar.component.spec.ts b/projects/igniteui-angular/src/lib/navbar/navbar.component.spec.ts index fca8842617b..583c3451b92 100644 --- a/projects/igniteui-angular/src/lib/navbar/navbar.component.spec.ts +++ b/projects/igniteui-angular/src/lib/navbar/navbar.component.spec.ts @@ -3,15 +3,13 @@ import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { IgxNavbarComponent, IgxNavbarTitleDirective, IgxNavbarActionDirective } from './navbar.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { wait } from '../test-utils/ui-interactions.spec'; import { IgxIconComponent } from '../icon/icon.component'; const LEFT_AREA_CSS_CLAS = '.igx-navbar__left'; describe('IgxNavbar', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NavbarIntializeTestComponent, diff --git a/projects/igniteui-angular/src/lib/navigation-drawer/navigation-drawer.component.spec.ts b/projects/igniteui-angular/src/lib/navigation-drawer/navigation-drawer.component.spec.ts index 6edcfb82335..6e4d235aee9 100644 --- a/projects/igniteui-angular/src/lib/navigation-drawer/navigation-drawer.component.spec.ts +++ b/projects/igniteui-angular/src/lib/navigation-drawer/navigation-drawer.component.spec.ts @@ -12,13 +12,10 @@ import { IgxNavbarComponent } from '../navbar/navbar.component'; // HammerJS simulator from https://github.com/hammerjs/simulator, manual typings TODO declare let Simulator: any; -// const oldTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; describe('Navigation Drawer', () => { let widthSpyOverride: jasmine.Spy; - // configureTestSuite(); beforeEach(waitForAsync(() => { - // jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; TestBed.configureTestingModule({ imports: [ TestComponentPinComponent, @@ -34,14 +31,6 @@ describe('Navigation Drawer', () => { .and.returnValue(915 /* chosen at random by fair dice roll*/); })); - // afterEach(() => { - // jasmine.DEFAULT_TIMEOUT_INTERVAL = oldTimeout; - // }); - - // afterAll(() => { - // TestBed.resetTestingModule(); - // }); - it('should initialize without DI service', waitForAsync(() => { TestBed.compileComponents().then(() => { const fixture = TestBed.createComponent(TestComponent); diff --git a/projects/igniteui-angular/src/lib/paginator/paginator.component.spec.ts b/projects/igniteui-angular/src/lib/paginator/paginator.component.spec.ts index f9761a8cfd9..e71cd8fccaf 100644 --- a/projects/igniteui-angular/src/lib/paginator/paginator.component.spec.ts +++ b/projects/igniteui-angular/src/lib/paginator/paginator.component.spec.ts @@ -3,15 +3,13 @@ import { By } from '@angular/platform-browser'; import { ViewChild, Component } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxPaginatorComponent, IgxPaginatorContentDirective } from './paginator.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { GridFunctions } from '../test-utils/grid-functions.spec'; import { ControlsFunction } from '../test-utils/controls-functions.spec'; import { first } from 'rxjs/operators'; import { IgxButtonDirective } from '../directives/button/button.directive'; describe('IgxPaginator with default settings', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, DefaultPaginatorComponent] }).compileComponents(); @@ -236,8 +234,7 @@ describe('IgxPaginator with default settings', () => { }); describe('IgxPaginator with custom settings', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, CustomizedPaginatorComponent] }).compileComponents(); diff --git a/projects/igniteui-angular/src/lib/progressbar/circularbar.component.spec.ts b/projects/igniteui-angular/src/lib/progressbar/circularbar.component.spec.ts index 61beaa2f377..efa921a3834 100644 --- a/projects/igniteui-angular/src/lib/progressbar/circularbar.component.spec.ts +++ b/projects/igniteui-angular/src/lib/progressbar/circularbar.component.spec.ts @@ -1,6 +1,5 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { IgxCircularProgressBarComponent } from './progressbar.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { hasClass } from "../test-utils/helper-utils.spec"; describe('IgxCircularProgressBarComponent', () => { @@ -8,9 +7,7 @@ describe('IgxCircularProgressBarComponent', () => { let progress: IgxCircularProgressBarComponent; let circularBar: HTMLElement; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [IgxCircularProgressBarComponent] }).compileComponents(); @@ -23,6 +20,8 @@ describe('IgxCircularProgressBarComponent', () => { fixture = TestBed.createComponent(IgxCircularProgressBarComponent); progress = fixture.componentInstance; + // For test fixture destroy + progress.id = "root1"; fixture.detectChanges(); circularBar = fixture.debugElement.nativeElement; }); @@ -34,13 +33,14 @@ describe('IgxCircularProgressBarComponent', () => { }); it('should correctly apply the ID attribute', () => { - expect(progress.id).toContain('igx-circular-bar-'); // Keep this - const customId = 'custom-circular-bar-id'; progress.id = customId; fixture.detectChanges(); expect(progress.id).toBe(customId); + // For test fixture destroy + progress.id = "root1"; + fixture.detectChanges(); }); it('should correctly toggle the indeterminate mode', () => { diff --git a/projects/igniteui-angular/src/lib/progressbar/linearbar.component.spec.ts b/projects/igniteui-angular/src/lib/progressbar/linearbar.component.spec.ts index a775a449c13..7c8e9f4df9a 100644 --- a/projects/igniteui-angular/src/lib/progressbar/linearbar.component.spec.ts +++ b/projects/igniteui-angular/src/lib/progressbar/linearbar.component.spec.ts @@ -1,6 +1,5 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { IgxLinearProgressBarComponent } from './progressbar.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { hasClass } from "../test-utils/helper-utils.spec"; describe('IgxLinearProgressBarComponent', () => { @@ -8,21 +7,17 @@ describe('IgxLinearProgressBarComponent', () => { let progress: IgxLinearProgressBarComponent; let linearBar: HTMLElement; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [IgxLinearProgressBarComponent] }).compileComponents(); })); beforeEach(() => { - TestBed.configureTestingModule({ - imports: [IgxLinearProgressBarComponent] - }).compileComponents(); - fixture = TestBed.createComponent(IgxLinearProgressBarComponent); progress = fixture.componentInstance; + // For test fixture destroy + progress.id = "root1"; fixture.detectChanges(); linearBar = fixture.debugElement.nativeElement; }); @@ -136,15 +131,15 @@ describe('IgxLinearProgressBarComponent', () => { }); it('should correctly apply the ID attribute', () => { - expect(progress.id).toContain('igx-linear-bar-'); - expect(linearBar.id).toContain('igx-linear-bar-'); - const customId = 'custom-linear-bar-id'; progress.id = customId; fixture.detectChanges(); expect(progress.id).toBe(customId); expect(linearBar.id).toBe(customId); + // For test fixture destroy + progress.id = "root1"; + fixture.detectChanges(); }); it('should apply type-specific classes correctly', () => { diff --git a/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts b/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts index 0800ba40c53..ec9722cd1ef 100644 --- a/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts +++ b/projects/igniteui-angular/src/lib/query-builder/query-builder.component.spec.ts @@ -1,6 +1,5 @@ import { waitForAsync, TestBed, ComponentFixture, fakeAsync, tick, flush } from '@angular/core/testing'; import { FilteringExpressionsTree, FilteringLogic, IExpressionTree, IgxChipComponent, IgxComboComponent, IgxDateFilteringOperand, IgxNumberFilteringOperand, IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent, IgxQueryBuilderSearchValueTemplateDirective } from 'igniteui-angular'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { Component, OnInit, ViewChild } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { By } from '@angular/platform-browser'; @@ -12,10 +11,9 @@ import { NgTemplateOutlet } from '@angular/common'; import { QueryBuilderSelectors } from './query-builder.common'; describe('IgxQueryBuilder', () => { - configureTestSuite(); let fix: ComponentFixture; let queryBuilder: IgxQueryBuilderComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1898,7 +1896,7 @@ describe('IgxQueryBuilder', () => { QueryBuilderFunctions.verifyEditModeExpressionInputStates(fix, true, true, false, true); // Parent commit button should be enabled QueryBuilderFunctions.clickQueryBuilderExpressionCommitButton(fix); fix.detectChanges(); - + //Verify that expressionTree is correct const exprTree = JSON.stringify(fix.componentInstance.queryBuilder.expressionTree, null, 2); expect(exprTree).toBe(`{ @@ -2615,7 +2613,8 @@ describe('IgxQueryBuilder', () => { expect(dropGhostBounds.y).toBeCloseTo(targetChipBounds.y + ROW_HEIGHT); }); - it('Should position drop ghost below the inner group aligned with the outer level conditions when the bottom inner level condition is dragged down.', () => { + // TODO: Currently doesn't work as expected. The drop ghost is not shown on the first action. + xit('Should position drop ghost below the inner group aligned with the outer level conditions when the bottom inner level condition is dragged down.', () => { const draggedChip = chipComponents[5].componentInstance; // "OrderDate Today" chip const dragDir = draggedChip.dragDirective; UIInteractions.moveDragDirective(fix, dragDir, -50, 10, false); diff --git a/projects/igniteui-angular/src/lib/radio/radio.component.spec.ts b/projects/igniteui-angular/src/lib/radio/radio.component.spec.ts index a85c3e01d48..d341eb73794 100644 --- a/projects/igniteui-angular/src/lib/radio/radio.component.spec.ts +++ b/projects/igniteui-angular/src/lib/radio/radio.component.spec.ts @@ -4,13 +4,11 @@ import { FormsModule, NgForm, ReactiveFormsModule, UntypedFormBuilder, Validator import { By } from '@angular/platform-browser'; import { IgxRadioComponent } from './radio.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; describe('IgxRadio', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/select/select.component.spec.ts b/projects/igniteui-angular/src/lib/select/select.component.spec.ts index dad83f3273b..1fbb60cdfb8 100644 --- a/projects/igniteui-angular/src/lib/select/select.component.spec.ts +++ b/projects/igniteui-angular/src/lib/select/select.component.spec.ts @@ -9,7 +9,6 @@ import { IgxDropDownItemComponent, ISelectionEventArgs } from '../drop-down/publ import { IgxHintDirective, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from '../input-group/public_api'; import { IgxSelectComponent, IgxSelectFooterDirective, IgxSelectHeaderDirective } from './select.component'; import { IgxSelectItemComponent } from './select-item.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { HorizontalAlignment, VerticalAlignment, ConnectedPositioningStrategy, AbsoluteScrollStrategy } from '../services/public_api'; import { addScrollDivToElement } from '../services/overlay/overlay.spec'; import { UIInteractions } from '../test-utils/ui-interactions.spec'; @@ -83,9 +82,7 @@ describe('igxSelect', () => { expect(select.toggle).toHaveBeenCalledTimes(toggleCallCounter); }; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/services/csv/char-separated-value-data.ts b/projects/igniteui-angular/src/lib/services/csv/char-separated-value-data.ts index ea3691015e8..aea2416c319 100644 --- a/projects/igniteui-angular/src/lib/services/csv/char-separated-value-data.ts +++ b/projects/igniteui-angular/src/lib/services/csv/char-separated-value-data.ts @@ -52,7 +52,10 @@ export class CharSeparatedValueData { this._escapeCharacters.push(this._delimiter); const headers = columns && columns.length ? - columns.map(c => c.header ?? c.field) : + /* When column groups are present, always use the field as it indicates the group the column belongs to. + * Otherwise, in PivotGrid scenarios we can end up with many duplicated column names without a hint what they represent. + */ + columns.map(c => c.columnGroupParent ? c.field : c.header ?? c.field) : keys; this._headerRecord = this.processHeaderRecord(headers, this._data.length); diff --git a/projects/igniteui-angular/src/lib/services/csv/csv-exporter-grid.spec.ts b/projects/igniteui-angular/src/lib/services/csv/csv-exporter-grid.spec.ts index c497e830729..629d9ecc68a 100644 --- a/projects/igniteui-angular/src/lib/services/csv/csv-exporter-grid.spec.ts +++ b/projects/igniteui-angular/src/lib/services/csv/csv-exporter-grid.spec.ts @@ -19,17 +19,18 @@ import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/ import { IgxStringFilteringOperand, IgxNumberFilteringOperand } from '../../data-operations/filtering-condition'; import { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree'; import { FilteringLogic } from '../../data-operations/filtering-expression.interface'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { wait } from '../../test-utils/ui-interactions.spec'; +import { IgxPivotGridComponent } from '../../grids/pivot-grid/pivot-grid.component'; +import { IgxPivotGridTestBaseComponent } from '../../test-utils/pivot-grid-samples.spec'; +import { IgxPivotNumericAggregate } from '../../grids/pivot-grid/pivot-grid-aggregate'; describe('CSV Grid Exporter', () => { - configureTestSuite(); let exporter: IgxCsvExporterService; let options: IgxCsvExporterOptions; const data = SampleTestData.personJobData(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -518,6 +519,48 @@ describe('CSV Grid Exporter', () => { }); }); + describe('Pivot Grid CSV export', () => { + let fix; + let pivotGrid: IgxPivotGridComponent; + beforeEach(() => { + fix = TestBed.createComponent(IgxPivotGridTestBaseComponent); + fix.detectChanges(); + pivotGrid = fix.componentInstance.pivotGrid; + pivotGrid.pivotConfiguration = { + columns: [ + { + enabled: true, + memberName: 'Country' + } + ], + rows: [ + { + enabled: true, + memberName: 'ProductCategory' + } + ], + values: [ + { + enabled: true, + member: 'UnitsSold', + aggregate: { + aggregator: IgxPivotNumericAggregate.sum, + key: 'SUM', + label: 'Sum', + }, + } + ] + }; + fix.detectChanges(); + }); + + it('should export pivot grid successfully.', async () => { + await wait(); + const wrapper = await getExportedData(pivotGrid, options); + wrapper.verifyData(wrapper.pivotGridData); + }); + }); + const getExportedData = (grid, csvOptions: IgxCsvExporterOptions) => { const result = new Promise((resolve) => { exporter.exportEnded.pipe(first()).subscribe((value) => { diff --git a/projects/igniteui-angular/src/lib/services/csv/csv-exporter.spec.ts b/projects/igniteui-angular/src/lib/services/csv/csv-exporter.spec.ts index 919adf02b6f..2f968e0c016 100644 --- a/projects/igniteui-angular/src/lib/services/csv/csv-exporter.spec.ts +++ b/projects/igniteui-angular/src/lib/services/csv/csv-exporter.spec.ts @@ -5,10 +5,7 @@ import { CSVWrapper } from './csv-verification-wrapper.spec'; import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { first } from 'rxjs/operators'; -import { configureTestSuite } from '../../test-utils/configure-suite'; - describe('CSV exporter', () => { - configureTestSuite(); let exporter: IgxCsvExporterService; const fileTypes = [ CsvFileTypes.CSV, CsvFileTypes.TSV, CsvFileTypes.TAB ]; diff --git a/projects/igniteui-angular/src/lib/services/csv/csv-exporter.ts b/projects/igniteui-angular/src/lib/services/csv/csv-exporter.ts index df27d8f41e4..d6a5c9596ae 100644 --- a/projects/igniteui-angular/src/lib/services/csv/csv-exporter.ts +++ b/projects/igniteui-angular/src/lib/services/csv/csv-exporter.ts @@ -1,5 +1,5 @@ import { EventEmitter, Injectable } from '@angular/core'; -import { DEFAULT_OWNER, IExportRecord, IgxBaseExporter } from '../exporter-common/base-export-service'; +import { DEFAULT_OWNER, ExportHeaderType, IColumnInfo, IExportRecord, IgxBaseExporter } from '../exporter-common/base-export-service'; import { ExportUtilities } from '../exporter-common/export-utilities'; import { CharSeparatedValueData } from './char-separated-value-data'; import { CsvFileTypes, IgxCsvExporterOptions } from './csv-exporter-options'; @@ -50,10 +50,29 @@ export class IgxCsvExporterService extends IgxBaseExporter { private _stringData: string; protected exportDataImplementation(data: IExportRecord[], options: IgxCsvExporterOptions, done: () => void) { - data = data.map((item) => item.data); + const dimensionKeys = data[0]?.dimensionKeys; + data = dimensionKeys?.length ? + data.map((item) => item.rawData): + data.map((item) => item.data); const columnList = this._ownersMap.get(DEFAULT_OWNER); + const columns = columnList?.columns.filter(c => c.headerType === ExportHeaderType.ColumnHeader); + if (dimensionKeys) { + const dimensionCols = dimensionKeys.map((key) => { + const columnInfo: IColumnInfo = { + header: key, + field: key, + dataType: 'string', + skip: false, + headerType: ExportHeaderType.ColumnHeader, + columnSpan: 1, + startIndex: 0 + }; + return columnInfo; + }); + columns.unshift(...dimensionCols); + } - const csvData = new CharSeparatedValueData(data, options.valueDelimiter, columnList?.columns); + const csvData = new CharSeparatedValueData(data, options.valueDelimiter, columns); csvData.prepareDataAsync((r) => { this._stringData = r; this.saveFile(options); diff --git a/projects/igniteui-angular/src/lib/services/csv/csv-verification-wrapper.spec.ts b/projects/igniteui-angular/src/lib/services/csv/csv-verification-wrapper.spec.ts index c364189061d..105cd01b132 100644 --- a/projects/igniteui-angular/src/lib/services/csv/csv-verification-wrapper.spec.ts +++ b/projects/igniteui-angular/src/lib/services/csv/csv-verification-wrapper.spec.ts @@ -288,4 +288,12 @@ export class CSVWrapper { `B's Beverages${this._delimiter}Victoria Ashworth${this._delimiter}Fauntleroy Circus${this._delimiter}0${this._delimiter}` + `2500${this._delimiter}5000${this._eor}`; } + + public get pivotGridData() { + return `ProductCategory${this._delimiter}Bulgaria${this._delimiter}USA${this._delimiter}Uruguay${this._eor}` + + `Accessories${this._delimiter}${this._delimiter}293${this._delimiter}${this._eor}` + + `Bikes${this._delimiter}${this._delimiter}${this._delimiter}68${this._eor}` + + `Clothing${this._delimiter}774${this._delimiter}296${this._delimiter}456${this._eor}` + + `Components${this._delimiter}${this._delimiter}240${this._delimiter}${this._eor}`; + } } diff --git a/projects/igniteui-angular/src/lib/services/direction/directionality.spec.ts b/projects/igniteui-angular/src/lib/services/direction/directionality.spec.ts index e832d628a63..7e8d3ec93d6 100644 --- a/projects/igniteui-angular/src/lib/services/direction/directionality.spec.ts +++ b/projects/igniteui-angular/src/lib/services/direction/directionality.spec.ts @@ -10,10 +10,10 @@ interface FakeDoc { describe('IgxDirectionality', () => { describe('DI', () => { - beforeAll(waitForAsync(() => + beforeEach(waitForAsync(() => TestBed.configureTestingModule({ - imports: [InjectsIgxDirectionalityComponent] -}).compileComponents() + imports: [InjectsIgxDirectionalityComponent] + }).compileComponents() )); it('should inject the document through the injectionToken properly', () => { diff --git a/projects/igniteui-angular/src/lib/services/excel/excel-exporter-grid.spec.ts b/projects/igniteui-angular/src/lib/services/excel/excel-exporter-grid.spec.ts index 8104074f803..ecede146109 100644 --- a/projects/igniteui-angular/src/lib/services/excel/excel-exporter-grid.spec.ts +++ b/projects/igniteui-angular/src/lib/services/excel/excel-exporter-grid.spec.ts @@ -31,7 +31,6 @@ import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { first } from 'rxjs/operators'; import { DefaultSortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy'; import { IgxStringFilteringOperand } from '../../data-operations/filtering-condition'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { IgxTreeGridPrimaryForeignKeyComponent, IgxTreeGridSummariesKeyComponent } from '../../test-utils/tree-grid-components.spec'; import { IgxTreeGridComponent } from '../../grids/tree-grid/public_api'; import { IgxNumberFilteringOperand } from '../../data-operations/filtering-condition'; @@ -52,12 +51,11 @@ import { IgxPivotGridMultipleRowComponent, IgxPivotGridTestComplexHierarchyCompo import { IgxPivotGridComponent, PivotRowLayoutType } from '../../grids/pivot-grid/public_api'; describe('Excel Exporter', () => { - configureTestSuite(); let exporter: IgxExcelExporterService; let actualData: FileContentData; let options: IgxExcelExporterOptions; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/services/excel/excel-exporter.spec.ts b/projects/igniteui-angular/src/lib/services/excel/excel-exporter.spec.ts index 2e6a4c838fe..27dc2cdbbe6 100644 --- a/projects/igniteui-angular/src/lib/services/excel/excel-exporter.spec.ts +++ b/projects/igniteui-angular/src/lib/services/excel/excel-exporter.spec.ts @@ -7,10 +7,7 @@ import { FileContentData } from './test-data.service.spec'; import { SampleTestData } from '../../test-utils/sample-test-data.spec'; import { first } from 'rxjs/operators'; -import { configureTestSuite } from '../../test-utils/configure-suite'; - describe('Excel Exporter', () => { - configureTestSuite(); let exporter: IgxExcelExporterService; let options: IgxExcelExporterOptions; let actualData: FileContentData; diff --git a/projects/igniteui-angular/src/lib/services/exporter-common/base-export-service.ts b/projects/igniteui-angular/src/lib/services/exporter-common/base-export-service.ts index 31fe7f6f1ef..189b4290623 100644 --- a/projects/igniteui-angular/src/lib/services/exporter-common/base-export-service.ts +++ b/projects/igniteui-angular/src/lib/services/exporter-common/base-export-service.ts @@ -44,6 +44,9 @@ export interface IExportRecord { summaryKey?: string; hierarchicalOwner?: string; references?: IColumnInfo[]; + /* Adding `rawData` and `dimesnionKeys` properties to support properly exporting pivot grid data to CSV. */ + rawData?: any; + dimensionKeys?: string[]; } export interface IColumnList { @@ -448,6 +451,7 @@ export abstract class IgxBaseExporter { if (!isSpecialData) { const owner = record.owner === undefined ? DEFAULT_OWNER : record.owner; const ownerCols = this._ownersMap.get(owner).columns; + const hasRowHeaders = ownerCols.some(c => c.headerType === ExportHeaderType.RowHeader); if (record.type !== ExportRecordType.HeaderRecord) { const columns = ownerCols @@ -455,6 +459,10 @@ export abstract class IgxBaseExporter { .sort((a, b) => a.startIndex - b.startIndex) .sort((a, b) => a.pinnedIndex - b.pinnedIndex); + if (hasRowHeaders) { + record.rawData = record.data; + } + record.data = columns.reduce((a, e) => { if (!e.skip) { let rawValue = resolveNestedPath(record.data, e.field); @@ -592,6 +600,10 @@ export abstract class IgxBaseExporter { this.flatRecords.push(pivotGridRecord); } + + if (this.flatRecords.length) { + this.flatRecords[0].dimensionKeys = Object.values(this.pivotGridRowDimensionsMap); + } } private prepareHierarchicalGridData(grid: GridType, hasFiltering: boolean, hasSorting: boolean) { @@ -1342,8 +1354,8 @@ export abstract class IgxBaseExporter { for (const k of Object.keys(groupedRecords)) { groupedRecords[k] = groupedRecords[k].filter(row => mapKeys.every(mk => Object.keys(row).includes(mk)) - && mapValues.every(mv => Object.values(row).includes(mv))); - + && mapValues.every(mv => Object.values(row).includes(mv))); + if (groupedRecords[k].length === 0) { delete groupedRecords[k]; } diff --git a/projects/igniteui-angular/src/lib/services/overlay/overlay.spec.ts b/projects/igniteui-angular/src/lib/services/overlay/overlay.spec.ts index a4d0b762765..828f8f7f9d2 100644 --- a/projects/igniteui-angular/src/lib/services/overlay/overlay.spec.ts +++ b/projects/igniteui-angular/src/lib/services/overlay/overlay.spec.ts @@ -15,7 +15,6 @@ import { first } from 'rxjs/operators'; import { IgxAvatarComponent } from '../../avatar/avatar.component'; import { IgxCalendarComponent } from '../../calendar/public_api'; import { IgxCalendarContainerComponent } from '../../date-common/calendar-container/calendar-container.component'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { IgxAngularAnimationService } from '../animation/angular-animation-service'; import { AnimationService } from '../animation/animation'; @@ -215,7 +214,6 @@ describe('igxOverlay', () => { }; describe('Pure Unit Test', () => { - configureTestSuite({ checkLeaks: true }); let mockElement: any; let mockElementRef: any; let mockApplicationRef: any; @@ -368,7 +366,6 @@ describe('igxOverlay', () => { }); describe('Unit Tests: ', () => { - configureTestSuite({ checkLeaks: true }); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, SimpleDynamicWithDirectiveComponent] @@ -1415,7 +1412,6 @@ describe('igxOverlay', () => { }); describe('Unit Tests - Scroll Strategies: ', () => { - configureTestSuite({ checkLeaks: true }); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, SimpleDynamicWithDirectiveComponent] @@ -1590,7 +1586,6 @@ describe('igxOverlay', () => { }); describe('Integration tests: ', () => { - configureTestSuite({ checkLeaks: true }); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, SimpleDynamicWithDirectiveComponent] @@ -3578,7 +3573,6 @@ describe('igxOverlay', () => { }); describe('Integration tests - Scroll Strategies: ', () => { - configureTestSuite({ checkLeaks: true }); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, SimpleDynamicWithDirectiveComponent] @@ -4443,7 +4437,6 @@ describe('igxOverlay', () => { }); describe('Integration tests p3 (IgniteUI components): ', () => { - configureTestSuite({ checkLeaks: true }); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, SimpleDynamicWithDirectiveComponent] diff --git a/projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.spec.ts b/projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.spec.ts index d4071b847ed..1f3b0722636 100644 --- a/projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.spec.ts +++ b/projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.spec.ts @@ -12,7 +12,6 @@ import { IBaseCancelableBrowserEventArgs } from '../core/utils'; import { IgxIconComponent } from '../icon/icon.component'; import { IgxInputState, IgxLabelDirective } from '../input-group/public_api'; import { AbsoluteScrollStrategy, AutoPositionStrategy, ConnectedPositioningStrategy } from '../services/public_api'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { UIInteractions, wait } from '../test-utils/ui-interactions.spec'; import { IgxSimpleComboComponent, ISimpleComboSelectionChangingEventArgs } from './public_api'; import { IgxGridComponent } from '../grids/grid/grid.component'; @@ -37,8 +36,6 @@ const CSS_CLASS_COMBO_INPUTGROUP = 'igx-input-group__input'; const CSS_CLASS_INPUTGROUP_REQUIRED = 'igx-input-group--required'; const CSS_CLASS_HEADER = 'header-class'; const CSS_CLASS_FOOTER = 'footer-class'; -const CSS_CLASS_ITEM = 'igx-drop-down__item'; -const CSS_CLASS_HEADER_ITEM = 'igx-drop-down__header'; const CSS_CLASS_INPUT_GROUP_REQUIRED = 'igx-input-group--required'; const CSS_CLASS_INPUT_GROUP_INVALID = 'igx-input-group--invalid'; const defaultDropdownItemHeight = 40; @@ -51,8 +48,6 @@ describe('IgxSimpleCombo', () => { let reactiveForm: NgForm; let reactiveControl: any; - configureTestSuite(); - describe('Unit tests: ', () => { const data = ['Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Item6', 'Item7']; const complexData = [ @@ -77,6 +72,11 @@ describe('IgxSimpleCombo', () => { mockSelection.get.and.returnValue(new Set([])); const platformUtil = null; const mockDocument = jasmine.createSpyObj('DOCUMENT', [], { 'defaultView': { getComputedStyle: () => null }}); + jasmine.getEnv().allowRespy(true); + + afterAll(() => { + jasmine.getEnv().allowRespy(false); + }); it('should properly call dropdown methods on toggle', () => { combo = new IgxSimpleComboComponent( @@ -552,7 +552,7 @@ describe('IgxSimpleCombo', () => { }); describe('Initialization and rendering tests: ', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -938,7 +938,7 @@ describe('IgxSimpleCombo', () => { }); describe('Binding tests: ', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1106,7 +1106,7 @@ describe('IgxSimpleCombo', () => { describe('Keyboard navigation and interactions', () => { let dropdown: IgxComboDropDownComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -1915,8 +1915,6 @@ describe('IgxSimpleCombo', () => { }); it('should not change selection when selectionChanging event is canceled', () => { - spyOn(combo.selectionChanging, 'emit').and.callThrough(); - fixture.detectChanges(); combo.select('Connecticut'); @@ -1952,7 +1950,6 @@ describe('IgxSimpleCombo', () => { it('should preserved the input value of the combo when selectionChanging event is canceled', () => { - spyOn(combo.selectionChanging, 'emit').and.callThrough(); fixture.detectChanges(); const comboInput = fixture.debugElement.query(By.css(`.igx-input-group__input`)); @@ -2144,7 +2141,7 @@ describe('IgxSimpleCombo', () => { describe('Form control tests: ', () => { describe('Template form tests: ', () => { let inputGroupRequired: DebugElement; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -2403,7 +2400,7 @@ describe('IgxSimpleCombo', () => { })); }); describe('Reactive form tests: ', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -2695,7 +2692,7 @@ describe('IgxSimpleCombo', () => { }); describe('Selection tests: ', () => { - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -2829,7 +2826,7 @@ describe('IgxSimpleCombo', () => { describe('Integration', () => { let grid: IgxGridComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/slider/slider.component.spec.ts b/projects/igniteui-angular/src/lib/slider/slider.component.spec.ts index b460d7188d8..5442a15076f 100644 --- a/projects/igniteui-angular/src/lib/slider/slider.component.spec.ts +++ b/projects/igniteui-angular/src/lib/slider/slider.component.spec.ts @@ -4,7 +4,6 @@ import { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/f import { By, HammerModule } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { DIR_DOCUMENT, IgxDirectionality } from '../services/direction/directionality'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { UIInteractions, wait } from '../test-utils/ui-interactions.spec'; import { IgxSliderType, IgxThumbFromTemplateDirective, IgxThumbToTemplateDirective, IRangeSliderValue, TickLabelsOrientation, TicksOrientation } from './slider.common'; import { IgxSliderComponent } from './slider.component'; @@ -32,8 +31,7 @@ interface FakeDoc { describe('IgxSlider', () => { let fakeDoc: FakeDoc; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { fakeDoc = { body: {}, documentElement: {} }; TestBed.configureTestingModule({ diff --git a/projects/igniteui-angular/src/lib/snackbar/snackbar.component.spec.ts b/projects/igniteui-angular/src/lib/snackbar/snackbar.component.spec.ts index 5a9a6c8f709..a849053337c 100644 --- a/projects/igniteui-angular/src/lib/snackbar/snackbar.component.spec.ts +++ b/projects/igniteui-angular/src/lib/snackbar/snackbar.component.spec.ts @@ -3,15 +3,13 @@ import { TestBed, fakeAsync, tick, waitForAsync, ComponentFixture } from '@angul import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxSnackbarComponent } from './snackbar.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { useAnimation } from '@angular/animations'; import { HorizontalAlignment, PositionSettings, VerticalAlignment } from '../services/public_api'; import { slideInLeft, slideInRight } from 'igniteui-angular/animations'; import { IgxButtonDirective } from '../directives/button/button.directive'; describe('IgxSnackbar', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -188,8 +186,7 @@ describe('IgxSnackbar', () => { }); describe('IgxSnackbar with custom content', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts b/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts index 5bfb346d615..63a079c7e76 100644 --- a/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts +++ b/projects/igniteui-angular/src/lib/splitter/splitter.component.spec.ts @@ -1,4 +1,3 @@ -import { configureTestSuite } from '../test-utils/configure-suite'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { Component, ViewChild, DebugElement } from '@angular/core'; import { SplitterType, IgxSplitterComponent, ISplitterBarResizeEventArgs } from './splitter.component'; @@ -6,19 +5,19 @@ import { By } from '@angular/platform-browser'; import { UIInteractions } from '../test-utils/ui-interactions.spec'; import { IgxSplitterPaneComponent } from './splitter-pane/splitter-pane.component'; - const SPLITTERBAR_CLASS = 'igx-splitter-bar'; const SPLITTERBAR_DIV_CLASS = '.igx-splitter-bar'; const SPLITTER_BAR_VERTICAL_CLASS = 'igx-splitter-bar--vertical'; const COLLAPSIBLE_CLASS = 'igx-splitter-bar--collapsible'; describe('IgxSplitter', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => TestBed.configureTestingModule({ - imports: [ - SplitterTestComponent - ] -}).compileComponents())); + beforeEach(waitForAsync(() => + TestBed.configureTestingModule({ + imports: [ + SplitterTestComponent + ] + }).compileComponents() + )); let fixture: ComponentFixture; let splitter: IgxSplitterComponent; @@ -326,8 +325,7 @@ describe('IgxSplitter', () => { }); describe('IgxSplitter pane toggle', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => TestBed.configureTestingModule({ imports: [ SplitterTogglePaneComponent ] @@ -430,8 +428,7 @@ describe('IgxSplitter pane toggle', () => { }); describe('IgxSplitter pane collapse', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => TestBed.configureTestingModule({ + beforeEach(waitForAsync(() => TestBed.configureTestingModule({ imports: [ SplitterCollapsedPaneComponent ] @@ -463,12 +460,13 @@ describe('IgxSplitter pane collapse', () => { }); describe('IgxSplitter resizing with minSize and browser window is shrinked', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => TestBed.configureTestingModule({ - imports: [ - SplitterMinSiezComponent - ] - }).compileComponents())); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + SplitterMinSiezComponent + ] + }).compileComponents(); + })); let fixture; let splitter; beforeEach(waitForAsync(() => { diff --git a/projects/igniteui-angular/src/lib/stepper/stepper.component.spec.ts b/projects/igniteui-angular/src/lib/stepper/stepper.component.spec.ts index 86509db32a8..38fdd20f3e8 100644 --- a/projects/igniteui-angular/src/lib/stepper/stepper.component.spec.ts +++ b/projects/igniteui-angular/src/lib/stepper/stepper.component.spec.ts @@ -7,7 +7,6 @@ import { take } from 'rxjs/operators'; import { IgxIconComponent } from '../icon/icon.component'; import { IgxInputDirective, IgxInputGroupComponent } from '../input-group/public_api'; import { Direction } from '../services/direction/directionality'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { UIInteractions } from '../test-utils/ui-interactions.spec'; import { IgxStepComponent } from './step/step.component'; import { @@ -52,7 +51,7 @@ const getStepperPositions = (): string[] => { return positions; }; -const testAnimationBehvior = ( +const testAnimationBehavior = ( val: any, fix: ComponentFixture, isHorAnimTypeInvalidTest: boolean @@ -75,11 +74,10 @@ const testAnimationBehvior = ( }; describe('Rendering Tests', () => { - configureTestSuite(); let fix: ComponentFixture; let stepper: IgxStepperComponent; - beforeAll( + beforeEach( waitForAsync(() => { TestBed.configureTestingModule({ imports: [ @@ -329,6 +327,14 @@ describe('Rendering Tests', () => { }); describe('Appearance', () => { + beforeAll(() => { + jasmine.getEnv().allowRespy(true); + }); + + afterAll(() => { + jasmine.getEnv().allowRespy(false); + }); + it('should apply the appropriate class to a stepper in horizontal mode', () => { stepper.orientation = IgxStepperOrientation.Horizontal; fix.detectChanges(); @@ -572,7 +578,7 @@ describe('Rendering Tests', () => { for (const val of numericTestValues) { fix.componentInstance.animationDuration = val as any; - testAnimationBehvior(val, fix, false); + testAnimationBehavior(val, fix, false); } const fallbackToDefaultValues = [-1, 0, null, undefined, 'sampleString', [], {}]; @@ -581,7 +587,7 @@ describe('Rendering Tests', () => { fix.detectChanges(); expect(stepper.animationDuration) .toBe((stepper as any)._defaultAnimationDuration); - testAnimationBehvior(val, fix, false); + testAnimationBehavior(val, fix, false); } fix.componentInstance.animationDuration = 300; @@ -591,13 +597,13 @@ describe('Rendering Tests', () => { const horAnimTypeValidValues = ['slide', 'fade', 'none']; for (const val of horAnimTypeValidValues) { fix.componentInstance.horizontalAnimationType = val as any; - testAnimationBehvior(val, fix, false); + testAnimationBehavior(val, fix, false); } const horAnimTypeTestValues = ['sampleString', null, undefined, 0, [], {}]; for (const val of horAnimTypeTestValues) { fix.componentInstance.horizontalAnimationType = val as any; - testAnimationBehvior(val, fix, true); + testAnimationBehavior(val, fix, true); } stepper.orientation = IgxStepperOrientation.Vertical; @@ -606,7 +612,7 @@ describe('Rendering Tests', () => { const vertAnimTypeTestValues = ['fade', 'grow', 'none', 'sampleString', null, undefined, 0, [], {}]; for (const val of vertAnimTypeTestValues) { fix.componentInstance.verticalAnimationType = val as any; - testAnimationBehvior(val, fix, false); + testAnimationBehavior(val, fix, false); } })); @@ -712,7 +718,7 @@ describe('Rendering Tests', () => { it('should properly collapse the previously active step in horizontal orientation and animation type \'fade\'', fakeAsync(() => { stepper.orientation = IgxStepperOrientation.Horizontal; stepper.horizontalAnimationType = 'fade'; - testAnimationBehvior('fade', fix, false); + testAnimationBehavior('fade', fix, false); })); }); @@ -917,7 +923,6 @@ describe('Rendering Tests', () => { }); describe('Stepper service unit tests', () => { - configureTestSuite(); let stepperService: IgxStepperService; let mockElement: any; @@ -931,6 +936,14 @@ describe('Stepper service unit tests', () => { let steps: IgxStepComponent[] = []; let stepper: IgxStepperComponent; + beforeAll(() => { + jasmine.getEnv().allowRespy(true); + }); + + afterAll(() => { + jasmine.getEnv().allowRespy(false); + }); + beforeEach(() => { mockElement = { style: { visibility: '', cursor: '', transitionDuration: '' }, diff --git a/projects/igniteui-angular/src/lib/switch/switch.component.spec.ts b/projects/igniteui-angular/src/lib/switch/switch.component.spec.ts index 4bff62a9a93..56553b40bf1 100644 --- a/projects/igniteui-angular/src/lib/switch/switch.component.spec.ts +++ b/projects/igniteui-angular/src/lib/switch/switch.component.spec.ts @@ -4,13 +4,11 @@ import { UntypedFormBuilder, FormsModule, ReactiveFormsModule, Validators, NgFor import { By } from '@angular/platform-browser'; import { IgxSwitchComponent } from './switch.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; describe('IgxSwitch', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, @@ -156,6 +154,7 @@ describe('IgxSwitch', () => { it('Disabled state', () => { const fixture = TestBed.createComponent(IgxSwitchComponent); const switchInstance = fixture.componentInstance; + switchInstance.id = "root1"; switchInstance.disabled = true; const nativeCheckbox = switchInstance.nativeInput.nativeElement as HTMLInputElement; const nativeLabel = switchInstance.nativeLabel.nativeElement; diff --git a/projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav.component.spec.ts b/projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav.component.spec.ts index ed3fd90bafc..1a65f4d3977 100644 --- a/projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav.component.spec.ts +++ b/projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav.component.spec.ts @@ -3,7 +3,6 @@ import { TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { Router } from '@angular/router'; import { Location } from '@angular/common'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { BottomTabBarTestComponent, TabBarRoutingTestComponent, TabBarTabsOnlyModeTestComponent, @@ -18,20 +17,18 @@ import { RoutingTestGuard } from '../../test-utils/routing-test-guard.spec'; import { RoutingView1Component, RoutingView2Component, RoutingView3Component, RoutingView4Component, RoutingView5Component } from '../../test-utils/routing-view-components.spec'; describe('IgxBottomNav', () => { - configureTestSuite(); const tabItemNormalCssClass = 'igx-bottom-nav__menu-item'; const tabItemSelectedCssClass = 'igx-bottom-nav__menu-item--selected'; - - beforeAll(waitForAsync(() => { - const testRoutes = [ - { path: 'view1', component: RoutingView1Component, canActivate: [RoutingTestGuard] }, - { path: 'view2', component: RoutingView2Component, canActivate: [RoutingTestGuard] }, - { path: 'view3', component: RoutingView3Component, canActivate: [RoutingTestGuard] }, - { path: 'view4', component: RoutingView4Component, canActivate: [RoutingTestGuard] }, - { path: 'view5', component: RoutingView5Component, canActivate: [RoutingTestGuard] }, - ]; - + const testRoutes = [ + { path: 'view1', component: RoutingView1Component, canActivate: [RoutingTestGuard] }, + { path: 'view2', component: RoutingView2Component, canActivate: [RoutingTestGuard] }, + { path: 'view3', component: RoutingView3Component, canActivate: [RoutingTestGuard] }, + { path: 'view4', component: RoutingView4Component, canActivate: [RoutingTestGuard] }, + { path: 'view5', component: RoutingView5Component, canActivate: [RoutingTestGuard] }, + ]; + + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/tabs/tabs/tabs.component.spec.ts b/projects/igniteui-angular/src/lib/tabs/tabs/tabs.component.spec.ts index f4441d67dbb..6abb3ebd87a 100644 --- a/projects/igniteui-angular/src/lib/tabs/tabs/tabs.component.spec.ts +++ b/projects/igniteui-angular/src/lib/tabs/tabs/tabs.component.spec.ts @@ -15,7 +15,6 @@ import { TabsTestHtmlAttributesComponent, TabsTestSelectedTabComponent, TabsWithPrefixSuffixTestComponent, TemplatedTabsTestComponent } from '../../test-utils/tabs-components.spec'; -import { configureTestSuite } from '../../test-utils/configure-suite'; import { UIInteractions, wait } from '../../test-utils/ui-interactions.spec'; import { IgxTabContentComponent } from './tab-content.component'; import { RoutingTestGuard } from '../../test-utils/routing-test-guard.spec'; @@ -29,20 +28,19 @@ const KEY_ENTER_EVENT = new KeyboardEvent('keydown', { key: 'Enter', bubbles: tr const KEY_SPACE_EVENT = new KeyboardEvent('keydown', { key: ' ', bubbles: true }); describe('IgxTabs', () => { - configureTestSuite({ checkLeaks: true }); const tabItemNormalCssClass = 'igx-tabs__header-item'; const tabItemSelectedCssClass = 'igx-tabs__header-item--selected'; const headerScrollCssClass = 'igx-tabs__header-scroll'; - - beforeAll(waitForAsync(() => { - const testRoutes = [ - { path: 'view1', component: RoutingView1Component, canActivate: [RoutingTestGuard] }, - { path: 'view2', component: RoutingView2Component, canActivate: [RoutingTestGuard] }, - { path: 'view3', component: RoutingView3Component, canActivate: [RoutingTestGuard] }, - { path: 'view4', component: RoutingView4Component, canActivate: [RoutingTestGuard] }, - { path: 'view5', component: RoutingView5Component, canActivate: [RoutingTestGuard] } - ]; + const testRoutes = [ + { path: 'view1', component: RoutingView1Component, canActivate: [RoutingTestGuard] }, + { path: 'view2', component: RoutingView2Component, canActivate: [RoutingTestGuard] }, + { path: 'view3', component: RoutingView3Component, canActivate: [RoutingTestGuard] }, + { path: 'view4', component: RoutingView4Component, canActivate: [RoutingTestGuard] }, + { path: 'view5', component: RoutingView5Component, canActivate: [RoutingTestGuard] } + ]; + + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ diff --git a/projects/igniteui-angular/src/lib/test-utils/hierarchical-grid-components.spec.ts b/projects/igniteui-angular/src/lib/test-utils/hierarchical-grid-components.spec.ts index 4e5afe2ca3f..fa3ccde83a6 100644 --- a/projects/igniteui-angular/src/lib/test-utils/hierarchical-grid-components.spec.ts +++ b/projects/igniteui-angular/src/lib/test-utils/hierarchical-grid-components.spec.ts @@ -19,6 +19,7 @@ import { IgxCellHeaderTemplateDirective } from '../grids/columns/templates.direc import { IgxPaginatorDirective } from '../paginator/paginator-interfaces'; @Component({ + selector: 'igx-hierarchical-grid-test-base', template: ` @@ -93,6 +94,7 @@ export class IgxHierarchicalGridTestBaseComponent { } @Component({ + selector: 'igx-hierarchical-grid-with-transaction-provider', template: ` diff --git a/projects/igniteui-angular/src/lib/time-picker/time-picker.component.spec.ts b/projects/igniteui-angular/src/lib/time-picker/time-picker.component.spec.ts index 30469b2d225..fa12ed3f60a 100644 --- a/projects/igniteui-angular/src/lib/time-picker/time-picker.component.spec.ts +++ b/projects/igniteui-angular/src/lib/time-picker/time-picker.component.spec.ts @@ -8,7 +8,6 @@ import { UIInteractions } from '../test-utils/ui-interactions.spec'; import { IgxHintDirective, IgxInputGroupComponent, IgxInputState, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from '../input-group/public_api'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { PickerInteractionMode } from '../date-common/types'; import { PlatformUtil } from '../core/utils'; import { DatePart, IgxDateTimeEditorDirective } from '../directives/date-time-editor/public_api'; @@ -477,8 +476,7 @@ describe('IgxTimePicker', () => { describe('Dropdown/dialog mode', () => { let fixture: ComponentFixture; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ FormsModule, @@ -1133,8 +1131,7 @@ describe('IgxTimePicker', () => { describe('Rendering tests', () => { let fixture: ComponentFixture; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxTimePickerTestComponent] }).compileComponents(); @@ -1577,8 +1574,7 @@ describe('IgxTimePicker', () => { describe('Keyboard navigation', () => { let fixture: ComponentFixture; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxTimePickerTestComponent] }).compileComponents(); @@ -1663,8 +1659,7 @@ describe('IgxTimePicker', () => { describe('Projected elements', () => { let fixture: ComponentFixture; - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxTimePickerWithProjectionsComponent] }).compileComponents(); @@ -1762,10 +1757,9 @@ describe('IgxTimePicker', () => { }); describe('FormControl integration', () => { - let fixture: ComponentFixture; - configureTestSuite(); - beforeAll(waitForAsync(() => { + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/toast/toast.component.spec.ts b/projects/igniteui-angular/src/lib/toast/toast.component.spec.ts index 6e5e83a4da7..ef7adddba9e 100644 --- a/projects/igniteui-angular/src/lib/toast/toast.component.spec.ts +++ b/projects/igniteui-angular/src/lib/toast/toast.component.spec.ts @@ -9,11 +9,9 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxToastComponent } from './toast.component'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { HorizontalAlignment, PositionSettings, VerticalAlignment } from 'igniteui-angular'; describe('IgxToast', () => { - const baseId = 'igx-toast-'; let fixture: ComponentFixture; let toast: IgxToastComponent; const firstPositionSettings: PositionSettings = { @@ -29,9 +27,7 @@ describe('IgxToast', () => { verticalStartPoint: VerticalAlignment.Middle }; - configureTestSuite(); - - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [NoopAnimationsModule, IgxToastComponent] }).compileComponents(); @@ -40,18 +36,20 @@ describe('IgxToast', () => { beforeEach(() => { fixture = TestBed.createComponent(IgxToastComponent); toast = fixture.componentInstance; + // For test fixture destroy + toast.id = "root1"; fixture.detectChanges(); }); it('should properly initialize', () => { - expect(toast.id).toContain(baseId); - expect(toast.element.id).toContain(baseId); - toast.id = 'customToast'; fixture.detectChanges(); expect(toast.id).toBe('customToast'); expect(toast.element.id).toContain('customToast'); + // For test fixture destroy + toast.id = "root1"; + fixture.detectChanges(); }); it('should properly toggle and emit isVisibleChange', fakeAsync(() => { diff --git a/projects/igniteui-angular/src/lib/tree/tree-navigation.spec.ts b/projects/igniteui-angular/src/lib/tree/tree-navigation.spec.ts index 8ecbc259630..47f5d551d43 100644 --- a/projects/igniteui-angular/src/lib/tree/tree-navigation.spec.ts +++ b/projects/igniteui-angular/src/lib/tree/tree-navigation.spec.ts @@ -1,4 +1,3 @@ -import { configureTestSuite } from '../test-utils/configure-suite'; import { waitForAsync, TestBed, fakeAsync, tick } from '@angular/core/testing'; import { IgxTreeNavigationComponent, IgxTreeScrollComponent, IgxTreeSimpleComponent } from './tree-samples.spec'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -13,12 +12,11 @@ import { IgxTree, IgxTreeNode, IgxTreeSelectionType } from './common'; import { IgxTreeNodeComponent } from './tree-node/tree-node.component'; describe('IgxTree - Navigation #treeView', () => { - configureTestSuite(); describe('Navigation - UI Tests', () => { let fix; let tree: IgxTreeComponent; - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/tree/tree-selection.service.spec.ts b/projects/igniteui-angular/src/lib/tree/tree-selection.service.spec.ts index c7c0d988755..82d8162c187 100644 --- a/projects/igniteui-angular/src/lib/tree/tree-selection.service.spec.ts +++ b/projects/igniteui-angular/src/lib/tree/tree-selection.service.spec.ts @@ -1,12 +1,10 @@ import { EventEmitter } from '@angular/core'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { IgxTree, IgxTreeNode, IgxTreeSelectionType, ITreeNodeSelectionEvent } from './common'; import { TreeTestFunctions } from './tree-functions.spec'; import { IgxTreeNodeComponent } from './tree-node/tree-node.component'; import { IgxTreeSelectionService } from './tree-selection.service'; describe('IgxTreeSelectionService - Unit Tests #treeView', () => { - configureTestSuite(); let selectionService: IgxTreeSelectionService; let mockEmitter: EventEmitter; let mockTree: IgxTree; diff --git a/projects/igniteui-angular/src/lib/tree/tree-selection.spec.ts b/projects/igniteui-angular/src/lib/tree/tree-selection.spec.ts index 765fb43cf21..c2a7b7b1f0f 100644 --- a/projects/igniteui-angular/src/lib/tree/tree-selection.spec.ts +++ b/projects/igniteui-angular/src/lib/tree/tree-selection.spec.ts @@ -1,6 +1,5 @@ import { TestBed, fakeAsync, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { EventEmitter, QueryList } from '@angular/core'; import { IgxTreeComponent } from './tree.component'; import { UIInteractions } from '../test-utils/ui-interactions.spec'; @@ -13,8 +12,7 @@ import { IgxTreeNavigationService } from './tree-navigation.service'; import { IgxTreeSelectionSampleComponent, IgxTreeSimpleComponent } from './tree-samples.spec'; describe('IgxTree - Selection #treeView', () => { - configureTestSuite(); - beforeAll(waitForAsync(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, diff --git a/projects/igniteui-angular/src/lib/tree/tree.spec.ts b/projects/igniteui-angular/src/lib/tree/tree.spec.ts index 226d77208f7..dea876aaaa6 100644 --- a/projects/igniteui-angular/src/lib/tree/tree.spec.ts +++ b/projects/igniteui-angular/src/lib/tree/tree.spec.ts @@ -5,7 +5,6 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { AnimationService } from '../services/animation/animation'; -import { configureTestSuite } from '../test-utils/configure-suite'; import { TreeTestFunctions } from './tree-functions.spec'; import { IgxTreeNavigationService } from './tree-navigation.service'; import { IgxTreeNodeComponent } from './tree-node/tree-node.component'; @@ -17,7 +16,6 @@ const TREE_ROOT_CLASS = 'igx-tree__root'; const NODE_TAG = 'igx-tree-node'; describe('IgxTree #treeView', () => { - configureTestSuite(); describe('Unit Tests', () => { let mockNavService: IgxTreeNavigationService; let mockTreeService: IgxTreeService; @@ -26,6 +24,15 @@ describe('IgxTree #treeView', () => { let mockNodes: QueryList>; let mockNodesArray: IgxTreeNodeComponent[] = []; let tree: IgxTreeComponent = null; + + beforeAll(() => { + jasmine.getEnv().allowRespy(true); + }); + + afterAll(() => { + jasmine.getEnv().allowRespy(false); + }); + beforeEach(() => { mockNodesArray = []; mockNavService = jasmine.createSpyObj('navService', @@ -472,16 +479,14 @@ describe('IgxTree #treeView', () => { let fix: ComponentFixture; let tree: IgxTreeComponent; - beforeAll( - waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ - NoopAnimationsModule, - IgxTreeSampleComponent - ] - }).compileComponents(); - }) - ); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + IgxTreeSampleComponent + ] + }).compileComponents(); + })); beforeEach(() => { fix = TestBed.createComponent(IgxTreeSampleComponent); diff --git a/src/app/chips/chips.sample.html b/src/app/chips/chips.sample.html index 62724c60228..d5ed36f4293 100644 --- a/src/app/chips/chips.sample.html +++ b/src/app/chips/chips.sample.html @@ -52,14 +52,14 @@
WC Chip
shape="circle" > } @if (hasPrefix) { - + } @if (customIcons) { } @if (hasSuffix) { - + } @if (hasProgressbar) {