← Files Biological Sequence & Alignment ViewerARCHIVED FILE
src/biological-sequence-viewer-model.test.ts
3.31 KB · Sep 30, 2026 · 23:01 UTC
import { describe, expect, it } from "vitest";
import { createBiologicalSequenceViewerModel } from "./biological-sequence-viewer-model";
describe("createBiologicalSequenceViewerModel", () => {
it("offers sequence and alignment modes for likely aligned FASTA", () => {
const model = createBiologicalSequenceViewerModel({
contents: ">a\nAC-GT\n>b\nACTGT\n",
fileName: "family.fasta",
});
expect(model.availableModes).toEqual(["sequence", "alignment"]);
expect(model.defaultMode).toBe("alignment");
expect(model.sequenceDocument?.records[0]?.sequence).toBe("AC-GT");
});
it("defaults larger equal-width ungapped FASTA matrices to alignment", () => {
const model = createBiologicalSequenceViewerModel({
contents: ">a\nACGT\n>b\nTGCA\n>c\nAGCT\n",
fileName: "family.fasta",
});
expect(model.availableModes).toEqual(["sequence", "alignment"]);
expect(model.defaultMode).toBe("alignment");
});
it("defaults explicit A3M alignments to alignment even when raw row widths differ", () => {
const model = createBiologicalSequenceViewerModel({
contents: ">query\nACde-FG\n>hit\nAC--FG\n",
fileName: "protein-profile.a3m",
});
expect(model.availableModes).toEqual(["sequence", "alignment"]);
expect(model.defaultMode).toBe("alignment");
});
it("opens genuine unequal-width HLA PIR records only in usable Sequence mode", () => {
// Public Biopython c9489604d1d9607602ca9199a3852c1219ed330f,
// Tests/NBRF/DMB_prot.pir, complete HLA00490/HLA00492 entries.
const model = createBiologicalSequenceViewerModel({
contents: [
">P1;HLA:HLA00490",
"HLA:HLA00490 DMB*0102, 94 bases, 73D5CC44 checksum.",
" PPSVQVAKTT PFNTREPVML ACYVWGFYPA EVTITWRKNG KLVMPHSSEH",
" KTAQPNGDWT YQTLSHLALT PSYGDTYTCV VEHIGAPEPI LRDW*",
">P1;HLA:HLA00492",
"HLA:HLA00492 DMB*0104, 80 bases, 453718BE checksum.",
" KTTPFNTREP VMLACYVWGF YPAEVTITWR KNGKLVMPHS SVHKTAQPNG",
" DWTYQTLSHL ALTPSYGDTY TCVVEHTGAP*",
].join("\n"),
fileName: "DMB_prot.pir",
});
expect(model.classification.molecule).toBe("protein");
expect(model.sequenceDocument?.records.map(({ length }) => length)).toEqual([
94, 80,
]);
expect(model.alignmentAvailable).toBe(false);
expect(model.availableModes).toEqual(["sequence"]);
expect(model.defaultMode).toBe("sequence");
});
it("preserves Alignment mode for genuinely rectangular PIR records", () => {
const model = createBiologicalSequenceViewerModel({
contents: [
">P1;alpha",
"Alpha protein",
"AC-G*",
">P1;beta",
"Beta protein",
"ACAG*",
].join("\n"),
fileName: "aligned-family.pir",
});
expect(model.alignmentAvailable).toBe(true);
expect(model.availableModes).toEqual(["sequence", "alignment"]);
expect(model.defaultMode).toBe("alignment");
});
it("makes explicit non-FASTA alignments toggleable without eagerly parsing them on load", () => {
const model = createBiologicalSequenceViewerModel({
contents: "CLUSTAL W\n\nseq1 AC-GT\nseq2 ACTGT\n",
fileName: "family.aln",
});
expect(model.availableModes).toEqual(["sequence", "alignment"]);
expect(model.defaultMode).toBe("alignment");
expect(model.sequenceDocument).toBeNull();
});
});
SHA-256: 2d02984ebc4fdaedf9f4aacae282088b372c60a6bdcb69a474ad94fa3986648c