Editor, formatting, checklists, saving and titles
The note editor (EditorSession/EditorEngine in the shared core, EditText on Android, UITextView on iOS), autosave and note titles. Decisions: D-08, D-12, D-14, D-22, D-23, D-28, D-30.
Formatting and structure
- Bold on a selection
- Shared:
EditorSessionTest.boldSelection - Android UI:
NoteEditingUiTest.formattingToolShowsItsState - iOS UI:
NoteEditingUITests.FormattingToolShowsItsState
- Shared:
- Bold with nothing selected applies to what’s typed next
- Shared:
EditorSessionTest.boldWithEmptySelectionAppliesToTypedText - Not tested: Android UI, iOS UI
- Shared:
- Typing inside or right after styled text keeps the style
- Shared:
EditorSessionTest.typingInsideAndAfterStyledTextInheritsStyle - Not tested: Android UI, iOS UI
- Shared:
- Italic, strikethrough, inline code
- Shared:
EditorSessionTest.inlineCodeStrikeItalic - Not tested: Android UI, iOS UI
- Shared:
- The formatting tool shows which styles are on
- Android UI:
NoteEditingUiTest.formattingToolShowsItsState - iOS UI:
NoteEditingUITests.FormattingToolShowsItsState - Not tested: Shared
- Android UI:
- Heading levels cycle; Enter after a heading starts a paragraph; Enter at its start keeps it
- Shared:
EditorSessionTest.headingCycles,EditorSessionTest.enterAfterHeadingStartsParagraph,EditorSessionTest.enterAtStartOfHeadingKeepsHeading - Not tested: Android UI, iOS UI
- Shared:
- Numbered and bulleted lists, quotes, code blocks
- Shared:
EditorSessionTest.numberedAndBulletAndQuoteAndCodeBlock - Not tested: Android UI, iOS UI
- Shared:
- Backspace at the start of a list item removes the list formatting
- Shared:
EditorSessionTest.backspaceAtListStartRemovesListFormatting - Not tested: Android UI, iOS UI
- Shared:
- Pasting several lines makes several paragraphs
- Shared:
EditorSessionTest.multiLinePasteSplitsParagraphs - Not tested: Android UI, iOS UI
- Shared:
- Deleting across paragraphs merges them and keeps the first one’s block type
- Shared:
EditorSessionTest.deletingAcrossParagraphsMergesAndKeepsFirstBlock - Not tested: Android UI, iOS UI
- Shared:
- Undo and redo
- Shared:
EditorSessionTest.undoRedo - Android UI:
NoteEditingUiTest.undoRemovesTyping - iOS UI:
NoteEditingUITests.UndoRemovesTyping
- Shared:
Checklists
- Inserting a checklist; Enter continues it
- Shared:
EditorSessionTest.checklistInsertionAndContinuation - Android UI:
NoteEditingUiTest.checklistContinuesOnEnter - iOS UI:
NoteEditingUITests.ChecklistContinuesOnReturn
- Shared:
- Ticking a task changes only its checked state
- Shared:
EditorSessionTest.toggleTaskChangesOnlyCheckedState - Not tested: Android UI, iOS UI
- Shared:
- Indenting makes nested tasks
- Shared:
EditorSessionTest.nestedTasksViaIndent - Not tested: Android UI, iOS UI
- Shared:
- Ticking in the read view saves a TASK_TOGGLE revision and rejects a stale version
- Shared:
NotesCoreTest.taskToggleCreatesRevisionAndRejectsStaleState - Android UI:
NoteEditingUiTest.checklistCanBeTickedInTheReadView - iOS UI:
NoteEditingUITests.ChecklistCanBeTickedInTheReadView
- Shared:
- Task items and completed counts come from the Markdown
- Shared:
MarkdownCodecTest.derivesTaskItems,NotesCoreTest.taskToggleCreatesRevisionAndRejectsStaleState - Not tested: Android UI, iOS UI
- Shared:
Saving
- A new note opens straight in the editor
- Android UI:
NoteEditingUiTest.newNoteOpensStraightInTheEditor - iOS UI:
NoteEditingUITests.NewNoteOpensStraightInTheEditor - Not tested: Shared
- Android UI:
- A written note is saved and shows in the list
- Android UI:
NoteEditingUiTest.writtenNoteIsSavedAndListed - iOS UI:
NoteEditingUITests.WrittenNoteIsSavedAndListed - Not tested: Shared
- Android UI:
- An empty new note is discarded on leaving; one that ever had content is kept
- Shared:
NotesCoreTest.discardIfEmptyRemovesOnlyNotesThatNeverHeldContent - Android UI:
NoteEditingUiTest.emptyNewNoteIsDiscardedOnLeaving - iOS UI:
NoteEditingUITests.EmptyNewNoteIsDiscardedOnLeaving
- Shared:
- Saves once 35 characters have been typed (D-14)
- Android UI:
NoteEditingUiTest.savesOnceThirtyFiveCharactersAreTyped - iOS UI:
NoteEditingUITests.SavesOnceThirtyFiveCharactersAreTyped - Not tested: Shared
- Android UI:
- Each real change makes a revision; saving the same content doesn’t
- Shared:
NotesCoreTest.everySaveCreatesRevisionButNoOpSaveDoesNot - Not tested: Android UI, iOS UI
- Shared:
- Saves within a minute of each other keep only the latest version
- Shared:
NotesCoreTest.savesWithinAMinuteKeepOnlyTheLatestVersion - Not tested: Android UI, iOS UI
- Shared:
- Word and character counts follow typing
- Android UI:
NoteEditingUiTest.wordAndCharacterCountsFollowTyping - iOS UI:
NoteEditingUITests.WordAndCharacterCountsFollowTyping - Not tested: Shared
- Android UI:
Titles
- The title follows the first line until set by hand; clearing it makes it automatic again
- Shared:
OrganizingTest.automaticTitlesFollowTheFirstLineUntilSetByHand - Android UI:
NoteEditingUiTest.titleIsTheFirstLineUntilRenamed - iOS UI:
NoteEditingUITests.TitleIsTheFirstLineUntilRenamed
- Shared:
- A generated title is applied once, then kept
- Shared:
OrganizingTest.aGeneratedTitleIsAppliedOnceAndThenKept - Not tested: Android UI, iOS UI
- Shared:
- A generated title the user asks for replaces a hand-set title
- Shared:
OrganizingTest.aRequestedGeneratedTitleReplacesAHandSetTitle - Not tested: Android UI, iOS UI
- Shared:
- The displayed title falls back to the first line, then “Untitled”
- Shared:
DomainSupportTest.displayTitleFallsBackToFirstLine - Not tested: Android UI, iOS UI
- Shared:
Gaps
- Headings, lists, quotes, code blocks, italic and strikethrough are tested only in the shared session, never through the real
EditText/UITextViewand the toolbar. - The 10-second autosave (D-14) is untested; only the 35-character trigger is.
- Saving when the app goes to the background is untested on both platforms.
- Generated titles: the platform
TitleGenerator(Gemini Nano on Android, Apple Foundation Models on iOS) has no tests; only the core rules for applying a generated title do.docs/pending.mdnotes Android generation hasn’t been tried on a device with the model. - Paste on a device (rich or multi-line text from another app) is untested; only the shared paragraph split is.