aboutsummaryrefslogblamecommitdiff
path: root/test/shared/SettingData.test.ts
blob: 0632176357a45d75b6384c2bb586abeb8770553c (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
                     
                                              
                                      
                                                          
                              
                                                        



                                                                 
                      
                                               
          
 
                                                                        







                                                                  
                                                   
                                                       
           
 
                                                               
                                    








                                                      
                    













                                                        
                                                                   
                                                               



                                                                   
                                     
                      


                                                       
                       

                                                    

                        
 
                                                                   
                                                           





                                                      
                      
















                                                           
                                                                  
                                                 




















                                                                   
                                                  
                    
                                                         
                   


                                                        
                       

                                                    

                        
 
                                                              























                                                           
                      
















                                                          
                                                      



                                                 
                      
















                                                           
                                                      



















                                                         
                      
















                                                          
                                                                 
                                                                 

                                                 
                      
















                                                           
                                                                 
                                                                


         
import SettingData, {
  FormKeymaps, JSONTextSettings, FormSettings,
} from '../../src/shared/SettingData';
import Settings from '../../src/shared/settings/Settings';
import { expect } from 'chai';
import Keymaps from '../../src/shared/settings/Keymaps';

describe('shared/SettingData', () => {
  describe('FormKeymaps', () => {
    describe('#valueOF to #toKeymaps', () => {
      it('parses form keymaps and convert to operations', () => {
        const data = {
          'scroll.vertically?{"count":1}': 'j',
          'scroll.home': '0',
        };

        const keymaps = FormKeymaps.fromJSON(data).toKeymaps().toJSON();
        expect(keymaps).to.deep.equal({
          'j': { type: 'scroll.vertically', count: 1 },
          '0': { type: 'scroll.home' },
        });
      });
    });

    describe('#fromKeymaps to #toJSON', () => {
      it('create from a Keymaps and create a JSON object', () => {
        const keymaps: Keymaps = Keymaps.fromJSON({
          'j': { type: 'scroll.vertically', count: 1 },
          '0': { type: 'scroll.home' },
        });

        const form = FormKeymaps.fromKeymaps(keymaps).toJSON();
        expect(form).to.deep.equal({
          'scroll.vertically?{"count":1}': 'j',
          'scroll.home': '0',
        });
      });
    });
  });

  describe('JSONSettings', () => {
    describe('#valueOf to #toSettings', () => {
      it('parse object and create a Settings', () => {
        const o = `{
          "keymaps": {},
          "search": {
            "default": "google",
            "engines": {
              "google": "https://google.com/search?q={}"
            }
          },
          "properties": {
            "hintchars": "abcdefghijklmnopqrstuvwxyz",
            "smoothscroll": false,
            "complete": "sbh"
          },
          "blacklist": []
        }`;

        const settings = JSONTextSettings.fromText(o).toSettings();
        expect(settings.toJSON()).to.deep.equal(JSON.parse(o));
      });
    });

    describe('#fromSettings to #toJSON', () => {
      it('create from a Settings and create a JSON string', () => {
        const o = Settings.fromJSON({
          keymaps: {},
          search: {
            default: "google",
            engines: {
              google: "https://google.com/search?q={}",
            },
          },
          properties: {
            hintchars: "abcdefghijklmnopqrstuvwxyz",
            smoothscroll: false,
            complete: "sbh"
          },
          blacklist: [],
        });

        const json = JSONTextSettings.fromSettings(o).toJSONText();
        expect(JSON.parse(json)).to.deep.equal(o.toJSON());
      });
    });
  });

  describe('FormSettings', () => {
    describe('#valueOf to #toSettings', () => {
      it('parse object and create a Settings', () => {
        const data = {
          keymaps: {
            'scroll.vertically?{"count":1}': 'j',
            'scroll.home': '0',
          },
          search: {
            default: "google",
            engines: [
              ["google", "https://google.com/search?q={}"],
            ]
          },
          properties: {
            hintchars: "abcdefghijklmnopqrstuvwxyz",
            smoothscroll: false,
            complete: "sbh"
          },
          blacklist: []
        };

        const settings = FormSettings.fromJSON(data).toSettings();
        expect(settings.toJSON()).to.deep.equal({
          keymaps: {
            'j': { type: 'scroll.vertically', count: 1 },
            '0': { type: 'scroll.home' },
          },
          search: {
            default: "google",
            engines: {
              "google": "https://google.com/search?q={}"
            }
          },
          properties: {
            hintchars: "abcdefghijklmnopqrstuvwxyz",
            smoothscroll: false,
            complete: "sbh"
          },
          blacklist: []
        });
      });
    });

    describe('#fromSettings to #toJSON', () => {
      it('create from a Settings and create a JSON string', () => {
        const data: Settings = Settings.fromJSON({
          keymaps: {
            'j': { type: 'scroll.vertically', count: 1 },
            '0': { type: 'scroll.home' },
          },
          search: {
            default: "google",
            engines: {
              "google": "https://google.com/search?q={}"
            }
          },
          properties: {
            hintchars: "abcdefghijklmnopqrstuvwxyz",
            smoothscroll: false,
            complete: "sbh"
          },
          blacklist: [],
        });

        const json = FormSettings.fromSettings(data).toJSON();
        expect(json).to.deep.equal({
          keymaps: {
            'scroll.vertically?{"count":1}': 'j',
            'scroll.home': '0',
          },
          search: {
            default: "google",
            engines: [
              ["google", "https://google.com/search?q={}"],
            ]
          },
          properties: {
            hintchars: "abcdefghijklmnopqrstuvwxyz",
            smoothscroll: false,
            complete: "sbh"
          },
          blacklist: [],
        });
      });
    });
  });

  describe('SettingData', () => {
    describe('#valueOf to #toJSON', () => {
      it('parse object from json source', () => {
        const data = {
          source: 'json',
          json: `{
            "keymaps": {},
            "search": {
              "default": "google",
              "engines": {
                "google": "https://google.com/search?q={}"
              }
            },
            "properties": {
              "hintchars": "abcdefghijklmnopqrstuvwxyz",
              "smoothscroll": false,
              "complete": "sbh"
            },
            "blacklist": []
          }`,
        };

        const j = SettingData.fromJSON(data).toJSON();
        expect(j.source).to.equal('json');
        expect(j.json).to.be.a('string');
      });

      it('parse object from form source', () => {
        const data = {
          source: 'form',
          form: {
            keymaps: {},
            search: {
              default: "yahoo",
              engines: [
                ['yahoo', 'https://yahoo.com/search?q={}'],
              ],
            },
            properties: {
              hintchars: "abcdefghijklmnopqrstuvwxyz",
              smoothscroll: false,
              complete: "sbh"
            },
            blacklist: [],
          },
        };

        const j = SettingData.fromJSON(data).toJSON();
        expect(j.source).to.equal('form');
        expect(j.form).to.deep.equal({
          keymaps: {},
          search: {
            default: "yahoo",
            engines: [
              ['yahoo', 'https://yahoo.com/search?q={}'],
            ],
          },
          properties: {
            hintchars: "abcdefghijklmnopqrstuvwxyz",
            smoothscroll: false,
            complete: "sbh"
          },
          blacklist: [],
        });
      });
    });

    describe('#toSettings', () => {
      it('parse object from json source', () => {
        const data = {
          source: 'json',
          json: `{
            "keymaps": {},
            "search": {
              "default": "google",
              "engines": {
                "google": "https://google.com/search?q={}"
              }
            },
            "properties": {
              "hintchars": "abcdefghijklmnopqrstuvwxyz",
              "smoothscroll": false,
              "complete": "sbh"
            },
            "blacklist": []
          }`,
        };

        const settings = SettingData.fromJSON(data).toSettings();
        expect(settings.search.defaultEngine).to.equal('google');
      });

      it('parse object from form source', () => {
        const data = {
          source: 'form',
          form: {
            keymaps: {},
            search: {
              default: "yahoo",
              engines: [
                ['yahoo', 'https://yahoo.com/search?q={}'],
              ],
            },
            properties: {
              hintchars: "abcdefghijklmnopqrstuvwxyz",
              smoothscroll: false,
              complete: "sbh"
            },
            blacklist: [],
          },
        };

        const settings = SettingData.fromJSON(data).toSettings();
        expect(settings.search.defaultEngine).to.equal('yahoo');
      });
    });
  });
});