From c4d6201b7756f3d6a9fd191211cb41c7adb6c750 Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Thu, 6 Mar 2008 15:07:00 -0600 Subject: [PATCH] Unit tests and refactoring for ascii and latin1 --- extra/io/encodings/ascii/ascii-tests.factor | 9 +++++++++ extra/io/encodings/ascii/ascii.factor | 9 ++++++--- extra/io/encodings/latin1/latin1-tests.factor | 9 +++++++++ extra/io/encodings/latin1/latin1.factor | 5 +---- 4 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 extra/io/encodings/ascii/ascii-tests.factor create mode 100644 extra/io/encodings/latin1/latin1-tests.factor diff --git a/extra/io/encodings/ascii/ascii-tests.factor b/extra/io/encodings/ascii/ascii-tests.factor new file mode 100644 index 0000000000..4f6d28835a --- /dev/null +++ b/extra/io/encodings/ascii/ascii-tests.factor @@ -0,0 +1,9 @@ +USING: io.encodings.string io.encodings.ascii tools.test strings arrays ; +IN: io.encodings.ascii.tests + +[ B{ CHAR: f CHAR: o CHAR: o } ] [ "foo" ascii encode ] unit-test +[ { 128 } >string ascii encode ] must-fail +[ B{ 127 } ] [ { 127 } ascii encode ] unit-test + +[ "bar" ] [ "bar" ascii decode ] unit-test +[ { CHAR: b HEX: fffd CHAR: r } ] [ { CHAR: b 233 CHAR: r } ascii decode >array ] unit-test diff --git a/extra/io/encodings/ascii/ascii.factor b/extra/io/encodings/ascii/ascii.factor index fdefc35634..bd71b733f1 100644 --- a/extra/io/encodings/ascii/ascii.factor +++ b/extra/io/encodings/ascii/ascii.factor @@ -3,13 +3,16 @@ USING: io io.encodings strings kernel math sequences byte-arrays io.encodings ; IN: io.encodings.ascii -: encode-check<= ( string stream max -- ) +: encode-check< ( string stream max -- ) [ pick <= [ encode-error ] [ stream-write1 ] if ] 2curry each ; +: push-if< ( sbuf character max -- ) + over <= [ drop HEX: fffd ] when swap push ; + TUPLE: ascii ; M: ascii stream-write-encoded ( string stream encoding -- ) - drop 127 encode-check<= ; + drop 128 encode-check< ; M: ascii decode-step - drop dup 128 >= [ decode-error ] [ swap push ] if ; + drop 128 push-if< ; diff --git a/extra/io/encodings/latin1/latin1-tests.factor b/extra/io/encodings/latin1/latin1-tests.factor new file mode 100644 index 0000000000..a89bfe0e6f --- /dev/null +++ b/extra/io/encodings/latin1/latin1-tests.factor @@ -0,0 +1,9 @@ +USING: io.encodings.string io.encodings.latin1 tools.test strings arrays ; +IN: io.encodings.latin1.tests + +[ B{ CHAR: f CHAR: o CHAR: o } ] [ "foo" latin1 encode ] unit-test +[ { 256 } >string latin1 encode ] must-fail +[ B{ 255 } ] [ { 255 } latin1 encode ] unit-test + +[ "bar" ] [ "bar" latin1 decode ] unit-test +[ { CHAR: b 233 CHAR: r } ] [ { CHAR: b 233 CHAR: r } latin1 decode >array ] unit-test diff --git a/extra/io/encodings/latin1/latin1.factor b/extra/io/encodings/latin1/latin1.factor index 989f45bc64..ec01da5983 100755 --- a/extra/io/encodings/latin1/latin1.factor +++ b/extra/io/encodings/latin1/latin1.factor @@ -6,7 +6,4 @@ IN: io.encodings.latin1 TUPLE: latin1 ; M: latin1 stream-write-encoded - drop 255 encode-check<= ; - -M: latin1 decode-step - drop dup 256 >= [ decode-error ] [ swap push ] if ; + drop 256 encode-check< ;