org.jtheque.features.FeatureServiceTest.java Source code

Java tutorial

Introduction

Here is the source code for org.jtheque.features.FeatureServiceTest.java

Source

package org.jtheque.features;

import org.jtheque.features.Feature.FeatureType;
import org.jtheque.i18n.LanguageService;
import org.jtheque.ui.utils.actions.JThequeAction;
import org.jtheque.unit.AbstractJThequeTest;
import org.jtheque.utils.StringUtils;
import org.jtheque.utils.SystemProperty;
import org.jtheque.utils.collections.CollectionUtils;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

import static org.junit.Assert.*;

/*
 * Copyright JTheque (Baptiste Wicht)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "jtheque-features-test.xml")
public class FeatureServiceTest extends AbstractJThequeTest {
    @Resource
    private FeatureService featureService;

    @Test
    public void initOK() {
        assertNotNull(featureService);
    }

    @Test
    public void defaultFeatures() {
        assertEquals(4, featureService.getFeatures().size());

        for (Feature feature : featureService.getFeatures()) {
            assertEquals(FeatureType.PACK, feature.getType());

            assertTrue(StringUtils.equalsOneOf(feature.getTitleKey(), "menu.file", "menu.help", "menu.advanced",
                    "menu.edit"));
        }
    }

    @Test
    public void listenerCalledForMainFeatures() {
        final AtomicInteger addCounter = new AtomicInteger(0);
        final AtomicInteger removeCounter = new AtomicInteger(0);
        final AtomicInteger modifyCounter = new AtomicInteger(0);

        featureService.addFeatureListener(new MyFeatureListener(addCounter, removeCounter, modifyCounter));

        featureService.addMenu("no-module", new MenuMain());

        assertEquals(1, addCounter.get());
        assertEquals(0, removeCounter.get());
        assertEquals(0, modifyCounter.get());

        featureService.addMenu("no-module", new MenuMain());

        assertEquals(2, addCounter.get());
        assertEquals(0, removeCounter.get());
        assertEquals(0, modifyCounter.get());
    }

    @Test
    public void listenerCalledForAddingFeature() {
        final AtomicInteger addCounter = new AtomicInteger(0);
        final AtomicInteger removeCounter = new AtomicInteger(0);
        final AtomicInteger modifyCounter = new AtomicInteger(0);

        featureService.addFeatureListener(new MyFeatureListener(addCounter, removeCounter, modifyCounter));

        featureService.addMenu("no-module", new MenuNoMain());

        assertEquals(0, addCounter.get());
        assertEquals(0, removeCounter.get());
        assertEquals(1, modifyCounter.get());

        featureService.addMenu("no-module", new MenuNoMain());

        assertEquals(0, addCounter.get());
        assertEquals(0, removeCounter.get());
        assertEquals(2, modifyCounter.get());
    }

    @Test
    public void listenerNotCalledAfterRemoved() {
        final AtomicInteger addCounter = new AtomicInteger(0);
        final AtomicInteger removeCounter = new AtomicInteger(0);
        final AtomicInteger modifyCounter = new AtomicInteger(0);

        FeatureListener listener = new MyFeatureListener(addCounter, removeCounter, modifyCounter);

        featureService.addFeatureListener(listener);

        featureService.addMenu("no-module", new MenuMain());

        featureService.removeFeatureListener(listener);

        featureService.addMenu("no-module-2", new MenuMain());

        assertEquals(1, addCounter.get());
        assertEquals(0, removeCounter.get());
        assertEquals(0, modifyCounter.get());
    }

    private static final class MenuMain implements Menu {
        @Override
        public Collection<Feature> getMainFeatures() {
            List<Feature> features = CollectionUtils.newList(1);

            features.add(Features.newPackFeature(55, "test.key"));

            return features;
        }

        @Override
        public Collection<Feature> getSubFeatures(CoreFeature feature) {
            return CollectionUtils.emptyList();
        }

        @Override
        public void refreshText(LanguageService languageService) {

        }
    }

    private static final class MenuNoMain implements Menu {
        @Override
        public Collection<Feature> getMainFeatures() {
            return CollectionUtils.emptyList();
        }

        @Override
        public Collection<Feature> getSubFeatures(CoreFeature feature) {
            if (feature == CoreFeature.FILE) {
                return Arrays.asList(Features.newActionFeature(11, new JThequeAction() {
                    @Override
                    public void actionPerformed(ActionEvent actionEvent) {
                        //Nothing to do
                    }
                }));
            }

            return CollectionUtils.emptyList();
        }

        @Override
        public void refreshText(LanguageService languageService) {

        }
    }

    private static class MyFeatureListener implements FeatureListener {
        private final AtomicInteger addCounter;
        private final AtomicInteger removeCounter;
        private final AtomicInteger modifyCounter;

        private MyFeatureListener(AtomicInteger addCounter, AtomicInteger removeCounter,
                AtomicInteger modifyCounter) {
            super();

            this.addCounter = addCounter;
            this.removeCounter = removeCounter;
            this.modifyCounter = modifyCounter;
        }

        @Override
        public void featureAdded(Feature feature) {
            addCounter.incrementAndGet();
        }

        @Override
        public void featureRemoved(Feature feature) {
            removeCounter.incrementAndGet();
        }

        @Override
        public void featureModified(Feature feature) {
            modifyCounter.incrementAndGet();
        }
    }
}