pMovidea作った
最近Movideaの開発がこのページみたいに日記スタイルなんだけどpRegroupやpKeichoみたいにやらないのは「構造が事後的に発生するのでは」というような気持ちなのです
不安なことは早く試す原則からすると、DOMに対して範囲選択するのを次は試すべき
コンテンツの更新がないのにバウンディングボックスを再計算するの無駄な気がするけど、バウンディングボックスの値をキャッシュして適切に再計算するのも「余計な状態の導入」だから、まずは素朴に計算してテストでカバーしてから、計測して遅かった場合だけキャッシュする仕組みを入れるべきだろうなぁ
できた。
テストケースを作る
test.ts
cy.get("#canvas").trigger("mousedown", 150, 150);
cy.get("#canvas").trigger("mouseup", 450, 450);
cy.movidea((m) => {
cy.wrap(m.getGlobal().selected_items).should("to.deep.equal", [
"0,0",
"0,1",
"1,0",
"1,1",
]);
});
cy.get("#canvas").trigger("mousedown", 250, 250);
cy.get("#canvas").trigger("mouseup", 150, 150);
cy.movidea((m) => {
cy.wrap(m.getGlobal().selected_items).should("to.deep.equal", ["0,0"]);
});
cy.movidea((m) => {cy.wrap(m.getGlobal().selected_items).should("to.deep.equal"までカスタムコマンドにできないか?
to.deep.equal は to.eqlでいいみたいだindex.ts
Cypress.Commands.add("getGlobal", (callback: (g: State) => unknown) => {
return cy.movidea((movidea) => {
return cy.wrap(callback(movidea.getGlobal()));
});
});
test.ts
cy.get("#canvas").trigger("mousedown", 250, 250);
cy.get("#canvas").trigger("mouseup", 150, 150);
cy.getGlobal((g) => g.selected_items).should("to.eql", ["0,0"]);
まあこんなものかな
選択範囲の移動、できる?
選択範囲でのマウスダウンか、選択完了かのどちらかのタイミングで選択されたもののDOMを選択範囲divにいれる