From 1a2d6f25bedf0e5fc418145dfe434c6223014ee1 Mon Sep 17 00:00:00 2001 From: Aki Chang Date: Mon, 14 Apr 2025 17:19:14 +0800 Subject: [PATCH 1/2] fix(android): nbstore laod error (#11674) --- packages/frontend/apps/android/src/app.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/apps/android/src/app.tsx b/packages/frontend/apps/android/src/app.tsx index f50f24ba99..39efbd20ff 100644 --- a/packages/frontend/apps/android/src/app.tsx +++ b/packages/frontend/apps/android/src/app.tsx @@ -356,7 +356,7 @@ export function App() { } function createStoreManagerClient() { - const worker = new Worker(getWorkerUrl('nbstore.worker.js')); + const worker = new Worker(getWorkerUrl('nbstore')); const { port1: nativeDBApiChannelServer, port2: nativeDBApiChannelClient } = new MessageChannel(); AsyncCall(NbStoreNativeDBApis, { From b8967a8a7b3b9b8ac091b02945c74ce8f72a66d4 Mon Sep 17 00:00:00 2001 From: doodlewind <7312949+doodlewind@users.noreply.github.com> Date: Mon, 14 Apr 2025 15:54:02 +0000 Subject: [PATCH 2/2] test(editor): add tests for turbo renderer state machine (#11659) --- .../gfx/turbo-renderer/src/turbo-renderer.ts | 4 ++ blocksuite/integration-test/README.md | 27 +++++++++++++ .../edgeless/viewport-renderer.spec.ts | 39 ++++++++++++++++++- .../src/__tests__/utils/setup.ts | 25 +++++++----- blocksuite/integration-test/vitest.config.ts | 3 +- 5 files changed, 86 insertions(+), 12 deletions(-) diff --git a/blocksuite/affine/gfx/turbo-renderer/src/turbo-renderer.ts b/blocksuite/affine/gfx/turbo-renderer/src/turbo-renderer.ts index ddf652a47a..b92c405d79 100644 --- a/blocksuite/affine/gfx/turbo-renderer/src/turbo-renderer.ts +++ b/blocksuite/affine/gfx/turbo-renderer/src/turbo-renderer.ts @@ -83,6 +83,10 @@ export class ViewportTurboRendererExtension extends GfxExtension { private viewportElement: GfxViewportElement | null = null; private readonly refresh$ = new Subject(); + public get currentState(): RenderingState { + return this.state$.value; + } + constructor(gfx: GfxController) { super(gfx); diff --git a/blocksuite/integration-test/README.md b/blocksuite/integration-test/README.md index 2412e12fd9..cc84a51cd8 100644 --- a/blocksuite/integration-test/README.md +++ b/blocksuite/integration-test/README.md @@ -1,3 +1,30 @@ # `@blocksuite/integration-test` Integration test for BlockSuite. + +## Running Tests + +You can run all integration tests using: + +```bash +cd blocksuite/integration-test +yarn test:unit +``` + +To run a specific test or test file, use the `-t` flag with a test name pattern: + +```bash +# Run a specific test +yarn test:unit -t "should access turbo renderer instance" + +# Run all tests in a specific file +yarn test:unit src/__tests__/edgeless/viewport-renderer.spec.ts +``` + +For debugging tests with the Playwright debugger: + +```bash +yarn test:debug + +yarn test:debug -t "should access turbo renderer instance" +``` diff --git a/blocksuite/integration-test/src/__tests__/edgeless/viewport-renderer.spec.ts b/blocksuite/integration-test/src/__tests__/edgeless/viewport-renderer.spec.ts index 52613603b6..b567fbd183 100644 --- a/blocksuite/integration-test/src/__tests__/edgeless/viewport-renderer.spec.ts +++ b/blocksuite/integration-test/src/__tests__/edgeless/viewport-renderer.spec.ts @@ -1,3 +1,6 @@ +/** + * Please refer to integration-test/README.md for commands to run tests. + */ import { ParagraphLayoutHandlerExtension } from '@blocksuite/affine/blocks/paragraph'; import { TurboRendererConfigFactory, @@ -7,7 +10,11 @@ import { beforeEach, describe, expect, test } from 'vitest'; import { wait } from '../utils/common.js'; import { addSampleNotes } from '../utils/doc-generator.js'; -import { createPainterWorker, setupEditor } from '../utils/setup.js'; +import { + createPainterWorker, + getRenderer, + setupEditor, +} from '../utils/setup.js'; describe('viewport turbo renderer', () => { beforeEach(async () => { @@ -28,4 +35,34 @@ describe('viewport turbo renderer', () => { const notes = document.querySelectorAll('affine-edgeless-note'); expect(notes.length).toBe(6); }); + + test('should access turbo renderer instance', async () => { + const renderer = getRenderer(); + expect(renderer instanceof ViewportTurboRendererExtension).toBe(true); + expect(renderer.canvas).toBeInstanceOf(HTMLCanvasElement); + }); + + test('initial state should be pending', async () => { + const renderer = getRenderer(); + expect(renderer.currentState).toBe('pending'); + }); + + test('zooming should change state to zooming', async () => { + const renderer = getRenderer(); + renderer.viewport.zooming$.next(true); + await wait(); + expect(renderer.currentState).toBe('zooming'); + renderer.viewport.zooming$.next(false); + await wait(); + expect(renderer.currentState).not.toBe('zooming'); + }); + + test('state should become ready after rendering', async () => { + addSampleNotes(doc, 1); + await wait(100); + const renderer = getRenderer(); + renderer.viewport.zooming$.next(false); + await wait(renderer.options.debounceTime + 1000); + expect(renderer.currentState).toBe('ready'); + }); }); diff --git a/blocksuite/integration-test/src/__tests__/utils/setup.ts b/blocksuite/integration-test/src/__tests__/utils/setup.ts index f24a8e19de..cfc27eaee0 100644 --- a/blocksuite/integration-test/src/__tests__/utils/setup.ts +++ b/blocksuite/integration-test/src/__tests__/utils/setup.ts @@ -8,29 +8,36 @@ import { registerStoreSpecs, StoreExtensions, } from '@blocksuite/affine/extensions'; -import type { ExtensionType, Store, Transformer } from '@blocksuite/store'; - -import { effects } from '../../effects.js'; - -registerStoreSpecs(); -blocksEffects(); -effects(); - import type { DocMode } from '@blocksuite/affine/model'; import { AffineSchemas } from '@blocksuite/affine/schemas'; import { CommunityCanvasTextFonts, FontConfigExtension, } from '@blocksuite/affine/shared/services'; -import type { ViewportTurboRendererExtension } from '@blocksuite/affine-gfx-turbo-renderer'; +import { + type ViewportTurboRendererExtension, + ViewportTurboRendererIdentifier, +} from '@blocksuite/affine-gfx-turbo-renderer'; +import type { ExtensionType, Store, Transformer } from '@blocksuite/store'; import { Schema, Text } from '@blocksuite/store'; import { createAutoIncrementIdGenerator, TestWorkspace, } from '@blocksuite/store/test'; +import { effects } from '../../effects.js'; import { TestAffineEditorContainer } from '../../index.js'; +registerStoreSpecs(); +blocksEffects(); +effects(); + +export function getRenderer() { + return editor.std.get( + ViewportTurboRendererIdentifier + ) as ViewportTurboRendererExtension; +} + function createCollectionOptions() { const schema = new Schema(); const room = Math.random().toString(16).slice(2, 8); diff --git a/blocksuite/integration-test/vitest.config.ts b/blocksuite/integration-test/vitest.config.ts index 70cf1ce8c3..6676266232 100644 --- a/blocksuite/integration-test/vitest.config.ts +++ b/blocksuite/integration-test/vitest.config.ts @@ -18,10 +18,9 @@ export default defineConfig(_configEnv => browser: { enabled: true, headless: process.env.CI === 'true', - name: 'chromium', + instances: [{ browser: 'chromium' }], provider: 'playwright', isolate: false, - providerOptions: {}, viewport: { width: 1024, height: 768,