mirror of
https://github.com/MontFerret/ferret.git
synced 2024-12-12 11:15:14 +02:00
Updated pagination iterator (#338)
* Updated pagination iterator * Added e2e test * Fixed e2e tests
This commit is contained in:
parent
22382a0f61
commit
14c487ca46
@ -4,13 +4,14 @@ import FormsPage from './pages/forms/index.js';
|
||||
import EventsPage from './pages/events/index.js';
|
||||
import IframePage from './pages/iframes/index.js';
|
||||
import MediaPage from './pages/media/index.js';
|
||||
import PaginationPage from './pages/pagination/index.js';
|
||||
|
||||
const e = React.createElement;
|
||||
const Router = ReactRouter.Router;
|
||||
const Switch = ReactRouter.Switch;
|
||||
const Route = ReactRouter.Route;
|
||||
const Redirect = ReactRouter.Redirect;
|
||||
const createBrowserHistory = History.createBrowserHistory;
|
||||
const createHistory = History.createHashHistory;
|
||||
|
||||
export default React.memo(function AppComponent(params = {}) {
|
||||
let redirectTo;
|
||||
@ -32,7 +33,7 @@ export default React.memo(function AppComponent(params = {}) {
|
||||
redirectTo = e(Redirect, { to });
|
||||
}
|
||||
|
||||
return e(Router, { history: createBrowserHistory() },
|
||||
return e(Router, { history: createHistory() },
|
||||
e(Layout, null, [
|
||||
e(Switch, null, [
|
||||
e(Route, {
|
||||
@ -56,6 +57,10 @@ export default React.memo(function AppComponent(params = {}) {
|
||||
path: '/media',
|
||||
component: MediaPage
|
||||
}),
|
||||
e(Route, {
|
||||
path: '/pagination',
|
||||
component: PaginationPage
|
||||
}),
|
||||
]),
|
||||
redirectTo
|
||||
])
|
||||
|
59
e2e/pages/dynamic/components/pages/pagination/index.js
Normal file
59
e2e/pages/dynamic/components/pages/pagination/index.js
Normal file
@ -0,0 +1,59 @@
|
||||
const e = React.createElement;
|
||||
const Pagination = ReactBootstrap.Pagination;
|
||||
const Item = Pagination.Item;
|
||||
|
||||
export default class PaginationPage extends React.Component {
|
||||
min = 1;
|
||||
max = 5;
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
active: 1
|
||||
}
|
||||
}
|
||||
|
||||
handleClick(number) {
|
||||
if (number > this.max || number < this.min) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
active: number
|
||||
})
|
||||
}
|
||||
|
||||
render() {
|
||||
const items = [];
|
||||
|
||||
items.push(e(Pagination.Prev, {
|
||||
className: "page-item-prev",
|
||||
disabled: this.state.active === this.min,
|
||||
onClick: this.handleClick.bind(this, this.state.active - 1)
|
||||
}));
|
||||
|
||||
for (let number = this.min; number <= this.max; number++) {
|
||||
items.push(
|
||||
e(Item, {
|
||||
key: number,
|
||||
active: number === this.state.active,
|
||||
onClick: this.handleClick.bind(this, number)
|
||||
}, number)
|
||||
);
|
||||
}
|
||||
|
||||
items.push(e(Pagination.Next, {
|
||||
className: "page-item-next",
|
||||
disabled: this.state.active === this.max,
|
||||
onClick: this.handleClick.bind(this, this.state.active + 1)
|
||||
}));
|
||||
|
||||
return e("div", { className: "row"}, [
|
||||
e("div", { className: "col-12" }, [
|
||||
e(Pagination, {
|
||||
}, items)
|
||||
])
|
||||
])
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
<title>Ferret E2E SPA</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="index.css">
|
||||
</head>
|
||||
<body class="text-center">
|
||||
@ -16,6 +16,7 @@
|
||||
<script src="https://unpkg.com/history@4.9.0/umd/history.min.js"></script>
|
||||
<script src="https://unpkg.com/react-router@4.3.1/umd/react-router.js"></script>
|
||||
<script src="https://unpkg.com/react-router-dom@4.3.1/umd/react-router-dom.js"></script>
|
||||
<script src="https://unpkg.com/react-bootstrap@next/dist/react-bootstrap.min.js" crossorigin> </script>
|
||||
<script src="index.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -2,25 +2,26 @@ LET url = @dynamic
|
||||
LET doc = DOCUMENT(url, true)
|
||||
|
||||
LET expected = `<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<title>Ferret E2E SPA</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="index.css">
|
||||
</head>
|
||||
<body class="text-center">
|
||||
<div id="root"><div id="layout"><nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4" id="navbar"><a class="navbar-brand active" aria-current="page" href="/">Ferret</a><button class="navbar-toggler" type="button"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="/forms">Forms</a></li><li class="nav-item"><a class="nav-link" href="/navigation">Navigation</a></li><li class="nav-item"><a class="nav-link" href="/events">Events</a></li><li class="nav-item"><a class="nav-link" href="/iframe">iFrame</a></li></ul></div></nav><main class="container"><div class="jumbotron" data-type="page" id="index"><div><h1>Welcome to Ferret E2E test page!</h1></div><div><p class="lead">It has several pages for testing different possibilities of the library</p></div></div></main></div></div>
|
||||
<script src="https://unpkg.com/react@16.8.6/umd/react.production.min.js"></script>
|
||||
<script src="https://unpkg.com/react-dom@16.8.6/umd/react-dom.production.min.js"></script>
|
||||
<script src="https://unpkg.com/history@4.9.0/umd/history.min.js"></script>
|
||||
<script src="https://unpkg.com/react-router@4.3.1/umd/react-router.js"></script>
|
||||
<script src="https://unpkg.com/react-router-dom@4.3.1/umd/react-router-dom.js"></script>
|
||||
<script src="index.js" type="module"></script>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<title>Ferret E2E SPA</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="index.css">
|
||||
</head>
|
||||
<body class="text-center">
|
||||
<div id="root"><div id="layout"><nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4" id="navbar"><a class="navbar-brand active" aria-current="page" href="#/">Ferret</a><button class="navbar-toggler" type="button"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="#/forms">Forms</a></li><li class="nav-item"><a class="nav-link" href="#/navigation">Navigation</a></li><li class="nav-item"><a class="nav-link" href="#/events">Events</a></li><li class="nav-item"><a class="nav-link" href="#/iframe">iFrame</a></li></ul></div></nav><main class="container"><div class="jumbotron" data-type="page" id="index"><div><h1>Welcome to Ferret E2E test page!</h1></div><div><p class="lead">It has several pages for testing different possibilities of the library</p></div></div></main></div></div>
|
||||
<script src="https://unpkg.com/react@16.8.6/umd/react.production.min.js"></script>
|
||||
<script src="https://unpkg.com/react-dom@16.8.6/umd/react-dom.production.min.js"></script>
|
||||
<script src="https://unpkg.com/history@4.9.0/umd/history.min.js"></script>
|
||||
<script src="https://unpkg.com/react-router@4.3.1/umd/react-router.js"></script>
|
||||
<script src="https://unpkg.com/react-router-dom@4.3.1/umd/react-router-dom.js"></script>
|
||||
<script src="https://unpkg.com/react-bootstrap@next/dist/react-bootstrap.min.js" crossorigin=""> </script>
|
||||
<script src="index.js" type="module"></script>
|
||||
|
||||
|
||||
</body>`
|
||||
</body>`
|
||||
LET actual = INNER_HTML(doc)
|
||||
|
||||
LET r1 = '(\s|\")'
|
||||
|
9
e2e/tests/dynamic/doc/pagination.fql
Normal file
9
e2e/tests/dynamic/doc/pagination.fql
Normal file
@ -0,0 +1,9 @@
|
||||
LET url = @dynamic + "/#/pagination"
|
||||
LET page = DOCUMENT(url, true)
|
||||
|
||||
LET items = (
|
||||
FOR i IN PAGINATION(page, 'li[class="page-item-next page-item"]')
|
||||
RETURN i
|
||||
)
|
||||
|
||||
RETURN EXPECT(5, LENGTH(items))
|
@ -2,7 +2,7 @@ LET url = @dynamic
|
||||
LET doc = DOCUMENT(url, true)
|
||||
LET el = ELEMENT(doc, "#root")
|
||||
|
||||
LET expected = `<div id="layout"><nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4" id="navbar"><a class="navbar-brand active" aria-current="page" href="/">Ferret</a><button class="navbar-toggler" type="button"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="/forms">Forms</a></li><li class="nav-item"><a class="nav-link" href="/navigation">Navigation</a></li><li class="nav-item"><a class="nav-link" href="/events">Events</a></li><li class="nav-item"><a class="nav-link" href="/iframe">iFrame</a></li></ul></div></nav><main class="container"><div class="jumbotron" data-type="page" id="index"><div><h1>Welcome to Ferret E2E test page!</h1></div><div><p class="lead">It has several pages for testing different possibilities of the library</p></div></div></main></div>`
|
||||
LET expected = `<div id="layout"><nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4" id="navbar"><a class="navbar-brand active" aria-current="page" href="#/">Ferret</a><button class="navbar-toggler" type="button"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="#/forms">Forms</a></li><li class="nav-item"><a class="nav-link" href="#/navigation">Navigation</a></li><li class="nav-item"><a class="nav-link" href="#/events">Events</a></li><li class="nav-item"><a class="nav-link" href="#/iframe">iFrame</a></li></ul></div></nav><main class="container"><div class="jumbotron" data-type="page" id="index"><div><h1>Welcome to Ferret E2E test page!</h1></div><div><p class="lead">It has several pages for testing different possibilities of the library</p></div></div></main></div>`
|
||||
LET actual = INNER_HTML(el)
|
||||
|
||||
LET r1 = '(\s|\")'
|
||||
|
@ -92,16 +92,16 @@ func (i *PagingIterator) Next(ctx context.Context) (core.Value, core.Value, erro
|
||||
return values.ZeroInt, values.ZeroInt, nil
|
||||
}
|
||||
|
||||
clicked, err := i.document.ClickBySelector(ctx, i.selector)
|
||||
if !i.document.ExistsBySelector(ctx, i.selector) {
|
||||
return values.ZeroInt, values.ZeroInt, core.ErrNoMoreData
|
||||
}
|
||||
|
||||
_, err := i.document.ClickBySelector(ctx, i.selector)
|
||||
|
||||
if err != nil {
|
||||
return values.None, values.None, err
|
||||
}
|
||||
|
||||
if clicked {
|
||||
return i.pos, i.pos, nil
|
||||
}
|
||||
|
||||
// terminate
|
||||
return values.None, values.None, nil
|
||||
return i.pos, i.pos, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user