aboutsummaryrefslogblamecommitdiff
path: root/e2e/completion_open.test.ts
blob: 7eef4c28aab417073f3d3240114734a2f140dc3a (plain) (tree)
1
2
3
4
5
6
7
8
9
                                 
 
                                                       



                                               
                                                        
 
                                                               
                                                             

                           
                 
 
                      
                         
                                                 

                                         
 
                             
                                                          
     
                     
                        
                           

     
                          
                                                          
     
                                                                                                             
                                             
                                     
 
                                  





                                                        
       
     
 
                                                                                   
                                             
                                            
 
                                  

                                                                              
       
     
 
                                                                                      
                                             
                                               
 
                                  

                                                                              
       
     
 
                                                                                      
                                             
                                               
 
                                  

                                                                              
       
     
 
                                                                                               
                                           
                                                  
                                                      
 
                                       
                                     
 
                                  
                                                        



                                      
       
                                       
                                                  

                                                      
                                     
 
                                  
                                                        



                                      
       
     
 




                                                                                           
                                           
                                     
 
                                  
                                                        



                                      
       
                                                      
 



                                            
                                       
                                     
 
                                  
                                                        



                                      
       
     
   
import * as path from "path";
import * as assert from "assert";

import Settings from "../src/shared/settings/Settings";
import TestServer from "./lib/TestServer";
import eventually from "./eventually";
import { Builder, Lanthan } from "lanthan";
import { WebDriver } from "selenium-webdriver";
import Page from "./lib/Page";
import SettingRepository from "./lib/SettingRepository";

describe("completion on open/tabopen/winopen commands", () => {
  const server = new TestServer().receiveContent("/*", "ok");
  let lanthan: Lanthan;
  let webdriver: WebDriver;
  let browser: any;
  let page: Page;

  before(async () => {
    await server.start();

    lanthan = await Builder.forBrowser("firefox")
      .spyAddon(path.join(__dirname, ".."))
      .build();
    webdriver = lanthan.getWebDriver();
    browser = lanthan.getWebExtBrowser();

    // Add item into hitories
    await webdriver.navigate().to("https://example.com/");
  });

  after(async () => {
    await server.stop();
    if (lanthan) {
      await lanthan.quit();
    }
  });

  beforeEach(async () => {
    page = await Page.navigateTo(webdriver, server.url());
  });

  it('should show completions from search engines, bookmarks, and histories by "open" command', async () => {
    const console = await page.showConsole();
    await console.inputKeys("open ");

    await eventually(async () => {
      const groups = await console.getCompletions();
      const titles = groups.map((group) => group.title);
      assert.deepStrictEqual(titles, [
        "Search Engines",
        "Bookmarks",
        "History",
      ]);
    });
  });

  it('should filter items with titles by keywords on "open" command', async () => {
    const console = await page.showConsole();
    await console.inputKeys("open getting");

    await eventually(async () => {
      const groups = await console.getCompletions();
      const items = groups.map((group) => group.items).flat();
      assert.ok(items.every((x) => x.text.toLowerCase().includes("getting")));
    });
  });

  it('should filter items with titles by keywords on "tabopen" command', async () => {
    const console = await page.showConsole();
    await console.inputKeys("tabopen getting");

    await eventually(async () => {
      const groups = await console.getCompletions();
      const items = groups.map((group) => group.items).flat();
      assert.ok(items.every((x) => x.text.toLowerCase().includes("getting")));
    });
  });

  it('should filter items with titles by keywords on "winopen" command', async () => {
    const console = await page.showConsole();
    await console.inputKeys("winopen getting");

    await eventually(async () => {
      const groups = await console.getCompletions();
      const items = groups.map((group) => group.items).flat();
      assert.ok(items.every((x) => x.text.toLowerCase().includes("getting")));
    });
  });

  it('should display only specified items in "complete" property by set command', async () => {
    let console = await page.showConsole();
    await console.execCommand("set complete=sbh");
    await (webdriver.switchTo() as any).parentFrame();

    console = await page.showConsole();
    await console.inputKeys("open ");

    await eventually(async () => {
      const groups = await console.getCompletions();
      const titles = groups.map((group) => group.title);
      assert.deepStrictEqual(titles, [
        "Search Engines",
        "Bookmarks",
        "History",
      ]);
    });

    await console.close();
    console = await page.showConsole();
    await console.execCommand("set complete=bss");
    await (webdriver.switchTo() as any).parentFrame();

    console = await page.showConsole();
    await console.inputKeys("open ");

    await eventually(async () => {
      const groups = await console.getCompletions();
      const titles = groups.map((group) => group.title);
      assert.deepStrictEqual(titles, [
        "Bookmarks",
        "Search Engines",
        "Search Engines",
      ]);
    });
  });

  it('should display only specified items in "complete" property by setting', async () => {
    new SettingRepository(browser).saveJSON(
      Settings.fromJSON({
        properties: { complete: "sbh" },
      })
    );

    let console = await page.showConsole();
    await console.inputKeys("open ");

    await eventually(async () => {
      const groups = await console.getCompletions();
      const titles = groups.map((group) => group.title);
      assert.deepStrictEqual(titles, [
        "Search Engines",
        "Bookmarks",
        "History",
      ]);
    });

    await console.close();
    await (webdriver.switchTo() as any).parentFrame();

    new SettingRepository(browser).saveJSON(
      Settings.fromJSON({
        properties: { complete: "bss" },
      })
    );

    console = await page.showConsole();
    await console.inputKeys("open ");

    await eventually(async () => {
      const groups = await console.getCompletions();
      const titles = groups.map((group) => group.title);
      assert.deepStrictEqual(titles, [
        "Bookmarks",
        "Search Engines",
        "Search Engines",
      ]);
    });
  });
});