diff --git a/packages/devui-vue/devui/grid/__tests__/grid.spec.ts b/packages/devui-vue/devui/grid/__tests__/grid.spec.ts deleted file mode 100644 index fa33b9765e7ec5a8972716e9ccc95f1c53e2e097..0000000000000000000000000000000000000000 --- a/packages/devui-vue/devui/grid/__tests__/grid.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { mount } from '@vue/test-utils'; -import { Row } from '../index'; - -describe('grid test', () => { - it('grid init render', async () => { - // todo - }) -}) diff --git a/packages/devui-vue/devui/grid/__tests__/grid.spec.tsx b/packages/devui-vue/devui/grid/__tests__/grid.spec.tsx new file mode 100644 index 0000000000000000000000000000000000000000..85861434d1bc48b90aa59af899dc14f6ad2114bc --- /dev/null +++ b/packages/devui-vue/devui/grid/__tests__/grid.spec.tsx @@ -0,0 +1,116 @@ +import { mount } from '@vue/test-utils' +import { Row, Col } from '../index' +import { Justify, Align, ColProps } from '../src/grid-types' +import { screenMedias } from '../src/use-screen' + +describe('d-row', () => { + window.matchMedia = jest.fn().mockImplementation(query => { + return { + matches: false, + media: query, + onchange: null, + addListener: jest.fn(), // deprecated + removeListener: jest.fn(), // deprecated + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + dispatchEvent: jest.fn(), + } + }) + + it('d-row init', () => { + const wrapper = mount(Row) + expect(wrapper.classes()).toEqual(['devui-row', 'devui-row-align-top', 'devui-row-justify-start']) + }) + + const justify: Justify[] = ['start', 'end', 'center', 'around', 'between'] + justify.forEach(item => { + it(`d-row justify ${item}`, () => { + const wrapper = mount(Row, { + props: { justify: item } + }) + expect(wrapper.classes(`devui-row-justify-${item}`)).toBe(true) + }) + }) + + const align: Align[] = ['top', 'middle', 'bottom'] + align.forEach(item => { + it(`d-row align ${item}`, () => { + const wrapper = mount(Row, { + props: { align: item } + }) + expect(wrapper.classes(`devui-row-align-${item}`)).toBe(true) + }) + }) + + it('d-row wrap', () => { + const wrapper = mount(Row, { + props: { wrap: true } + }) + expect(wrapper.classes('devui-row-wrap')).toBe(true) + }) +}) + +describe('d-col', () => { + + const value = 8 + + it('d-col flex', () => { + const component = + + + const wrapper = mount(component) + expect(wrapper.find('.devui-col').attributes()).toMatchObject({ style: `flex: ${value} ${value} auto;` }) + }) + + + it('d-col order', () => { + const component = + + + const wrapper = mount(component) + expect(wrapper.find('.devui-col').attributes()).toMatchObject({ style: `order: ${value};` }) + }) + + const props: (keyof ColProps)[] = ['span', 'offset', 'pull', 'push'] + props.forEach(item => { + const prop = { [item]: value } + const component = + + + it(`d-col ${item}`, () => { + const wrapper = mount(component) + expect(wrapper.findAll(`.devui-col-${item}-${value}`).length).toBe(1) + }) + }) + + const sizes = Object.keys(screenMedias) as (keyof typeof screenMedias)[] + sizes.forEach(item => { + const prop = { [item]: value } + const component = + + + it(`d-col ${item} span`, () => { + const wrapper = mount(component) + console.log(wrapper.html()) + expect(wrapper.findAll(`.devui-col-${item}-span-${value}`).length) + }) + }) + + it('d-row gutter', () => { + const component1 = + + + const component2 = + + + // const component3 = + // + // + const wrapper1 = mount(component1) + const wrapper2 = mount(component2) + // const wrapper3 = mount(component3) + expect(wrapper1.find('.devui-col').attributes()).toMatchObject({ style: 'padding: 0px 4px 0px 4px;' }) + expect(wrapper2.find('.devui-col').attributes()).toMatchObject({ style: 'padding: 4px 4px 4px 4px;' }) + // expect(wrapper3.find('.devui-col').attributes()).toMatchObject({ style: 'padding: 4px 4px 4px 4px;' }) + }) +}) diff --git a/packages/devui-vue/devui/grid/src/grid-types.ts b/packages/devui-vue/devui/grid/src/grid-types.ts index a6491cf262525c3f8184abac3e93dd9c568abb29..4d4328b7217f90122d3b2c15ad3ffbd8661c8cd5 100644 --- a/packages/devui-vue/devui/grid/src/grid-types.ts +++ b/packages/devui-vue/devui/grid/src/grid-types.ts @@ -6,11 +6,13 @@ export type Justify = 'start' | 'end' | 'center' | 'around' | 'between' export interface GutterScreenSizes { xs?: number | number[] - sm: number | number[] - md: number | number[] - lg: number | number[] - xl: number | number[] - xxl: number | number[] + sm?: number | number[] + md?: number | number[] + lg?: number | number[] + xl?: number | number[] + xxl?: number | number[] + // 如果没有必选项,gutter将是unknown类型 + [key: string]: number | number[] } export const rowProps = { diff --git a/packages/devui-vue/devui/grid/src/use-grid.ts b/packages/devui-vue/devui/grid/src/use-grid.ts index a303a3624638d7767d3190ce7c4b89468c682f58..b32211bf4f0c7cab2d6162e64ce65d200ab7b736 100644 --- a/packages/devui-vue/devui/grid/src/use-grid.ts +++ b/packages/devui-vue/devui/grid/src/use-grid.ts @@ -18,7 +18,7 @@ export function useColClassNames (props: ColPropsBaseClass) { } function setSpace (val:string) { - return val && ` ${val.trim()} ` + return ` ${val.trim()}${val && ' '}` } export function useSize (colSizes: ScreenSizes) { diff --git a/packages/devui-vue/devui/grid/src/use-screen.ts b/packages/devui-vue/devui/grid/src/use-screen.ts index 98d86f99acbe02fea94eb585b07ba9ec490b8a70..2c99c63048bfbbea3b2f2ee661b52b56f453653e 100644 --- a/packages/devui-vue/devui/grid/src/use-screen.ts +++ b/packages/devui-vue/devui/grid/src/use-screen.ts @@ -1,7 +1,7 @@ export const RESULT_SCREEN = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'] -const screenMedias = { +export const screenMedias = { xs: 'screen and (max-width: 575px)', sm: 'screen and (min-width: 576px)', md: 'screen and (min-width: 768px)', diff --git a/packages/devui-vue/docs/components/grid/index.md b/packages/devui-vue/docs/components/grid/index.md index 2a67551b3e7570f72b8bff6ff2f0fa15a06f8c87..a45e41dcd26ac2d5b6ac857ae8ccb01eaa7a5ca0 100644 --- a/packages/devui-vue/docs/components/grid/index.md +++ b/packages/devui-vue/docs/components/grid/index.md @@ -259,7 +259,7 @@ Col的flex属性支持flex填充。 Col Col - Col + Col ``` @@ -287,7 +287,7 @@ Col的flex属性支持flex填充。 ::: -### d-grid +### API d-row 参数 @@ -295,7 +295,7 @@ d-row 参数 | ---- | ---- | ---- | ---- | --------- | --------- | | align | `string` | `'top'` | flex 布局下的垂直对齐方式:`'top'`,`'middle'`,`'bottom'` | [垂直对齐](#垂直对齐) | | | justify | `string` | `'start'` | flex 布局下的垂直对齐方式:`'start'`,`'end'`,`'center'`,`'space-around'`,`'space-between'` | [垂直对齐](#垂直对齐) | | -| gutter | `number\|array\|object` | 0 | 栅格间隔,数值形式:水平间距。对象形式支持响应式: { xs: 8, sm: 16, md: 24}。数组形式:[水平间距, 垂直间距]。 | [对齐](#对齐) | | +| gutter | `number\|array\|object` | 0 | 栅格间隔,数值形式:水平间距。对象形式支持响应式: { xs: 8, sm: 16, md: 24}。数组形式:[水平间距, 垂直间距]。 | [子元素的间隔](#子元素的间隔) | | | wrap | `boolean` | false | 是否自动换行 | | | d-col 参数