#lang racket/base (require "racket.rkt") #| approximates https://github.com/mbutterick/restructure/blob/master/test/Optional.coffee |# ;describe 'Optional', -> ; describe 'decode', -> ; it 'should not decode when condition is falsy', -> (parameterize ([current-input-port (open-input-bytes (bytes 0))]) (define optional (+Optional uint8 #f)) (check-equal? (decode optional) (void)) (check-equal? (pos (current-input-port)) 0)) ; it 'should not decode when condition is a function and falsy', -> (parameterize ([current-input-port (open-input-bytes (bytes 0))]) (define optional (+Optional uint8 (λ _ #f))) (check-equal? (decode optional) (void)) (check-equal? (pos (current-input-port)) 0)) ; it 'should decode when condition is omitted', -> (parameterize ([current-input-port (open-input-bytes (bytes 0))]) (define optional (+Optional uint8)) (check-not-equal? (decode optional) (void)) (check-equal? (pos (current-input-port)) 1)) ; ; it 'should decode when condition is truthy', -> (parameterize ([current-input-port (open-input-bytes (bytes 0))]) (define optional (+Optional uint8 #t)) (check-not-equal? (decode optional) (void)) (check-equal? (pos (current-input-port)) 1)) ; it 'should decode when condition is a function and truthy', -> (parameterize ([current-input-port (open-input-bytes (bytes 0))]) (define optional (+Optional uint8 (λ _ #t))) (check-not-equal? (decode optional) (void)) (check-equal? (pos (current-input-port)) 1)) ; describe 'size', -> (check-equal? (size (+Optional uint8 #f)) 0) ; ; it 'should return 0 when condition is a function and falsy', -> (check-equal? (size (+Optional uint8 (λ _ #f))) 0) ; it 'should return given type size when condition is omitted', -> (check-equal? (size (+Optional uint8)) 1) ; it 'should return given type size when condition is truthy', -> (check-equal? (size (+Optional uint8 #t)) 1) ; it 'should return given type size when condition is a function and truthy', -> (check-equal? (size (+Optional uint8 (λ _ #t))) 1) ; describe 'encode', -> ; it 'should not encode when condition is falsy', (done) -> (parameterize ([current-output-port (open-output-bytes)]) (define optional (+Optional uint8 #f)) (encode optional 128) (check-equal? (dump (current-output-port)) (bytes))) ; it 'should not encode when condition is a function and falsy', (done) -> (parameterize ([current-output-port (open-output-bytes)]) (define optional (+Optional uint8 (λ _ #f))) (encode optional 128) (check-equal? (dump (current-output-port)) (bytes))) ; ; it 'should encode when condition is omitted', (done) -> (parameterize ([current-output-port (open-output-bytes)]) (define optional (+Optional uint8)) (encode optional 128) (check-equal? (dump (current-output-port)) (bytes 128))) ; it 'should encode when condition is truthy', (done) -> (parameterize ([current-output-port (open-output-bytes)]) (define optional (+Optional uint8 #t)) (encode optional 128) (check-equal? (dump (current-output-port)) (bytes 128))) ; it 'should encode when condition is a function and truthy', (done) -> (parameterize ([current-output-port (open-output-bytes)]) (define optional (+Optional uint8 (λ _ #t))) (encode optional 128) (check-equal? (dump (current-output-port)) (bytes 128)))