code: function ariaListboxValue(virtualNode, context) {
  	const { actualNode } = virtualNode;
  	const role = aria.getRole(actualNode);
  	if (role !== 'listbox') {
  		return '';
  	}
  
  	const selected = aria
  		.getOwnedVirtual(virtualNode)
  		.filter(
  			owned =>
  				aria.getRole(owned) === 'option' &&
  				owned.actualNode.getAttribute('aria-selected') === 'true'
  		);
  
  	if (selected.length === 0) {
  		return '';
  	}
  	// Note: Even with aria-multiselectable, only the first value will be used
  	// in the accessible name. This isn't spec'ed out, but seems to be how all
  	// browser behave.
  	return axe.commons.text.accessibleTextVirtual(selected[0], context);
  }
docs: Calculate value of an element with role=combobox or role=listbox
  
  @param {VirtualNode} element The VirtualNode instance whose value we want
  @param {Object} context The VirtualNode instance whose value we want
  @property {Element} startNode First node in accessible name computation
  @property {String[]} unsupported List of roles where value computation is unsupported
  @property {Bool} debug Enable logging for formControlValue
  @return {string} The calculated value