Skip to content
Merged
Show file tree
Hide file tree
Changes from 52 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
68f871c
trying
v-reja Mar 15, 2017
e837b2b
Merge branch 'master' of https://github.com/OfficeDev/office-ui-fabri…
gitjain Apr 14, 2017
820d93b
Delete try.ts
gitjain Apr 14, 2017
70ca0b0
updates
gitjain Apr 14, 2017
815332a
Merge branch 'master' of https://github.com/gitjain/office-ui-fabric-…
gitjain Apr 17, 2017
7524e07
RegressionTests: Toggle Tests
gitjain Apr 17, 2017
42807e3
REgression Test: test class
gitjain Apr 18, 2017
d793d1a
Regression Tests: Helper class
gitjain Apr 18, 2017
c3db083
RegressionTests: Class updates
gitjain Apr 18, 2017
7593f8f
Regression Test: Helper Class updates
gitjain Apr 19, 2017
078cc84
Regression Tests: helper class updates
gitjain Apr 19, 2017
e60be8c
Regression Tests: Test Helper class updates
gitjain Apr 20, 2017
ab42091
Regression Tests: Test Helper class updates
gitjain Apr 20, 2017
e0821b9
Regression Tests: Event function
gitjain Apr 20, 2017
328db25
updates
gitjain Apr 20, 2017
9b99326
Regression Tests: Test helper functions
gitjain Apr 21, 2017
ac92597
Regression Tests: Rush change
gitjain Apr 21, 2017
2c400ca
Regression Tests: merge conflict updates
gitjain Apr 21, 2017
0baa3a4
Regression Test: Helper function Updates
gitjain Apr 21, 2017
7fc29f7
Regression Tests: linting error updates
gitjain Apr 21, 2017
7037ad6
Regression Tests: Test helper class
v-reja Apr 22, 2017
5d0dea8
Regression Tests: Test helper functions
v-reja Apr 24, 2017
5b4ffb1
Regression Test: Test helper updates
v-reja Apr 24, 2017
57fa7eb
Regression Test: Test helper updates
v-reja Apr 24, 2017
027298f
Regression test: Test helper updates
v-reja Apr 24, 2017
2953f0e
Regression Tes: test helper updates
v-reja Apr 24, 2017
8a52375
Regression Tests: Dialog tests
v-reja Apr 25, 2017
16d6bab
Regression Tests: Updates
v-reja Apr 25, 2017
50edad2
Regression Test: Test updates.
v-reja Apr 25, 2017
d9517d4
Regression Test: Test udpates
v-reja Apr 26, 2017
adb8a2d
Regression Test: test updates
v-reja Apr 26, 2017
2f3af7e
Regression test: test updates
v-reja Apr 26, 2017
2dfabd2
Regression Test: test updates
v-reja Apr 27, 2017
c7fdab9
Regression Test: Test updates
v-reja Apr 27, 2017
666fade
Regression Test: tests
v-reja Apr 27, 2017
20956df
Regression Test: Tests updates
gitjain Apr 27, 2017
8db5a4e
Regression Test: Tooltip test updates
gitjain Apr 27, 2017
838de63
Merge branch 'master' into visualTests
micahgodbolt Apr 27, 2017
8c763d4
Regression Test: Toggle Test
gitjain Apr 27, 2017
c11bdb0
Regression tests
gitjain Apr 27, 2017
eb40de2
Regression Tests
gitjain Apr 27, 2017
c8a39a4
REgression Tests
gitjain Apr 27, 2017
29fcae1
Regression Tests
gitjain Apr 27, 2017
c0fd554
Merge branch 'visualTests' of https://github.com/gitjain/office-ui-fa…
gitjain Apr 27, 2017
c3dcc89
Regression Tests
gitjain Apr 27, 2017
7e73e33
Update visualTests_2017-04-27-23-02.json
gitjain Apr 28, 2017
ca2ad86
Regression Tests
gitjain Apr 28, 2017
5990650
Regression Tests
gitjain Apr 28, 2017
e58af9f
Regression Test
gitjain Apr 28, 2017
04dcbb5
Regression Test document update
gitjain Apr 28, 2017
aff95d2
Regression Test document update
gitjain Apr 28, 2017
75da63f
Merge branch 'master' into visualTests
micahgodbolt May 1, 2017
b31262c
Update Facepile.Props.ts
dzearing May 2, 2017
2496b59
Update visualTests_2017-04-27-23-02.json
dzearing May 2, 2017
be5b45d
Merge branch 'master' into visualTests
dzearing May 2, 2017
6469311
Merge branch 'master' into visualTests
micahgodbolt May 3, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions common/changes/visualTests_2017-04-27-23-02.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"changes": [
{
"packageName": "office-ui-fabric-react",
"comment": "Regression Tests",
"type": "patch"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think you need to patch fabric-react for these changes, unless you're changing the product code.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is change in Facepile props. Added ClassName.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then you comments in the change file should reflect it :) Otherwise we'll have a note in the release note that says "Regression Tests".

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, adding classname is a minor bump, not a patch.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it. Thanks! So can we merge this PR?

},
{
"comment": "",
"packageName": "@uifabric/utilities",
"type": "none"
},
{
"comment": "",
"packageName": "@uifabric/styling",
"type": "none"
},
{
"comment": "",
"packageName": "@uifabric/example-app-base",
"type": "none"
}
],
"email": "r33najain@gmail.com"
}
78 changes: 45 additions & 33 deletions ghdocs/VISUALTESTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,58 +11,70 @@ In order to have PhantomCSS run you must have python version 2.6 or higher insta
To run tests:

