From 7b5cf5346a9eb33687705fd58af97027b62ef63e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20Magu=C3=A9r=C3=A8s?= Date: Wed, 6 May 2026 11:10:21 +0200 Subject: [PATCH] Add serialization and tests --- .../ToAlbum.extension.st | 21 ++ .../ToBasicListElement.extension.st | 20 ++ .../ToTextField.extension.st | 11 +- .../ToSerializerTest.class.st | 202 +++++++++++++++--- 4 files changed, 215 insertions(+), 39 deletions(-) create mode 100644 src/Toplo-Serialization-Stash/ToAlbum.extension.st create mode 100644 src/Toplo-Serialization-Stash/ToBasicListElement.extension.st diff --git a/src/Toplo-Serialization-Stash/ToAlbum.extension.st b/src/Toplo-Serialization-Stash/ToAlbum.extension.st new file mode 100644 index 0000000..7367a5e --- /dev/null +++ b/src/Toplo-Serialization-Stash/ToAlbum.extension.st @@ -0,0 +1,21 @@ +Extension { #name : #ToAlbum } + +{ #category : #'*Toplo-Serialization-Stash' } +ToAlbum >> stashPlaceholder [ + + + self userData at: #placeholder ifAbsent: [ ^ { } ]. + ^ { ([ :e | + ' placeholderText: ''' + , (BlTextNonPrintableCharacterPrinter print: + (self userData at: #placeholder) children first children first + text) , '''' ] -> self) onlySetOnStash } +] + +{ #category : #'*Toplo-Serialization-Stash' } +ToAlbum >> stashUseScrollbar [ + + + ^ { ([ :e | 'useScrollbar: ' , self useScrollbar printString ] + -> self) onlySetOnStash } +] diff --git a/src/Toplo-Serialization-Stash/ToBasicListElement.extension.st b/src/Toplo-Serialization-Stash/ToBasicListElement.extension.st new file mode 100644 index 0000000..daa8123 --- /dev/null +++ b/src/Toplo-Serialization-Stash/ToBasicListElement.extension.st @@ -0,0 +1,20 @@ +Extension { #name : #ToBasicListElement } + +{ #category : #'*Toplo-Serialization-Stash' } +ToBasicListElement >> stashRowNumbers [ + + self toConfiguration rowNumbers ifFalse: [ ^ { } ]. + ^ { ([ :e | 'withRowNumbers' ] -> self) onlySetOnStash } +] + +{ #category : #'*Toplo-Serialization-Stash' } +ToBasicListElement >> stashUseInfiniteLayout [ + + ^ { ([ :e | 'useInfiniteLayout: ' , self useInfiniteLayout printString ] -> self) onlySetOnStash } +] + +{ #category : #'*Toplo-Serialization-Stash' } +ToBasicListElement >> stashUseScrollbar [ + + ^ { ([ :e | 'useScrollbar: ' , self useScrollbar printString ] -> self) onlySetOnStash } +] diff --git a/src/Toplo-Serialization-Stash/ToTextField.extension.st b/src/Toplo-Serialization-Stash/ToTextField.extension.st index b94d944..0252a86 100644 --- a/src/Toplo-Serialization-Stash/ToTextField.extension.st +++ b/src/Toplo-Serialization-Stash/ToTextField.extension.st @@ -1,13 +1,8 @@ Extension { #name : #ToTextField } { #category : #'*Toplo-Serialization-Stash' } -ToTextField >> stashPlaceholder [ - +ToTextField >> stashWrappingMode [ - self userData at: #placeholder ifAbsent: [ ^ { } ]. - ^ { ([ :e | - ' placeholderText: ''' - , (BlTextNonPrintableCharacterPrinter print: - (self userData at: #placeholder) children first children first - text) , ''''] -> self) onlySetOnStash } + self wrappingMode ifNil: [ ^ { } ]. + ^ { ([ :e | 'wrappingMode: ' , self wrappingMode printString ] -> self) onlySetOnStash } ] diff --git a/src/Toplo-Serialization-Tests/ToSerializerTest.class.st b/src/Toplo-Serialization-Tests/ToSerializerTest.class.st index f5aa47e..7954d82 100644 --- a/src/Toplo-Serialization-Tests/ToSerializerTest.class.st +++ b/src/Toplo-Serialization-Tests/ToSerializerTest.class.st @@ -143,21 +143,6 @@ ToSerializerTest >> testLocalTheme2 [ self assert: element localTheme class equals: ToBeeDarkTheme ] ] -{ #category : #tests } -ToSerializerTest >> testPlaceHolder [ - - | origin textElement| - origin := ToTextField new - placeholderText: 'Enter text...'. - - - - self - test: origin - on: [ :element | textElement := (((element userData at:#placeholder) children first) children first). - self assert: (BlTextNonPrintableCharacterPrinter print:textElement text) equals: 'Enter text...' ] -] - { #category : #tests } ToSerializerTest >> testStamps [ @@ -175,6 +160,23 @@ ToSerializerTest >> testStamps [ self assert: (element valueOfStamp: #withValue) value equals: #toto ] ] +{ #category : #tests } +ToSerializerTest >> testToAlbum [ + + | origin placeholderString | + placeholderString := 'Enter text...'. + origin := ToAlbum new + placeholderString: placeholderString; + useScrollbar: true; + yourself. + self test: origin on: [ :element | + | text | + text := (element userData at: #placeholder) children first. + self + assert: (BlTextNonPrintableCharacterPrinter print: text text) + equals: 'Enter text...'. self assert: element useScrollbar equals: true ] +] + { #category : #tests } ToSerializerTest >> testToButton1 [ @@ -358,6 +360,19 @@ ToSerializerTest >> testToCheckbox4 [ (element childAt: 3)) ] ] +{ #category : #tests } +ToSerializerTest >> testToIconicButton [ + + | origin | + origin := ToIconicButton new + iconImage: (ToMaterialDesignIconProvider innerImageNamed: + 'outlined_keyboardarrowright'); + yourself. + self test: origin on: [ :element | + self assert: (element isKindOf: ToIconicButton). + self assert: element innerImage isNotNil ] +] + { #category : #tests } ToSerializerTest >> testToImage1 [ @@ -416,25 +431,150 @@ ToSerializerTest >> testToLabelMultiLine [ ] { #category : #tests } -ToSerializerTest >> testTokens [ +ToSerializerTest >> testToListElement [ | origin | - self skip. - origin := ToElement new - addTokenNamed: #hello withValue: #goodbye; - addTokenNamed: #titi withValue: #toto; + origin := ToListElement new + useScrollbar: true; + useInfiniteLayout: true; + beVertical; + withRowNumbers; + yourself. + self test: origin on: [ :element | + self assert: element useScrollbar equals: true. + self assert: element useInfiniteLayout equals: true. + self assert: element isVertical equals: true. + self assert: element toConfiguration rowNumbers equals: true.]. +] + +{ #category : #tests } +ToSerializerTest >> testToRadioButton1 [ + + | origin | + origin := ToRadioButton new + labelText: 'hello'; + iconImage: (self iconNamed: #class); yourself. self test: origin on: [ :element | - self assert: - (element ensuredSkinManager - tokenPropertyValue: #hello - from: element) isNotNil. - self assert: - (element ensuredSkinManager tokenPropertyValue: #titi from: element) - isNotNil. - self - assert: (element valueOfTokenNamed: #hello) value - equals: #goodbye. - self assert: (element valueOfTokenNamed: #titi) value equals: #toto ] + self assert: element labelText asString equals: 'hello'. + self + assert: element iconImage background image bits + equals: (self iconNamed: #class) bits ] +] + +{ #category : #tests } +ToSerializerTest >> testToRadioButton2 [ + + | origin | + origin := ToRadioButton new + labelText: 'hello'; + yourself. + + self test: origin on: [ :element | + self assert: element labelText asString equals: 'hello'. + self assert: element icon equals: nil ] +] + +{ #category : #tests } +ToSerializerTest >> testToRadioButton3 [ + + | origin | + origin := ToRadioButton new + iconImage: (self iconNamed: #class); + yourself. + + self test: origin on: [ :element | + self assert: element label equals: nil. + self + assert: element iconImage background image bits + equals: (self iconNamed: #class) bits ] +] + +{ #category : #tests } +ToSerializerTest >> testToRadioButton4 [ + + | origin | + origin := ToRadioButton new. + + self test: origin on: [ :element | + self assert: element label equals: nil. + self assert: element icon equals: nil ] +] + +{ #category : #tests } +ToSerializerTest >> testToRadioButton5 [ + + | origin | + origin := ToRadioButton new. + + self test: origin on: [ :element | self assert: element isCheckable ] +] + +{ #category : #tests } +ToSerializerTest >> testToTextFieldPlaceholder [ + + | origin textElement | + origin := ToTextField new placeholderText: 'Enter text...'. + + self test: origin on: [ :element | + textElement := (element userData at: #placeholder) children first. + self + assert: + (BlTextNonPrintableCharacterPrinter print: textElement text) + equals: 'Enter text...' ]. +] + +{ #category : #tests } +ToSerializerTest >> testToTextFieldWrappingMode [ + + | origin | + origin := ToTextField new + width: 150; + wrappingMode: true; + yourself. + self test: origin on: [ :element | + element forceLayout. + self assert: element width equals: 150. + self assert: element wrappingMode equals: true ] +] + +{ #category : #tests } +ToSerializerTest >> testToToggleButton1 [ + + | origin | + origin := ToToggleButton new + labelText: 'hello'; + yourself. + + self test: origin on: [ :element | + self assert: element labelText asString equals: 'hello'] +] + +{ #category : #tests } +ToSerializerTest >> testToToggleButton2 [ + + | origin | + origin := ToButton new. + + self test: origin on: [ :element | + self assert: element label equals: nil. + self assert: element icon equals: nil ] + +] + +{ #category : #tests } +ToSerializerTest >> testToToggleButton3 [ + + | origin | + origin := ToToggleButton new + icon: + (ToImage new innerImage: (self iconNamed: #solidMenu)); + yourself. + + self test: origin on: [ :element | + self assert: element label equals: nil. + self + assert: element iconImage background image bits + equals: (self iconNamed: #solidMenu) bits ]. ]