text: import {
    extendNotExistingKeys,
    createCellHeadersRange,
    normalizeLanguageCode,
    warnUserAboutLanguageRegistration,
    applyLanguageSetting
  } from 'handsontable/i18n/utils';
  
  import {DEFAULT_LANGUAGE_CODE, registerLanguageDictionary} from 'handsontable/i18n/dictionariesManager';
  import plPL from 'handsontable/i18n/languages/pl-PL';
  
  describe('i18n helpers', () => {
    describe('extendNotExistingKeys', () => {
      it('should add extra key to object', () => {
        const extendedOject = {
          hello: 'world',
          lorem: 'ipsum'
        };
  
        const extension = {anotherKey: true};
  
        extendNotExistingKeys(extendedOject, extension);
  
        expect(extendedOject.anotherKey).toEqual(true);
      });
  
      it('should not overwrite existing keys', () => {
        const extendedOject = {
          hello: 'world',
          lorem: 'ipsum'
        };
  
        const extension = {hello: 'kitty'};
  
        extendNotExistingKeys(extendedOject, extension);
  
        expect(extendedOject.hello).toEqual('world');
      });
  
      it('should return extended object without creating copy of it', () => {
        const extendedOject = {
          hello: 'world',
          lorem: 'ipsum'
        };
  
        const extension = {anotherKey: true};
  
        const newReference = extendNotExistingKeys(extendedOject, extension);
  
        expect(newReference).toBe(extendedOject);
      });
    });
  
    describe('createCellHeadersRange', () => {
      it('should create range of values basing on cell indexes (index of first cell is lower then index of next cell', () => {
        expect(createCellHeadersRange(2, 7)).toEqual('2-7');
      });
  
      it('should create range of values basing on cell indexes (index of first cell is higher then index of next cell', () => {
        expect(createCellHeadersRange(7, 2)).toEqual('2-7');
      });
  
      it('should create range of values basing on cell indexes and corresponding headers (index of first cell is lower then index of next cell', () => {
        expect(createCellHeadersRange(0, 4, 'A', 'D')).toEqual('A-D');
      });
  
      it('should create range of values basing on cell indexes and corresponding headers (index of first cell is higher then index of next cell', () => {
        expect(createCellHeadersRange(4, 0, 'D', 'A')).toEqual('A-D');
      });
    });
  
    describe('normalizeLanguageCode', () => {
      it('shoud not change proper language code', () => {
        expect(normalizeLanguageCode('pl-PL')).toEqual('pl-PL');
      });
  
      it('should return language code not matching to pattern', () => {
        expect(normalizeLanguageCode('too-Long')).toEqual('too-Long');
      });
  
      it('should normlize properly langage code #1', () => {
        expect(normalizeLanguageCode('pl-pl')).toEqual('pl-PL');
      });
  
      it('should normlize properly langage code #2', () => {
        expect(normalizeLanguageCode('PL-pl')).toEqual('pl-PL');
      });
  
      it('should normlize properly langage code #3', () => {
        expect(normalizeLanguageCode('PL-PL')).toEqual('pl-PL');
      });
    });
  
    describe('applyLanguageSetting', () => {
      beforeAll(() => {
        // Note: please keep in mind that this language will be registered also for next unit tests (within this file)!
        // It's stored globally for already loaded Handsontable library.
  
        registerLanguageDictionary(plPL);
      });
  
      it('should set `language` key of settings object when handling existing language', () => {
        const settings = {};
  
        applyLanguageSetting(settings, plPL.languageCode);
  
        expect(settings.language).toEqual(plPL.languageCode);
      });
  
      it('should set `language` key of settings object to default language code when handling not existing language', () => {
        spyOn(console, 'error');
        const settings = {};
  
        applyLanguageSetting(settings, 'aa-BB');
  
        expect(settings.language).toEqual(DEFAULT_LANGUAGE_CODE);
      });
  
      it('should log error when handling not existing language', () => {
        const spy = spyOn(console, 'error');
        const settings = {};
  
        applyLanguageSetting(settings, 'aa-BB');
  
        expect(spy).toHaveBeenCalled();
      });
    });
  
    describe('warnUserAboutLanguageRegistration', () => {
      it('should not log error in console when language code was not passed to function', () => {
        const spy = spyOn(console, 'error');
  
        warnUserAboutLanguageRegistration();
  
        expect(spy).not.toHaveBeenCalled();
      });
  
      it('should log error in console when language code was passed to function', () => {
        const spy = spyOn(console, 'error');
  
        warnUserAboutLanguageRegistration('pl-PL');
  
        expect(spy).toHaveBeenCalled();
      });
    });
  });
  