Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ bin
target
.searchable
screenshots/
dataFile

# You can use wildcards as well

Expand Down
2 changes: 1 addition & 1 deletion .mvn/extensions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
<extension>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-build</artifactId>
<version>5.0.0</version>
<version>4.0.10</version>
</extension>
</extensions>
9 changes: 7 additions & 2 deletions com.vogella.tasks.services.tests/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ Bundle-Name: Tests
Bundle-SymbolicName: com.vogella.tasks.services.tests
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: VOGELLA
Fragment-Host: com.vogella.tasks.services;bundle-version="1.0.0"
Import-Package: org.junit.jupiter.api;version="5.11.0"
Require-Bundle: com.vogella.tasks.services;bundle-version="1.0.0",
com.vogella.tasks.model;bundle-version="1.0.0",
org.eclipse.e4.core.contexts;bundle-version="1.8.400",
org.eclipse.e4.core.di;bundle-version="1.7.700"
Import-Package: org.junit.jupiter.api;version="5.11.0",
org.osgi.service.component.annotations;version="1.3.0",
org.osgi.framework;version="1.8.0"
Automatic-Module-Name: com.vogella.tasks.services.tests
Bundle-RequiredExecutionEnvironment: JavaSE-21
12 changes: 12 additions & 0 deletions com.vogella.tasks.services.tests/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.vogella.tycho</groupId>
<artifactId>releng</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.vogella.tasks.services.tests</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-test-plugin</packaging>
</project>
Original file line number Diff line number Diff line change
@@ -1,23 +1,79 @@
package com.vogella.tasks.services.tests;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.List;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;

import com.vogella.tasks.model.Task;
import com.vogella.tasks.services.internal.TransientTaskServiceImpl;
import com.vogella.tasks.model.TaskService;

/**
* Plug-in test for TaskService OSGi service.
* This test verifies that the TaskService is properly available as an OSGi service
* and functions correctly.
*/
class TransientTaskServiceImplTests {

@Test
@DisplayName("Ensures that the test service always returns 9 elements")
void testThatTestServiceReturnsNineTasks() {
TransientTaskServiceImpl taskService = new TransientTaskServiceImpl();
List<Task> tasks = taskService.getAll();
assertEquals(9, tasks.size());
}
private TaskService taskService;
private BundleContext bundleContext;
private ServiceReference<TaskService> serviceReference;

@BeforeEach
public void setUp() {
bundleContext = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
assertNotNull(bundleContext, "Bundle context should be available");

serviceReference = bundleContext.getServiceReference(TaskService.class);
assertNotNull(serviceReference, "TaskService should be registered as an OSGi service");

taskService = bundleContext.getService(serviceReference);
assertNotNull(taskService, "TaskService should be available");
}

@AfterEach
public void tearDown() {
if (serviceReference != null) {
bundleContext.ungetService(serviceReference);
}
}

@Test
@DisplayName("Ensures that the test service returns tasks")
void testThatTestServiceReturnsTasks() {
List<Task> tasks = taskService.getAll();
// The service returns at least 9 tasks initially, but may have more due to other tests
assertTrue(tasks.size() >= 9, "Should have at least 9 tasks, got " + tasks.size());
}

@Test
@DisplayName("Test getting a task by ID")
void testGetTaskById() {
List<Task> tasks = taskService.getAll();
assertTrue(tasks.size() > 0, "Should have tasks");

long firstTaskId = tasks.get(0).getId();
var task = taskService.get(firstTaskId);

Copilot AI Oct 13, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Use explicit type declaration instead of 'var' for better code readability and consistency with the rest of the codebase.

Copilot uses AI. Check for mistakes.

assertTrue(task.isPresent(), "Should find task by ID");
assertEquals(firstTaskId, task.get().getId());
}

@Test
@DisplayName("Test consuming tasks")
void testConsumeTask() {
taskService.consume(tasks -> {
assertNotNull(tasks, "Tasks list should not be null");
assertTrue(tasks.size() >= 9, "Should have at least 9 tasks");
});
}
}
3 changes: 2 additions & 1 deletion com.vogella.tasks.services/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ Require-Bundle: org.eclipse.e4.core.services,
org.eclipse.e4.ui.model.workbench,
com.vogella.tasks.events;bundle-version="1.0.0",
com.google.gson;bundle-version="2.8.6"
Service-Component: OSGI-INF/com.vogella.tasks.services.internal.TaskServiceContextFunction.xml
Service-Component: OSGI-INF/com.vogella.tasks.services.internal.TaskServiceContextFunction.xml,
OSGI-INF/com.vogella.tasks.services.internal.TaskServiceComponent.xml

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0" name="com.vogella.tasks.services.internal.TaskServiceComponent">
<service>
<provide interface="com.vogella.tasks.model.TaskService"/>
</service>
<implementation class="com.vogella.tasks.services.internal.TaskServiceComponent"/>
</scr:component>
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package com.vogella.tasks.services.internal;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;

