Add unit tests of method sorting

This commit is contained in:
Robert
2024-02-20 16:07:03 +00:00
parent 70a64886d6
commit 95fd015414

View File

@@ -0,0 +1,136 @@
import type { Method } from "../../../../src/model-editor/method";
import type { ModeledMethod } from "../../../../src/model-editor/modeled-method";
import { sortMethods } from "../../../../src/model-editor/shared/sorting";
import {
createMethod,
createUsage,
} from "../../../factories/model-editor/method-factories";
import { createSinkModeledMethod } from "../../../factories/model-editor/modeled-method-factories";
import { shuffle } from "../../../vscode-tests/utils/list-helpers";
describe("sortMethods", () => {
it("uses primary sort order", () => {
const unsavedPositiveAutoModelPrediction = createMethod({
signature: "org.sql2o.Sql2o#open1()",
});
const negativeAutoModelPrediction = createMethod({
signature: "org.sql2o.Sql2o#open2()",
});
const unsavedManualModel = createMethod({
signature: "org.sql2o.Sql2o#open3()",
});
const unmodeledMethod = createMethod({
signature: "org.sql2o.Sql2o#open4()",
});
const savedAutoModelPrediction = createMethod({
signature: "org.sql2o.Sql2o#open5()",
});
const savedManualModel = createMethod({
signature: "org.sql2o.Sql2o#open6()",
});
const methods: Method[] = shuffle([
unsavedPositiveAutoModelPrediction,
negativeAutoModelPrediction,
unsavedManualModel,
unmodeledMethod,
savedAutoModelPrediction,
savedManualModel,
]);
const modeledMethodsMap: Record<string, readonly ModeledMethod[]> = {};
modeledMethodsMap[unsavedPositiveAutoModelPrediction.signature] = [
createSinkModeledMethod(),
];
modeledMethodsMap[unsavedManualModel.signature] = [
createSinkModeledMethod(),
];
modeledMethodsMap[savedAutoModelPrediction.signature] = [
createSinkModeledMethod(),
];
modeledMethodsMap[savedManualModel.signature] = [createSinkModeledMethod()];
const modifiedSignatures: Set<string> = new Set([
unsavedPositiveAutoModelPrediction.signature,
unsavedManualModel.signature,
]);
const processedByAutoModelMethods: Set<string> = new Set([
unsavedPositiveAutoModelPrediction.signature,
negativeAutoModelPrediction.signature,
savedAutoModelPrediction.signature,
]);
expect(
sortMethods(
methods,
modeledMethodsMap,
modifiedSignatures,
processedByAutoModelMethods,
),
).toEqual([
unsavedPositiveAutoModelPrediction,
negativeAutoModelPrediction,
unsavedManualModel,
unmodeledMethod,
savedAutoModelPrediction,
savedManualModel,
]);
});
it("uses secondary sort order based on usages and signature", () => {
const negativeAutoModelPrediction = createMethod({
signature: "org.sql2o.Sql2o#negative()",
usages: [],
});
const unmodeledMethodWithTwoUsages = createMethod({
signature: "org.sql2o.Sql2o#two()",
usages: [createUsage(), createUsage()],
});
const unmodeledMethodWithOneUsage = createMethod({
signature: "org.sql2o.Sql2o#one()",
usages: [createUsage()],
});
const unmodeledMethodWithEarlierSignature = createMethod({
signature: "org.sql2o.Sql2o#aaa()",
usages: [],
});
const unmodeledMethodWithLaterSignature = createMethod({
signature: "org.sql2o.Sql2o#bbb()",
usages: [],
});
const methods: Method[] = shuffle([
negativeAutoModelPrediction,
unmodeledMethodWithTwoUsages,
unmodeledMethodWithOneUsage,
unmodeledMethodWithEarlierSignature,
unmodeledMethodWithLaterSignature,
]);
const modeledMethodsMap: Record<string, readonly ModeledMethod[]> = {};
const modifiedSignatures: Set<string> = new Set([]);
const processedByAutoModelMethods: Set<string> = new Set([
negativeAutoModelPrediction.signature,
]);
expect(
sortMethods(
methods,
modeledMethodsMap,
modifiedSignatures,
processedByAutoModelMethods,
),
).toEqual([
negativeAutoModelPrediction,
unmodeledMethodWithTwoUsages,
unmodeledMethodWithOneUsage,
unmodeledMethodWithEarlierSignature,
unmodeledMethodWithLaterSignature,
]);
});
});