2020-09-20 09:16:08 +00:00
|
|
|
const fs = require('fs')
|
|
|
|
jest.mock('fs')
|
|
|
|
|
2020-09-13 19:28:38 +00:00
|
|
|
const writePages = require('./write-pages')
|
2021-04-04 14:34:17 +00:00
|
|
|
require('./handlebars-helpers')
|
2020-09-20 09:16:08 +00:00
|
|
|
|
2020-09-13 13:24:51 +00:00
|
|
|
const templatesPath = 'templates'
|
|
|
|
const destinationPath = 'dist'
|
2020-09-20 09:16:08 +00:00
|
|
|
|
2020-09-13 19:28:38 +00:00
|
|
|
describe('write-pages', () => {
|
2020-09-20 09:16:08 +00:00
|
|
|
afterEach(() => {
|
|
|
|
jest.clearAllMocks()
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('one category, one page', () => {
|
|
|
|
describe('with text example', () => {
|
2021-04-06 05:36:44 +00:00
|
|
|
describe('with special chars key and values', () => {
|
2020-09-20 09:16:08 +00:00
|
|
|
beforeEach(() =>
|
2020-09-13 19:28:38 +00:00
|
|
|
callWritePages({
|
2020-09-20 09:16:08 +00:00
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category',
|
|
|
|
name: 'Category',
|
2021-04-04 14:34:17 +00:00
|
|
|
description: 'This is a description of the category. It can contain "quotes" and markdown.\n\n- a list item',
|
2020-09-20 09:16:08 +00:00
|
|
|
keys: [
|
|
|
|
{
|
2021-04-06 05:36:44 +00:00
|
|
|
key: 'a page',
|
2020-09-20 09:16:08 +00:00
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page',
|
2021-04-04 14:34:17 +00:00
|
|
|
description: 'This is a description of the page. It can contain "quotes" and markdown.\n\n- a list item',
|
2020-09-20 09:16:08 +00:00
|
|
|
param: { type: 'bool' },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: '~/Desktop',
|
|
|
|
default: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is ~/Desktop',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
2022-08-18 17:27:46 +00:00
|
|
|
value: '"EEE d MMM HH:mm:ss"',
|
|
|
|
text: 'output when value is "EEE d MMM HH:mm:ss"',
|
2020-11-27 12:45:16 +00:00
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
2021-04-06 05:36:44 +00:00
|
|
|
it('should write a category/a-page.md file using the page template', () => {
|
2020-09-20 09:16:08 +00:00
|
|
|
const pageReadmeContent = readFile(
|
2021-04-06 05:36:44 +00:00
|
|
|
`${destinationPath}/category/a-page.md`
|
2020-09-20 09:16:08 +00:00
|
|
|
)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('with requirements', () => {
|
|
|
|
beforeEach(() =>
|
2020-09-13 19:28:38 +00:00
|
|
|
callWritePages({
|
2020-09-20 09:16:08 +00:00
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category',
|
|
|
|
name: 'Category',
|
|
|
|
description: 'Category description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page',
|
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page',
|
|
|
|
description: 'Page description.',
|
|
|
|
param: { type: 'string' },
|
|
|
|
requirements: [
|
|
|
|
{
|
|
|
|
folder: 'another-category',
|
|
|
|
key: 'another-key',
|
|
|
|
name: 'com.apple.category2 another-key',
|
2020-11-27 12:45:16 +00:00
|
|
|
value: true,
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
folder: 'a-third-category',
|
|
|
|
key: 'a-third-key',
|
|
|
|
name: 'com.apple.category2 a-third-key',
|
2020-11-27 12:45:16 +00:00
|
|
|
value: 0.5,
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
],
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: true,
|
|
|
|
default: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is true',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: false,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is false',
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
|
|
|
versions: ['Big Sur'],
|
2020-11-27 12:45:16 +00:00
|
|
|
after: 'killall App',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
it('should write a category/page.md file using the page template', () => {
|
|
|
|
const pageReadmeContent = readFile(
|
|
|
|
`${destinationPath}/category/page.md`
|
|
|
|
)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('with an after command', () => {
|
|
|
|
beforeEach(() =>
|
2020-09-13 19:28:38 +00:00
|
|
|
callWritePages({
|
2020-09-20 09:16:08 +00:00
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category',
|
|
|
|
name: 'Category',
|
|
|
|
description: 'Category description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page',
|
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page',
|
|
|
|
description: 'Page description.',
|
|
|
|
param: { type: 'string' },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: '~/Desktop',
|
|
|
|
default: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is ~/Desktop',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: '~/Pictures',
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is ~/Pictures',
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
|
|
|
versions: ['Big Sur'],
|
2020-11-27 12:45:16 +00:00
|
|
|
after: 'killall App',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
it('should write a category/page.md file using the page template', () => {
|
2020-11-13 11:22:04 +00:00
|
|
|
const pageReadmeContent = readFile(
|
|
|
|
`${destinationPath}/category/page.md`
|
|
|
|
)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('with a deleteAlert section', () => {
|
|
|
|
beforeEach(() =>
|
|
|
|
callWritePages({
|
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category',
|
|
|
|
name: 'Category',
|
|
|
|
description: 'Category description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page',
|
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page',
|
|
|
|
description: 'Page description.',
|
|
|
|
param: { type: 'bool' },
|
|
|
|
examples: [],
|
|
|
|
deleteAlert: {
|
|
|
|
type: 'danger',
|
2020-11-27 12:45:16 +00:00
|
|
|
message: 'This an alert message. <br> `defaults command`',
|
2020-11-13 11:22:04 +00:00
|
|
|
},
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-11-13 11:22:04 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
it('should write a category/page.md file using the page template', () => {
|
2020-09-20 09:16:08 +00:00
|
|
|
const pageReadmeContent = readFile(
|
|
|
|
`${destinationPath}/category/page.md`
|
|
|
|
)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('with text and possible values example', () => {
|
|
|
|
beforeEach(() =>
|
2020-09-13 19:28:38 +00:00
|
|
|
callWritePages({
|
2020-09-20 09:16:08 +00:00
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category',
|
|
|
|
name: 'Category',
|
|
|
|
description: 'Category description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page',
|
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page',
|
|
|
|
description: 'Page description.',
|
|
|
|
param: { type: 'string', values: ['start', 'middle', 'end'] },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: 'start',
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is start',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 'middle',
|
|
|
|
default: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is middle',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 'end',
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is end',
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
it('should write a category/page.md file using the page template', () => {
|
|
|
|
const pageReadmeContent = readFile(
|
|
|
|
`${destinationPath}/category/page.md`
|
|
|
|
)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('with image example', () => {
|
|
|
|
beforeEach(() =>
|
2020-09-13 19:28:38 +00:00
|
|
|
callWritePages({
|
2020-09-20 09:16:08 +00:00
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category',
|
|
|
|
name: 'Category',
|
|
|
|
description: 'Category description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page',
|
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page',
|
|
|
|
description: 'Page description.',
|
|
|
|
param: { type: 'bool' },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: true,
|
|
|
|
default: true,
|
|
|
|
image: {
|
|
|
|
filename: 'true.png',
|
|
|
|
width: 600,
|
2020-11-27 12:45:16 +00:00
|
|
|
height: 400,
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: false,
|
|
|
|
image: {
|
|
|
|
filename: 'false.png',
|
|
|
|
width: 400,
|
2020-11-27 12:45:16 +00:00
|
|
|
height: 200,
|
|
|
|
},
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
it('should write a category/page.md file using the page template', () => {
|
|
|
|
const pageReadmeContent = readFile(
|
|
|
|
`${destinationPath}/category/page.md`
|
|
|
|
)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should copy the true.png example image to a category/category-page-true folder', () => {
|
|
|
|
const originImagePath = readFile(
|
|
|
|
`${destinationPath}/category/category-page-true.png`
|
|
|
|
)
|
|
|
|
expect(originImagePath).toMatchInlineSnapshot(
|
2022-08-17 16:34:02 +00:00
|
|
|
`"copied:../images/category/page/true.png"`
|
2020-09-20 09:16:08 +00:00
|
|
|
)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should copy the false.png example image to a category/category-page-false folder', () => {
|
|
|
|
const originImagePath = readFile(
|
|
|
|
`${destinationPath}/category/category-page-false.png`
|
|
|
|
)
|
|
|
|
expect(originImagePath).toMatchInlineSnapshot(
|
2022-08-17 16:34:02 +00:00
|
|
|
`"copied:../images/category/page/false.png"`
|
2020-09-20 09:16:08 +00:00
|
|
|
)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('with video example', () => {
|
|
|
|
beforeEach(() =>
|
2020-09-13 19:28:38 +00:00
|
|
|
callWritePages({
|
2020-09-20 09:16:08 +00:00
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category',
|
|
|
|
name: 'Category',
|
|
|
|
description: 'Category description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page',
|
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page',
|
|
|
|
description: 'Page description.',
|
|
|
|
param: { type: 'float' },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: '0',
|
|
|
|
default: true,
|
|
|
|
video: {
|
|
|
|
filename: '0.mp4',
|
|
|
|
width: 750,
|
2020-11-27 12:45:16 +00:00
|
|
|
height: 400,
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: '0.5',
|
|
|
|
video: {
|
|
|
|
filename: '0.5.mp4',
|
|
|
|
width: 720,
|
2020-11-27 12:45:16 +00:00
|
|
|
height: 390,
|
|
|
|
},
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
it('should write a category/page.md file using the page template', () => {
|
|
|
|
const pageReadmeContent = readFile(
|
|
|
|
`${destinationPath}/category/page.md`
|
|
|
|
)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should copy the 0.mp4 example video to a category/category-page-0 folder', () => {
|
|
|
|
const originVideoPath = readFile(
|
|
|
|
`${destinationPath}/category/category-page-0.mp4`
|
|
|
|
)
|
|
|
|
expect(originVideoPath).toMatchInlineSnapshot(
|
2022-08-17 16:34:02 +00:00
|
|
|
`"copied:../images/category/page/0.mp4"`
|
2020-09-20 09:16:08 +00:00
|
|
|
)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should copy the 0.5.mp4 example video to a category/category-page-0.5 folder', () => {
|
|
|
|
const originVideoPath = readFile(
|
|
|
|
`${destinationPath}/category/category-page-0.5.mp4`
|
|
|
|
)
|
|
|
|
expect(originVideoPath).toMatchInlineSnapshot(
|
2022-08-17 16:34:02 +00:00
|
|
|
`"copied:../images/category/page/0.5.mp4"`
|
2020-09-20 09:16:08 +00:00
|
|
|
)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('one category, two pages', () => {
|
|
|
|
beforeEach(() =>
|
2020-09-13 19:28:38 +00:00
|
|
|
callWritePages({
|
2020-09-20 09:16:08 +00:00
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category',
|
|
|
|
name: 'Category',
|
|
|
|
description: 'Category description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page1',
|
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page 1',
|
|
|
|
description: 'Page 1 description.',
|
|
|
|
param: { type: 'bool' },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: true,
|
|
|
|
default: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is true',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: false,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is false',
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
key: 'page2',
|
|
|
|
domain: 'com.apple.category',
|
|
|
|
title: 'Page 2',
|
|
|
|
description: 'Page 2 description.',
|
|
|
|
param: { type: 'bool' },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is true',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: false,
|
|
|
|
default: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is false',
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
it('should write a category/page1.md file using the page template', () => {
|
|
|
|
const pageReadmeContent = readFile(`${destinationPath}/category/page1.md`)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should write a category/page2.md file using the page template', () => {
|
|
|
|
const pageReadmeContent = readFile(`${destinationPath}/category/page2.md`)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('two categories, one page in each', () => {
|
|
|
|
beforeEach(() =>
|
2020-09-13 19:28:38 +00:00
|
|
|
callWritePages({
|
2020-09-20 09:16:08 +00:00
|
|
|
categories: [
|
|
|
|
{
|
|
|
|
folder: 'category1',
|
|
|
|
name: 'Category 1',
|
|
|
|
description: 'Category 1 description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page',
|
|
|
|
domain: 'com.apple.category1',
|
|
|
|
title: 'Page',
|
|
|
|
description: 'Page description.',
|
|
|
|
param: { type: 'bool' },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: true,
|
|
|
|
default: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is true',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: false,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is false',
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
folder: 'category2',
|
|
|
|
name: 'Category 2',
|
|
|
|
description: 'Category 2 description.',
|
|
|
|
keys: [
|
|
|
|
{
|
|
|
|
key: 'page',
|
|
|
|
domain: 'com.apple.category2',
|
|
|
|
title: 'Page',
|
|
|
|
description: 'Page description.',
|
|
|
|
param: { type: 'bool' },
|
|
|
|
examples: [
|
|
|
|
{
|
|
|
|
value: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is true',
|
2020-09-20 09:16:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
value: false,
|
|
|
|
default: true,
|
2020-11-27 12:45:16 +00:00
|
|
|
text: 'output when value is false',
|
|
|
|
},
|
2020-09-20 09:16:08 +00:00
|
|
|
],
|
2020-11-27 12:45:16 +00:00
|
|
|
versions: ['Big Sur'],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
2020-09-20 09:16:08 +00:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
it('should write a category1/page.md file using the page template', () => {
|
|
|
|
const pageReadmeContent = readFile(`${destinationPath}/category1/page.md`)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
|
|
|
|
it('should write a category2/page.md file using the page template', () => {
|
|
|
|
const pageReadmeContent = readFile(`${destinationPath}/category2/page.md`)
|
|
|
|
expect(pageReadmeContent).toMatchSnapshot()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2020-11-27 12:45:16 +00:00
|
|
|
const callWritePages = (defaults) =>
|
|
|
|
writePages({ defaults, url: '/' }, templatesPath, destinationPath)
|
|
|
|
const readFile = (file) => fs.readFakeFileSync(file, 'utf8')
|