import org.osgi.service.component.annotations.Component;

import com.vogella.tasks.model.Task;
import com.vogella.tasks.model.TaskService;

/**
* OSGi Declarative Services component that provides TaskService.
* This is a simplified version of TransientTaskServiceImpl without Eclipse DI dependencies,
* suitable for OSGi testing.
*/
@Component(service = TaskService.class)
public class TaskServiceComponent implements TaskService {

private static AtomicInteger current = new AtomicInteger(1);
private List<Task> tasks;

public TaskServiceComponent() {
tasks = createTestData();
}

@Override
public void consume(Consumer<List<Task>> taskConsumer) {
taskConsumer.accept(tasks.stream().map(Task::copy).collect(Collectors.toList()));
}

@Override
public synchronized boolean update(Task newTask) {
Optional<Task> taskOptional = findById(newTask.getId());
Task task = taskOptional.orElse(new Task(current.getAndIncrement()));
task.setSummary(newTask.getSummary());
task.setDescription(newTask.getDescription());
task.setDone(newTask.isDone());
task.setDueDate(newTask.getDueDate());

if (!taskOptional.isPresent()) {
tasks.add(task);
}

JSONUtil.saveAsGson(tasks);

Copilot AI Oct 13, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JSONUtil class is not imported or defined. This will cause a compilation error.

Copilot uses AI. Check for mistakes.
return true;
}

@Override
public Optional<Task> get(long id) {
return findById(id).map(Task::copy);
}

@Override
public boolean delete(long id) {
Optional<Task> deletedTask = findById(id);
deletedTask.ifPresent(tasks::remove);
return deletedTask.isPresent();
}

private List<Task> createTestData() {
List<Task> list = JSONUtil.retrieveSavedData();

Copilot AI Oct 13, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JSONUtil class is not imported or defined. This will cause a compilation error.

Copilot uses AI. Check for mistakes.
if (list.isEmpty()) {
list = List.of(
create("Application model", "Flexible and extensible"),
create("DI", "@Inject as programming mode"),
create("OSGi", "Services"),
create("SWT", "Widgets"),
create("JFace", "Especially Viewers!"),
create("CSS Styling", "Style your application"),
create("Eclipse services", "Selection, model, Part"),
create("Renderer", "Different UI toolkit"),
create("Compatibility Layer", "Run Eclipse 3.x")
);
}
return new ArrayList<>(list);
}

private Task create(String summary, String description) {
return new Task(current.getAndIncrement(), summary, description, false, LocalDate.now());
}

private Optional<Task> findById(long id) {
return tasks.stream().filter(t -> t.getId() == id).findAny();
}

@Override
public List<Task> getAll() {
return tasks.stream().map(Task::copy).collect(Collectors.toList());
}
}
3 changes: 2 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<packaging>pom</packaging>

<properties>
<tycho.version>5.0.0</tycho.version>
<tycho.version>4.0.10</tycho.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
Expand Down Expand Up @@ -125,6 +125,7 @@
<module>com.vogella.osgi.taskconsumer</module>
<module>updatesite</module>
<module>com.vogella.tasks.product</module>
<module>com.vogella.tasks.services.tests</module>
<!--
<module>com.example.e4.swtbot.tests</module>
-->
Expand Down
Loading