/test/test-private.scm

http://r6rs-protobuf.googlecode.com/ · Scheme · 132 lines · 98 code · 22 blank · 12 comment · 0 complexity · dd1870ceabc4b048c07aac3839932cf2 MD5 · raw file

  1. ;; test-private.scm: private API test routines for r6rs-protobuf
  2. ;; Copyright (C) 2011 Julian Graham
  3. ;; r6rs-protobuf is free software: you can redistribute it and/or modify
  4. ;; it under the terms of the GNU General Public License as published by
  5. ;; the Free Software Foundation, either version 3 of the License, or
  6. ;; (at your option) any later version.
  7. ;; This program is distributed in the hope that it will be useful,
  8. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. ;; GNU General Public License for more details.
  11. ;; You should have received a copy of the GNU General Public License
  12. ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. #!r6rs
  14. (import (rnrs))
  15. (import (protobuf private))
  16. (import (srfi :64))
  17. (test-begin "private")
  18. (test-begin "read")
  19. (define-record-type read-test-message
  20. (fields foo) (opaque #t) (parent protobuf:message) (sealed #t))
  21. (define-record-type read-test-message-builder
  22. (fields (mutable foo))
  23. (parent protobuf:message-builder)
  24. (protocol
  25. (lambda (p)
  26. (lambda ()
  27. (let ((n (p read-test-message
  28. (list (protobuf:make-field-descriptor
  29. 0 "foo" protobuf:field-type-string #f #t #f)))))
  30. (n #f))))))
  31. (define (make-field-header field-number wire-type-num)
  32. (bitwise-ior (bitwise-arithmetic-shift-left field-number 3) wire-type-num))
  33. (test-begin "unknown-fields")
  34. (test-group "varint"
  35. (let-values (((bv-out bv-transcoder) (open-bytevector-output-port)))
  36. (protobuf:write-varint bv-out (make-field-header 1 0))
  37. (protobuf:write-varint bv-out 256)
  38. (protobuf:write-varint bv-out (make-field-header 0 2))
  39. (protobuf:write-string bv-out "Test")
  40. (let ((m (protobuf:message-read
  41. (make-read-test-message-builder)
  42. (open-bytevector-input-port (bv-transcoder)))))
  43. (test-assert (read-test-message? m))
  44. (test-equal "Test" (read-test-message-foo m)))))
  45. (test-group "64-bit"
  46. (let-values (((bv-out bv-transcoder) (open-bytevector-output-port)))
  47. (protobuf:write-varint bv-out (make-field-header 1 1))
  48. (protobuf:write-fixed64 bv-out 256)
  49. (protobuf:write-varint bv-out (make-field-header 0 2))
  50. (protobuf:write-string bv-out "Test")
  51. (let ((m (protobuf:message-read
  52. (make-read-test-message-builder)
  53. (open-bytevector-input-port (bv-transcoder)))))
  54. (test-assert (read-test-message? m))
  55. (test-equal "Test" (read-test-message-foo m)))))
  56. (test-group "length-delimited"
  57. (let-values (((bv-out bv-transcoder) (open-bytevector-output-port)))
  58. (protobuf:write-varint bv-out (make-field-header 1 2))
  59. (protobuf:write-string bv-out "Ignore")
  60. (protobuf:write-varint bv-out (make-field-header 0 2))
  61. (protobuf:write-string bv-out "Test")
  62. (let ((m (protobuf:message-read
  63. (make-read-test-message-builder)
  64. (open-bytevector-input-port (bv-transcoder)))))
  65. (test-assert (read-test-message? m))
  66. (test-equal "Test" (read-test-message-foo m)))))
  67. (test-group "groups"
  68. (let-values (((bv-out bv-transcoder) (open-bytevector-output-port)))
  69. (protobuf:write-varint bv-out (make-field-header 1 3))
  70. (protobuf:write-string bv-out "[group contents]")
  71. (protobuf:write-varint bv-out (make-field-header 1 4))
  72. (protobuf:write-varint bv-out (make-field-header 0 2))
  73. (protobuf:write-string bv-out "Test")
  74. (let ((m (protobuf:message-read
  75. (make-read-test-message-builder)
  76. (open-bytevector-input-port (bv-transcoder)))))
  77. (test-assert (read-test-message? m))
  78. (test-equal "Test" (read-test-message-foo m)))))
  79. (test-group "32-bit"
  80. (let-values (((bv-out bv-transcoder) (open-bytevector-output-port)))
  81. (protobuf:write-varint bv-out (make-field-header 1 5))
  82. (protobuf:write-fixed32 bv-out 256)
  83. (protobuf:write-varint bv-out (make-field-header 0 2))
  84. (protobuf:write-string bv-out "Test")
  85. (let ((m (protobuf:message-read
  86. (make-read-test-message-builder)
  87. (open-bytevector-input-port (bv-transcoder)))))
  88. (test-assert (read-test-message? m))
  89. (test-equal "Test" (read-test-message-foo m)))))
  90. (test-end "unknown-fields")
  91. (test-end "read")
  92. (test-begin "write")
  93. (test-group "repeated"
  94. (test-group "primitive"
  95. (let* ((counter 0)
  96. (decorated-int32-serializer
  97. (lambda (p int32)
  98. (set! counter (+ counter 1)) (protobuf:write-int32 p int32)))
  99. (ftd (protobuf:make-field-type-descriptor
  100. "test" 'varint decorated-int32-serializer #f integer? 0))
  101. (m (protobuf:make-message
  102. (list (protobuf:make-field
  103. (protobuf:make-field-descriptor 0 "test" ftd #t #f #f)
  104. (vector 1 2 3)))
  105. (make-eqv-hashtable))))
  106. (let-values (((bv-out bv-transcoder) (open-bytevector-output-port)))
  107. (protobuf:message-write m bv-out)
  108. (test-equal 3 counter)))))
  109. (test-end "write")
  110. (test-end "private")