From 08f4b665cf7be773b9533e143fdd9399d22b2fd9 Mon Sep 17 00:00:00 2001 From: sarahtathy Date: Wed, 7 Aug 2024 01:04:52 +0200 Subject: [PATCH 1/2] add tests and code to have meta data --- src/MicroEd-Spec/MDEditorPresenter.class.st | 3 +- src/MicroEd-Tests/MDFileTest.class.st | 76 +++++++++++++++++---- src/MicroEd/MDFile.class.st | 55 ++++++++++++--- 3 files changed, 109 insertions(+), 25 deletions(-) diff --git a/src/MicroEd-Spec/MDEditorPresenter.class.st b/src/MicroEd-Spec/MDEditorPresenter.class.st index 8232c13..d04250d 100644 --- a/src/MicroEd-Spec/MDEditorPresenter.class.st +++ b/src/MicroEd-Spec/MDEditorPresenter.class.st @@ -205,8 +205,7 @@ MDEditorPresenter >> saveFile [ "SAVE button is pressed: save file, then print message if actually saved (if no cancel)" self mdFile: (self mdFile - save: textInput text asString - withExtension: syntaxState extension). + save: textInput text asString ). self window ifNotNil: [self updateTitle]. ] diff --git a/src/MicroEd-Tests/MDFileTest.class.st b/src/MicroEd-Tests/MDFileTest.class.st index 6519c58..e1c8a7c 100644 --- a/src/MicroEd-Tests/MDFileTest.class.st +++ b/src/MicroEd-Tests/MDFileTest.class.st @@ -4,9 +4,10 @@ Class { #instVars : [ 'memoryFS', 'fileExample', - 'fileWithoutFileReference', 'toDelete', - 'fileReferenceWithName' + 'fileReferenceWithName', + 'mdfile', + 'parser' ], #category : 'MicroEd-Tests', #package : 'MicroEd-Tests' @@ -18,13 +19,15 @@ MDFileTest >> setUp [ super setUp. memoryFS := FileSystem memory. toDelete := OrderedCollection new. - fileWithoutFileReference := MDFile new. + mdfile := MDFile new. fileExample := memoryFS / 'example.md'. fileReferenceWithName := (memoryFS / 'anotherFile.md') ensureCreateFile. - toDelete add: fileExample. + toDelete add: fileExample. fileExample writeStreamDo: [ :stream | - stream nextPutAll: 'example file' ] + stream nextPutAll: 'example file' ]. + + parser := MicrodownParser new. ] { #category : 'running' } @@ -33,22 +36,23 @@ MDFileTest >> tearDown [ toDelete select: [ :path | memoryFS exists: path ] thenDo: [ :path | path ensureDelete ]. + mdfile fileReference delete. super tearDown ] { #category : 'running' } MDFileTest >> testMDFileCreationWithExistingFile [ - | file | - file := MDFile new. - file initializeWithFileReference: fileExample. - self assert: file hasFile. + mdfile initializeWithFileReference: fileExample. + self assert: mdfile hasFile. ] { #category : 'running' } MDFileTest >> testMDFileCreationWithoutExistingFile [ + | fileWithoutFileReference | + fileWithoutFileReference := MDFile new. self assert: fileWithoutFileReference hasFile not. ] @@ -56,13 +60,12 @@ MDFileTest >> testMDFileCreationWithoutExistingFile [ MDFileTest >> testMDFileExistingFileWithName [ - | file fileReferenceWithoutName | + | fileReferenceWithoutName | fileReferenceWithoutName := (memoryFS / 'name.md') ensureCreateFile. toDelete add: fileReferenceWithoutName. - file := MDFile new. - file initializeWithFileReference: fileReferenceWithoutName. - self assert: (file basename endsWith: 'name.md'). + mdfile initializeWithFileReference: fileReferenceWithoutName. + self assert: (mdfile basename endsWith: 'name.md'). ] @@ -80,6 +83,53 @@ MDFileTest >> testMDFileExistingFileWithoutName [ ] +{ #category : 'running' } +MDFileTest >> testMDFileHasFileReferenceAddMetaData [ + + | root file | + + file := memoryFS / 'test2'. + file ensureCreateFile. + mdfile initializeWithFileReference: file. + mdfile addMetaDataElements. + + root := MicrodownParser parse: mdfile contents. + self assert: root hasMetaDataElement. + + +] + +{ #category : 'running' } +MDFileTest >> testMDFileHasFileReferenceHasMetaData [ + + | root file | + + file := memoryFS / 'test2'. + file ensureCreateFile. + mdfile initializeWithFileReference: file. + root := MicrodownParser parse: mdfile fileReference contents. + mdfile addMetaDataElements. + + root := MicrodownParser parse: mdfile contents. + self assert: root hasMetaDataElement. + + +] + +{ #category : 'running' } +MDFileTest >> testMDFileHasFileReferenceHasNotMetaData [ + + | root file | + + file := memoryFS / 'test3'. + file ensureCreateFile. + mdfile initializeWithFileReference: file. + root := MicrodownParser parse: mdfile contents. + self deny: root hasMetaDataElement. + + +] + { #category : 'running' } MDFileTest >> testMDFileHasFileReferenceWithFormatISO [ diff --git a/src/MicroEd/MDFile.class.st b/src/MicroEd/MDFile.class.st index 6c67662..7b9fa04 100644 --- a/src/MicroEd/MDFile.class.st +++ b/src/MicroEd/MDFile.class.st @@ -5,7 +5,8 @@ Class { #name : 'MDFile', #superclass : 'Object', #instVars : [ - 'fileReference' + 'fileReference', + 'nameOfFileReferenceBeforeSaved' ], #category : 'MicroEd', #package : 'MicroEd' @@ -19,18 +20,45 @@ MDFile class >> newFromFileReference: aFileReference [ yourself ] +{ #category : 'add' } +MDFile >> addMetaDataElements [ + + | root | + root := MicrodownParser parse: fileReference contents. + + root hasMetaDataElement + ifFalse: [ + root := MicrodownParser parse: '{ + "author" : "addos" + } + '. + root metaDataElement + atKey: 'author' put: (fileReference entry reference path at: 3); + atKey: 'title' put: nameOfFileReferenceBeforeSaved; + atKey: 'lastModificationDate' put: fileReference modificationTime asDate yyyymmdd ] + ifTrue: [ + root metaDataElement + atKey: 'lastModificationDate' + put: fileReference modificationTime asDate yyyymmdd]. + + self visit: root. +] + { #category : 'accessing' } MDFile >> basename [ "Answer a String representing the receiver's file name" | dateCreationOfFileReference | - fileReference ifNil: [ ^ 'Untitled.md' ]. + fileReference ifNil: [ + nameOfFileReferenceBeforeSaved := 'Untitled'. + ^ 'Untitled' ]. + + nameOfFileReferenceBeforeSaved := fileReference basename. dateCreationOfFileReference := DateAndTime now asDate yyyymmdd. (fileReference basename includesSubstring: dateCreationOfFileReference) ifFalse: [ - ^ dateCreationOfFileReference , fileReference basename ]. - ^ fileReference basename - + ^ dateCreationOfFileReference , '_' , fileReference basename ]. + ^ fileReference basename ] { #category : 'accessing' } @@ -95,11 +123,8 @@ MDFile >> initializeWithFileReference: aFileReference [ ] { #category : 'accessing' } -MDFile >> save: aString withExtension: anExtension [ -" before put the file reference, ensure that the creation of the basename is set (without the renaming) -fileReference extension = anExtension asString ifFalse: [ - fileReference renameTo: - self basename , '.' , anExtension asString ]. " +MDFile >> save: aString [ + fileReference asFileReference writeStreamDo: [ :str | str nextPutAll: aString ]. @@ -107,3 +132,13 @@ fileReference extension = anExtension asString ifFalse: [ ] + +{ #category : 'add' } +MDFile >> visit: aRoot [ + + | visitor | + visitor := MicTextualMicrodownExporter new. + visitor visit: aRoot. + fileReference writeStreamDo: [ :stream | + stream nextPutAll: visitor contents ] +] From bd95e8627dac8d7a4b6e5c2835409969415d1991 Mon Sep 17 00:00:00 2001 From: sarahtathy Date: Wed, 7 Aug 2024 01:10:35 +0200 Subject: [PATCH 2/2] delete the fileReference --- src/MicroEd-Tests/MDFileTest.class.st | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/MicroEd-Tests/MDFileTest.class.st b/src/MicroEd-Tests/MDFileTest.class.st index e1c8a7c..89f70e4 100644 --- a/src/MicroEd-Tests/MDFileTest.class.st +++ b/src/MicroEd-Tests/MDFileTest.class.st @@ -36,7 +36,6 @@ MDFileTest >> tearDown [ toDelete select: [ :path | memoryFS exists: path ] thenDo: [ :path | path ensureDelete ]. - mdfile fileReference delete. super tearDown ] @@ -113,6 +112,8 @@ MDFileTest >> testMDFileHasFileReferenceHasMetaData [ root := MicrodownParser parse: mdfile contents. self assert: root hasMetaDataElement. + mdfile fileReference delete. + ]