/* * Copyright 2016 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.assist; import static com.google.common.collect.Iterables.transform; import static org.assertj.core.api.Assertions.assertThat; import static org.robotframework.ide.eclipse.main.plugin.assist.Commons.reverseComparator; import static org.robotframework.ide.eclipse.main.plugin.assist.Commons.substringMatcher; import static org.robotframework.ide.eclipse.main.plugin.assist.Commons.toLabels; import java.util.Comparator; import java.util.List; import org.junit.Test; public class RedCodeReservedWordProposalsTest { @Test public void noProposalsAreProvided_whenPredicateIsAlwaysFalse() { final AssistProposalPredicate<String> predicateWordHasToSatisfy = AssistProposalPredicates.alwaysFalse(); final RedCodeReservedWordProposals proposalsProvider = new RedCodeReservedWordProposals( predicateWordHasToSatisfy); final List<? extends AssistProposal> proposals = proposalsProvider.getReservedWordProposals(""); assertThat(proposals).isEmpty(); } @Test public void allProposalsAreProvided_whenPredicateIsAlwaysTrue() { final AssistProposalPredicate<String> predicateWordHasToSatisfy = AssistProposalPredicates.alwaysTrue(); final RedCodeReservedWordProposals proposalsProvider = new RedCodeReservedWordProposals( predicateWordHasToSatisfy); final List<? extends AssistProposal> proposals = proposalsProvider.getReservedWordProposals(""); assertThat(transform(proposals, toLabels())).containsExactly(":FOR", "And", "But", "Given", "IN", "IN ENUMERATE", "IN RANGE", "IN ZIP", "Then", "When"); } @Test public void onlyProposalsMatchingPredicateAreProvided_whenPredicateSelectsThem() { final AssistProposalPredicate<String> predicateWordHasToSatisfy = new AssistProposalPredicate<String>() { @Override public boolean apply(final String word) { return word.length() < 4; } }; final RedCodeReservedWordProposals proposalsProvider = new RedCodeReservedWordProposals( predicateWordHasToSatisfy); final List<? extends AssistProposal> proposals = proposalsProvider.getReservedWordProposals(""); assertThat(transform(proposals, toLabels())).containsExactly("And", "But", "IN"); } @Test public void onlyProposalsMatchingPrefixAreProvided_whenPrefixIsGivenAndDefaultMatcherIsUsed() { final RedCodeReservedWordProposals proposalsProvider = new RedCodeReservedWordProposals( AssistProposalPredicates.<String>alwaysTrue()); final List<? extends AssistProposal> proposals = proposalsProvider.getReservedWordProposals("iN"); assertThat(transform(proposals, toLabels())).containsExactly("IN", "IN ENUMERATE", "IN RANGE", "IN ZIP"); } @Test public void onlyProposalsMatchingGivenMatcherAreProvided_whenMatcherIsGiven() { final RedCodeReservedWordProposals proposalsProvider = new RedCodeReservedWordProposals( substringMatcher(), AssistProposalPredicates.<String> alwaysTrue()); final List<? extends AssistProposal> proposals = proposalsProvider.getReservedWordProposals("an"); assertThat(transform(proposals, toLabels())).containsExactly("And", "IN RANGE"); } @Test public void proposalsAreProvided_inOrderInducedByGivenComparator() { final AssistProposalPredicate<String> predicateWordHasToSatisfy = AssistProposalPredicates.alwaysTrue(); final RedCodeReservedWordProposals proposalsProvider = new RedCodeReservedWordProposals( predicateWordHasToSatisfy); final Comparator<AssistProposal> comparator = reverseComparator(AssistProposals.sortedByLabels()); final List<? extends AssistProposal> proposals = proposalsProvider.getReservedWordProposals("", comparator); assertThat(transform(proposals, toLabels())).containsExactly("When", "Then", "IN ZIP", "IN RANGE", "IN ENUMERATE", "IN", "Given", "But", "And", ":FOR"); } }