encode.rs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. extern crate base64;
  2. use base64::*;
  3. fn compare_encode(expected: &str, target: &[u8]) {
  4. assert_eq!(expected, encode(target));
  5. }
  6. #[test]
  7. fn encode_rfc4648_0() {
  8. compare_encode("", b"");
  9. }
  10. #[test]
  11. fn encode_rfc4648_1() {
  12. compare_encode("Zg==", b"f");
  13. }
  14. #[test]
  15. fn encode_rfc4648_2() {
  16. compare_encode("Zm8=", b"fo");
  17. }
  18. #[test]
  19. fn encode_rfc4648_3() {
  20. compare_encode("Zm9v", b"foo");
  21. }
  22. #[test]
  23. fn encode_rfc4648_4() {
  24. compare_encode("Zm9vYg==", b"foob");
  25. }
  26. #[test]
  27. fn encode_rfc4648_5() {
  28. compare_encode("Zm9vYmE=", b"fooba");
  29. }
  30. #[test]
  31. fn encode_rfc4648_6() {
  32. compare_encode("Zm9vYmFy", b"foobar");
  33. }
  34. #[test]
  35. fn encode_all_ascii() {
  36. let mut ascii = Vec::<u8>::with_capacity(128);
  37. for i in 0..128 {
  38. ascii.push(i);
  39. }
  40. compare_encode(
  41. "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7P\
  42. D0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn8\
  43. =",
  44. &ascii,
  45. );
  46. }
  47. #[test]
  48. fn encode_all_bytes() {
  49. let mut bytes = Vec::<u8>::with_capacity(256);
  50. for i in 0..255 {
  51. bytes.push(i);
  52. }
  53. bytes.push(255); //bug with "overflowing" ranges?
  54. compare_encode(
  55. "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7P\
  56. D0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn\
  57. +AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6\
  58. /wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==",
  59. &bytes,
  60. );
  61. }
  62. #[test]
  63. fn encode_all_bytes_url() {
  64. let mut bytes = Vec::<u8>::with_capacity(256);
  65. for i in 0..255 {
  66. bytes.push(i);
  67. }
  68. bytes.push(255); //bug with "overflowing" ranges?
  69. assert_eq!(
  70. "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0\
  71. -P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn\
  72. -AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq\
  73. -wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy\
  74. 8_T19vf4-fr7_P3-_w==",
  75. encode_config(&bytes, URL_SAFE)
  76. );
  77. }
  78. #[test]
  79. fn encode_url_safe_without_padding() {
  80. let encoded = encode_config(b"alice", URL_SAFE_NO_PAD);
  81. assert_eq!(&encoded, "YWxpY2U");
  82. assert_eq!(
  83. String::from_utf8(decode(&encoded).unwrap()).unwrap(),
  84. "alice"
  85. );
  86. }