1. Navigate to packages/office-ui-fabric-react in command prompt.
2. gulp visualtest --production
2. gulp visualtest --production // To generate and comapre the baseline
3. gulp visualtest --production --match <ComponentName> // To generate baseline for one component
4. gulp visualtest --debug // To debug components at localhost

To create new tests:
1. Add a file to the component you want to test named [ComponentName]Page.visualtest.tsx. This is where you will put all of the code for rendering the components you want to test. For example:

ButtonPage.visualtest.tsx
CheckBoxPage.visualtest.tsx
```typescript
import { DefaultButton, IconButton } from './index';
import { IconName } from '../../Icon';
import { Checkbox } from './index';
/* tslint:disable:no-unused-variable */
import * as React from 'react';
/* tslint:enable:no-unused-variable */
export default class ButtonVPage extends React.Component<any, any> {
export default class CheckboxVPage extends React.Component<any, any> {
public render() {
let iconName: IconName = 'Snow';
return <div >
<DefaultButton id='DefaultButton'> I'm a button! </DefaultButton>
<div style={ { backgroundColor: 'white' } }>
<IconButton id={ 'IconButton' } icon={ iconName } />
</div>
return <div style={ { backgroundColor: 'white' } } >
<Checkbox className='Checkbox' label='Check Box'
defaultChecked={ true } />
<Checkbox className='CheckboxDisabled' label='Check Box Disabled'
defaultChecked={ true }
disabled={ true } />
</div>;
}
}
```
2. Create a file to run the test, named [ComponentName].visualtest.ts . In this file you will need to import Casper and a IPhantomCss. Additionally you will need to declare 2 vars, phantomcss and casper (see below). Then you can use them to perform various functions. The proper start url to give casper is baseUrl + [ComponentName] (For example ` baseUrl + 'button' `). The Most important one is phantomcss.screenshot which actually performs the screenshot tests.
2. Create a file to run the test, named [ComponentName].visualtest.ts . In this file you will need to import Casper and a IPhantomCss. Additionally you will need to declare 2 vars, phantomcss and casper (see below). Then you can use them to perform various functions. The proper start url to give casper is baseUrl + [ComponentName] (For example ` baseUrl + 'checkbox' `). The Most important one is phantomcss.screenshot which actually performs the screenshot tests.

For Example:
Button.visualtest.ts
Checkbox.visualtest.ts
```typescript
import { Casper, IPhantomCSS } from '../../visualtest/PhantomCssInterface';
import { baseUrl } from '../../common/VisualTest'
declare var phantomcss: IPhantomCSS;
import { Casper } from '../../visualtest/PhantomCssInterface';
import { baseUrl } from '../../common/VisualTest';
import { defaultScreenshot, mouseMoveScreenshot, mouseDownScreenshot, mouseClickScreenshot } from '../../visualtest/RunVisualTest';
import { IRunVisualTest } from '../../visualtest/IRunVisualTest';

declare var casper: Casper;
/* tslint:disable:no-function-expression */

let componentIds: IRunVisualTest[] = []; // Array of components

componentIds.push({
selector: '.' + 'ms-Checkbox-input',// Selector for event
fileName: 'checkbox',// baseline file name
imageSelector: '.' + 'Checkbox',// Image selector
commands: [defaultScreenshot, mouseClickScreenshot, mouseMoveScreenshot, mouseDownScreenshot] // Events for screen shots refer RunVisualTest.ts
});

componentIds.push({
selector: '.' + 'CheckboxDisabled',
fileName: 'checkboxDisabled',
commands: [defaultScreenshot]
});

casper.
start(baseUrl + 'button').
then(function () {
phantomcss.screenshot('#DefaultButton', 'Button_not_pressed');
}).then(function () {
this.mouse.move('#DefaultButton');
phantomcss.screenshot('#DefaultButton', 'Button_Hovered');
}).then(function () {
this.mouse.down('#DefaultButton');
phantomcss.screenshot('#DefaultButton', 'Button_pressed');
}).then(function () {
phantomcss.screenshot('#IconButton', 'Icon_Button');
})
casper.run(function () { casper.test.done(); });
/* tslint:enable:no-function-expression */
```
3. Add you're test component to VisualTestRootState. You'll just need to add the componentPath.
start(baseUrl + 'checkbox').
then(() => {
testRunner();
});

