mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-14 11:37:31 +08:00
The PRIVATE_ITEMS list contained the bare 'test' entry, which rsync interprets as 'any directory named test at any depth' — so it caught the root-level /test/ scratch directory (intended) AND every src/test/ under each module (not intended). Pattern is already anchored to /test (root-only). This commit rsyncs the accumulated src/test/ tree forward so opensource has the unit tests that have been written / updated against existing src/main/ code since the pattern regression. Going forward each per-commit sync will carry src/test/ files along with the main change.
81 lines
2.7 KiB
Java
81 lines
2.7 KiB
Java
package vip.mate.i18n;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.ai.chat.model.ToolContext;
|
|
import org.springframework.ai.tool.ToolCallback;
|
|
import org.springframework.ai.tool.definition.ToolDefinition;
|
|
import org.springframework.ai.tool.metadata.ToolMetadata;
|
|
|
|
import java.util.Map;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
/**
|
|
* RFC-063r §2.3 (P0): regression guard — {@link LocaleAwareToolCallback} must
|
|
* forward both the input string and the ToolContext to the wrapped callback.
|
|
* Pre-fix this class only overrode {@code call(String)}, silently dropping the
|
|
* context (and thus ChatOrigin) for every builtin tool.
|
|
*/
|
|
class LocaleAwareToolCallbackToolContextTest {
|
|
|
|
@Test
|
|
void callWithToolContext_forwardsToDelegate() {
|
|
RecordingDelegate delegate = new RecordingDelegate();
|
|
LocaleAwareToolCallback decorator =
|
|
new LocaleAwareToolCallback(delegate, "本地化描述");
|
|
|
|
ToolContext ctx = new ToolContext(Map.of("k", "v"));
|
|
String out = decorator.call("{\"x\":1}", ctx);
|
|
|
|
assertEquals("ok", out);
|
|
assertEquals("{\"x\":1}", delegate.lastInput);
|
|
assertSame(ctx, delegate.lastContext,
|
|
"ToolContext must reach the underlying tool unchanged");
|
|
}
|
|
|
|
@Test
|
|
void getToolMetadata_isForwardedSoReturnDirectIsPreserved() {
|
|
ToolMetadata directMetadata = ToolMetadata.builder().returnDirect(true).build();
|
|
RecordingDelegate delegate = new RecordingDelegate();
|
|
delegate.metadata = directMetadata;
|
|
|
|
LocaleAwareToolCallback decorator = new LocaleAwareToolCallback(delegate, "本地化描述");
|
|
assertSame(directMetadata, decorator.getToolMetadata(),
|
|
"decorator must not flip returnDirect by inheriting the framework default");
|
|
}
|
|
|
|
private static final class RecordingDelegate implements ToolCallback {
|
|
String lastInput;
|
|
ToolContext lastContext;
|
|
ToolMetadata metadata = ToolMetadata.builder().build();
|
|
|
|
@Override
|
|
public ToolDefinition getToolDefinition() {
|
|
return ToolDefinition.builder()
|
|
.name("recording-tool")
|
|
.description("...")
|
|
.inputSchema("{}")
|
|
.build();
|
|
}
|
|
|
|
@Override
|
|
public ToolMetadata getToolMetadata() {
|
|
return metadata;
|
|
}
|
|
|
|
@Override
|
|
public String call(String toolInput) {
|
|
this.lastInput = toolInput;
|
|
this.lastContext = null;
|
|
return "ok";
|
|
}
|
|
|
|
@Override
|
|
public String call(String toolInput, ToolContext toolContext) {
|
|
this.lastInput = toolInput;
|
|
this.lastContext = toolContext;
|
|
return "ok";
|
|
}
|
|
}
|
|
}
|