src/sap.ui.core/src/sap/ui/qunit/QUnitUtils.js
function mapKeyCodeToKey(sKeyCode) {

		// look up number in KeyCodes enum to get the string
		if (!isNaN(sKeyCode)) {
			sKeyCode = getKeyCodeStringFromNumber(sKeyCode);
		}
		if (!sKeyCode) {
			return undefined;
		}
		sKeyCode = sKeyCode.toLowerCase();
		// replace underscores with dash character such as 'ARROW_LEFT' --> 'ARROW-LEFT' and then camelize it --> 'ArrowLeft'
		sKeyCode = camelize(sKeyCode.replace(/_/g, "-"));

		// capitalize key
		var sKey = capitalize(sKeyCode);

		// remove "Digit" and "Numpad" from the resulting string as this info is present within the Location property and not the key property
		// e.g. "Digit9" --> "9"
		if (sKey.startsWith("Digit")) {
			return sKey.substring("Digit".length);
		} else if (sKey.startsWith("Numpad")) {
			sKey = sKey.substring("Numpad".length);
		}

		// special handling where KeyCodes[sKeyCode] does not match
		// e.g. KeyCodes.BREAK --> 'Pause' instead of 'Break'
		switch (sKey) {
			case "Break": return "Pause";
			case "Space": return " ";
			case "Print": return "PrintScreen";
			case "Windows": return "Meta";
			case "Sleep": return "Standby";
			case "TurnOff": return "PowerOff";
			case "Asterisk": return "*";
			case "Plus": return "+";
			case "Minus": return "-";
			case "Comma": return ",";
			case "Slash": return "/";
			case "OpenBracket": return ";";
			case "Dot": return ".";
			case "Pipe": return "|";
			case "Semicolon": return ";";
			case "Equals": return "=";
			case "SingleQUote": return "=";
			case "Backslash": return "\\";
			case "GreatAccent": return "`";
			default: return sKey;
		}
	}
function mapKeyCodeToKey(sKeyCode) {

		// look up number in KeyCodes enum to get the string
		if (!isNaN(sKeyCode)) {
			sKeyCode = getKeyCodeStringFromNumber(sKeyCode);
		}
		if (!sKeyCode) {
			return undefined;
		}
		sKeyCode = sKeyCode.toLowerCase();
		// replace underscores with dash character such as 'ARROW_LEFT' --> 'ARROW-LEFT' and then camelize it --> 'ArrowLeft'
		sKeyCode = camelize(sKeyCode.replace(/_/g, "-"));

		// capitalize key
		var sKey = capitalize(sKeyCode);

		// remove "Digit" and "Numpad" from the resulting string as this info is present within the Location property and not the key property
		// e.g. "Digit9" --> "9"
		if (sKey.startsWith("Digit")) {
			return sKey.substring("Digit".length);
		} else if (sKey.startsWith("Numpad")) {
			sKey = sKey.substring("Numpad".length);
		}

		// special handling where KeyCodes[sKeyCode] does not match
		// e.g. KeyCodes.BREAK --> 'Pause' instead of 'Break'
		switch (sKey) {
			case "Break": return "Pause";
			case "Space": return " ";
			case "Print": return "PrintScreen";
			case "Windows": return "Meta";
			case "Sleep": return "Standby";
			case "TurnOff": return "PowerOff";
			case "Asterisk": return "*";
			case "Plus": return "+";
			case "Minus": return "-";
			case "Comma": return ",";
			case "Slash": return "/";
			case "OpenBracket": return ";";
			case "Dot": return ".";
			case "Pipe": return "|";
			case "Semicolon": return ";";
			case "Equals": return "=";
			case "SingleQUote": return "=";
			case "Backslash": return "\\";
			case "GreatAccent": return "`";
			default: return sKey;
		}
	}
function mapKeyCodeToKey ( sKeyCode ) { // look up number in KeyCodes enum to get the string if ( ! isNaN ( sKeyCode ) ) { sKeyCode = getKeyCodeStringFromNumber ( sKeyCode ) ; } if ( ! sKeyCode ) { return undefined ; } sKeyCode = sKeyCode . toLowerCase ( ) ; // replace underscores with dash character such as 'ARROW_LEFT' --> 'ARROW-LEFT' and then camelize it --> 'ArrowLeft' sKeyCode = camelize ( sKeyCode . replace ( / _ / g , "-" ) ) ; // capitalize key var sKey = capitalize ( sKeyCode ) ; // remove "Digit" and "Numpad" from the resulting string as this info is present within the Location property and not the key property // e.g. "Digit9" --> "9" if ( sKey . startsWith ( "Digit" ) ) { return sKey . substring ( "Digit" . length ) ; } else if ( sKey . startsWith ( "Numpad" ) ) { sKey = sKey . substring ( "Numpad" . length ) ; } // special handling where KeyCodes[sKeyCode] does not match // e.g. KeyCodes.BREAK --> 'Pause' instead of 'Break' switch ( sKey ) { case "Break" : return "Pause" ; case "Space" : return " " ; case "Print" : return "PrintScreen" ; case "Windows" : return "Meta" ; case "Sleep" : return "Standby" ; case "TurnOff" : return "PowerOff" ; case "Asterisk" : return "*" ; case "Plus" : return "+" ; case "Minus" : return "-" ; case "Comma" : return "," ; case "Slash" : return "/" ; case "OpenBracket" : return ";" ; case "Dot" : return "." ; case "Pipe" : return "|" ; case "Semicolon" : return ";" ; case "Equals" : return "=" ; case "SingleQUote" : return "=" ; case "Backslash" : return "\\" ; case "GreatAccent" : return "`" ; default : return sKey ; } }
Maps the input keyCode to key property
@param sKeyCode {string|Integer} keyCode number or string, e.g. 27 or ESCAPE
@returns {*} the key property of KeyBoardEvent, e.g. Escape
Maps the input keyCode to key property