Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<link href="//cdnjs.cloudflare.com/ajax/libs/jasmine/2.0.0/jasmine.css" rel="stylesheet" type="text/css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/jasmine/2.0.0/jasmine.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/jasmine/2.0.0/jasmine-html.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/jasmine/2.0.0/boot.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
/*jshint maxparams:3, maxdepth:2, maxstatements:5, maxcomplexity:6, esnext:true */
const CONSONANTS = 'bcdfghjklmnpqrstvwxyz';
const VOWELS = 'aeiou';
var isValid = (word = '') => {
  let character = word ? word[0] : '';
  
  return word && isVowel(character) || isConsonant(character);
};
var isVowel = character => character && !!~VOWELS.indexOf(character);
var isConsonant = character => character && !!~CONSONANTS.indexOf(character);
function getPreVowelConsonants(word) {
  var preVowelConsonants = '';
  
  for (let i = 0; i < word.length; ++i) {
    if (isConsonant(word[i])) {
      preVowelConsonants += word[i];
      if (preVowelConsonants == 'q' && i+1 < word.length && word[i+1] == 'u') {
        preVowelConsonants += 'u';
        i += 2;
        break;
      }
    } else {
      break;
    }
  }
  
  return preVowelConsonants;
}
function EnglishToPigLatin(english) {
   const SYLLABLE = 'ay'; 
   var pigLatin = '';
   var firstCharacter = english ? english[0] : '';
   if (isValid(english)) {
      if (isVowel(firstCharacter)) {
         pigLatin = english + SYLLABLE;
      } else {
        var preVowelConsonants = getPreVowelConsonants(english);
        pigLatin = english.substring(preVowelConsonants.length) + preVowelConsonants + SYLLABLE;
      }
   }
   return pigLatin;   
}
console.log(EnglishToPigLatin('test'));  
console.log('test');
describe('Pig Latin', function() {
  describe('Invalid', function() {
    it('should return blank if passed null', function() {
      expect(EnglishToPigLatin(null)).toEqual('');
    });
    it('should return blank if passed blank', function() {
      expect(EnglishToPigLatin('')).toEqual('');
    });
    it('should return blank if passed number', function() {
      expect(EnglishToPigLatin('1234567890')).toEqual('');
    });
    it('should return blank if passed symbol', function() {
      expect(EnglishToPigLatin('~!@#$%^&*()_+')).toEqual('');
    });
  });
  
  describe('Consonants', function() {
    it('should return eastbay from beast', function() {
      expect(EnglishToPigLatin('beast')).toEqual('eastbay');
    });
    it('should return estionquay from question', function() {
      expect(EnglishToPigLatin('question')).toEqual('estionquay');
    });
    it('should return eethray from three', function() {
      expect(EnglishToPigLatin('three')).toEqual('eethray');
    });    
  });
    
  describe('Vowels', function() {
    it('should return appleay from apple', function() {
      expect(EnglishToPigLatin('apple')).toEqual('appleay');
    });    
  });
});
Output

This bin was created anonymously and its free preview time has expired (learn why). — Get a free unrestricted account

Dismiss x
public
Bin info
anonymouspro
0viewers