Artifact
0b7338cf6f6dcb935913115ef733ef07605d1a92a01277a495d489f849ae79d2:
0000: 75 73 65 20 73 6d 74 70 32 74 67 3a 3a 75 74 69 use smtp2tg::uti
0010: 6c 73 3a 3a 7b 0a 09 76 61 6c 69 64 61 74 65 2c ls::{..validate,
0020: 0a 09 52 45 5f 43 4c 4f 53 49 4e 47 2c 0a 09 52 ..RE_CLOSING,..R
0030: 45 5f 44 4f 4d 41 49 4e 2c 0a 7d 3b 0a 75 73 65 E_DOMAIN,.};.use
0040: 20 73 74 61 63 6b 65 64 5f 65 72 72 6f 72 73 3a stacked_errors:
0050: 3a 52 65 73 75 6c 74 3b 0a 0a 23 5b 74 65 73 74 :Result;..#[test
0060: 5d 0a 66 6e 20 74 65 73 74 5f 76 61 6c 69 64 61 ].fn test_valida
0070: 74 65 5f 76 61 6c 69 64 5f 68 74 6d 6c 28 29 20 te_valid_html()
0080: 2d 3e 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a -> Result<()> {.
0090: 09 6c 65 74 20 68 74 6d 6c 20 3d 20 22 3c 70 3e .let html = "<p>
00a0: 53 6f 6d 65 20 3c 62 3e 76 61 6c 69 64 3c 2f 62 Some <b>valid</b
00b0: 3e 20 48 54 4d 4c 3c 2f 70 3e 22 3b 0a 09 6c 65 > HTML</p>";..le
00c0: 74 20 65 73 63 61 70 65 64 20 3d 20 76 61 6c 69 t escaped = vali
00d0: 64 61 74 65 28 68 74 6d 6c 29 3f 3b 0a 09 61 73 date(html)?;..as
00e0: 73 65 72 74 5f 65 71 21 28 65 73 63 61 70 65 64 sert_eq!(escaped
00f0: 2c 20 22 26 6c 74 3b 70 26 67 74 3b 53 6f 6d 65 , "<p>Some
0100: 20 26 6c 74 3b 62 26 67 74 3b 76 61 6c 69 64 26 <b>valid&
0110: 6c 74 3b 2f 62 26 67 74 3b 20 48 54 4d 4c 26 6c lt;/b> HTML&l
0120: 74 3b 2f 70 26 67 74 3b 22 29 3b 0a 09 4f 6b 28 t;/p>");..Ok(
0130: 28 29 29 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 ()).}..#[test].f
0140: 6e 20 74 65 73 74 5f 76 61 6c 69 64 61 74 65 5f n test_validate_
0150: 63 6c 6f 73 69 6e 67 5f 74 61 67 28 29 20 2d 3e closing_tag() ->
0160: 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a 09 6c Result<()> {..l
0170: 65 74 20 68 74 6d 6c 20 3d 20 22 3c 70 3e 53 6f et html = "<p>So
0180: 6d 65 20 3c 62 3e 76 61 6c 69 64 3c 2f 62 3e 20 me <b>valid</b>
0190: 48 54 4d 4c 3c 2f 70 3e 3c 2f 63 6f 64 65 3e 3c HTML</p></code><
01a0: 61 20 68 72 65 66 3d 27 68 74 74 70 3a 2f 2f 73 a href='http://s
01b0: 6f 6d 65 77 65 72 65 2e 63 6f 6d 27 3e 4c 69 6e omewere.com'>Lin
01c0: 6b 20 69 6e 6a 65 63 74 69 6f 6e 21 3c 2f 61 3e k injection!</a>
01d0: 22 3b 0a 09 61 73 73 65 72 74 21 28 76 61 6c 69 ";..assert!(vali
01e0: 64 61 74 65 28 68 74 6d 6c 29 2e 69 73 5f 65 72 date(html).is_er
01f0: 72 28 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74 r());. assert
0200: 21 28 76 61 6c 69 64 61 74 65 28 22 3c 2f 70 72 !(validate("</pr
0210: 65 3e 22 29 2e 69 73 5f 65 72 72 28 29 29 3b 0a e>").is_err());.
0220: 20 20 20 20 61 73 73 65 72 74 21 28 76 61 6c 69 assert!(vali
0230: 64 61 74 65 28 22 3c 2f 63 6f 64 65 3e 22 29 2e date("</code>").
0240: 69 73 5f 65 72 72 28 29 29 3b 0a 20 20 20 20 61 is_err());. a
0250: 73 73 65 72 74 21 28 76 61 6c 69 64 61 74 65 28 ssert!(validate(
0260: 22 3c 2f 70 72 65 3e 5c 6e 22 29 2e 69 73 5f 65 "</pre>\n").is_e
0270: 72 72 28 29 29 3b 0a 20 20 20 20 61 73 73 65 72 rr());. asser
0280: 74 21 28 76 61 6c 69 64 61 74 65 28 22 3c 2f 63 t!(validate("</c
0290: 6f 64 65 3e 5c 74 22 29 2e 69 73 5f 65 72 72 28 ode>\t").is_err(
02a0: 29 29 3b 0a 09 4f 6b 28 28 29 29 0a 7d 0a 0a 23 ));..Ok(()).}..#
02b0: 5b 74 65 73 74 5d 0a 66 6e 20 74 65 73 74 5f 76 [test].fn test_v
02c0: 61 6c 69 64 61 74 65 5f 65 6d 70 74 79 5f 73 74 alidate_empty_st
02d0: 72 69 6e 67 28 29 20 2d 3e 20 52 65 73 75 6c 74 ring() -> Result
02e0: 3c 28 29 3e 20 7b 0a 09 61 73 73 65 72 74 5f 65 <()> {..assert_e
02f0: 71 21 28 76 61 6c 69 64 61 74 65 28 22 22 29 2e q!(validate("").
0300: 75 6e 77 72 61 70 28 29 2c 20 22 22 29 3b 0a 09 unwrap(), "");..
0310: 4f 6b 28 28 29 29 0a 7d 0a 0a 23 5b 74 65 73 74 Ok(()).}..#[test
0320: 5d 0a 66 6e 20 74 65 73 74 5f 76 61 6c 69 64 61 ].fn test_valida
0330: 74 65 5f 77 68 69 74 65 73 70 61 63 65 28 29 20 te_whitespace()
0340: 2d 3e 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a -> Result<()> {.
0350: 09 61 73 73 65 72 74 5f 65 71 21 28 76 61 6c 69 .assert_eq!(vali
0360: 64 61 74 65 28 22 20 20 20 5c 74 5c 6e 22 29 2e date(" \t\n").
0370: 75 6e 77 72 61 70 28 29 2c 20 22 20 20 20 5c 74 unwrap(), " \t
0380: 5c 6e 22 29 3b 20 2f 2f 20 6e 6f 20 65 73 63 61 \n"); // no esca
0390: 70 69 6e 67 20 66 6f 72 20 77 68 69 74 65 73 70 ping for whitesp
03a0: 61 63 65 0a 09 4f 6b 28 28 29 29 0a 7d 0a 0a 23 ace..Ok(()).}..#
03b0: 5b 74 65 73 74 5d 0a 66 6e 20 74 65 73 74 5f 72 [test].fn test_r
03c0: 65 67 65 78 5f 63 6c 6f 73 69 6e 67 5f 74 61 67 egex_closing_tag
03d0: 5f 6d 61 74 63 68 65 73 28 29 20 7b 0a 09 61 73 _matches() {..as
03e0: 73 65 72 74 21 28 52 45 5f 43 4c 4f 53 49 4e 47 sert!(RE_CLOSING
03f0: 2e 69 73 5f 6d 61 74 63 68 28 22 3c 2f 70 72 65 .is_match("</pre
0400: 3e 22 29 29 3b 0a 09 61 73 73 65 72 74 21 28 52 >"));..assert!(R
0410: 45 5f 43 4c 4f 53 49 4e 47 2e 69 73 5f 6d 61 74 E_CLOSING.is_mat
0420: 63 68 28 22 3c 2f 63 6f 64 65 3e 5c 74 3e 22 29 ch("</code>\t>")
0430: 29 3b 0a 09 61 73 73 65 72 74 21 28 21 52 45 5f );..assert!(!RE_
0440: 43 4c 4f 53 49 4e 47 2e 69 73 5f 6d 61 74 63 68 CLOSING.is_match
0450: 28 22 3c 2f 64 69 76 3e 22 29 29 3b 20 2f 2f 20 ("</div>")); //
0460: 4e 6f 74 20 61 20 70 72 65 2f 63 6f 64 65 20 74 Not a pre/code t
0470: 61 67 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e ag.}..#[test].fn
0480: 20 74 65 73 74 5f 72 65 67 65 78 5f 64 6f 6d 61 test_regex_doma
0490: 69 6e 5f 6d 61 74 63 68 65 73 28 29 20 7b 0a 09 in_matches() {..
04a0: 61 73 73 65 72 74 21 28 52 45 5f 44 4f 4d 41 49 assert!(RE_DOMAI
04b0: 4e 2e 69 73 5f 6d 61 74 63 68 28 22 65 78 61 6d N.is_match("exam
04c0: 70 6c 65 2e 63 6f 6d 22 29 29 3b 0a 09 61 73 73 ple.com"));..ass
04d0: 65 72 74 21 28 52 45 5f 44 4f 4d 41 49 4e 2e 69 ert!(RE_DOMAIN.i
04e0: 73 5f 6d 61 74 63 68 28 22 73 75 62 2e 65 78 61 s_match("sub.exa
04f0: 6d 70 6c 65 2e 63 6f 2e 75 6b 22 29 29 3b 0a 09 mple.co.uk"));..
0500: 61 73 73 65 72 74 21 28 21 52 45 5f 44 4f 4d 41 assert!(!RE_DOMA
0510: 49 4e 2e 69 73 5f 6d 61 74 63 68 28 22 69 6e 76 IN.is_match("inv
0520: 61 6c 69 64 40 64 6f 6d 61 69 6e 2e 63 6f 6d 22 alid@domain.com"
0530: 29 29 3b 0a 7d 0a ));.}.