Files
react-native-svg/package.json
Bartosz Stefańczyk a089cc2efc feat: e2e snapshot tests (#2338)
<!-- Thanks for submitting a pull request! We appreciate you spending
the time to work on these changes. Please follow the template so that
the reviewers can easily understand what the code changes affect -->

# Summary

This PR adds E2E tests based on view screenshots done via
`react-native-view-shot`. It only works with devices that have their
[pixel ratio](https://reactnative.dev/docs/pixelratio) equal `3`. If you
want to use device with different pixel ratio, you need to adjust it in
`e2e/generateReferences.ts` viewport and regenerate reference images
(see below).

Steps to run tests:
- Run Metro server for example app via `yarn start` in example app's
directory
- Run `example` app on platform of your choice (currently only Android &
iOS are supported) via `yarn android` or `yarn ios` in example app's
directory
- Run `yarn e2e` in project's root directory to start Jest server
- Select `E2E` tab in example app
- Wait for tests to finish
- You can see test results, as well as diffs (actual rendered svg vs
reference image) in `e2e/diffs` directory

Steps to add new test cases:
- Put SVG of your choice to `e2e/cases` directory
- Run `yarn generateE2eRefrences`, this will open headless chrome
browser via `puppeteer` and snapshot all rendered SVGs to .png files and
later use them as reference in tests
- You should see new .png files in `e2e/references`
- When you run E2E tests again, it will use new test case(s) you've
added

## Test Plan


https://github.com/software-mansion/react-native-svg/assets/41289688/24ee5447-ce9a-43b6-9dde-76229d25a30a


https://github.com/software-mansion/react-native-svg/assets/41289688/71d1873f-8155-4494-80bd-e4c1fa72a065


### What's required for testing (prerequisites)?
See Summary

### What are the steps to reproduce (after prerequisites)?
See Summary

## Compatibility

| OS      | Implemented |
| ------- | :---------: |
| iOS     |    	     |
| Android |         |
| Web | 			 |
## Checklist



<!-- Check completed item, when applicable, via: [X] -->

- [X] I have tested this on a device and a simulator
- [x] I added documentation in `README.md`
- [X] I updated the typed files (typescript)
- [X] I added a test for the API in the `__tests__` folder

---------

Co-authored-by: bohdanprog <bohdan.artiukhov@swmansion.com>
Co-authored-by: Jakub Grzywacz <jakub.grzywacz@swmansion.com>
2024-08-23 13:29:38 +02:00

139 lines
4.2 KiB
JSON

{
"version": "15.6.0",
"name": "react-native-svg",
"description": "SVG library for react-native",
"homepage": "https://github.com/react-native-community/react-native-svg",
"repository": {
"type": "git",
"url": "https://github.com/react-native-community/react-native-svg"
},
"license": "MIT",
"main": "lib/commonjs/index.js",
"module": "lib/module/index.js",
"types": "lib/typescript/index.d.ts",
"react-native": "src/index.ts",
"files": [
"android",
"apple",
"common",
"lib",
"src",
"css",
"filter-image",
"RNSVG.podspec",
"!android/build",
"windows",
"react-native.config.js"
],
"react-native-builder-bob": {
"source": "src",
"output": "lib",
"targets": [
"commonjs",
"module",
"typescript"
]
},
"keywords": [
"react-component",
"react-native",
"ios",
"android",
"windows",
"SVG",
"ART",
"VML",
"gradient"
],
"scripts": {
"bob": "bob build",
"format": "yarn format-js && yarn format-ios && yarn format-java",
"format-ios": "find apple/ common/ -iname *.h -o -iname *.m -o -iname *.cpp -o -iname *.mm | xargs clang-format -i",
"format-java": "node ./scripts/format-java.js",
"format-js": "prettier --write README.md CONTRIBUTING.md CODE_OF_CONDUCT.md USAGE.md ./src/**/*.{ts,tsx} ./apps/**/*.tsx ./*-example/**/*.tsx",
"jest": "jest",
"lint": "eslint --ext .ts,.tsx src",
"peg": "pegjs -o src/lib/extract/transform.js ./src/lib/extract/transform.peg && peggy -o src/filter-image/extract/extractFiltersString.js src/filter-image/extract/extractFiltersString.pegjs && peggy -o src/lib/extract/transformToRn.js src/lib/extract/transformToRn.pegjs",
"prepare": "npm run bob && husky install",
"release": "npm login && release-it",
"test": "npm run lint && npm run tsc",
"tsc": "tsc --noEmit",
"e2e": "jest e2e",
"generateE2eReferences": "ts-node e2e/generateReferences.ts",
"check-archs-consistency": "node ./scripts/codegen-check-consistency.js",
"sync-archs": "node ./scripts/codegen-sync-archs.js"
},
"peerDependencies": {
"react": "*",
"react-native": "*"
},
"dependencies": {
"css-select": "^5.1.0",
"css-tree": "^1.1.3",
"warn-once": "0.1.1"
},
"devDependencies": {
"@react-native-community/eslint-config": "^3.0.2",
"@react-native-community/eslint-plugin": "^1.2.0",
"@react-native/babel-plugin-codegen": "^0.71.0",
"@react-native/eslint-config": "^0.72.2",
"@types/css-tree": "^1.0.3",
"@types/jest": "^27.5.2",
"@types/node": "*",
"@types/pixelmatch": "^5.2.0",
"@types/pngjs": "^6.0.5",
"@types/react": "^18.2.18",
"@types/ws": "^8.5.10",
"@typescript-eslint/eslint-plugin": "^5.11.0",
"@typescript-eslint/parser": "^5.11.0",
"babel-eslint": "^10.1.0",
"babel-jest": "^28.1.0",
"babel-plugin-module-resolver": "^5.0.0",
"clang-format": "^1.8.0",
"eslint": "^8.44.0",
"eslint-config-prettier": "^8.3.0",
"eslint-config-standard": "^17.0.0",
"eslint-import-resolver-babel-module": "^5.3.2",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-n": "^16.0.0",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-standard": "^5.0.0",
"husky": "^8.0.1",
"jest": "^28.1.0",
"jest-html-reporters": "^3.1.7",
"lint-staged": "^13.0.3",
"peggy": "4.0.3",
"pegjs": "^0.10.0",
"pixelmatch": "5.3.0",
"pngjs": "^7.0.0",
"prettier": "3.0.1",
"puppeteer": "^22.12.1",
"react": "^18.2.0",
"react-native": "^0.72.3",
"react-native-builder-bob": "^0.20.4",
"react-native-windows": "^0.72.4",
"react-test-renderer": "^18.2.0",
"release-it": "^14.12.5",
"ts-node": "^10.9.2",
"typescript": "^5.1.6",
"ws": "^8.18.0"
},
"lint-staged": {
"{src,Example}/**/*.{js,ts,tsx}": "yarn format-js",
"src/**/*.{js,ts,tsx}": "yarn lint",
"apple/**/*.{h,m,mm,cpp}": "yarn format-ios",
"android/src/**/*.java": "yarn format-java",
"src/fabric/*.ts": "yarn sync-archs"
},
"nativePackage": true,
"codegenConfig": {
"name": "rnsvg",
"type": "all",
"jsSrcsDir": "./src/fabric",
"android": {
"javaPackageName": "com.horcrux.svg"
}
}
}