-
Notifications
You must be signed in to change notification settings - Fork 23
/
ModuleEnvironmentWatcherTest.java
102 lines (87 loc) · 4.8 KB
/
ModuleEnvironmentWatcherTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// Copyright 2021 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0
package org.terasology.gestalt.assets.module.autoreload;
import com.google.common.collect.SetMultimap;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.gestalt.assets.AssetType;
import org.terasology.gestalt.assets.ResourceUrn;
import org.terasology.gestalt.assets.format.producer.FileChangeSubscriber;
import org.terasology.gestalt.module.Module;
import org.terasology.gestalt.module.ModuleEnvironment;
import org.terasology.gestalt.module.ModuleFactory;
import org.terasology.gestalt.module.ModuleMetadata;
import org.terasology.gestalt.module.resources.FileReference;
import org.terasology.gestalt.module.sandbox.PermitAllPermissionProviderFactory;
import org.terasology.gestalt.naming.Name;
import org.terasology.gestalt.naming.Version;
import org.terasology.gestalt.util.io.FilesUtil;
import virtualModules.test.stubs.text.Text;
import virtualModules.test.stubs.text.TextData;
import virtualModules.test.stubs.text.TextFactory;
import java.io.IOException;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ModuleEnvironmentWatcherTest {
private static Logger logger = LoggerFactory.getLogger(ModuleEnvironmentWatcherTest.class);
@Test
public void test() throws IOException {
Path tempDirectory = Files.createTempDirectory("gestalt-test");
ModuleMetadata metadata = new ModuleMetadata(new Name("test"), Version.DEFAULT);
Module module = new ModuleFactory().createDirectoryModule(metadata, tempDirectory.toFile());
ModuleEnvironment environment = new ModuleEnvironment(Collections.singletonList(module), new PermitAllPermissionProviderFactory());
ModuleEnvironmentWatcher watcher = new ModuleEnvironmentWatcher(environment);
FileChangeSubscriber subscriber = new FileChangeSubscriber() {
@Override
public Optional<ResourceUrn> assetFileAdded(FileReference file, Name module, Name providingModule) {
logger.info("Asset File added: {}:{} by {}", module, file, providingModule);
return Optional.of(new ResourceUrn(module, new Name(file.getName())));
}
@Override
public Optional<ResourceUrn> assetFileModified(FileReference file, Name module, Name providingModule) {
logger.info("Asset File modified: {}:{} by {}", module, file, providingModule);
return Optional.of(new ResourceUrn(module, new Name(file.getName())));
}
@Override
public Optional<ResourceUrn> assetFileDeleted(FileReference file, Name module, Name providingModule) {
logger.info("Asset File deleted: {}:{} by {}", module, file, providingModule);
return Optional.empty();
}
@Override
public Optional<ResourceUrn> deltaFileAdded(FileReference file, Name module, Name providingModule) {
logger.info("Delta File added: {}:{} by {}", module, file, providingModule);
return Optional.empty();
}
@Override
public Optional<ResourceUrn> deltaFileModified(FileReference file, Name module, Name providingModule) {
logger.info("Delta File modified: {}:{} by {}", module, file, providingModule);
return Optional.empty();
}
@Override
public Optional<ResourceUrn> deltaFileDeleted(FileReference file, Name module, Name providingModule) {
logger.info("Delta File deleted: {}:{} by {}", module, file, providingModule);
return Optional.empty();
}
};
AssetType<Text, TextData> assetType = new AssetType<>(Text.class, new TextFactory());
watcher.register("text", subscriber, assetType);
watcher.checkForChanges();
Files.createDirectories(tempDirectory.resolve("assets").resolve("text"));
watcher.checkForChanges();
Files.createFile(tempDirectory.resolve("assets").resolve("text").resolve("test.txt"));
SetMultimap<AssetType<?, ?>, ResourceUrn> changed = watcher.checkForChanges();
assertTrue(changed.containsEntry(assetType, new ResourceUrn(module.getId(), new Name("test.txt"))));
try (Writer writer = Files.newBufferedWriter(tempDirectory.resolve("assets").resolve("text").resolve("test.txt"))) {
writer.write("This is my text");
}
changed = watcher.checkForChanges();
assertTrue(changed.containsEntry(assetType, new ResourceUrn(module.getId(), new Name("test.txt"))));
FilesUtil.recursiveDelete(tempDirectory);
watcher.checkForChanges();
}
}