Skip to content

Commit

Permalink
added an integration test for the scenario in question
Browse files Browse the repository at this point in the history
  • Loading branch information
pjkaufman committed Jun 1, 2024
1 parent cfe8d18 commit 0675b15
Show file tree
Hide file tree
Showing 2 changed files with 185 additions and 6 deletions.
138 changes: 132 additions & 6 deletions __integration__/obsidian-mode.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ import TestLinterPlugin, {IntegrationTestCase} from './main.test';
import {Editor} from 'obsidian';
import expect from 'expect';
import {setWorkspaceItemMode} from './utils.test';
import {moment} from 'obsidian';

const cursorStart = 319;

function commonSetup(plugin: TestLinterPlugin, editor: Editor) {
function modeSetup(plugin: TestLinterPlugin, editor: Editor) {
plugin.plugin.settings.ruleConfigs['yaml-key-sort'] = {
'enabled': true,
'yaml-key-priority-sort-order': '',
Expand All @@ -17,7 +18,7 @@ function commonSetup(plugin: TestLinterPlugin, editor: Editor) {
editor.setCursor(editor.offsetToPos(cursorStart));
}

function assertions(editor: Editor) {
function modeAssertions(editor: Editor) {
expect(editor.getValue()).toBe(dedent`
---
author:
Expand Down Expand Up @@ -54,20 +55,145 @@ function assertions(editor: Editor) {
expect(editor.posToOffset(editor.getCursor())).toBe(cursorStart+1);
}

function edgeCaseSetup(plugin: TestLinterPlugin, _: Editor) {
plugin.plugin.settings.ruleConfigs['yaml-timestamp'] = {
'enabled': true,
'date-created': true,
'date-created-key': 'created',
'force-retention-of-create-value': true,
'date-modified': true,
'date-modified-key': 'last_modified',
'format': 'YYYY-MM-DD',
};
plugin.plugin.settings.ruleConfigs['proper-ellipsis'] = {
'enabled': true,
};
plugin.plugin.settings.ruleConfigs['consecutive-blank-lines'] = {
'enabled': true,
};
plugin.plugin.settings.ruleConfigs['convert-spaces-to-tabs'] = {
'enabled': true,
'tabsize': '4',
};
plugin.plugin.settings.ruleConfigs['heading-blank-lines'] = {
'enabled': true,
'bottom': true,
'empty-line-after-yaml': false,
};
plugin.plugin.settings.ruleConfigs['paragraph-blank-lines'] = {
'enabled': true,
};
plugin.plugin.settings.ruleConfigs['space-after-list-markers'] = {
'enabled': true,
};
plugin.plugin.settings.ruleConfigs['trailing-spaces'] = {
'enabled': true,
'twp-space-line-break': false,
};
plugin.plugin.settings.ruleConfigs['convert-bullet-list-markers'] = {
'enabled': true,
};
plugin.plugin.settings.ruleConfigs['remove-empty-lines-between-list-markers-and-checklists'] = {
'enabled': true,
};
plugin.plugin.settings.ruleConfigs['no-bare-urls'] = {
'enabled': true,
};
plugin.plugin.settings.ruleConfigs['emphasis-style'] = {
'enabled': true,
'style': 'asterisk',
};
}

function edgeCaseAssertions(editor: Editor) {
expect(editor.getValue()).toBe(dedent`
---
aliases:
- test
tags:
- test1
- test2
related:
- "[[test]]"
- "[[test 2]]"
date: 2024-05-22
class: "[[test]]"
instructor: "[[test]]"
readings:
- "[[test]]"
- "[[test 2#1.1 test chapter]]"
${''}
created: ${moment().format('YYYY-MM-DD')}
last_modified: ${moment().format('YYYY-MM-DD')}
---
${''}
- Focus on XYZ.
${''}
# I. Test:
${''}
## (Document A, paras [para 2] – [para 8], [para 13] – [para 24]; Document B, para. [3])
${''}
### a. test (*Document A, para. [para 2])*?
${''}
Lorem ipsum dolor:
${''}
- **test**: **X** v. **Y** *(the allies)* with support from **Y**
${''}
\t- Lorem ipsum dolor sit amet + consectetur adipiscing elit. Morbi vel ipsum ipsum
- More info ([test](https://www.example.org)):
${''}
\t- „quote […] quote.”
${''}
\t- “quote.”
${''}
\t- “quote.”
${''}
- **test**: X v Y
${''}
- **test:** X v Y
${''}
- (Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel ipsum ipsum.)
${''}
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel ipsum ipsum. (Document A, para. [2])?
${''}
\t- Document A [para 2]: “Lorem [ipsum] dolor sit amet, consectetur adipiscing elit.’,”
\t- *Ut purus est, laoreet non massa id*, *placerat mollis elit*.
${''}
\t\t- test
${''}
\t\t- More on this
`);
}

export const obsidianModeTestCases: IntegrationTestCase[] = [
{
name: 'Updating YAML in live preview mode does not break YAML and keeps cursor at the expected location',
filePath: 'obsidian-mode/mode-yaml.md',
async setup(plugin: TestLinterPlugin, editor: Editor) {
commonSetup(plugin, editor),
modeSetup(plugin, editor),
await setWorkspaceItemMode(plugin.app, false);
},
assertions,
assertions: modeAssertions,
},
{
name: 'Updating YAML in source mode does not break YAML and keeps cursor at the expected location',
filePath: 'obsidian-mode/mode-yaml.md',
setup: commonSetup,
assertions,
setup: modeSetup,
assertions: modeAssertions,
},
{
name: 'Updating YAML in live preview mode does not break YAML when an update is being made to the end of the frontmatter',
filePath: 'obsidian-mode/edge-case-yaml.md',
async setup(plugin: TestLinterPlugin, editor: Editor) {
edgeCaseSetup(plugin, editor),
await setWorkspaceItemMode(plugin.app, false);
},
assertions: edgeCaseAssertions,
},
{
name: 'Updating YAML in source mode does not break YAML when an update is being made to the end of the frontmatter',
filePath: 'obsidian-mode/edge-case-yaml.md',
setup: edgeCaseSetup,
assertions: edgeCaseAssertions,
},
];
53 changes: 53 additions & 0 deletions test-vault/obsidian-mode/edge-case-yaml.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
aliases:
- test
tags:
- test1
- test2
related:
- "[[test]]"
- "[[test 2]]"
date: 2024-05-22
class: "[[test]]"
instructor: "[[test]]"
readings:
- "[[test]]"
- "[[test 2#1.1 test chapter]]"

---

- Focus on XYZ.

# I. Test:

## (Document A, paras [para 2][para 8], [para 13][para 24]; Document B, para. [3])

### a. test (_Document A, para. [para 2])_?

Lorem ipsum dolor:

- **test**: **X** v. **Y** _(the allies)_ with support from **Y**

- Lorem ipsum dolor sit amet + consectetur adipiscing elit. Morbi vel ipsum ipsum
- More info ([test](https://www.example.org)):

- „quote [] quote.”

- “quote.”

- “quote.”

- **test**: X v Y

- **test:** X v Y

- (Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel ipsum ipsum.)

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel ipsum ipsum. (Document A, para. [2])?

- Document A [para 2]: “Lorem [ipsum] dolor sit amet, consectetur adipiscing elit.’,”
- *Ut purus est, laoreet non massa id*, *placerat mollis elit*.

- test

- More on this

0 comments on commit 0675b15

Please sign in to comment.