casper.run(() => { casper.test.done(); });
```
3. Add you're test component to VisualTestState.ts You'll just need to add the componentPath.
```typescript
'./Checkbox/CheckboxPage.visualtest',
```
## Viewing Tests
To see your test results navigate to the visualtests folder in packages/office-ui-fabric-react. In the base folder you can see current screenshots. In the Results you can see the results of the tests that were run, including failures and the diff screenshot (screenshot being compared to base).

Expand Down
4 changes: 3 additions & 1 deletion packages/office-ui-fabric-react/gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@ let visualTest = build.subTask('visualtest', (gulp, options, done) => {
directoryListing: false
});
if (!options.args['debug']) {
let matchFile = options.args['match'] || '';

let casperJs = require('gulp-phantomcss');
gulp.src(['lib/**/*.visualtest.js'])
gulp.src(['lib/**/*' + matchFile + '.visualtest.js'])
.pipe(casperJs(
{
screenshots: 'visualtests/baseline',
Expand Down
20 changes: 12 additions & 8 deletions packages/office-ui-fabric-react/src/VisualTestState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@ export interface IVisualTestState {

export const VisualTestState: IVisualTestState = {
componentPath: [
'./Button/CommandButtonPage.visualtest',
'./Button/CompoundButtonPage.visualtest',
'./Button/ContextualButtonPage.visualtest',
'./Button/DefaultButtonPage.visualtest',
'./Button/PrimaryButtonPage.visualtest',
'./Breadcrumb/BreadcrumbPage.visualtest',
'./Button/ButtonPage.visualtest',
'./Checkbox/CheckboxPage.visualtest',
'./ChoiceGroup/ChoiceGroupPage.visualtest',
'./ContextualMenu/ContextualMenuPage.visualtest'

'./CommandBar/CommandBarPage.visualtest',
'./ContextualMenu/ContextualMenuPage.visualtest',
'./DetailsList/DetailsListPage.visualtest',
'./Label/LabelPage.visualtest',
'./DocumentCard/DocumentCardPage.visualtest',
'./Dialog/DialogPage.visualtest',
'./Facepile/FacepilePage.visualtest',
'./Toggle/TogglePage.visualtest',
'./Tooltip/TooltipPage.visualtest'
]
};
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { Casper } from '../../visualtest/PhantomCssInterface';
import { baseUrl } from '../../common/VisualTest';
import { defaultScreenshot, mouseMoveScreenshot, mouseDownScreenshot, mouseClickScreenshot, testRunner } from '../../visualtest/RunVisualTest';
import { IRunVisualTest } from '../../visualtest/IRunVisualTest';

declare var casper: Casper;
let componentIds: IRunVisualTest[] = [];

componentIds.push({
selector: '.' + 'Breadcrumb',
fileName: 'breadcrumb',
imageSelector: '.' + 'Breadcrumb',

commands: [defaultScreenshot]
});
componentIds.push({
selector: '.' + 'ms-Breadcrumb-listItem',
fileName: 'breadcrumb',
imageSelector: '.' + 'Breadcrumb',
commands: [mouseMoveScreenshot, mouseDownScreenshot, mouseClickScreenshot]
});

casper.
start(baseUrl + 'breadcrumb').
then(() => {
testRunner(componentIds);
});

casper.run(() => { casper.test.done(); });
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { Breadcrumb } from './index';

/* tslint:disable:no-unused-variable */
import * as React from 'react';
/* tslint:enable:no-unused-variable */
export default class BreadcrumbVPage extends React.Component<any, any> {
public render() {
return <div style={ { width: '600px' } }>
<Breadcrumb
className='Breadcrumb'

items={ [
{ text: 'Files', 'key': 'Files' },
{ text: 'This is folder 1', 'key': 'f1', onClick: () => { return; } },
{ text: 'This is folder 2', 'key': 'f2', onClick: () => { return; } },
{ text: 'This is folder 3', 'key': 'f3', onClick: () => { return; } },
{ text: 'This is folder 4', 'key': 'f4', onClick: () => { return; } },
{ text: 'This is folder 5', 'key': 'f5', onClick: () => { return; } },
] }
maxDisplayedItems={ 3 } />
</div>;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { Casper } from '../../visualtest/PhantomCssInterface';
import { baseUrl } from '../../common/VisualTest';
import {
defaultScreenshot, mouseMoveScreenshot, mouseDownScreenshot,
mouseClickScreenshot, testRunner, mouseSingleClickScreenshot
} from '../../visualtest/RunVisualTest';
import { IRunVisualTest } from '../../visualtest/IRunVisualTest';
declare var casper: Casper;
let componentIds: IRunVisualTest[] = [];

componentIds.push({
selector: '#' + 'DefaultButton',
fileName: 'buttonDefault',
commands: [defaultScreenshot, mouseClickScreenshot, mouseDownScreenshot, mouseMoveScreenshot]
});

componentIds.push({
selector: '#' + 'DefaultButtonDisabled',
fileName: 'buttonDefaultDisabled',
commands: [defaultScreenshot]
});
componentIds.push({
selector: '#' + 'PrimaryButton',
fileName: 'buttonPrimary',
commands: [defaultScreenshot, mouseClickScreenshot, mouseDownScreenshot, mouseMoveScreenshot]

});
componentIds.push({
selector: '#' + 'PrimaryButtonDisabled',
fileName: 'buttonPrimaryDisabled',
commands: [defaultScreenshot]
});

componentIds.push({
selector: '#' + 'CommandButton',
fileName: 'buttonCommand',
commands: [defaultScreenshot, mouseDownScreenshot, mouseMoveScreenshot, mouseClickScreenshot]
});

componentIds.push({
selector: '#' + 'CommandButtonDisabled',
fileName: 'buttonCommandDisabled',
commands: [defaultScreenshot]
});

componentIds.push({
selector: '#' + 'CompoundButton',
fileName: 'buttonCompound',
commands: [defaultScreenshot, mouseClickScreenshot, mouseDownScreenshot, mouseMoveScreenshot]
});
componentIds.push({
selector: '#' + 'CompoundButtonDisabled',
fileName: 'buttonCompoundDisabled',
commands: [defaultScreenshot]
});
componentIds.push({
selector: '#' + 'ContextualButton',
fileName: 'buttonContextual',
commands: [defaultScreenshot, mouseClickScreenshot, mouseDownScreenshot, mouseMoveScreenshot]
});

componentIds.push({
selector: '#' + 'ContextualButton',
fileName: 'buttonContextual',
commands: [mouseSingleClickScreenshot],
childParams: {
selector: '.' + 'ms-ContextualMenu-list',
fileName: 'buttonContextualMenu',
commands: [defaultScreenshot]
}
});

casper.
start(baseUrl + 'button').
then(() => {
testRunner(componentIds);
});

casper.run(() => { casper.test.done(); });
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { DefaultButton, IconButton, CommandButton, CompoundButton, PrimaryButton } from './index';
import { IconName } from '../../Icon';
/* tslint:disable:no-unused-variable */
import * as React from 'react';
/* tslint:enable:no-unused-variable */
export default class ButtonVPage extends React.Component<any, any> {
public render() {
let iconName: IconName = 'Snow';
return <div>
<div><label> Default Button: </label>
<DefaultButton id='DefaultButton' icon='Add' text='Default Button' /></div>
<div><label> Default Button Disabled: </label>&nbsp;
<DefaultButton id='DefaultButtonDisabled' disabled={ true } icon='Add' text='Default Button' /></div>&nbsp;
<div style={ { backgroundColor: 'white' } }>
<IconButton id={ 'IconButton' } iconProps={ { iconName } } />
</div>&nbsp;
<div style={ { backgroundColor: 'white' } }>
<CommandButton id='CommandButton'
icon='AddFriend'
text='Command Button' />
</div>&nbsp;
<div style={ { backgroundColor: 'white' } }>
<CommandButton id='CommandButtonDisabled' icon='AddFriend'
disabled={ true }
text='Command Button' />
</div >&nbsp;
<div>
<CompoundButton id='CompoundButton'
description='You can create a new account here.'
text='Compound Button' />
</div>&nbsp;
<div>
<CompoundButton id='CompoundButtonDisabled'
disabled={ true }
description='You can create a new account here.'
text='Compound Button' />
</div>&nbsp;
<div>
<PrimaryButton id='PrimaryButton' icon='Add' text='Primary Button' />
</div >&nbsp;
<div>
<PrimaryButton id='PrimaryButtonDisabled' disabled={ true } icon='Add' text='Primary Button' />
</div >&nbsp;

<div>
<DefaultButton
id='ContextualButton'
disabled={ false }
icon='Add'
text='New'
menuProps={ {
className: 'ContextualButtonMenu',
id: 'ContextualButtonMenu',
items: [
{
key: 'emailMessage',
name: 'Email message',
icon: 'Mail'
},
{
key: 'calendarEvent',
name: 'Calendar event',
icon: 'Calendar'
}
]
}
}
>
</DefaultButton>
</div >
</div>;
}
}
Loading