From 62cdf5e9864afa654ee942a91b530bee9ddba3da Mon Sep 17 00:00:00 2001 From: svenvc Date: Fri, 26 Apr 2024 13:02:57 +0200 Subject: [PATCH 01/13] make ZnTooManyRedirects more intelligent (add a trail of followed URLs and two resume behaviors) --- .../executeWithRedirectsRemaining..st | 14 -------- .../executeWithRedirectsRemaining.trail..st | 24 ++++++++++++++ .../instance/executeWithRetriesRemaining..st | 4 ++- .../ZnTooManyRedirects.class/README.md | 2 ++ .../instance/defaultResumeValue.st | 3 ++ .../instance/trail..st | 3 ++ .../instance/trail.st | 3 ++ .../ZnTooManyRedirects.class/properties.json | 6 ++-- .../monticello.meta/categories.st | 9 ++++- .../instance/testRedirect.st | 2 +- .../instance/testRedirectLoopAndTrail.st | 33 +++++++++++++++++++ 11 files changed, 84 insertions(+), 19 deletions(-) delete mode 100644 repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRedirectsRemaining..st create mode 100644 repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRedirectsRemaining.trail..st create mode 100644 repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/defaultResumeValue.st create mode 100644 repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/trail..st create mode 100644 repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/trail.st create mode 100644 repository/Zinc-Tests.package/ZnClientTest.class/instance/testRedirectLoopAndTrail.st diff --git a/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRedirectsRemaining..st b/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRedirectsRemaining..st deleted file mode 100644 index 0481cb11..00000000 --- a/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRedirectsRemaining..st +++ /dev/null @@ -1,14 +0,0 @@ -private - protocol -executeWithRedirectsRemaining: redirectCount - self getConnectionAndExecute. - response isRedirect - ifTrue: [ - (redirectCount > 0 and: [ self followRedirects ]) - ifTrue: [ - self - prepareRedirect; - executeWithRedirectsRemaining: redirectCount - 1 ] - ifFalse: [ - self followRedirects - ifTrue: [ ZnTooManyRedirects signal ] ] ]. - ^ self handleResponse \ No newline at end of file diff --git a/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRedirectsRemaining.trail..st b/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRedirectsRemaining.trail..st new file mode 100644 index 00000000..d4ac6243 --- /dev/null +++ b/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRedirectsRemaining.trail..st @@ -0,0 +1,24 @@ +private - protocol +executeWithRedirectsRemaining: redirectCount trail: collectionOfUrls + self getConnectionAndExecute. + response isRedirect + ifTrue: [ + (redirectCount > 0 and: [ self followRedirects ]) + ifTrue: [ + self prepareRedirect. + collectionOfUrls add: self request url. + self + executeWithRedirectsRemaining: redirectCount - 1 + trail: collectionOfUrls ] + ifFalse: [ + self followRedirects + ifTrue: [ | exception | + (exception := ZnTooManyRedirects new) + trail: collectionOfUrls. + exception signal = exception defaultResumeValue + ifTrue: [ + "when resumed with default resume value, start over" + self + executeWithRedirectsRemaining: self maxNumberOfRedirects + trail: collectionOfUrls ] ] ] ]. + ^ self handleResponse \ No newline at end of file diff --git a/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRetriesRemaining..st b/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRetriesRemaining..st index 376ebf5a..69d5c256 100644 --- a/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRetriesRemaining..st +++ b/repository/Zinc-HTTP.package/ZnClient.class/instance/executeWithRetriesRemaining..st @@ -1,6 +1,8 @@ private - protocol executeWithRetriesRemaining: retryCount - ^ [ self executeWithRedirectsRemaining: self maxNumberOfRedirects ] + ^ [ self + executeWithRedirectsRemaining: self maxNumberOfRedirects + trail: OrderedCollection new ] on: self retryExceptionSet do: [ :exception | retryCount > 0 diff --git a/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/README.md b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/README.md index e4bdf29e..24979ac0 100644 --- a/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/README.md +++ b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/README.md @@ -1,3 +1,5 @@ ZnTooManyRedirects is signalled when an HTTP client has been following more redirects than allowed. +The default resume behavior is to retry, signal with any other value to give up just return the redirect. + Part of Zinc HTTP Components. \ No newline at end of file diff --git a/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/defaultResumeValue.st b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/defaultResumeValue.st new file mode 100644 index 00000000..1cceb5da --- /dev/null +++ b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/defaultResumeValue.st @@ -0,0 +1,3 @@ +private +defaultResumeValue + ^ #retry \ No newline at end of file diff --git a/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/trail..st b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/trail..st new file mode 100644 index 00000000..94ed2b2a --- /dev/null +++ b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/trail..st @@ -0,0 +1,3 @@ +accessing +trail: aCollectionOfUrls + trail := aCollectionOfUrls \ No newline at end of file diff --git a/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/trail.st b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/trail.st new file mode 100644 index 00000000..2ae9b5e9 --- /dev/null +++ b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/instance/trail.st @@ -0,0 +1,3 @@ +accessing +trail + ^ trail \ No newline at end of file diff --git a/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/properties.json b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/properties.json index 2e871fa2..72f3c6cb 100644 --- a/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/properties.json +++ b/repository/Zinc-HTTP.package/ZnTooManyRedirects.class/properties.json @@ -1,11 +1,13 @@ { - "commentStamp" : "", + "commentStamp" : "", "super" : "Error", "category" : "Zinc-HTTP-Exceptions", "classinstvars" : [ ], "pools" : [ ], "classvars" : [ ], - "instvars" : [ ], + "instvars" : [ + "trail" + ], "name" : "ZnTooManyRedirects", "type" : "normal" } \ No newline at end of file diff --git a/repository/Zinc-HTTP.package/monticello.meta/categories.st b/repository/Zinc-HTTP.package/monticello.meta/categories.st index b4484d8a..f7e23f08 100644 --- a/repository/Zinc-HTTP.package/monticello.meta/categories.st +++ b/repository/Zinc-HTTP.package/monticello.meta/categories.st @@ -1 +1,8 @@ -self packageOrganizer ensurePackage: #'Zinc-HTTP' withTags: #(#'Client-Server' #Core #Exceptions #Logging #Streaming #Support #Variables)! +SystemOrganization addCategory: #'Zinc-HTTP'! +SystemOrganization addCategory: #'Zinc-HTTP-Client-Server'! +SystemOrganization addCategory: #'Zinc-HTTP-Core'! +SystemOrganization addCategory: #'Zinc-HTTP-Exceptions'! +SystemOrganization addCategory: #'Zinc-HTTP-Logging'! +SystemOrganization addCategory: #'Zinc-HTTP-Streaming'! +SystemOrganization addCategory: #'Zinc-HTTP-Support'! +SystemOrganization addCategory: #'Zinc-HTTP-Variables'! diff --git a/repository/Zinc-Tests.package/ZnClientTest.class/instance/testRedirect.st b/repository/Zinc-Tests.package/ZnClientTest.class/instance/testRedirect.st index 20dcd055..eb8265f6 100644 --- a/repository/Zinc-Tests.package/ZnClientTest.class/instance/testRedirect.st +++ b/repository/Zinc-Tests.package/ZnClientTest.class/instance/testRedirect.st @@ -16,5 +16,5 @@ testRedirect beOneShot; maxNumberOfRedirects: 0; get: target; - response ] on: ZnTooManyRedirects do: [ :exception | exception resume ]. + response ] on: ZnTooManyRedirects do: [ :exception | exception resume: #doNotRetry ]. self assert: response isRedirect \ No newline at end of file diff --git a/repository/Zinc-Tests.package/ZnClientTest.class/instance/testRedirectLoopAndTrail.st b/repository/Zinc-Tests.package/ZnClientTest.class/instance/testRedirectLoopAndTrail.st new file mode 100644 index 00000000..44157997 --- /dev/null +++ b/repository/Zinc-Tests.package/ZnClientTest.class/instance/testRedirectLoopAndTrail.st @@ -0,0 +1,33 @@ +testing +testRedirectLoopAndTrail + self withServerDo: [ :server | | client count | + server onRequestRespond: [ :request | + request uri firstPathSegment = 'follow' + ifTrue: [ ZnResponse redirect: 'follow' ] ]. + + (client := ZnClient new) + url: server localUrl; addPath: 'follow'; + maxNumberOfRedirects: 10. + self should: [ client get ] raise: ZnTooManyRedirects. + client close. + + (client := ZnClient new) + url: server localUrl; addPath: 'follow'; + maxNumberOfRedirects: 10. + [ client get ] on: ZnTooManyRedirects do: [ :exception | + self assert: exception isResumable. + self assert: exception trail size equals: 10. + self assert: (exception trail allSatisfy: [ :each | each = (server localUrl / 'follow') ]) ]. + client close. + + (client := ZnClient new) + url: server localUrl; addPath: 'follow'; + maxNumberOfRedirects: 10. + count := 0. + [ client get ] on: ZnTooManyRedirects do: [ :exception | + count := count + 1. + exception trail size <= 30 + ifTrue: [ exception resume ] + ifFalse: [ exception resume: #doNotRetry ] ]. + self assert: count equals: 4. + client close ] \ No newline at end of file From 33b049bdbc408f80b71969c69b362cfbc13ef2a1 Mon Sep 17 00:00:00 2001 From: svenvc Date: Fri, 10 May 2024 09:39:53 +0200 Subject: [PATCH 02/13] added ZnLossyUTF8Encoder --- .../ZnLossyUTF8Encoder.class/README.md | 15 +++++++++++++ .../class/handlesEncoding..st | 5 +++++ .../class/knownEncodingIdentifiers.st | 3 +++ .../instance/decodeBytesSingleReplacement..st | 22 +++++++++++++++++++ .../instance/errorIllegalContinuationByte.st | 3 +++ .../instance/errorIllegalLeadingByte.st | 3 +++ .../instance/errorIncomplete.st | 3 +++ .../instance/errorOutsideRange.st | 3 +++ .../instance/errorOverlong.st | 3 +++ .../instance/identifier.st | 3 +++ .../instance/replacementCodePoint.st | 5 +++++ .../ZnLossyUTF8Encoder.class/properties.json | 11 ++++++++++ .../monticello.meta/categories.st | 2 +- .../instance/testLossyUTF8.st | 18 +++++++++++++++ .../instance/testLossyUTF8Random.st | 6 +++++ .../monticello.meta/categories.st | 2 +- 16 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/README.md create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/class/handlesEncoding..st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/class/knownEncodingIdentifiers.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/decodeBytesSingleReplacement..st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIllegalContinuationByte.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIllegalLeadingByte.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIncomplete.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorOutsideRange.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorOverlong.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/identifier.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/replacementCodePoint.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/properties.json create mode 100644 repository/Zinc-Character-Encoding-Tests.package/ZnCharacterEncoderTest.class/instance/testLossyUTF8.st create mode 100644 repository/Zinc-Character-Encoding-Tests.package/ZnCharacterEncoderTest.class/instance/testLossyUTF8Random.st diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/README.md b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/README.md new file mode 100644 index 00000000..771bb470 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/README.md @@ -0,0 +1,15 @@ +I am ZnLossyUTF8Decoder. +I am a ZnUTF8Decoder. + +I behave like my superclass but will not signal errors when I see illegal UTF-8 encoded input, +instead I will output a Unicode Replacement Character (U+FFFD) for each error. + +In contrast to my superclass I can read any random byte sequence, decoding both legal and illegal UTF-8 sequences. + + Due to my stream based design and usage as well as my stateless implementation, + I will output multiple replacement characters when multiple illegal sequences occur. + + My convenience method #decodeBytesSingleReplacement: shows how to decode bytes so that + only a single replacement character stands for any amount of illegal encoding between legal encodings. + +Part of Zinc HTTP Components. \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/class/handlesEncoding..st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/class/handlesEncoding..st new file mode 100644 index 00000000..df374130 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/class/handlesEncoding..st @@ -0,0 +1,5 @@ +accessing +handlesEncoding: string + "Return true when my instances handle the encoding described by string" + + ^ (self canonicalEncodingIdentifier: string) = 'utf8lossy' \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/class/knownEncodingIdentifiers.st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/class/knownEncodingIdentifiers.st new file mode 100644 index 00000000..b055c710 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/class/knownEncodingIdentifiers.st @@ -0,0 +1,3 @@ +accessing +knownEncodingIdentifiers + ^ #( utf8lossy ) \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/decodeBytesSingleReplacement..st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/decodeBytesSingleReplacement..st new file mode 100644 index 00000000..eda00b53 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/decodeBytesSingleReplacement..st @@ -0,0 +1,22 @@ +convenience +decodeBytesSingleReplacement: bytes + "Decode bytes and return the resulting string. + This variant of #decodeBytes: will only ever use + a single replacement character for each illegal UTF-8 sequence" + + | byteStream replaced replacement char | + byteStream := bytes readStream. + replaced := false. + replacement := self replacementCodePoint asCharacter. + ^ String streamContents: [ :stream | + [ byteStream atEnd ] whileFalse: [ + char := self nextFromStream: byteStream. + char = replacement + ifTrue: [ + replaced + ifFalse: [ + replaced := true. + stream nextPut: replacement ] ] + ifFalse: [ + replaced := false. + stream nextPut: char ] ] ] \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIllegalContinuationByte.st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIllegalContinuationByte.st new file mode 100644 index 00000000..25ee35d7 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIllegalContinuationByte.st @@ -0,0 +1,3 @@ +error handling +errorIllegalContinuationByte + ^ self replacementCodePoint \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIllegalLeadingByte.st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIllegalLeadingByte.st new file mode 100644 index 00000000..ed149d41 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIllegalLeadingByte.st @@ -0,0 +1,3 @@ +error handling +errorIllegalLeadingByte + ^ self replacementCodePoint \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIncomplete.st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIncomplete.st new file mode 100644 index 00000000..31461228 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorIncomplete.st @@ -0,0 +1,3 @@ +error handling +errorIncomplete + ^ self replacementCodePoint \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorOutsideRange.st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorOutsideRange.st new file mode 100644 index 00000000..2a95c63a --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorOutsideRange.st @@ -0,0 +1,3 @@ +error handling +errorOutsideRange + ^ self replacementCodePoint \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorOverlong.st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorOverlong.st new file mode 100644 index 00000000..d439e1e6 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/errorOverlong.st @@ -0,0 +1,3 @@ +error handling +errorOverlong + ^ self replacementCodePoint \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/identifier.st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/identifier.st new file mode 100644 index 00000000..d764db0e --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/identifier.st @@ -0,0 +1,3 @@ +accessing +identifier + ^ #utf8lossy \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/replacementCodePoint.st b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/replacementCodePoint.st new file mode 100644 index 00000000..df425a65 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/instance/replacementCodePoint.st @@ -0,0 +1,5 @@ +accessing +replacementCodePoint + "Return the code point for the Unicode Replacement Character U+FFFD" + + ^ 16rFFFD \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/properties.json b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/properties.json new file mode 100644 index 00000000..f16b43e8 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnLossyUTF8Encoder.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "ZnUTF8Encoder", + "category" : "Zinc-Character-Encoding-Core", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "ZnLossyUTF8Encoder", + "type" : "normal" +} \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index f2721d0c..2cb3537b 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! +SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! diff --git a/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterEncoderTest.class/instance/testLossyUTF8.st b/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterEncoderTest.class/instance/testLossyUTF8.st new file mode 100644 index 00000000..9454874e --- /dev/null +++ b/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterEncoderTest.class/instance/testLossyUTF8.st @@ -0,0 +1,18 @@ +testing +testLossyUTF8 + | encoder replacement | + encoder := ZnLossyUTF8Encoder new. + self assert: #utf8lossy asZnCharacterEncoder equals: encoder. + replacement := encoder replacementCodePoint asCharacter. + self + assert: (#[65 160 66] decodeWith: encoder) + equals: ({ $A. replacement . $B } as: String). + self + assert: (#[16rE1 16rA0 16rC0] decodeWith: encoder) + equals: replacement asString. + self + assert: (encoder decodeBytes: #[16r41 16rA1 16rA2 16rA3 16r42]) + equals: ({ $A. replacement . replacement . replacement . $B } as: String). + self + assert: (encoder decodeBytesSingleReplacement: #[16r41 16rA1 16rA2 16rA3 16r42]) + equals: ({ $A. replacement . $B } as: String). \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterEncoderTest.class/instance/testLossyUTF8Random.st b/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterEncoderTest.class/instance/testLossyUTF8Random.st new file mode 100644 index 00000000..6f2f5c21 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterEncoderTest.class/instance/testLossyUTF8Random.st @@ -0,0 +1,6 @@ +testing +testLossyUTF8Random + | bytes string | + bytes := ((1 to: 10000) collect: [ :_ | 256 atRandom - 1 ]) asByteArray. + string := bytes decodeWith: ZnLossyUTF8Encoder new. + self assert: string isString \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st index 099ac033..d2931a20 100644 --- a/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st @@ -1 +1 @@ -self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Tests' withTags: #()! +SystemOrganization addCategory: #'Zinc-Character-Encoding-Tests'! From b82aeb87cd1a5e247369832ab8dbd5804a06d282 Mon Sep 17 00:00:00 2001 From: Torsten Bergmann Date: Tue, 28 May 2024 18:44:12 +0200 Subject: [PATCH 03/13] It should be possible to reset a ZnCharacterReadStream Fix #137 --- .../ZnEncodedStream.class/instance/reset.st | 4 ++++ .../monticello.meta/categories.st | 2 +- .../ZnCharacterStreamTest.class/instance/testReset.st | 8 ++++++++ .../monticello.meta/categories.st | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/instance/reset.st create mode 100644 repository/Zinc-Character-Encoding-Tests.package/ZnCharacterStreamTest.class/instance/testReset.st diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/instance/reset.st b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/instance/reset.st new file mode 100644 index 00000000..6aeabd64 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/instance/reset.st @@ -0,0 +1,4 @@ +initialization +reset + + ^ stream reset \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index 2cb3537b..f2721d0c 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! +self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! diff --git a/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterStreamTest.class/instance/testReset.st b/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterStreamTest.class/instance/testReset.st new file mode 100644 index 00000000..678390b0 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Tests.package/ZnCharacterStreamTest.class/instance/testReset.st @@ -0,0 +1,8 @@ +tests +testReset + + | stream | + stream := ZnCharacterReadStream on: 'abc' asByteArray readStream. + self assert: stream next equals: $a. + stream reset. + self assert: stream next equals: $a \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st index d2931a20..099ac033 100644 --- a/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st @@ -1 +1 @@ -SystemOrganization addCategory: #'Zinc-Character-Encoding-Tests'! +self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Tests' withTags: #()! From bd06fdb4f42cf0522757e7ebc00033169599b1d6 Mon Sep 17 00:00:00 2001 From: Torsten Bergmann Date: Tue, 28 May 2024 18:58:59 +0200 Subject: [PATCH 04/13] Cleanup: ZnCharacterEncoder, ZnEncodedStream, ZnEncodedReadStream and ZnEncodedWriteStream should be abstract classes Fix #139 and https://github.com/pharo-project/pharo/issues/16708 --- .../ZnCharacterEncoder.class/class/isAbstract.st | 4 ++++ .../ZnEncodedReadStream.class/class/isAbstract.st | 4 ++++ .../ZnEncodedStream.class/class/isAbstract.st | 4 ++++ .../ZnEncodedWriteStream.class/class/isAbstract.st | 4 ++++ .../monticello.meta/categories.st | 2 +- 5 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnCharacterEncoder.class/class/isAbstract.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/class/isAbstract.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/class/isAbstract.st create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnEncodedWriteStream.class/class/isAbstract.st diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnCharacterEncoder.class/class/isAbstract.st b/repository/Zinc-Character-Encoding-Core.package/ZnCharacterEncoder.class/class/isAbstract.st new file mode 100644 index 00000000..ef117b02 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnCharacterEncoder.class/class/isAbstract.st @@ -0,0 +1,4 @@ +testing +isAbstract + + ^ self == ZnCharacterEncoder \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/class/isAbstract.st b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/class/isAbstract.st new file mode 100644 index 00000000..7b5ef11e --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/class/isAbstract.st @@ -0,0 +1,4 @@ +testing +isAbstract + + ^ self == ZnEncodedReadStream \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/class/isAbstract.st b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/class/isAbstract.st new file mode 100644 index 00000000..0a22e299 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/class/isAbstract.st @@ -0,0 +1,4 @@ +testing +isAbstract + + ^ self == ZnEncodedStream \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnEncodedWriteStream.class/class/isAbstract.st b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedWriteStream.class/class/isAbstract.st new file mode 100644 index 00000000..3ed952fd --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedWriteStream.class/class/isAbstract.st @@ -0,0 +1,4 @@ +testing +isAbstract + + ^ self == ZnEncodedWriteStream \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index 2cb3537b..f2721d0c 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! +self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! From 532e3fe21982380e8bf517be36fa604f54f50718 Mon Sep 17 00:00:00 2001 From: Torsten Bergmann Date: Tue, 28 May 2024 20:31:36 +0200 Subject: [PATCH 05/13] Fix lint issues on ZnEncodedReadStream Fix #141 --- .../ZnEncodedReadStream.class/instance/collectionSpecies.st | 3 +++ .../monticello.meta/categories.st | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/instance/collectionSpecies.st diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/instance/collectionSpecies.st b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/instance/collectionSpecies.st new file mode 100644 index 00000000..9d11ddb0 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/instance/collectionSpecies.st @@ -0,0 +1,3 @@ +accessing +collectionSpecies + ^ self subclassResponsibility \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index 2cb3537b..f2721d0c 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! +self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! From b5e1044a00ff860d9fd37b4ec05eac965478def7 Mon Sep 17 00:00:00 2001 From: Torsten Bergmann Date: Tue, 28 May 2024 20:43:02 +0200 Subject: [PATCH 06/13] Fix lint issue on ZnEncodedStream Fix #143 --- .../instance/isBinary.st | 0 .../ZnEncodedWriteStream.class/instance/isBinary.st | 3 --- .../monticello.meta/categories.st | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) rename repository/Zinc-Character-Encoding-Core.package/{ZnEncodedReadStream.class => ZnEncodedStream.class}/instance/isBinary.st (100%) delete mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnEncodedWriteStream.class/instance/isBinary.st diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/instance/isBinary.st b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/instance/isBinary.st similarity index 100% rename from repository/Zinc-Character-Encoding-Core.package/ZnEncodedReadStream.class/instance/isBinary.st rename to repository/Zinc-Character-Encoding-Core.package/ZnEncodedStream.class/instance/isBinary.st diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnEncodedWriteStream.class/instance/isBinary.st b/repository/Zinc-Character-Encoding-Core.package/ZnEncodedWriteStream.class/instance/isBinary.st deleted file mode 100644 index 37868db5..00000000 --- a/repository/Zinc-Character-Encoding-Core.package/ZnEncodedWriteStream.class/instance/isBinary.st +++ /dev/null @@ -1,3 +0,0 @@ -testing -isBinary - ^ false \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index 2cb3537b..f2721d0c 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! +self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! From 48211778c34bb9b2e109e76f4d567c8dfe26f54b Mon Sep 17 00:00:00 2001 From: Astares Date: Tue, 28 May 2024 20:53:54 +0200 Subject: [PATCH 07/13] Update categories.st --- .../monticello.meta/categories.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index f2721d0c..23bcfcce 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! +SystemOrganization addCategory: #'Zinc-Character-Encoding-Core' withTags: #()! From 47a67edd710e91686b3c4e9b3b85d4779de77d5a Mon Sep 17 00:00:00 2001 From: Astares Date: Tue, 28 May 2024 20:54:22 +0200 Subject: [PATCH 08/13] Update categories.st --- .../monticello.meta/categories.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index 23bcfcce..2cb3537b 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -SystemOrganization addCategory: #'Zinc-Character-Encoding-Core' withTags: #()! +SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! From 7e68c90fa5ff97de436ca22ba545ceeb96a56cd1 Mon Sep 17 00:00:00 2001 From: Astares Date: Tue, 28 May 2024 20:54:56 +0200 Subject: [PATCH 09/13] Update categories.st --- .../monticello.meta/categories.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st index 099ac033..d2931a20 100644 --- a/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Tests.package/monticello.meta/categories.st @@ -1 +1 @@ -self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Tests' withTags: #()! +SystemOrganization addCategory: #'Zinc-Character-Encoding-Tests'! From b0c3be423c150372399f97a2b4aab8f73d35190b Mon Sep 17 00:00:00 2001 From: Astares Date: Tue, 28 May 2024 20:55:38 +0200 Subject: [PATCH 10/13] Update categories.st --- .../monticello.meta/categories.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index f2721d0c..2cb3537b 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! +SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! From 6bb6a186e5caafd422f9b1be58f47c13c7179431 Mon Sep 17 00:00:00 2001 From: Astares Date: Tue, 28 May 2024 20:56:16 +0200 Subject: [PATCH 11/13] Update categories.st --- .../monticello.meta/categories.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index f2721d0c..2cb3537b 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! +SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! From 76318ee28be5609b4a33a60438fd2922f7b8b2f9 Mon Sep 17 00:00:00 2001 From: Astares Date: Tue, 28 May 2024 20:57:01 +0200 Subject: [PATCH 12/13] Update categories.st --- .../monticello.meta/categories.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st index f2721d0c..2cb3537b 100644 --- a/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st +++ b/repository/Zinc-Character-Encoding-Core.package/monticello.meta/categories.st @@ -1 +1 @@ -self packageOrganizer ensurePackage: #'Zinc-Character-Encoding-Core' withTags: #()! +SystemOrganization addCategory: #'Zinc-Character-Encoding-Core'! From d35eb640ca52a07ee493763a997991df83b181fa Mon Sep 17 00:00:00 2001 From: Sven Van Caekenberghe Date: Wed, 29 May 2024 18:53:28 +0200 Subject: [PATCH 13/13] Use newer announcer API https://github.com/pharo-project/pharo/pull/16681 --- .../ZnLogEvent.class/class/logToTranscript.st | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/repository/Zinc-HTTP.package/ZnLogEvent.class/class/logToTranscript.st b/repository/Zinc-HTTP.package/ZnLogEvent.class/class/logToTranscript.st index 16e047b2..5536c62f 100644 --- a/repository/Zinc-HTTP.package/ZnLogEvent.class/class/logToTranscript.st +++ b/repository/Zinc-HTTP.package/ZnLogEvent.class/class/logToTranscript.st @@ -1,4 +1,7 @@ convenience logToTranscript self stopLoggingToTranscript. - ^ self announcer when: ZnLogEvent do: [ :event | self crTrace: event ] \ No newline at end of file + ^ self announcer + when: ZnLogEvent + do: [ :event | self crTrace: event ] + to: self