#lang racket/base
(require file/unzip
         racket/runtime-path
         racket/port
         tests/eli-tester)

(define-runtime-path unzip-me.zip "unzip-me.zip")

;; test-me.zip's directory structure is test-zip/1/data.dat
(define (test-with-unzip in)
  (call-with-unzip in
                   (lambda (tmp_dir)
                     (with-input-from-file (build-path tmp_dir "test-zip" "1" "data.dat")
                       (lambda ()
                         (test (read-line) => "chenxiao"))))))

(define (test-with-unzip-entry)
  (call-with-unzip-entry unzip-me.zip
                         (build-path "test-zip" "1" "data.dat")
                         (lambda (tmp_file)
                           (with-input-from-file tmp_file
                             (lambda ()
                               (test (read-line) => "chenxiao"))))))

(define (run-tests)
  (test-with-unzip unzip-me.zip)
  (call-with-input-file* unzip-me.zip test-with-unzip)
  (call-with-input-file* unzip-me.zip
                         (lambda(in_port) (test-with-unzip (input-port-append #f in_port))))
  (test-with-unzip-entry))

(provide tests)
(module+ main (tests))
(define (tests) (test do (run-tests)))
