kozan_core/html/
html_audio_element.rs1use super::media_element::MediaElement;
7use crate::Handle;
8use kozan_macros::Element;
9
10#[derive(Copy, Clone, Element)]
15#[element(tag = "audio")]
16pub struct HtmlAudioElement(Handle);
17
18impl MediaElement for HtmlAudioElement {}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23 use crate::dom::document::Document;
24 use crate::dom::traits::Element;
25 use crate::html::media_element::{MediaNetworkState, MediaReadyState};
26
27 #[test]
28 fn audio_tag_name() {
29 let doc = Document::new();
30 let audio = doc.create::<HtmlAudioElement>();
31 assert_eq!(audio.tag_name(), "audio");
32 }
33
34 #[test]
35 fn audio_src_roundtrip() {
36 let doc = Document::new();
37 let audio = doc.create::<HtmlAudioElement>();
38
39 assert_eq!(audio.src(), "");
40 audio.set_src("song.mp3");
41 assert_eq!(audio.src(), "song.mp3");
42 }
43
44 #[test]
45 fn audio_autoplay_toggle() {
46 let doc = Document::new();
47 let audio = doc.create::<HtmlAudioElement>();
48
49 assert!(!audio.autoplay());
50 audio.set_autoplay(true);
51 assert!(audio.autoplay());
52 audio.set_autoplay(false);
53 assert!(!audio.autoplay());
54 }
55
56 #[test]
57 fn audio_loop_toggle() {
58 let doc = Document::new();
59 let audio = doc.create::<HtmlAudioElement>();
60
61 assert!(!audio.loop_playback());
62 audio.set_loop_playback(true);
63 assert!(audio.loop_playback());
64 audio.set_loop_playback(false);
65 assert!(!audio.loop_playback());
66 }
67
68 #[test]
69 fn audio_muted_toggle() {
70 let doc = Document::new();
71 let audio = doc.create::<HtmlAudioElement>();
72
73 assert!(!audio.muted());
74 audio.set_muted(true);
75 assert!(audio.muted());
76 audio.set_muted(false);
77 assert!(!audio.muted());
78 }
79
80 #[test]
81 fn audio_controls_toggle() {
82 let doc = Document::new();
83 let audio = doc.create::<HtmlAudioElement>();
84
85 assert!(!audio.controls());
86 audio.set_controls(true);
87 assert!(audio.controls());
88 audio.set_controls(false);
89 assert!(!audio.controls());
90 }
91
92 #[test]
93 fn audio_preload_default_and_set() {
94 let doc = Document::new();
95 let audio = doc.create::<HtmlAudioElement>();
96
97 assert_eq!(audio.preload(), "auto");
99 audio.set_preload("none");
100 assert_eq!(audio.preload(), "none");
101 audio.set_preload("metadata");
102 assert_eq!(audio.preload(), "metadata");
103 }
104
105 #[test]
106 fn audio_default_ready_and_network_state() {
107 let doc = Document::new();
108 let audio = doc.create::<HtmlAudioElement>();
109
110 assert_eq!(audio.ready_state(), MediaReadyState::HaveNothing);
112 assert_eq!(audio.network_state(), MediaNetworkState::Empty);
113 }
114}