ruffle/swf/src/test_data.rs

2704 lines
110 KiB
Rust
Raw Normal View History

2019-04-23 07:24:33 +00:00
#![allow(clippy::inconsistent_digit_grouping, clippy::unreadable_literal)]
use crate::avm1::types::*;
use crate::avm2::read::tests::read_abc_from_file;
2019-04-23 07:31:12 +00:00
use crate::avm2::types::*;
use crate::read::read_swf;
use crate::read::tests::{read_tag_bytes_from_file, read_tag_bytes_from_file_with_index};
2019-06-17 06:32:32 +00:00
use crate::tag_code::TagCode;
use crate::types::*;
use crate::write::write_swf;
2019-04-23 07:31:12 +00:00
use std::fs::File;
use std::vec::Vec;
2016-08-31 18:45:58 +00:00
#[allow(dead_code)]
pub fn echo_swf(filename: &str) {
let in_file = File::open(filename).unwrap();
let swf = read_swf(in_file).unwrap();
let out_file = File::create(filename).unwrap();
write_swf(&swf, out_file).unwrap();
}
pub type TestData<T> = (u8, T, Vec<u8>);
pub type TagTestData = TestData<Tag>;
2019-09-09 19:47:54 +00:00
pub type Avm1TestData = TestData<Action<'static>>;
2017-08-26 08:18:51 +00:00
pub type Avm2TestData = TestData<AbcFile>;
2016-08-31 18:45:58 +00:00
2017-06-24 19:56:49 +00:00
pub fn tag_tests() -> Vec<TagTestData> {
vec![
(
8,
Tag::CsmTextSettings(CsmTextSettings {
id: 2,
use_advanced_rendering: true,
grid_fit: TextGridFit::SubPixel,
thickness: 1.0,
sharpness: 2.0,
}),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineFont3-CS6.swf", TagCode::CsmTextSettings),
2017-06-24 19:56:49 +00:00
),
(
9, // Minimum version not listed in SWF19.
Tag::DefineBinaryData {
id: 1,
data: vec![84, 101, 115, 116, 105, 110, 103, 33],
},
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineBinaryData.swf", TagCode::DefineBinaryData),
2017-06-24 19:56:49 +00:00
),
(
1,
Tag::DefineBits {
id: 1,
jpeg_data: vec![
2019-04-23 07:31:12 +00:00
255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 255,
192, 0, 17, 8, 0, 5, 0, 6, 3, 1, 34, 0, 2, 17, 1, 3, 17, 1, 255, 218, 0, 12, 3,
1, 0, 2, 17, 3, 17, 0, 63, 0, 252, 215, 162, 138, 43, 248, 28, 255, 0, 180, 3,
255, 217,
2017-06-24 19:56:49 +00:00
],
},
read_tag_bytes_from_file(
"tests/swfs/DefineBits-JpegTables-MX.swf",
TagCode::DefineBits,
),
),
(
1,
Tag::DefineBitsJpeg2 {
id: 1,
jpeg_data: vec![
2019-04-23 07:31:12 +00:00
255, 216, 255, 219, 0, 67, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 219, 0,
67, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 196, 0, 31, 0, 0, 1, 5, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196,
0, 181, 16, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125, 1, 2, 3, 0, 4,
17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35,
66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25,
26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72,
73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106,
115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138,
146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168,
169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198,
199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227,
228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249,
250, 255, 196, 0, 31, 1, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 17, 0, 2, 1, 2, 4, 4, 3, 4,
7, 5, 4, 4, 0, 1, 2, 119, 0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97,
113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21,
98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42,
53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88,
89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120,
121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150,
151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180,
181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210,
211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233,
234, 242, 243, 244, 245, 246, 247, 248, 249, 250, 255, 217, 255, 216, 255, 224,
0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 255, 192, 0, 17, 8, 0, 5,
0, 5, 3, 1, 34, 0, 2, 17, 1, 3, 17, 1, 255, 218, 0, 12, 3, 1, 0, 2, 17, 3, 17,
0, 63, 0, 252, 215, 162, 138, 43, 248, 28, 255, 0, 180, 3, 255, 217,
2017-06-24 19:56:49 +00:00
],
},
read_tag_bytes_from_file(
"tests/swfs/DefineBitsJpeg2-MX.swf",
TagCode::DefineBitsJpeg2,
),
),
(
3,
Tag::DefineBitsJpeg3(DefineBitsJpeg3 {
id: 1,
version: 3,
deblocking: 0.0,
data: vec![
2019-04-23 07:31:12 +00:00
255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 255,
219, 0, 67, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 219, 0, 67, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 192, 0, 17, 8, 0, 8, 0, 8, 3, 1, 34, 0, 2, 17,
1, 3, 17, 1, 255, 196, 0, 21, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 10, 255, 196, 0, 20, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 196, 0, 21, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,
255, 196, 0, 20, 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
218, 0, 12, 3, 1, 0, 2, 17, 3, 17, 0, 63, 0, 134, 240, 23, 224, 94, 255, 217,
2017-06-24 19:56:49 +00:00
],
alpha_data: vec![120, 218, 107, 104, 160, 12, 0, 0, 16, 124, 32, 1],
}),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineBitsJpeg3.swf", TagCode::DefineBitsJpeg3),
2017-06-24 19:56:49 +00:00
),
/* TODO(Herschel): How do I get Flash to generate a DefineBitsJPEG4 tag?
2019-04-23 07:31:12 +00:00
(
10,
Tag::DefineBitsJpeg3(DefineBitsJpeg3 {
id: 1,
version: 4,
deblocking: 0.0,
data: vec![
255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 1, 0, 1, 0,0, 255, 219,
0, 67, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 219, 0, 67, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
255, 192, 0, 17, 8, 0, 8, 0, 8, 3, 1, 34, 0, 2, 17, 1, 3, 17, 1, 255, 196, 0, 21,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 255, 196, 0, 20, 16, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 196, 0, 21, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 255, 196, 0, 20, 17, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 218, 0, 12, 3, 1, 0, 2, 17, 3, 17, 0, 63, 0, 134,
240, 23, 224, 94, 255, 217
],
alpha_data: vec![120, 218, 107, 104, 160, 12, 0, 0, 16, 124, 32, 1],
}),
read_tag_bytes_from_file("tests/swfs/DefineBitsJpeg4-CC.swf", TagCode::DefineBitsJpeg4)
),
*/
2017-06-24 19:56:49 +00:00
(
3,
Tag::DefineBitsLossless(DefineBitsLossless {
version: 1,
id: 1,
format: BitmapFormat::Rgb32,
width: 8,
height: 8,
num_colors: 0,
data: vec![
2019-04-23 07:31:12 +00:00
120, 218, 251, 207, 192, 240, 255, 255, 8, 198, 0, 4, 128, 127, 129,
2017-06-24 19:56:49 +00:00
],
}),
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineBitsLossless.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineBitsLossless,
),
),
(
3,
Tag::DefineBitsLossless(DefineBitsLossless {
version: 2,
id: 1,
format: BitmapFormat::Rgb32,
width: 8,
height: 8,
num_colors: 0,
data: vec![
2019-04-23 07:31:12 +00:00
120, 218, 107, 96, 96, 168, 107, 24, 193, 24, 0, 227, 81, 63, 129,
2017-06-24 19:56:49 +00:00
],
}),
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineBitsLossless2.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineBitsLossless2,
),
),
(
1,
Tag::DefineButton(Box::new(Button {
id: 3,
is_track_as_menu: false,
records: vec![
ButtonRecord {
id: 1,
states: vec![ButtonState::Up, ButtonState::Over]
.into_iter()
.collect(),
depth: 1,
matrix: Matrix::new(),
color_transform: ColorTransform::new(),
filters: vec![],
blend_mode: BlendMode::Normal,
},
ButtonRecord {
id: 2,
states: vec![ButtonState::Down, ButtonState::HitTest]
.into_iter()
.collect(),
depth: 1,
matrix: Matrix::new(),
color_transform: ColorTransform::new(),
filters: vec![],
blend_mode: BlendMode::Normal,
},
],
2019-04-23 07:31:12 +00:00
actions: vec![ButtonAction {
conditions: vec![ButtonActionCondition::OverDownToOverUp]
.into_iter()
.collect(),
key_code: None,
action_data: vec![0],
}],
2017-06-24 19:56:49 +00:00
})),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineButton-MX.swf", TagCode::DefineButton),
2017-06-24 19:56:49 +00:00
),
(
3,
Tag::DefineButton2(Box::new(Button {
id: 4,
is_track_as_menu: true,
records: vec![
ButtonRecord {
id: 2,
states: vec![ButtonState::Up, ButtonState::Over]
.into_iter()
.collect(),
depth: 1,
matrix: Matrix::new(),
color_transform: ColorTransform {
r_multiply: 1f32,
g_multiply: 1f32,
b_multiply: 1f32,
a_multiply: 1f32,
r_add: 200,
g_add: 0,
b_add: 0,
a_add: 0,
},
2019-04-23 07:31:12 +00:00
filters: vec![Filter::BlurFilter(Box::new(BlurFilter {
blur_x: 5f64,
blur_y: 5f64,
num_passes: 1,
}))],
2017-06-24 19:56:49 +00:00
blend_mode: BlendMode::Difference,
},
ButtonRecord {
id: 3,
states: vec![ButtonState::Down, ButtonState::HitTest]
.into_iter()
.collect(),
depth: 1,
matrix: Matrix::new(),
color_transform: ColorTransform {
r_multiply: 0f32,
g_multiply: 1f32,
b_multiply: 0f32,
a_multiply: 1f32,
r_add: 0,
g_add: 0,
b_add: 0,
a_add: 0,
},
filters: vec![],
blend_mode: BlendMode::Normal,
},
],
actions: vec![
ButtonAction {
conditions: vec![ButtonActionCondition::OverDownToOverUp]
.into_iter()
.collect(),
key_code: None,
action_data: vec![150, 3, 0, 0, 65, 0, 38, 0], // trace("A");
},
ButtonAction {
conditions: vec![ButtonActionCondition::KeyPress].into_iter().collect(),
2017-08-26 08:18:51 +00:00
key_code: Some(3), // Home
2017-06-24 19:56:49 +00:00
action_data: vec![150, 3, 0, 0, 66, 0, 38, 0], // trace("B");
},
],
})),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineButton2-CS6.swf", TagCode::DefineButton2),
2017-06-24 19:56:49 +00:00
),
(
2,
Tag::DefineButtonColorTransform {
id: 3,
color_transforms: vec![
ColorTransform {
r_multiply: 1f32,
g_multiply: 0f32,
b_multiply: 0f32,
a_multiply: 1f32,
r_add: 1,
g_add: 0,
b_add: 0,
a_add: 0,
},
ColorTransform {
r_multiply: 0f32,
g_multiply: 1f32,
b_multiply: 0f32,
a_multiply: 1f32,
r_add: 0,
g_add: 1,
b_add: 0,
a_add: 0,
},
ColorTransform {
r_multiply: 0f32,
g_multiply: 0f32,
b_multiply: 1f32,
a_multiply: 1f32,
r_add: 0,
g_add: 0,
b_add: 1,
a_add: 0,
},
],
},
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineButtonCxformSound-MX.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineButtonCxform,
),
),
(
2,
Tag::DefineButtonSound(Box::new(ButtonSounds {
id: 3,
up_to_over_sound: Some((
2,
SoundInfo {
event: SoundEvent::Event,
in_sample: None,
out_sample: None,
num_loops: 1,
envelope: None,
},
)),
over_to_down_sound: Some((
2,
SoundInfo {
event: SoundEvent::Start,
in_sample: None,
out_sample: None,
num_loops: 2,
envelope: None,
},
)),
down_to_over_sound: None,
over_to_up_sound: None,
})),
2017-06-24 19:56:49 +00:00
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineButtonCxformSound-MX.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineButtonSound,
),
),
(
4,
Tag::DefineEditText(Box::new(EditText {
id: 2,
bounds: Rectangle {
x_min: Twips::from_pixels(-2.0),
x_max: Twips::from_pixels(77.9),
y_min: Twips::from_pixels(-2.0),
y_max: Twips::from_pixels(23.9),
2017-06-24 19:56:49 +00:00
},
font_id: Some(1),
font_class_name: None,
height: Some(360),
color: Some(Color {
r: 0,
g: 255,
b: 0,
a: 255,
}),
max_length: None,
layout: Some(TextLayout {
align: TextAlign::Justify,
left_margin: Twips::from_pixels(3.0),
right_margin: Twips::from_pixels(4.0),
indent: Twips::from_pixels(1.0),
leading: Twips::from_pixels(2.0),
2017-06-24 19:56:49 +00:00
}),
variable_name: "foo".to_string(),
initial_text: Some("-_-".to_string()),
is_word_wrap: false,
is_multiline: true,
is_password: false,
is_read_only: true,
is_auto_size: false,
is_selectable: true,
has_border: true,
was_static: false,
is_html: false,
is_device_font: true,
})),
read_tag_bytes_from_file("tests/swfs/DefineEditText-MX.swf", TagCode::DefineEditText),
),
(
1,
Tag::DefineFont(Box::new(FontV1 {
id: 1,
glyphs: vec![
vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(19.45), Twips::from_pixels(-14.0))),
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: Some(1),
line_style: Some(0),
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(-15.6),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(-4.55),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(15.6),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(4.55),
2017-06-24 19:56:49 +00:00
},
],
vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(32.65), Twips::from_pixels(7.5))),
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: Some(1),
line_style: Some(0),
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(-32.75),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(-3.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(32.75),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(3.0),
2017-06-24 19:56:49 +00:00
},
],
2017-02-11 01:57:25 +00:00
],
2017-06-24 19:56:49 +00:00
})),
read_tag_bytes_from_file("tests/swfs/DefineFont-MX.swf", TagCode::DefineFont),
),
/* TODO: Commented out because Flash MX wrote this file with a CodeTableOffset, but we don't.
*
2017-06-24 19:56:49 +00:00
(
3,
Tag::DefineFont2(Box::new(Font {
version: 2,
id: 1,
name: "Verdana".to_string(),
is_small_text: false,
is_ansi: true,
is_shift_jis: false,
is_italic: false,
is_bold: false,
language: Language::Unknown,
layout: None,
glyphs: vec![],
})),
read_tag_bytes_from_file("tests/swfs/DefineEditText-MX.swf", TagCode::DefineFont2),
),
*/
2017-06-24 19:56:49 +00:00
/* TODO(Herschel): Flash writes out zero rectangles with 1-bit,
2019-04-23 07:31:12 +00:00
* Causing this test to fail.
(
6,
Tag::DefineFont2(Box::new(Font2 {
version: 2,
id: 1,
name: "Verdana\u{0}".to_string(),
is_small_text: false,
is_ansi: false,
is_shift_jis: false,
is_italic: false,
is_bold: false,
language: Language::Latin,
layout: Some(Font2Layout {
ascent: 1030,
descent: 215,
leading: 221,
kerning: vec![],
}),
glyphs: vec![
Glyph2 {
code: 33,
advance: Some(403),
bounds: Some(Rectangle {
x_min: 0.0,
x_max: 0.0,
y_min: 0.0,
y_max: 0.0,
}),
2019-04-23 07:31:12 +00:00
shape_records: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((12.9, -37.2)),
fill_style_0: Some(1),
fill_style_1: None,
line_style: None,
new_styles: None
}),
ShapeRecord::StraightEdge { delta_x: -0.65, delta_y: 26.95 },
ShapeRecord::StraightEdge { delta_x: -4.25, delta_y: 0.0 },
ShapeRecord::StraightEdge { delta_x: -0.7, delta_y: -26.95 },
ShapeRecord::StraightEdge { delta_x: 5.6, delta_y: 0.0 },
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((12.65, 0.0)),
fill_style_0: None,
fill_style_1: None,
line_style: None,
new_styles: None
}),
ShapeRecord::StraightEdge { delta_x: -5.1, delta_y: 0.0 },
ShapeRecord::StraightEdge { delta_x: 0.0, delta_y: -5.25 },
ShapeRecord::StraightEdge { delta_x: 5.1, delta_y: 0.0 },
ShapeRecord::StraightEdge { delta_x: 0.0, delta_y: 5.25 }
],
}
],
2019-04-23 07:31:12 +00:00
})),
read_tag_bytes_from_file("tests/swfs/DefineFont2-CS55.swf", TagCode::DefineFont2)
),
(
8,
Tag::DefineFont2(Box::new(Font {
version: 3,
id: 1,
name: "Dummy\u{0}".to_string(), // TODO(Herschel): Extra null byte?
is_small_text: false,
is_ansi: false,
is_shift_jis: false,
is_italic: false,
is_bold: false,
language: Language::Latin,
layout: Some(FontLayout {
ascent: 17160,
descent: 4180,
leading: 860,
kerning: vec![
KerningRecord { left_code: 65, right_code: 65, adjustment: -5000 },
KerningRecord { left_code: 66, right_code: 65, adjustment: -25536 },
KerningRecord { left_code: 65, right_code: 66, adjustment: -15000 },
KerningRecord { left_code: 66, right_code: 66, adjustment: -5000 },
],
2019-04-23 07:31:12 +00:00
}),
glyphs: vec![
Glyph {
shape_records: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((205.5, -527.5)),
fill_style_0: Some(1),
fill_style_1: None,
line_style: None,
new_styles: None }
),
ShapeRecord::StraightEdge { delta_x: 371.0, delta_y: 0.0 },
ShapeRecord::StraightEdge { delta_x: 0.0, delta_y: 65.0 },
ShapeRecord::StraightEdge { delta_x: -371.0, delta_y: 0.0 },
ShapeRecord::StraightEdge { delta_x: 0.0, delta_y: -65.0 }
],
code: 65,
advance: Some(15400),
bounds: Some(Rectangle { x_min: 0.0, x_max: 0.0, y_min: 0.0, y_max: 0.0 })
},
Glyph {
shape_records: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((249.0, -694.0)),
fill_style_0: Some(1),
fill_style_1: None,
line_style: None,
new_styles: None
}),
ShapeRecord::StraightEdge { delta_x: 135.5, delta_y: 0.0 },
ShapeRecord::StraightEdge { delta_x: 0.0, delta_y: 660.5 },
ShapeRecord::StraightEdge { delta_x: -135.5, delta_y: 0.0 },
ShapeRecord::StraightEdge { delta_x: 0.0, delta_y: -660.5 }
],
code: 66,
advance: Some(12200),
bounds: Some(Rectangle { x_min: 0.0, x_max: 0.0, y_min: 0.0, y_max: 0.0 })
}
],
})),
read_tag_bytes_from_file("tests/swfs/DefineFont3-CS55.swf", TagCode::DefineFont3)
),
*/
(
11,
Tag::DefineFont2(Box::new(Font {
version: 3,
id: 1,
name: "_sans\0".to_string(),
is_small_text: false,
is_ansi: false,
is_shift_jis: false,
is_italic: false,
is_bold: false,
language: Language::Latin,
layout: None,
glyphs: vec![],
})),
read_tag_bytes_from_file(
"tests/swfs/DefineFont3-DeviceText.swf",
TagCode::DefineFont3,
),
),
2017-06-24 19:56:49 +00:00
(
8,
Tag::DefineFontAlignZones {
id: 1,
thickness: FontThickness::Thin,
zones: vec![
FontAlignZone {
left: 13098,
width: 0,
bottom: 0,
height: 17102,
},
FontAlignZone {
left: 15333,
width: 0,
bottom: 0,
height: 17102,
},
],
},
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineFont3-CS6.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineFontAlignZones,
),
),
(
10,
Tag::DefineFont4(Font4 {
id: 1,
name: "Dummy".to_string(),
is_italic: false,
is_bold: false,
data: None,
}),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineFont4.swf", TagCode::DefineFont4),
2017-06-24 19:56:49 +00:00
),
(
1,
Tag::DefineFontInfo(Box::new(FontInfo {
id: 1,
version: 1,
name: "Verdana".to_string(),
is_small_text: false,
is_ansi: true,
is_shift_jis: false,
is_italic: false,
is_bold: false,
language: Language::Unknown,
code_table: vec![45, 95],
})),
read_tag_bytes_from_file("tests/swfs/DefineFont-MX.swf", TagCode::DefineFontInfo),
),
(
6,
Tag::DefineFontInfo(Box::new(FontInfo {
id: 1,
version: 2,
name: "Verdana".to_string(),
is_small_text: false,
is_ansi: true,
is_shift_jis: false,
is_italic: true,
is_bold: true,
language: Language::Latin,
code_table: vec![45, 95],
})),
read_tag_bytes_from_file("tests/swfs/DefineText2-MX.swf", TagCode::DefineFontInfo2),
),
(
9,
Tag::DefineFontName {
id: 2,
name: "Dummy".to_string(),
copyright_info: "Dummy font for swf-rs tests".to_string(),
},
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineFont4.swf", TagCode::DefineFontName),
2017-06-24 19:56:49 +00:00
),
(
3,
Tag::DefineMorphShape(Box::new(DefineMorphShape {
version: 1,
id: 1,
has_non_scaling_strokes: true,
has_scaling_strokes: false,
start: MorphShape {
shape_bounds: Rectangle {
x_min: Twips::from_pixels(15.0),
x_max: Twips::from_pixels(65.0),
y_min: Twips::from_pixels(15.0),
y_max: Twips::from_pixels(65.0),
2017-06-24 19:56:49 +00:00
},
edge_bounds: Rectangle {
x_min: Twips::from_pixels(15.0),
x_max: Twips::from_pixels(65.0),
y_min: Twips::from_pixels(15.0),
y_max: Twips::from_pixels(65.0),
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
fill_styles: vec![FillStyle::LinearGradient(Gradient {
matrix: Matrix {
translate_x: Twips::from_pixels(40.0),
translate_y: Twips::from_pixels(40.0),
2019-04-23 07:31:12 +00:00
scale_x: 0.024429321,
scale_y: 0.024429321,
rotate_skew_0: 0.024429321,
rotate_skew_1: -0.024429321,
},
spread: GradientSpread::Pad,
interpolation: GradientInterpolation::RGB,
records: vec![
GradientRecord {
ratio: 0,
color: Color {
r: 255,
g: 255,
b: 255,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
GradientRecord {
ratio: 255,
color: Color {
r: 0,
g: 0,
b: 0,
a: 255,
2017-06-24 19:56:49 +00:00
},
},
2019-04-23 07:31:12 +00:00
],
})],
line_styles: vec![LineStyle::new_v1(
Twips::from_pixels(10.0),
2019-04-23 07:31:12 +00:00
Color {
r: 0,
g: 255,
b: 0,
a: 255,
},
)],
2017-06-24 19:56:49 +00:00
shape: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(20.0), Twips::from_pixels(20.0))),
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: None,
line_style: Some(1),
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(40.0),
delta_y: Twips::from_pixels(0.0),
2017-02-23 02:48:12 +00:00
},
2017-06-24 19:56:49 +00:00
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(40.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(-40.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(-40.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StyleChange(StyleChangeData {
move_to: None,
fill_style_0: Some(1),
fill_style_1: None,
line_style: None,
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(40.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(40.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(-40.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(-40.0),
2017-06-24 19:56:49 +00:00
},
],
},
end: MorphShape {
shape_bounds: Rectangle {
x_min: Twips::from_pixels(19.0),
x_max: Twips::from_pixels(75.05),
y_min: Twips::from_pixels(8.35),
y_max: Twips::from_pixels(61.0),
2017-06-24 19:56:49 +00:00
},
edge_bounds: Rectangle {
x_min: Twips::from_pixels(19.0),
x_max: Twips::from_pixels(75.05),
y_min: Twips::from_pixels(8.35),
y_max: Twips::from_pixels(61.0),
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
fill_styles: vec![FillStyle::LinearGradient(Gradient {
matrix: Matrix {
translate_x: Twips::from_pixels(48.4),
translate_y: Twips::from_pixels(34.65),
2019-04-23 07:31:12 +00:00
scale_x: 0.0058898926,
scale_y: 0.030914307,
rotate_skew_0: 0.0,
rotate_skew_1: 0.0,
},
spread: GradientSpread::Pad,
interpolation: GradientInterpolation::RGB,
records: vec![
GradientRecord {
ratio: 56,
color: Color {
r: 255,
g: 0,
b: 0,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
GradientRecord {
ratio: 157,
color: Color {
r: 0,
g: 0,
b: 255,
a: 255,
2017-06-24 19:56:49 +00:00
},
},
2019-04-23 07:31:12 +00:00
],
})],
line_styles: vec![LineStyle::new_v1(
Twips::from_pixels(2.0),
2019-04-23 07:31:12 +00:00
Color {
r: 255,
g: 255,
b: 0,
a: 255,
},
)],
2017-06-24 19:56:49 +00:00
shape: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(20.0), Twips::from_pixels(60.0))),
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: None,
line_style: None,
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(17.4),
delta_y: Twips::from_pixels(-50.65),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(22.6),
delta_y: Twips::from_pixels(10.65),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(28.15),
control_delta_y: Twips::from_pixels(19.1),
anchor_delta_x: Twips::from_pixels(-28.15),
anchor_delta_y: Twips::from_pixels(20.9),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-19.05),
control_delta_y: Twips::from_pixels(-22.0),
anchor_delta_x: Twips::from_pixels(-20.95),
anchor_delta_y: Twips::from_pixels(22.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(17.4),
delta_y: Twips::from_pixels(-50.65),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(22.6),
delta_y: Twips::from_pixels(10.65),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(28.15),
control_delta_y: Twips::from_pixels(19.1),
anchor_delta_x: Twips::from_pixels(-28.15),
anchor_delta_y: Twips::from_pixels(20.9),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-19.05),
control_delta_y: Twips::from_pixels(-22.0),
anchor_delta_x: Twips::from_pixels(-20.95),
anchor_delta_y: Twips::from_pixels(22.0),
2017-06-24 19:56:49 +00:00
},
],
},
})),
read_tag_bytes_from_file(
"tests/swfs/DefineMorphShape-MX.swf",
TagCode::DefineMorphShape,
),
),
(
8,
Tag::DefineMorphShape(Box::new(DefineMorphShape {
version: 2,
id: 1,
has_non_scaling_strokes: false,
has_scaling_strokes: true,
start: MorphShape {
shape_bounds: Rectangle {
x_min: Twips::from_pixels(15.0),
x_max: Twips::from_pixels(225.0),
y_min: Twips::from_pixels(15.0),
y_max: Twips::from_pixels(225.0),
2017-06-24 19:56:49 +00:00
},
edge_bounds: Rectangle {
x_min: Twips::from_pixels(20.0),
x_max: Twips::from_pixels(220.0),
y_min: Twips::from_pixels(20.0),
y_max: Twips::from_pixels(220.0),
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
fill_styles: vec![FillStyle::FocalGradient {
gradient: Gradient {
matrix: Matrix {
translate_x: Twips::from_pixels(116.05),
translate_y: Twips::from_pixels(135.05),
2019-04-23 07:31:12 +00:00
scale_x: 0.11468506,
scale_y: 0.18927002,
rotate_skew_0: 0.0,
rotate_skew_1: 0.0,
},
spread: GradientSpread::Pad,
interpolation: GradientInterpolation::RGB,
records: vec![
GradientRecord {
ratio: 0,
color: Color {
r: 255,
g: 0,
b: 0,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
GradientRecord {
ratio: 70,
color: Color {
r: 255,
g: 0,
b: 255,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
GradientRecord {
ratio: 255,
color: Color {
r: 0,
g: 0,
b: 0,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
],
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
focal_point: 0.97265625,
}],
line_styles: vec![LineStyle {
width: Twips::from_pixels(10.0),
2019-04-23 07:31:12 +00:00
color: Color {
r: 0,
g: 255,
b: 0,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
start_cap: LineCapStyle::Round,
end_cap: LineCapStyle::Round,
join_style: LineJoinStyle::Round,
fill_style: None,
allow_scale_x: true,
allow_scale_y: true,
is_pixel_hinted: false,
allow_close: true,
}],
2017-06-24 19:56:49 +00:00
shape: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(20.0), Twips::from_pixels(20.0))),
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: None,
line_style: Some(1),
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(200.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(200.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(-200.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(-200.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StyleChange(StyleChangeData {
move_to: None,
fill_style_0: Some(1),
fill_style_1: None,
line_style: None,
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(200.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(200.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(-200.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(-200.0),
2017-06-24 19:56:49 +00:00
},
],
},
end: MorphShape {
shape_bounds: Rectangle {
x_min: Twips::from_pixels(25.0),
x_max: Twips::from_pixels(212.05),
y_min: Twips::from_pixels(15.35),
y_max: Twips::from_pixels(148.35),
2017-06-24 19:56:49 +00:00
},
edge_bounds: Rectangle {
x_min: Twips::from_pixels(26.0),
x_max: Twips::from_pixels(211.05),
y_min: Twips::from_pixels(16.35),
y_max: Twips::from_pixels(147.35),
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
fill_styles: vec![FillStyle::FocalGradient {
gradient: Gradient {
matrix: Matrix {
translate_x: Twips::from_pixels(164.0),
translate_y: Twips::from_pixels(150.05),
2019-04-23 07:31:12 +00:00
scale_x: 0.036087036,
scale_y: 0.041992188,
rotate_skew_0: 0.1347351,
rotate_skew_1: -0.15675354,
},
spread: GradientSpread::Pad,
interpolation: GradientInterpolation::RGB,
records: vec![
GradientRecord {
ratio: 0,
color: Color {
r: 0,
g: 255,
b: 255,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
GradientRecord {
ratio: 183,
color: Color {
r: 0,
g: 255,
b: 0,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
GradientRecord {
ratio: 226,
color: Color {
r: 255,
g: 0,
b: 255,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
],
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
focal_point: -0.9921875,
}],
line_styles: vec![LineStyle {
width: Twips::from_pixels(2.0),
2019-04-23 07:31:12 +00:00
color: Color {
r: 255,
g: 255,
b: 0,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
start_cap: LineCapStyle::Round,
end_cap: LineCapStyle::Round,
join_style: LineJoinStyle::Round,
fill_style: None,
allow_scale_x: true,
allow_scale_y: true,
is_pixel_hinted: false,
allow_close: true,
}],
2017-06-24 19:56:49 +00:00
shape: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(26.0), Twips::from_pixels(147.35))),
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: None,
line_style: None,
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(95.0),
delta_y: Twips::from_pixels(-131.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(59.0),
delta_y: Twips::from_pixels(17.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(62.1),
control_delta_y: Twips::from_pixels(57.0),
anchor_delta_x: Twips::from_pixels(-62.1),
anchor_delta_y: Twips::from_pixels(57.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-73.2),
control_delta_y: Twips::from_pixels(-70.6),
anchor_delta_x: Twips::from_pixels(-80.8),
anchor_delta_y: Twips::from_pixels(70.6),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(95.0),
delta_y: Twips::from_pixels(-131.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(59.0),
delta_y: Twips::from_pixels(17.0),
2017-02-23 02:48:12 +00:00
},
2017-06-24 19:56:49 +00:00
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(62.1),
control_delta_y: Twips::from_pixels(57.0),
anchor_delta_x: Twips::from_pixels(-62.1),
anchor_delta_y: Twips::from_pixels(57.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-73.2),
control_delta_y: Twips::from_pixels(-70.6),
anchor_delta_x: Twips::from_pixels(-80.8),
anchor_delta_y: Twips::from_pixels(70.6),
2017-06-24 19:56:49 +00:00
},
],
},
})),
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineMorphShape2.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineMorphShape2,
),
),
(
8,
Tag::DefineScalingGrid {
id: 2,
splitter_rect: Rectangle {
x_min: Twips::from_pixels(10.0),
x_max: Twips::from_pixels(40.0),
y_min: Twips::from_pixels(10.0),
y_max: Twips::from_pixels(40.0),
2017-06-24 19:56:49 +00:00
},
},
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineScalingGrid.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineScalingGrid,
),
),
(
1, // Minimum version not listed in SWF19.
2019-08-15 23:39:24 +00:00
Tag::DefineSceneAndFrameLabelData(DefineSceneAndFrameLabelData {
2017-06-24 19:56:49 +00:00
scenes: vec![
2019-08-15 23:39:24 +00:00
FrameLabelData {
2017-06-24 19:56:49 +00:00
frame_num: 0,
label: "Scene 1".to_string(),
},
2019-08-15 23:39:24 +00:00
FrameLabelData {
2017-06-24 19:56:49 +00:00
frame_num: 25,
label: "Scene2Scene2Scene2Scene2Scene2".to_string(),
},
2019-08-15 23:39:24 +00:00
FrameLabelData {
2017-06-24 19:56:49 +00:00
frame_num: 26,
label: "test日本語test".to_string(),
},
2017-02-23 02:48:12 +00:00
],
2017-06-24 19:56:49 +00:00
frame_labels: vec![
2019-08-15 23:39:24 +00:00
FrameLabelData {
2017-06-24 19:56:49 +00:00
frame_num: 0,
label: "a".to_string(),
},
2019-08-15 23:39:24 +00:00
FrameLabelData {
2017-06-24 19:56:49 +00:00
frame_num: 9,
label: "b".to_string(),
},
2019-08-15 23:39:24 +00:00
FrameLabelData {
2017-06-24 19:56:49 +00:00
frame_num: 17,
label: "❤😁aaa".to_string(),
},
2019-08-15 23:39:24 +00:00
FrameLabelData {
2017-06-24 19:56:49 +00:00
frame_num: 25,
label: "frameInScene2".to_string(),
},
2017-02-23 02:48:12 +00:00
],
2019-08-15 23:39:24 +00:00
}),
2017-06-24 19:56:49 +00:00
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineSceneAndFrameLabelData.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineSceneAndFrameLabelData,
),
),
(
1,
Tag::DefineShape(Shape {
version: 1,
id: 1,
shape_bounds: Rectangle {
x_min: Twips::from_pixels(0.0),
x_max: Twips::from_pixels(20.0),
y_min: Twips::from_pixels(0.0),
y_max: Twips::from_pixels(20.0),
2017-06-24 19:56:49 +00:00
},
edge_bounds: Rectangle {
x_min: Twips::from_pixels(0.0),
x_max: Twips::from_pixels(20.0),
y_min: Twips::from_pixels(0.0),
y_max: Twips::from_pixels(20.0),
2017-06-24 19:56:49 +00:00
},
has_fill_winding_rule: false,
has_non_scaling_strokes: true,
has_scaling_strokes: false,
styles: ShapeStyles {
2019-04-23 07:31:12 +00:00
fill_styles: vec![FillStyle::Color(Color {
r: 255,
g: 0,
b: 0,
a: 255,
})],
2017-06-24 19:56:49 +00:00
line_styles: vec![],
},
2017-02-23 02:48:12 +00:00
shape: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: None,
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: Some(1),
2017-02-23 02:48:12 +00:00
line_style: None,
2017-06-24 19:56:49 +00:00
new_styles: None,
2017-02-23 02:48:12 +00:00
}),
2017-06-24 19:56:49 +00:00
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(20.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(20.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(-20.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(-20.0),
2017-06-24 19:56:49 +00:00
},
],
}),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineShape.swf", TagCode::DefineShape),
2017-06-24 19:56:49 +00:00
),
(
8,
Tag::DefineShape(Shape {
version: 3,
id: 1,
shape_bounds: Rectangle {
x_min: Twips::from_pixels(0.0),
x_max: Twips::from_pixels(50.0),
y_min: Twips::from_pixels(0.0),
y_max: Twips::from_pixels(50.0),
2017-06-24 19:56:49 +00:00
},
edge_bounds: Rectangle {
x_min: Twips::from_pixels(0.0),
x_max: Twips::from_pixels(50.0),
y_min: Twips::from_pixels(0.0),
y_max: Twips::from_pixels(50.0),
2017-06-24 19:56:49 +00:00
},
has_fill_winding_rule: false,
has_non_scaling_strokes: true,
has_scaling_strokes: false,
styles: ShapeStyles {
2019-04-23 07:31:12 +00:00
fill_styles: vec![FillStyle::RadialGradient(Gradient {
matrix: Matrix {
translate_x: Twips::from_pixels(24.95),
translate_y: Twips::from_pixels(24.95),
2019-04-23 07:31:12 +00:00
scale_x: 0.030731201f32,
scale_y: 0.030731201f32,
rotate_skew_0: 0f32,
rotate_skew_1: 0f32,
},
spread: GradientSpread::Pad,
interpolation: GradientInterpolation::RGB,
records: vec![
GradientRecord {
ratio: 0,
color: Color {
r: 255,
g: 0,
b: 0,
a: 255,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
GradientRecord {
ratio: 255,
color: Color {
r: 0,
g: 0,
b: 0,
a: 0,
2017-06-24 19:56:49 +00:00
},
2019-04-23 07:31:12 +00:00
},
],
})],
2017-06-24 19:56:49 +00:00
line_styles: vec![],
},
2017-02-23 02:48:12 +00:00
shape: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(50.0), Twips::from_pixels(25.0))),
2017-02-23 02:48:12 +00:00
fill_style_0: None,
2017-06-24 19:56:49 +00:00
fill_style_1: Some(1),
2017-02-23 02:48:12 +00:00
line_style: None,
2017-06-24 19:56:49 +00:00
new_styles: None,
2017-02-23 02:48:12 +00:00
}),
2017-06-24 19:56:49 +00:00
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(0.0),
control_delta_y: Twips::from_pixels(10.35),
anchor_delta_x: Twips::from_pixels(-7.35),
anchor_delta_y: Twips::from_pixels(7.3),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-7.3),
control_delta_y: Twips::from_pixels(7.35),
anchor_delta_x: Twips::from_pixels(-10.35),
anchor_delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-10.35),
control_delta_y: Twips::from_pixels(0.0),
anchor_delta_x: Twips::from_pixels(-7.35),
anchor_delta_y: Twips::from_pixels(-7.35),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-7.3),
control_delta_y: Twips::from_pixels(-7.3),
anchor_delta_x: Twips::from_pixels(0.0),
anchor_delta_y: Twips::from_pixels(-10.35),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(0.0),
control_delta_y: Twips::from_pixels(-10.35),
anchor_delta_x: Twips::from_pixels(7.3),
anchor_delta_y: Twips::from_pixels(-7.35),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(7.35),
control_delta_y: Twips::from_pixels(-7.3),
anchor_delta_x: Twips::from_pixels(10.35),
anchor_delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(10.35),
control_delta_y: Twips::from_pixels(0.0),
anchor_delta_x: Twips::from_pixels(7.3),
anchor_delta_y: Twips::from_pixels(7.3),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(7.35),
control_delta_y: Twips::from_pixels(7.35),
anchor_delta_x: Twips::from_pixels(0.0),
anchor_delta_y: Twips::from_pixels(10.35),
2017-06-24 19:56:49 +00:00
},
2016-08-31 18:45:58 +00:00
],
2017-06-24 19:56:49 +00:00
}),
read_tag_bytes_from_file("tests/swfs/DefineShape3.swf", TagCode::DefineShape3),
2017-06-24 19:56:49 +00:00
),
(
8,
Tag::DefineShape(Shape {
version: 4,
id: 1,
shape_bounds: Rectangle {
x_min: Twips::from_pixels(-10.0),
x_max: Twips::from_pixels(260.0),
y_min: Twips::from_pixels(-10.0),
y_max: Twips::from_pixels(110.0),
2016-08-31 18:45:58 +00:00
},
2017-06-24 19:56:49 +00:00
edge_bounds: Rectangle {
x_min: Twips::from_pixels(0.0),
x_max: Twips::from_pixels(250.0),
y_min: Twips::from_pixels(0.0),
y_max: Twips::from_pixels(100.0),
2016-08-31 18:45:58 +00:00
},
2017-06-24 19:56:49 +00:00
has_fill_winding_rule: false,
has_non_scaling_strokes: true,
has_scaling_strokes: false,
styles: ShapeStyles {
fill_styles: vec![
FillStyle::Color(Color {
r: 255,
g: 0,
b: 0,
a: 255,
}),
FillStyle::FocalGradient {
gradient: Gradient {
matrix: Matrix {
translate_x: Twips::from_pixels(49.55),
translate_y: Twips::from_pixels(46.55),
2017-06-24 19:56:49 +00:00
scale_x: 0.06199646f32,
scale_y: 0.06199646f32,
rotate_skew_0: 0f32,
rotate_skew_1: 0f32,
},
spread: GradientSpread::Pad,
interpolation: GradientInterpolation::LinearRGB,
records: vec![
GradientRecord {
ratio: 0,
color: Color {
r: 255,
g: 0,
b: 0,
a: 255,
},
},
GradientRecord {
ratio: 255,
color: Color {
r: 0,
g: 0,
b: 0,
a: 0,
},
},
],
},
focal_point: 0.56640625f32,
},
2017-06-24 19:56:49 +00:00
],
line_styles: vec![
LineStyle {
width: Twips::from_pixels(20.0),
2017-06-24 19:56:49 +00:00
color: Color {
r: 0,
g: 153,
b: 0,
a: 255,
},
start_cap: LineCapStyle::None,
end_cap: LineCapStyle::None,
join_style: LineJoinStyle::Bevel,
fill_style: None,
allow_scale_x: false,
allow_scale_y: false,
is_pixel_hinted: true,
allow_close: true,
},
LineStyle {
width: Twips::from_pixels(20.0),
2017-06-24 19:56:49 +00:00
color: Color {
r: 0,
g: 0,
b: 0,
a: 0,
},
start_cap: LineCapStyle::Round,
end_cap: LineCapStyle::Round,
join_style: LineJoinStyle::Round,
fill_style: Some(FillStyle::LinearGradient(Gradient {
matrix: Matrix {
translate_x: Twips::from_pixels(50.0),
translate_y: Twips::from_pixels(50.0),
2017-06-24 19:56:49 +00:00
scale_x: 0.07324219f32,
scale_y: 0.07324219f32,
rotate_skew_0: 0f32,
rotate_skew_1: 0f32,
},
spread: GradientSpread::Pad,
interpolation: GradientInterpolation::RGB,
records: vec![
2017-06-24 19:56:49 +00:00
GradientRecord {
ratio: 0,
color: Color {
r: 255,
g: 255,
b: 255,
a: 255,
},
},
GradientRecord {
ratio: 255,
color: Color {
r: 0,
g: 0,
b: 0,
a: 255,
},
},
],
})),
allow_scale_x: true,
allow_scale_y: false,
is_pixel_hinted: true,
2017-06-24 19:56:49 +00:00
allow_close: true,
},
LineStyle {
width: Twips::from_pixels(20.0),
2017-06-24 19:56:49 +00:00
color: Color {
r: 0,
g: 153,
b: 0,
a: 255,
},
start_cap: LineCapStyle::Round,
end_cap: LineCapStyle::Round,
join_style: LineJoinStyle::Miter(56f32),
fill_style: None,
allow_scale_x: true,
allow_scale_y: false,
is_pixel_hinted: true,
2017-06-24 19:56:49 +00:00
allow_close: true,
},
2017-02-16 03:07:08 +00:00
],
},
2017-06-24 19:56:49 +00:00
shape: vec![
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(150.0), Twips::from_pixels(0.0))),
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: Some(1),
line_style: Some(1),
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(100.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(100.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StyleChange(StyleChangeData {
move_to: None,
fill_style_0: None,
fill_style_1: None,
line_style: Some(3),
new_styles: None,
}),
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(-100.0),
delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StraightEdge {
delta_x: Twips::from_pixels(0.0),
delta_y: Twips::from_pixels(-100.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::StyleChange(StyleChangeData {
move_to: Some((Twips::from_pixels(100.0), Twips::from_pixels(50.0))),
2017-06-24 19:56:49 +00:00
fill_style_0: None,
fill_style_1: Some(2),
line_style: Some(2),
new_styles: None,
}),
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(0.0),
control_delta_y: Twips::from_pixels(20.65),
anchor_delta_x: Twips::from_pixels(-14.65),
anchor_delta_y: Twips::from_pixels(14.6),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-14.7),
control_delta_y: Twips::from_pixels(14.75),
anchor_delta_x: Twips::from_pixels(-20.65),
anchor_delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-20.7),
control_delta_y: Twips::from_pixels(0.0),
anchor_delta_x: Twips::from_pixels(-14.65),
anchor_delta_y: Twips::from_pixels(-14.75),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(-14.65),
control_delta_y: Twips::from_pixels(-14.6),
anchor_delta_x: Twips::from_pixels(0.0),
anchor_delta_y: Twips::from_pixels(-20.65),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(0.0),
control_delta_y: Twips::from_pixels(-20.7),
anchor_delta_x: Twips::from_pixels(14.65),
anchor_delta_y: Twips::from_pixels(-14.7),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(14.65),
control_delta_y: Twips::from_pixels(-14.6),
anchor_delta_x: Twips::from_pixels(20.7),
anchor_delta_y: Twips::from_pixels(0.0),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(20.65),
control_delta_y: Twips::from_pixels(0.0),
anchor_delta_x: Twips::from_pixels(14.7),
anchor_delta_y: Twips::from_pixels(14.6),
2017-06-24 19:56:49 +00:00
},
ShapeRecord::CurvedEdge {
control_delta_x: Twips::from_pixels(14.65),
control_delta_y: Twips::from_pixels(14.7),
anchor_delta_x: Twips::from_pixels(0.0),
anchor_delta_y: Twips::from_pixels(20.7),
2017-06-24 19:56:49 +00:00
},
],
}),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineShape4.swf", TagCode::DefineShape4),
2017-06-24 19:56:49 +00:00
),
(
4,
Tag::DefineSound(Box::new(Sound {
id: 1,
format: SoundFormat {
compression: AudioCompression::Uncompressed,
sample_rate: 44100,
is_16_bit: true,
is_stereo: false,
},
num_samples: 10,
data: vec![
2019-04-23 07:31:12 +00:00
255, 127, 0, 128, 255, 127, 0, 128, 255, 127, 0, 128, 255, 127, 0, 128, 255,
127, 0, 128,
2017-06-24 19:56:49 +00:00
],
})),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineSound.swf", TagCode::DefineSound),
2017-06-24 19:56:49 +00:00
),
(
3,
Tag::DefineSprite(Sprite {
id: 1,
num_frames: 5,
tags: vec![
Tag::ShowFrame,
Tag::ShowFrame,
Tag::ShowFrame,
Tag::ShowFrame,
Tag::ShowFrame,
],
}),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineSprite.swf", TagCode::DefineSprite),
2017-06-24 19:56:49 +00:00
),
(
1,
Tag::DefineText(Box::new(Text {
id: 2,
bounds: Rectangle {
x_min: Twips::from_pixels(1.2),
x_max: Twips::from_pixels(38.65),
y_min: Twips::from_pixels(4.1),
y_max: Twips::from_pixels(18.45),
2019-04-23 07:31:12 +00:00
},
matrix: Matrix::new(),
records: vec![TextRecord {
font_id: Some(1),
color: Some(Color {
r: 0,
g: 0,
b: 0,
a: 255,
}),
x_offset: None,
y_offset: Some(Twips::from_pixels(16.1)),
2019-04-23 07:31:12 +00:00
height: Some(320),
glyphs: vec![
GlyphEntry {
index: 0,
advance: 145,
},
GlyphEntry {
index: 1,
advance: 203,
},
GlyphEntry {
index: 0,
advance: 145,
},
],
}],
2017-06-24 19:56:49 +00:00
})),
read_tag_bytes_from_file("tests/swfs/DefineFont-MX.swf", TagCode::DefineText),
),
(
6,
Tag::DefineVideoStream(DefineVideoStream {
id: 1,
num_frames: 4,
width: 8,
height: 8,
deblocking: VideoDeblocking::UseVideoPacketValue,
is_smoothed: false,
codec: VideoCodec::H263,
}),
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/DefineVideoStream.swf",
2017-06-24 19:56:49 +00:00
TagCode::DefineVideoStream,
),
),
(
5,
2019-04-23 07:31:12 +00:00
Tag::DoAction(vec![
150, 10, 0, 0, 84, 101, 115, 116, 105, 110, 103, 33, 0, 38, 0,
]),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DoAction-CS6.swf", TagCode::DoAction),
2016-09-11 00:32:05 +00:00
),
2017-06-24 19:56:49 +00:00
(
6,
Tag::DoInitAction {
id: 2,
action_data: vec![150, 6, 0, 0, 116, 101, 115, 116, 0, 38, 0],
},
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DoInitAction-CS6.swf", TagCode::DoInitAction),
2017-06-24 19:56:49 +00:00
),
(
6,
Tag::EnableDebugger("$1$ve$EG3LE6bumvJ2pR8F5qXny/".to_string()),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file(
"tests/swfs/EnableDebugger2-CS6.swf",
TagCode::EnableDebugger2,
),
2017-06-24 19:56:49 +00:00
),
(
10,
2017-08-26 08:18:51 +00:00
Tag::EnableTelemetry {
password_hash: vec![],
},
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/EnableTelemetry.swf", TagCode::EnableTelemetry),
2017-06-24 19:56:49 +00:00
),
(
10,
Tag::EnableTelemetry {
password_hash: vec![
2019-04-23 07:31:12 +00:00
207, 128, 205, 138, 237, 72, 45, 93, 21, 39, 215, 220, 114, 252, 239, 248, 78,
99, 38, 89, 40, 72, 68, 125, 45, 192, 176, 232, 125, 252, 154, 144,
2017-06-24 19:56:49 +00:00
],
},
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/EnableTelemetry-password.swf",
2017-06-24 19:56:49 +00:00
TagCode::EnableTelemetry,
),
),
(
6,
2019-04-23 07:31:12 +00:00
Tag::ExportAssets(vec![ExportedAsset {
id: 2,
name: "Test💯".to_string(),
}]),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/ExportAssets-CS6.swf", TagCode::ExportAssets),
2017-06-24 19:56:49 +00:00
),
(
8,
Tag::FileAttributes(FileAttributes {
use_direct_blit: false,
use_gpu: true,
has_metadata: false,
is_action_script_3: true,
use_network_sandbox: false,
}),
vec![0b01_000100, 0b00010001, 0b00101000, 0, 0, 0],
),
(
3,
2019-08-15 23:39:24 +00:00
Tag::FrameLabel(FrameLabel {
2017-06-24 19:56:49 +00:00
label: "test".to_string(),
is_anchor: false,
2019-08-15 23:39:24 +00:00
}),
2017-06-24 19:56:49 +00:00
read_tag_bytes_from_file_with_index(
2019-06-17 07:33:58 +00:00
"tests/swfs/FrameLabel-CS6.swf",
2017-06-24 19:56:49 +00:00
TagCode::FrameLabel,
0,
),
),
(
6, // Anchor tags supported in SWF version 6 and later.
2019-08-15 23:39:24 +00:00
Tag::FrameLabel(FrameLabel {
2017-06-24 19:56:49 +00:00
label: "anchor_tag".to_string(),
is_anchor: true,
2019-08-15 23:39:24 +00:00
}),
2017-06-24 19:56:49 +00:00
read_tag_bytes_from_file_with_index(
2019-06-17 07:33:58 +00:00
"tests/swfs/FrameLabel-CS6.swf",
2017-06-24 19:56:49 +00:00
TagCode::FrameLabel,
1,
),
),
(
7,
Tag::ImportAssets {
2019-06-17 07:33:58 +00:00
url: "ExportAssets-CS6.swf".to_string(),
2019-04-23 07:31:12 +00:00
imports: vec![ExportedAsset {
id: 1,
name: "Test💯".to_string(),
}],
2017-06-24 19:56:49 +00:00
},
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/ImportAssets-CS6.swf", TagCode::ImportAssets),
2017-06-24 19:56:49 +00:00
),
(
8,
Tag::ImportAssets {
2019-06-17 07:33:58 +00:00
url: "ExportAssets-CS6.swf".to_string(),
2019-04-23 07:31:12 +00:00
imports: vec![ExportedAsset {
id: 1,
name: "Test💯".to_string(),
}],
2017-06-24 19:56:49 +00:00
},
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/ImportAssets2-CS6.swf", TagCode::ImportAssets2),
2017-06-24 19:56:49 +00:00
),
(
1,
Tag::JpegTables(vec![
2019-04-23 07:31:12 +00:00
255, 216, 255, 219, 0, 67, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 219, 0, 67, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 255, 196, 0, 31, 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 16, 0, 2, 1, 3, 3, 2, 4, 3,
5, 5, 4, 4, 0, 0, 1, 125, 1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7,
34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98,
114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56,
57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100,
101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132,
133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162,
163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185,
186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215,
216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243,
244, 245, 246, 247, 248, 249, 250, 255, 196, 0, 31, 1, 0, 3, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 17, 0,
2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119, 0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18,
65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82,
240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40,
41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87,
88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120,
121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150,
151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180,
181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210,
211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233,
234, 242, 243, 244, 245, 246, 247, 248, 249, 250, 255, 217,
2017-06-24 19:56:49 +00:00
]),
read_tag_bytes_from_file(
"tests/swfs/DefineBits-JpegTables-MX.swf",
TagCode::JpegTables,
),
),
(
1,
Tag::Metadata("aa!".to_string()),
2017-06-24 23:01:14 +00:00
vec![0b01_000100, 0b000_10011, b'a', b'a', b'!', 0],
2017-06-24 19:56:49 +00:00
),
(
4,
Tag::PlaceObject(Box::new(PlaceObject {
version: 2,
action: PlaceObjectAction::Place(1),
depth: 1,
matrix: Some(Matrix::new()),
color_transform: None,
ratio: None,
name: None,
clip_depth: None,
class_name: None,
filters: vec![],
background_color: None,
blend_mode: BlendMode::Normal,
clip_actions: vec![],
is_image: false,
is_bitmap_cached: false,
is_visible: true,
amf_data: None,
})),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineShape.swf", TagCode::PlaceObject2),
2017-06-24 19:56:49 +00:00
),
(
5, // Specifically test for SWFv5 ClipActions.
Tag::PlaceObject(Box::new(PlaceObject {
version: 2,
action: PlaceObjectAction::Place(2),
depth: 1,
matrix: Some(Matrix::new()),
color_transform: None,
ratio: None,
name: None,
clip_depth: None,
class_name: None,
filters: vec![],
background_color: None,
blend_mode: BlendMode::Normal,
clip_actions: vec![ClipAction {
events: vec![ClipEvent::EnterFrame].into_iter().collect(),
key_code: None,
action_data: vec![150, 6, 0, 0, 99, 108, 105, 112, 0, 38, 0],
}],
is_image: false,
is_bitmap_cached: false,
is_visible: true,
amf_data: None,
})),
read_tag_bytes_from_file(
"tests/swfs/PlaceObject2-ClipActionsV5-CS6.swf",
TagCode::PlaceObject2,
),
),
2017-06-24 19:56:49 +00:00
(
6, // ClipActions added in SWF version 5-6.
Tag::PlaceObject(Box::new(PlaceObject {
version: 2,
action: PlaceObjectAction::Place(2),
depth: 1,
matrix: Some(Matrix::new()),
color_transform: None,
ratio: None,
name: None,
clip_depth: None,
class_name: None,
filters: vec![],
background_color: None,
blend_mode: BlendMode::Normal,
clip_actions: vec![
ClipAction {
2017-06-24 19:56:49 +00:00
events: vec![ClipEvent::Press, ClipEvent::Release]
.into_iter()
.collect(),
key_code: None,
action_data: vec![150, 3, 0, 0, 65, 0, 38, 0],
},
ClipAction {
events: vec![ClipEvent::KeyPress].into_iter().collect(),
key_code: Some(99),
action_data: vec![150, 3, 0, 0, 66, 0, 38, 0],
},
ClipAction {
events: vec![ClipEvent::EnterFrame].into_iter().collect(),
key_code: None,
action_data: vec![150, 3, 0, 0, 67, 0, 38, 0],
},
],
is_image: false,
is_bitmap_cached: false,
is_visible: true,
amf_data: None,
})),
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/PlaceObject2-ClipActions-CS6.swf",
2017-06-24 19:56:49 +00:00
TagCode::PlaceObject2,
),
),
(
8,
Tag::PlaceObject(Box::new(PlaceObject {
version: 3,
action: PlaceObjectAction::Place(2),
depth: 1,
matrix: Some(Matrix {
translate_x: Twips::from_pixels(10.0),
translate_y: Twips::from_pixels(10.0),
2017-06-24 19:56:49 +00:00
rotate_skew_0: 0f32,
rotate_skew_1: 0f32,
scale_x: 2.0f32,
scale_y: 2.0f32,
}),
color_transform: Some(ColorTransform {
a_multiply: 1.0f32,
a_add: 80,
r_multiply: 0.5f32,
r_add: 60,
g_multiply: 0.25f32,
g_add: 40,
b_multiply: 0.75f32,
b_add: 20,
}),
ratio: None,
name: Some("test".to_string()),
clip_depth: None,
class_name: None,
filters: vec![
Filter::GradientBevelFilter(Box::new(GradientBevelFilter {
colors: vec![
GradientRecord {
ratio: 0,
color: Color {
r: 255,
g: 0,
b: 0,
a: 255,
},
},
GradientRecord {
ratio: 128,
color: Color {
r: 0,
g: 255,
b: 0,
a: 0,
},
},
GradientRecord {
ratio: 255,
color: Color {
r: 0,
g: 0,
b: 255,
a: 0,
},
},
],
blur_x: 5f64,
blur_y: 5f64,
angle: 0.7853851318359375f64,
distance: 5f64,
strength: 1f32,
is_inner: true,
is_knockout: true,
is_on_top: false,
num_passes: 3,
})),
Filter::GradientGlowFilter(Box::new(GradientGlowFilter {
colors: vec![
GradientRecord {
ratio: 0,
color: Color {
r: 255,
g: 255,
b: 255,
a: 0,
},
},
GradientRecord {
ratio: 255,
color: Color {
r: 0,
g: 0,
b: 0,
a: 255,
},
},
],
blur_x: 30f64,
blur_y: 30f64,
angle: 0.174530029296875f64,
distance: 5f64,
strength: 0.19921875f32,
is_inner: false,
is_knockout: false,
is_on_top: true,
num_passes: 1,
})),
Filter::BlurFilter(Box::new(BlurFilter {
blur_x: 30f64,
blur_y: 20f64,
num_passes: 2,
})),
],
background_color: Some(Color {
r: 255,
g: 0,
b: 0,
a: 255,
}),
blend_mode: BlendMode::Difference,
clip_actions: vec![
ClipAction {
events: vec![ClipEvent::ReleaseOutside, ClipEvent::RollOver]
.into_iter()
.collect(),
key_code: None,
action_data: vec![0],
},
ClipAction {
events: vec![ClipEvent::Data].into_iter().collect(),
key_code: None,
action_data: vec![150, 3, 0, 0, 66, 0, 38, 0],
},
],
is_image: false,
is_bitmap_cached: true,
is_visible: false,
amf_data: None,
})),
read_tag_bytes_from_file(
2019-06-17 07:33:58 +00:00
"tests/swfs/PlaceObject3-theworks.swf",
2017-06-24 19:56:49 +00:00
TagCode::PlaceObject3,
),
),
// Undocumented PlaceObject4 tag.
(
19,
Tag::PlaceObject(Box::new(PlaceObject {
version: 4,
action: PlaceObjectAction::Place(2),
depth: 1,
matrix: Some(Matrix {
translate_x: Twips::from_pixels(10.0),
translate_y: Twips::from_pixels(10.0),
2017-06-24 19:56:49 +00:00
rotate_skew_0: 0.0,
rotate_skew_1: 0.0,
scale_x: 1.0,
scale_y: 1.0,
}),
color_transform: None,
ratio: None,
name: None,
clip_depth: None,
class_name: None,
filters: vec![],
background_color: None,
blend_mode: BlendMode::Normal,
clip_actions: vec![],
is_image: false,
is_bitmap_cached: false,
is_visible: true,
amf_data: Some(vec![
2019-04-23 07:31:12 +00:00
10, 11, 1, 9, 116, 101, 115, 116, 6, 17, 84, 101, 115, 116, 105, 110, 103, 33,
2017-06-24 19:56:49 +00:00
1,
]),
})),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/PlaceObject4.swf", TagCode::PlaceObject4),
2017-06-24 19:56:49 +00:00
),
(
2,
Tag::Protect(None),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/ProtectNoPassword.swf", TagCode::Protect),
),
2017-06-24 19:56:49 +00:00
(
5, // Password supported in SWF version 5 or later.
Tag::Protect(Some("$1$d/$yMscKH17OJ0paJT.e67iz0".to_string())),
read_tag_bytes_from_file("tests/swfs/Protect.swf", TagCode::Protect),
2017-06-24 19:56:49 +00:00
),
(
1,
Tag::SetBackgroundColor(Color {
r: 64,
g: 150,
b: 255,
a: 255,
2017-02-25 04:11:28 +00:00
}),
2017-06-24 19:56:49 +00:00
vec![0b01_000011, 0b00000010, 64, 150, 255],
),
(
7,
Tag::SetTabIndex {
depth: 2,
tab_index: 1,
},
vec![0b10_000100, 0b000_10000, 2, 0, 1, 0],
),
(
7,
Tag::ScriptLimits {
max_recursion_depth: 256,
timeout_in_seconds: 42,
},
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/ScriptLimits.swf", TagCode::ScriptLimits),
2017-06-24 19:56:49 +00:00
),
(1, Tag::ShowFrame, vec![0b01_000000, 0]),
(
3,
Tag::SoundStreamHead2(Box::new(SoundStreamHead {
2017-06-24 19:56:49 +00:00
stream_format: SoundFormat {
compression: AudioCompression::Uncompressed,
sample_rate: 5512,
is_16_bit: true,
is_stereo: false,
},
playback_format: SoundFormat {
compression: AudioCompression::UncompressedUnknownEndian,
sample_rate: 5512,
is_16_bit: true,
is_stereo: false,
},
num_samples_per_block: 229,
latency_seek: 0,
})),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/SoundStreamHead2.swf", TagCode::SoundStreamHead2),
2017-06-24 19:56:49 +00:00
),
(
9,
Tag::SymbolClass(vec![
SymbolClassLink {
id: 2,
class_name: "foo.Test".to_string(),
},
SymbolClassLink {
id: 0,
class_name: "DocumentTest".to_string(),
},
]),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/SymbolClass.swf", TagCode::SymbolClass),
2017-06-24 19:56:49 +00:00
),
(
4,
Tag::StartSound(StartSound {
2017-06-24 19:56:49 +00:00
id: 1,
sound_info: Box::new(SoundInfo {
event: SoundEvent::Start,
in_sample: None,
out_sample: None,
num_loops: 3,
envelope: None,
}),
}),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineSound.swf", TagCode::StartSound),
2017-06-24 19:56:49 +00:00
),
(
9,
Tag::StartSound2 {
class_name: "TestSound".to_string(),
sound_info: Box::new(SoundInfo {
event: SoundEvent::Event,
in_sample: None,
out_sample: None,
num_loops: 1,
2019-04-23 07:31:12 +00:00
envelope: Some(vec![SoundEnvelopePoint {
sample: 0,
left_volume: 0.0,
right_volume: 1.0,
}]),
2017-06-24 19:56:49 +00:00
}),
},
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/StartSound2.swf", TagCode::StartSound2),
2017-06-24 19:56:49 +00:00
),
(
6,
Tag::VideoFrame(VideoFrame {
stream_id: 1,
frame_num: 0,
data: vec![0, 0, 132, 0, 4, 4, 17, 38, 190, 190, 190, 190, 201, 182],
}),
2019-06-17 07:33:58 +00:00
read_tag_bytes_from_file("tests/swfs/DefineVideoStream.swf", TagCode::VideoFrame),
2017-06-24 19:56:49 +00:00
),
(
1,
Tag::Unknown {
tag_code: 512,
data: vec![],
},
vec![0b00_000000, 0b10000000],
),
(
1,
Tag::Unknown {
tag_code: 513,
data: vec![1, 2],
},
vec![0b01_000010, 0b10000000, 1, 2],
),
(
1,
Tag::Unknown {
tag_code: 513,
data: vec![0; 64],
},
vec![
0b01_111111,
0b10000000,
64,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
],
),
]
}
2016-10-06 06:49:34 +00:00
2017-06-24 19:56:49 +00:00
pub fn avm1_tests() -> Vec<Avm1TestData> {
vec![
(4, Action::Add, vec![0x0A]),
(4, Action::AsciiToChar, vec![0x33]),
(4, Action::Call, vec![0x9E, 0, 0]),
(4, Action::CharToAscii, vec![0x32]),
(4, Action::Divide, vec![0x0D]),
(4, Action::Equals, vec![0x0E]),
(4, Action::GetTime, vec![0x34]),
(
3,
Action::GetUrl {
2019-09-09 19:47:54 +00:00
url: "a",
target: "b",
2017-06-24 19:56:49 +00:00
},
vec![0x83, 4, 0, 97, 0, 98, 0],
),
(
4,
Action::GetUrl2 {
send_vars_method: SendVarsMethod::Post,
is_target_sprite: true,
is_load_vars: false,
},
vec![0x9A, 1, 0, 0b10_0000_10],
),
(4, Action::GetVariable, vec![0x1C]),
(3, Action::GotoFrame(11), vec![0x81, 2, 0, 11, 0]),
(
4,
Action::GotoFrame2 {
set_playing: false,
scene_offset: 0,
},
vec![0x9F, 1, 0, 0],
),
(
4,
Action::GotoFrame2 {
set_playing: true,
scene_offset: 259,
},
vec![0x9F, 3, 0, 0b11, 3, 1],
),
(
3,
2019-09-09 19:47:54 +00:00
Action::GotoLabel("testb"),
2017-06-24 19:56:49 +00:00
vec![0x8C, 6, 0, 116, 101, 115, 116, 98, 0],
),
(4, Action::If { offset: 1 }, vec![0x9D, 2, 0, 1, 0]),
(4, Action::Jump { offset: 1 }, vec![0x99, 2, 0, 1, 0]),
(4, Action::Less, vec![0x0F]),
(4, Action::MBAsciiToChar, vec![0x37]),
(4, Action::MBCharToAscii, vec![0x36]),
(4, Action::MBStringExtract, vec![0x35]),
(4, Action::MBStringLength, vec![0x31]),
(4, Action::Multiply, vec![0x0C]),
(3, Action::NextFrame, vec![0x04]),
(4, Action::And, vec![0x10]),
(4, Action::Not, vec![0x12]),
(4, Action::Or, vec![0x11]),
(3, Action::Play, vec![0x06]),
(4, Action::Pop, vec![0x17]),
(3, Action::PreviousFrame, vec![0x05]),
(
4,
2019-09-09 19:47:54 +00:00
Action::Push(vec![Value::Str("test")]),
2017-06-24 19:56:49 +00:00
vec![0x96, 6, 0, 0, 116, 101, 115, 116, 0],
),
(
4,
Action::Push(vec![Value::Float(0.0)]),
vec![0x96, 5, 0, 1, 0, 0, 0, 0],
),
(
5,
Action::Push(vec![Value::Double(1.5)]),
vec![0x96, 9, 0, 6, 0, 0, 248, 63, 0, 0, 0, 0],
),
(5, Action::Push(vec![Value::Null]), vec![0x96, 1, 0, 2]),
(5, Action::Push(vec![Value::Undefined]), vec![0x96, 1, 0, 3]),
(
5,
Action::Push(vec![Value::Null, Value::Undefined]),
vec![0x96, 2, 0, 2, 3],
),
(
5,
Action::Push(vec![Value::Register(1)]),
vec![0x96, 2, 0, 4, 1],
),
(
5,
Action::Push(vec![Value::Bool(false)]),
vec![0x96, 2, 0, 5, 0],
),
(
5,
Action::Push(vec![Value::Bool(true)]),
vec![0x96, 2, 0, 5, 1],
),
(
5,
Action::Push(vec![Value::Double(0.0)]),
vec![0x96, 9, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0],
),
(
5,
Action::Push(vec![Value::Int(31)]),
vec![0x96, 5, 0, 7, 31, 0, 0, 0],
),
2019-08-26 21:54:09 +00:00
(
5,
Action::Push(vec![Value::Int(-50)]),
vec![0x96, 5, 0, 7, 206, 255, 255, 255],
),
2017-06-24 19:56:49 +00:00
(
5,
Action::Push(vec![Value::ConstantPool(77)]),
vec![0x96, 2, 0, 8, 77],
),
(
5,
Action::Push(vec![Value::ConstantPool(257)]),
vec![0x96, 3, 0, 9, 1, 1],
),
(4, Action::RandomNumber, vec![0x30]),
(
3,
2019-09-09 19:47:54 +00:00
Action::SetTarget("test"),
2017-06-24 19:56:49 +00:00
vec![0x8B, 5, 0, 116, 101, 115, 116, 0],
),
(4, Action::SetVariable, vec![0x1D]),
(3, Action::Stop, vec![0x07]),
(3, Action::StopSounds, vec![0x09]),
(4, Action::StringAdd, vec![0x21]),
(4, Action::StringEquals, vec![0x13]),
(4, Action::StringExtract, vec![0x15]),
(4, Action::StringLength, vec![0x14]),
(4, Action::StringLess, vec![0x29]),
(4, Action::Subtract, vec![0x0B]),
(3, Action::ToggleQuality, vec![0x08]),
(4, Action::ToInteger, vec![0x18]),
(4, Action::Trace, vec![0x26]),
(
3,
Action::WaitForFrame {
frame: 4,
num_actions_to_skip: 10,
},
vec![0x8A, 3, 0, 4, 0, 10],
),
(
4,
2017-08-26 08:18:51 +00:00
Action::WaitForFrame2 {
num_actions_to_skip: 34,
},
2017-06-24 19:56:49 +00:00
vec![0x8D, 1, 0, 34],
),
(
1,
Action::Unknown {
opcode: 0x79,
2019-09-09 19:47:54 +00:00
data: &[],
2017-06-24 19:56:49 +00:00
},
vec![0x79],
),
(
1,
Action::Unknown {
opcode: 0xA0,
2019-09-09 19:47:54 +00:00
data: &[2, 3],
2017-06-24 19:56:49 +00:00
},
vec![0xA0, 2, 0, 2, 3],
),
(
5,
Action::DefineFunction {
name: "cliche",
params: vec!["greeting", "name"],
actions: &[
0x96, 0x0a, 0x00, 0x00, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x00,
0x1c, 0x96, 0x03, 0x00, 0x00, 0x20, 0x00, 0x47, 0x96, 0x06, 0x00, 0x00, 0x6e,
0x61, 0x6d, 0x65, 0x00, 0x1c, 0x47, 0x3e,
],
},
vec![
0x9b, 0x19, 0x00, 0x63, 0x6c, 0x69, 0x63, 0x68, 0x65, 0x00, 0x02, 0x00, 0x67, 0x72,
0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x00, 0x6e, 0x61, 0x6d, 0x65, 0x00, 0x21, 0x00,
0x96, 0x0a, 0x00, 0x00, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x00, 0x1c,
0x96, 0x03, 0x00, 0x00, 0x20, 0x00, 0x47, 0x96, 0x06, 0x00, 0x00, 0x6e, 0x61, 0x6d,
0x65, 0x00, 0x1c, 0x47, 0x3e,
],
),
2017-06-24 19:56:49 +00:00
]
}
2017-08-26 08:18:51 +00:00
pub fn avm2_tests() -> Vec<Avm2TestData> {
2019-04-23 07:31:12 +00:00
vec![(
10,
AbcFile {
major_version: 46,
minor_version: 16,
constant_pool: ConstantPool {
ints: vec![],
uints: vec![],
doubles: vec![],
strings: vec![
"".to_string(),
"void".to_string(),
"Avm2Test".to_string(),
"trace".to_string(),
"Test".to_string(),
2017-08-26 08:18:51 +00:00
],
2019-04-23 07:31:12 +00:00
namespaces: vec![Namespace::Package(Index::new(1))],
namespace_sets: vec![],
multinames: vec![
Multiname::QName {
namespace: Index::new(1),
name: Index::new(2),
2017-08-26 08:18:51 +00:00
},
2019-04-23 07:31:12 +00:00
Multiname::QName {
namespace: Index::new(1),
name: Index::new(3),
2017-08-26 08:18:51 +00:00
},
2019-04-23 07:31:12 +00:00
Multiname::QName {
namespace: Index::new(1),
name: Index::new(4),
2017-08-26 08:18:51 +00:00
},
],
},
2019-04-23 07:31:12 +00:00
methods: vec![
Method {
name: Index::new(0),
params: vec![],
return_type: Index::new(1),
needs_arguments_object: false,
needs_activation: false,
needs_rest: false,
needs_dxns: false,
},
Method {
name: Index::new(0),
params: vec![],
return_type: Index::new(0),
needs_arguments_object: false,
needs_activation: false,
needs_rest: false,
needs_dxns: false,
},
],
metadata: vec![],
instances: vec![],
classes: vec![],
scripts: vec![Script {
init_method: Index::new(1),
traits: vec![Trait {
name: Index::new(2),
kind: TraitKind::Method {
disp_id: 1,
method: Index::new(0),
},
metadata: vec![],
is_final: false,
is_override: false,
}],
}],
method_bodies: vec![
MethodBody {
method: Index::new(0),
max_stack: 2,
num_locals: 1,
init_scope_depth: 1,
max_scope_depth: 2,
code: vec![
Op::GetLocal { index: 0 },
Op::PushScope,
Op::FindPropStrict {
index: Index::new(3),
},
Op::PushString {
value: Index::new(5),
},
Op::CallPropVoid {
index: Index::new(3),
num_args: 1,
},
Op::ReturnVoid,
],
exceptions: vec![],
traits: vec![],
},
MethodBody {
method: Index::new(1),
max_stack: 1,
num_locals: 2,
init_scope_depth: 1,
max_scope_depth: 2,
code: vec![
Op::GetLocal { index: 0 },
Op::PushScope,
Op::FindPropStrict {
index: Index::new(2),
},
Op::CallProperty {
index: Index::new(2),
num_args: 0,
},
Op::CoerceA,
Op::SetLocal { index: 1 },
Op::GetLocal { index: 1 },
Op::ReturnValue,
],
exceptions: vec![],
traits: vec![],
},
],
},
2019-06-17 09:04:48 +00:00
read_abc_from_file("tests/swfs/Avm2Dummy.swf"),
2019-04-23 07:31:12 +00:00
)]
2017-08-26 08:18:51 +00:00
}