From 0721264bcb10944f7364881fe970a92d216e8249 Mon Sep 17 00:00:00 2001 From: fushen Date: Mon, 27 Sep 2021 22:28:54 +0800 Subject: [PATCH 1/7] feat: support harmony driver --- packages/driver-harmony/CHANGELOG.md | 3 + packages/driver-harmony/README.md | 28 +++ packages/driver-harmony/package.json | 22 ++ .../src/__tests__/attributes.js | 105 ++++++++ .../src/__tests__/css-custom-properties.js | 40 +++ .../src/__tests__/css-unit-operations.js | 80 ++++++ .../src/__tests__/event-listener.js | 26 ++ .../driver-harmony/src/__tests__/hydrate.js | 194 ++++++++++++++ .../src/__tests__/node-operations.js | 55 ++++ packages/driver-harmony/src/__tests__/svg.js | 51 ++++ packages/driver-harmony/src/index.d.ts | 20 ++ packages/driver-harmony/src/index.js | 237 ++++++++++++++++++ packages/driver-universal/package.json | 4 +- packages/driver-universal/src/harmony.js | 3 + packages/driver-universal/src/index.js | 4 +- scripts/dist-core.js | 4 + 16 files changed, 874 insertions(+), 2 deletions(-) create mode 100644 packages/driver-harmony/CHANGELOG.md create mode 100644 packages/driver-harmony/README.md create mode 100644 packages/driver-harmony/package.json create mode 100644 packages/driver-harmony/src/__tests__/attributes.js create mode 100644 packages/driver-harmony/src/__tests__/css-custom-properties.js create mode 100644 packages/driver-harmony/src/__tests__/css-unit-operations.js create mode 100644 packages/driver-harmony/src/__tests__/event-listener.js create mode 100644 packages/driver-harmony/src/__tests__/hydrate.js create mode 100644 packages/driver-harmony/src/__tests__/node-operations.js create mode 100644 packages/driver-harmony/src/__tests__/svg.js create mode 100644 packages/driver-harmony/src/index.d.ts create mode 100644 packages/driver-harmony/src/index.js create mode 100644 packages/driver-universal/src/harmony.js diff --git a/packages/driver-harmony/CHANGELOG.md b/packages/driver-harmony/CHANGELOG.md new file mode 100644 index 0000000000..6d81f6f123 --- /dev/null +++ b/packages/driver-harmony/CHANGELOG.md @@ -0,0 +1,3 @@ +## Changelog + +### v1.0.0 diff --git a/packages/driver-harmony/README.md b/packages/driver-harmony/README.md new file mode 100644 index 0000000000..27faa2519f --- /dev/null +++ b/packages/driver-harmony/README.md @@ -0,0 +1,28 @@ +# driver-harmony + +> Harmony OS driver for Rax. + +## Install + +```bash +$ npm install --save driver-harmony +``` + +## Use + +```jsx +import {createElement, render} from 'rax'; +import DriverHarmony from 'driver-harmony'; + +function Example() { + return ( +
+ +
+ ); +} + +render(, null, { + driver: DriverHarmony +}); +``` diff --git a/packages/driver-harmony/package.json b/packages/driver-harmony/package.json new file mode 100644 index 0000000000..b47fdeb7e6 --- /dev/null +++ b/packages/driver-harmony/package.json @@ -0,0 +1,22 @@ +{ + "name": "driver-harmony", + "version": "1.0.0-beta.0", + "description": "Harmony driver for Rax", + "license": "BSD-3-Clause", + "main": "lib/index.js", + "module": "es/index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/alibaba/rax.git" + }, + "bugs": { + "url": "https://github.com/alibaba/rax/issues" + }, + "homepage": "https://github.com/alibaba/rax#readme", + "dependencies": { + "style-unit": "^3.0.0" + }, + "devDependencies": { + "rax": "^1.0.0" + } +} diff --git a/packages/driver-harmony/src/__tests__/attributes.js b/packages/driver-harmony/src/__tests__/attributes.js new file mode 100644 index 0000000000..107886e90c --- /dev/null +++ b/packages/driver-harmony/src/__tests__/attributes.js @@ -0,0 +1,105 @@ +import { createElement, render } from 'rax'; +import * as DriverDOM from '../'; + +describe('attributes', () => { + let container; + + beforeEach(() => { + container = document.createElement('div'); + (document.body || document.documentElement).appendChild(container); + }); + + describe('string properties', () => { + it('render string prop with simple numbers', () => { + render(( +
+ ), container, { + driver: DriverDOM + }); + + let node = container.children[0]; + expect(node.getAttribute('width')).toBe('30'); + }); + + it('render string prop with true value', () => { + render(( + + ), container, { + driver: DriverDOM + }); + + let node = container.children[0]; + expect(node.getAttribute('href')).toBe('true'); + }); + + it('render string prop with object value', () => { + render(( + + ), container, { + driver: DriverDOM + }); + + let node = container.children[0]; + expect(node.getAttribute('data')).toBe('[object Object]'); + }); + }); + + describe('boolean properties', () => { + it('render boolean prop with true value', () => { + render(( +