Есть два блока кода с по сути одинаковым заданием для каждого: 1. Проверить тип сообщения; 2. Если тип соответствует обрабатываемым - принять меры; 3. Если тип не соответствует обрабатываемым - бросить исключение и закончить цикл. *на реализацию обработки каждого типа внимание не обращаем, она валидатору нравится. Первый блок выполнен через if-else и он успешно проходит валидацию. Второй выполнен через switch-case и валидацию пройти не может. При замене на else-if он ее успешно прошел. При этом в условии задачи есть прямой намек на необходимость использования именно switch-case. Посему хочу разобраться что я упустил. Я изначально пробовал: 1. Бросать исключение в default: блоке; 2. Бросать исключение без дополнительных проверок; 3. Заводить отдельную переменную под проверяемый тип; 4. И даже вместо break использовать continue. Ничто из этого ситуацию не меняет.
/**
*  Блок первый, тестирование проходит.
*/
        protected void clientHandshake() throws IOException, ClassNotFoundException {
            while(true){
                Message serverMessage = connection.receive();
                if (serverMessage.getType() == MessageType.NAME_REQUEST) {
                    connection.send(new Message(MessageType.USER_NAME, getUserName()));
                } else if (serverMessage.getType() == MessageType.NAME_ACCEPTED) {
                    notifyConnectionStatusChanged(true);
                    break;
                } else {
                    throw new IOException("Unexpected MessageType");
                }
            }
        }
/**
*  Блок второй, тестирование не проходит.
*/
        protected void clientMainLoop() throws IOException, ClassNotFoundException {
            while (true) {
                Message serverMessage = connection.receive();
                switch (serverMessage.getType()) {
                    case TEXT: {
                        processIncomingMessage(serverMessage.getData());
                        break;
                    }
                    case USER_ADDED: {
                        informAboutAddingNewUser(serverMessage.getData());
                        break;
                    }
                    case USER_REMOVED: {
                        informAboutDeletingNewUser(serverMessage.getData());
                        break;
                    }
                }
                if (serverMessage.getType() != MessageType.TEXT &&
                        serverMessage.getType() != MessageType.USER_ADDED &&
                            serverMessage.getType() != MessageType.USER_REMOVED) {
                    throw new IOException("Unexpected MessageType");
                }
            }
        }