diff options
Diffstat (limited to 'e2e')
| -rw-r--r-- | e2e/contents/navigate.test.js | 68 | ||||
| -rw-r--r-- | e2e/web-server/index.js | 55 | 
2 files changed, 120 insertions, 3 deletions
| diff --git a/e2e/contents/navigate.test.js b/e2e/contents/navigate.test.js index 590a4b3..b9d283d 100644 --- a/e2e/contents/navigate.test.js +++ b/e2e/contents/navigate.test.js @@ -70,13 +70,13 @@ describe("navigate test", () => {      }).then(() => {        return keys.press(targetTab.id, 'H', { shiftKey: true });      }).then(() => { -      return new Promise(resolve => { setTimeout(() => resolve(), 2000) }); +      return new Promise(resolve => { setTimeout(() => resolve(), 10) });      }).then(() => {        return tabs.get(targetTab.id);      }).then((tab) => {        expect(tab.url, 'go back in history').to.be.equal(CLIENT_URL + '/#navigate');      }).then(() => { -      return new Promise(resolve => { setTimeout(() => resolve(), 2000) }); +      return new Promise(resolve => { setTimeout(() => resolve(), 10) });      }).then(() => {        return keys.press(targetTab.id, 'L', { shiftKey: true });      }).then(() => { @@ -85,4 +85,68 @@ describe("navigate test", () => {        expect(tab.url, 'go next in history').to.be.equal(CLIENT_URL + '/#');      });    }); + +  it('goes previous page by <a>', () => { +    let targetTab; +    return tabs.create(targetWindow.id, CLIENT_URL + '/a-pagenation?page=10').then((tab) => { +      targetTab = tab; +      return keys.press(targetTab.id, '['); +    }).then(() => { +      return keys.press(targetTab.id, '['); +    }).then(() => { +      return new Promise(resolve => { setTimeout(() => resolve(), 10) }); +    }).then(() => { +      return tabs.get(targetTab.id); +    }).then((tab) => { +      expect(tab.url).to.be.equal(CLIENT_URL + '/a-pagenation?page=9'); +    }); +  }) + +  it('goes next page by <a>', () => { +    let targetTab; +    return tabs.create(targetWindow.id, CLIENT_URL + '/a-pagenation?page=10').then((tab) => { +      targetTab = tab; +      return keys.press(targetTab.id, ']'); +    }).then(() => { +      return keys.press(targetTab.id, ']'); +    }).then(() => { +      return new Promise(resolve => { setTimeout(() => resolve(), 10) }); +    }).then(() => { +      return tabs.get(targetTab.id); +    }).then((tab) => { +      expect(tab.url).to.be.equal(CLIENT_URL + '/a-pagenation?page=11'); +    }); +  }) + +  it('goes previous page by <link>', () => { +    let targetTab; +    return tabs.create(targetWindow.id, CLIENT_URL + '/link-pagenation?page=10').then((tab) => { +      targetTab = tab; +      return keys.press(targetTab.id, '['); +    }).then(() => { +      return keys.press(targetTab.id, '['); +    }).then(() => { +      return new Promise(resolve => { setTimeout(() => resolve(), 10) }); +    }).then(() => { +      return tabs.get(targetTab.id); +    }).then((tab) => { +      expect(tab.url).to.be.equal(CLIENT_URL + '/link-pagenation?page=9'); +    }); +  }) + +  it('goes next page by <link>', () => { +    let targetTab; +    return tabs.create(targetWindow.id, CLIENT_URL + '/link-pagenation?page=10').then((tab) => { +      targetTab = tab; +      return keys.press(targetTab.id, ']'); +    }).then(() => { +      return keys.press(targetTab.id, ']'); +    }).then(() => { +      return new Promise(resolve => { setTimeout(() => resolve(), 10) }); +    }).then(() => { +      return tabs.get(targetTab.id); +    }).then((tab) => { +      expect(tab.url).to.be.equal(CLIENT_URL + '/link-pagenation?page=11'); +    }); +  })  }); diff --git a/e2e/web-server/index.js b/e2e/web-server/index.js index 8710bf9..cbeee15 100644 --- a/e2e/web-server/index.js +++ b/e2e/web-server/index.js @@ -1,3 +1,5 @@ +'use strict'; +  var serverUrl = require('./url');  var http = require('http');  var url = require('url'); @@ -7,15 +9,66 @@ const handleScroll = (req, res) => {    res.end('<!DOCTYPEhtml><html lang="en"><body style="width:10000px; height:10000px"></body></html">');  }; +const handleAPagenation = (req, res) => { +  let u = url.parse(req.url); +  let params = new url.URLSearchParams(u.search); +  let page = params.get('page') === null ? null : Number(params.get('page')); +  if (page === null || isNaN(page)) { +    return handle404(req, res); +  } + +  let body = ''; +  let nextLink = u.pathname + '?page=' + (page + 1); +  let prevLink = u.pathname + '?page=' + (page - 1); + +  if (page > 1) { +    body += '<a href="' + prevLink + '">prev</a> | '; +  } +  body += '<a href="' + nextLink + '">next</a>'; + +  res.writeHead(200, {'Content-Type': 'text/html'}); +  res.end('<!DOCTYPEhtml><html lang="en"><body">' + body + '</body></html">'); +}; + +const handleLinkPagenation = (req, res) => { +  let u = url.parse(req.url); +  let params = new url.URLSearchParams(u.search); +  let page = params.get('page') === null ? null : Number(params.get('page')); +  if (page === null || isNaN(page)) { +    return handle404(req, res); +  } + +  let head = ''; +  let nextLink = u.pathname + '?page=' + (page + 1); +  let prevLink = u.pathname + '?page=' + (page - 1); + +  if (page > 1) { +    head += '<link rel="prev" href="' + prevLink + '"></link>'; +  } +  head += '<link rel="next" href="' + nextLink + '"></link>'; + +  res.writeHead(200, {'Content-Type': 'text/html'}); +  res.end('<!DOCTYPEhtml><html lang="en"><head>' + head + '</head><body"></body></html">'); +}; + +  const handle404 = (req, res) => {    res.writeHead(404, {'Content-Type': 'text/plain'});    res.end('not found')  };  http.createServer(function (req, res) { +  if (req.method !== 'GET') { +    handle404(req, res); +  } +    let u = url.parse(req.url); -  if (req.method === 'GET' && u.pathname === '/scroll') { +  if (u.pathname === '/scroll') {      handleScroll(req, res); +  } else if (u.pathname === '/a-pagenation') { +    handleAPagenation(req, res); +  } else if (u.pathname === '/link-pagenation') { +    handleLinkPagenation(req, res);    } else {      handle404(req, res);    } | 
