1 // This file was generated by gir (https://github.com/gtk-rs/gir)
2 // from gir-files (https://github.com/gtk-rs/gir-files)
3 // DO NOT EDIT
4 
5 extern crate atk_sys;
6 extern crate shell_words;
7 extern crate tempfile;
8 use atk_sys::*;
9 use std::env;
10 use std::error::Error;
11 use std::mem::{align_of, size_of};
12 use std::path::Path;
13 use std::process::Command;
14 use std::str;
15 use tempfile::Builder;
16 
17 static PACKAGES: &[&str] = &["atk"];
18 
19 #[derive(Clone, Debug)]
20 struct Compiler {
21     pub args: Vec<String>,
22 }
23 
24 impl Compiler {
new() -> Result<Compiler, Box<dyn Error>>25     pub fn new() -> Result<Compiler, Box<dyn Error>> {
26         let mut args = get_var("CC", "cc")?;
27         args.push("-Wno-deprecated-declarations".to_owned());
28         // For %z support in printf when using MinGW.
29         args.push("-D__USE_MINGW_ANSI_STDIO".to_owned());
30         args.extend(get_var("CFLAGS", "")?);
31         args.extend(get_var("CPPFLAGS", "")?);
32         args.extend(pkg_config_cflags(PACKAGES)?);
33         Ok(Compiler { args })
34     }
35 
define<'a, V: Into<Option<&'a str>>>(&mut self, var: &str, val: V)36     pub fn define<'a, V: Into<Option<&'a str>>>(&mut self, var: &str, val: V) {
37         let arg = match val.into() {
38             None => format!("-D{}", var),
39             Some(val) => format!("-D{}={}", var, val),
40         };
41         self.args.push(arg);
42     }
43 
compile(&self, src: &Path, out: &Path) -> Result<(), Box<dyn Error>>44     pub fn compile(&self, src: &Path, out: &Path) -> Result<(), Box<dyn Error>> {
45         let mut cmd = self.to_command();
46         cmd.arg(src);
47         cmd.arg("-o");
48         cmd.arg(out);
49         let status = cmd.spawn()?.wait()?;
50         if !status.success() {
51             return Err(format!("compilation command {:?} failed, {}", &cmd, status).into());
52         }
53         Ok(())
54     }
55 
to_command(&self) -> Command56     fn to_command(&self) -> Command {
57         let mut cmd = Command::new(&self.args[0]);
58         cmd.args(&self.args[1..]);
59         cmd
60     }
61 }
62 
get_var(name: &str, default: &str) -> Result<Vec<String>, Box<dyn Error>>63 fn get_var(name: &str, default: &str) -> Result<Vec<String>, Box<dyn Error>> {
64     match env::var(name) {
65         Ok(value) => Ok(shell_words::split(&value)?),
66         Err(env::VarError::NotPresent) => Ok(shell_words::split(default)?),
67         Err(err) => Err(format!("{} {}", name, err).into()),
68     }
69 }
70 
pkg_config_cflags(packages: &[&str]) -> Result<Vec<String>, Box<dyn Error>>71 fn pkg_config_cflags(packages: &[&str]) -> Result<Vec<String>, Box<dyn Error>> {
72     if packages.is_empty() {
73         return Ok(Vec::new());
74     }
75     let mut cmd = Command::new("pkg-config");
76     cmd.arg("--cflags");
77     cmd.args(packages);
78     let out = cmd.output()?;
79     if !out.status.success() {
80         return Err(format!("command {:?} returned {}", &cmd, out.status).into());
81     }
82     let stdout = str::from_utf8(&out.stdout)?;
83     Ok(shell_words::split(stdout.trim())?)
84 }
85 
86 #[derive(Copy, Clone, Debug, Eq, PartialEq)]
87 struct Layout {
88     size: usize,
89     alignment: usize,
90 }
91 
92 #[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
93 struct Results {
94     /// Number of successfully completed tests.
95     passed: usize,
96     /// Total number of failed tests (including those that failed to compile).
97     failed: usize,
98     /// Number of tests that failed to compile.
99     failed_to_compile: usize,
100 }
101 
102 impl Results {
record_passed(&mut self)103     fn record_passed(&mut self) {
104         self.passed += 1;
105     }
record_failed(&mut self)106     fn record_failed(&mut self) {
107         self.failed += 1;
108     }
record_failed_to_compile(&mut self)109     fn record_failed_to_compile(&mut self) {
110         self.failed += 1;
111         self.failed_to_compile += 1;
112     }
summary(&self) -> String113     fn summary(&self) -> String {
114         format!(
115             "{} passed; {} failed (compilation errors: {})",
116             self.passed, self.failed, self.failed_to_compile
117         )
118     }
expect_total_success(&self)119     fn expect_total_success(&self) {
120         if self.failed == 0 {
121             println!("OK: {}", self.summary());
122         } else {
123             panic!("FAILED: {}", self.summary());
124         };
125     }
126 }
127 
128 #[test]
cross_validate_constants_with_c()129 fn cross_validate_constants_with_c() {
130     let tmpdir = Builder::new()
131         .prefix("abi")
132         .tempdir()
133         .expect("temporary directory");
134     let cc = Compiler::new().expect("configured compiler");
135 
136     assert_eq!(
137         "1",
138         get_c_value(tmpdir.path(), &cc, "1").expect("C constant"),
139         "failed to obtain correct constant value for 1"
140     );
141 
142     let mut results: Results = Default::default();
143     for (i, &(name, rust_value)) in RUST_CONSTANTS.iter().enumerate() {
144         match get_c_value(tmpdir.path(), &cc, name) {
145             Err(e) => {
146                 results.record_failed_to_compile();
147                 eprintln!("{}", e);
148             }
149             Ok(ref c_value) => {
150                 if rust_value == c_value {
151                     results.record_passed();
152                 } else {
153                     results.record_failed();
154                     eprintln!(
155                         "Constant value mismatch for {}\nRust: {:?}\nC:    {:?}",
156                         name, rust_value, c_value
157                     );
158                 }
159             }
160         };
161         if (i + 1) % 25 == 0 {
162             println!("constants ... {}", results.summary());
163         }
164     }
165     results.expect_total_success();
166 }
167 
168 #[test]
cross_validate_layout_with_c()169 fn cross_validate_layout_with_c() {
170     let tmpdir = Builder::new()
171         .prefix("abi")
172         .tempdir()
173         .expect("temporary directory");
174     let cc = Compiler::new().expect("configured compiler");
175 
176     assert_eq!(
177         Layout {
178             size: 1,
179             alignment: 1
180         },
181         get_c_layout(tmpdir.path(), &cc, "char").expect("C layout"),
182         "failed to obtain correct layout for char type"
183     );
184 
185     let mut results: Results = Default::default();
186     for (i, &(name, rust_layout)) in RUST_LAYOUTS.iter().enumerate() {
187         match get_c_layout(tmpdir.path(), &cc, name) {
188             Err(e) => {
189                 results.record_failed_to_compile();
190                 eprintln!("{}", e);
191             }
192             Ok(c_layout) => {
193                 if rust_layout == c_layout {
194                     results.record_passed();
195                 } else {
196                     results.record_failed();
197                     eprintln!(
198                         "Layout mismatch for {}\nRust: {:?}\nC:    {:?}",
199                         name, rust_layout, &c_layout
200                     );
201                 }
202             }
203         };
204         if (i + 1) % 25 == 0 {
205             println!("layout    ... {}", results.summary());
206         }
207     }
208     results.expect_total_success();
209 }
210 
get_c_layout(dir: &Path, cc: &Compiler, name: &str) -> Result<Layout, Box<dyn Error>>211 fn get_c_layout(dir: &Path, cc: &Compiler, name: &str) -> Result<Layout, Box<dyn Error>> {
212     let exe = dir.join("layout");
213     let mut cc = cc.clone();
214     cc.define("ABI_TYPE_NAME", name);
215     cc.compile(Path::new("tests/layout.c"), &exe)?;
216 
217     let mut abi_cmd = Command::new(exe);
218     let output = abi_cmd.output()?;
219     if !output.status.success() {
220         return Err(format!("command {:?} failed, {:?}", &abi_cmd, &output).into());
221     }
222 
223     let stdout = str::from_utf8(&output.stdout)?;
224     let mut words = stdout.trim().split_whitespace();
225     let size = words.next().unwrap().parse().unwrap();
226     let alignment = words.next().unwrap().parse().unwrap();
227     Ok(Layout { size, alignment })
228 }
229 
get_c_value(dir: &Path, cc: &Compiler, name: &str) -> Result<String, Box<dyn Error>>230 fn get_c_value(dir: &Path, cc: &Compiler, name: &str) -> Result<String, Box<dyn Error>> {
231     let exe = dir.join("constant");
232     let mut cc = cc.clone();
233     cc.define("ABI_CONSTANT_NAME", name);
234     cc.compile(Path::new("tests/constant.c"), &exe)?;
235 
236     let mut abi_cmd = Command::new(exe);
237     let output = abi_cmd.output()?;
238     if !output.status.success() {
239         return Err(format!("command {:?} failed, {:?}", &abi_cmd, &output).into());
240     }
241 
242     let output = str::from_utf8(&output.stdout)?.trim();
243     if !output.starts_with("###gir test###") || !output.ends_with("###gir test###") {
244         return Err(format!(
245             "command {:?} return invalid output, {:?}",
246             &abi_cmd, &output
247         )
248         .into());
249     }
250 
251     Ok(String::from(&output[14..(output.len() - 14)]))
252 }
253 
254 const RUST_LAYOUTS: &[(&str, Layout)] = &[
255     (
256         "AtkActionIface",
257         Layout {
258             size: size_of::<AtkActionIface>(),
259             alignment: align_of::<AtkActionIface>(),
260         },
261     ),
262     (
263         "AtkAttribute",
264         Layout {
265             size: size_of::<AtkAttribute>(),
266             alignment: align_of::<AtkAttribute>(),
267         },
268     ),
269     (
270         "AtkAttributeSet",
271         Layout {
272             size: size_of::<AtkAttributeSet>(),
273             alignment: align_of::<AtkAttributeSet>(),
274         },
275     ),
276     (
277         "AtkComponentIface",
278         Layout {
279             size: size_of::<AtkComponentIface>(),
280             alignment: align_of::<AtkComponentIface>(),
281         },
282     ),
283     (
284         "AtkCoordType",
285         Layout {
286             size: size_of::<AtkCoordType>(),
287             alignment: align_of::<AtkCoordType>(),
288         },
289     ),
290     (
291         "AtkDocumentIface",
292         Layout {
293             size: size_of::<AtkDocumentIface>(),
294             alignment: align_of::<AtkDocumentIface>(),
295         },
296     ),
297     (
298         "AtkEditableTextIface",
299         Layout {
300             size: size_of::<AtkEditableTextIface>(),
301             alignment: align_of::<AtkEditableTextIface>(),
302         },
303     ),
304     (
305         "AtkGObjectAccessible",
306         Layout {
307             size: size_of::<AtkGObjectAccessible>(),
308             alignment: align_of::<AtkGObjectAccessible>(),
309         },
310     ),
311     (
312         "AtkGObjectAccessibleClass",
313         Layout {
314             size: size_of::<AtkGObjectAccessibleClass>(),
315             alignment: align_of::<AtkGObjectAccessibleClass>(),
316         },
317     ),
318     (
319         "AtkHyperlink",
320         Layout {
321             size: size_of::<AtkHyperlink>(),
322             alignment: align_of::<AtkHyperlink>(),
323         },
324     ),
325     (
326         "AtkHyperlinkClass",
327         Layout {
328             size: size_of::<AtkHyperlinkClass>(),
329             alignment: align_of::<AtkHyperlinkClass>(),
330         },
331     ),
332     (
333         "AtkHyperlinkImplIface",
334         Layout {
335             size: size_of::<AtkHyperlinkImplIface>(),
336             alignment: align_of::<AtkHyperlinkImplIface>(),
337         },
338     ),
339     (
340         "AtkHyperlinkStateFlags",
341         Layout {
342             size: size_of::<AtkHyperlinkStateFlags>(),
343             alignment: align_of::<AtkHyperlinkStateFlags>(),
344         },
345     ),
346     (
347         "AtkHypertextIface",
348         Layout {
349             size: size_of::<AtkHypertextIface>(),
350             alignment: align_of::<AtkHypertextIface>(),
351         },
352     ),
353     (
354         "AtkImageIface",
355         Layout {
356             size: size_of::<AtkImageIface>(),
357             alignment: align_of::<AtkImageIface>(),
358         },
359     ),
360     (
361         "AtkKeyEventStruct",
362         Layout {
363             size: size_of::<AtkKeyEventStruct>(),
364             alignment: align_of::<AtkKeyEventStruct>(),
365         },
366     ),
367     (
368         "AtkKeyEventType",
369         Layout {
370             size: size_of::<AtkKeyEventType>(),
371             alignment: align_of::<AtkKeyEventType>(),
372         },
373     ),
374     (
375         "AtkLayer",
376         Layout {
377             size: size_of::<AtkLayer>(),
378             alignment: align_of::<AtkLayer>(),
379         },
380     ),
381     (
382         "AtkMisc",
383         Layout {
384             size: size_of::<AtkMisc>(),
385             alignment: align_of::<AtkMisc>(),
386         },
387     ),
388     (
389         "AtkMiscClass",
390         Layout {
391             size: size_of::<AtkMiscClass>(),
392             alignment: align_of::<AtkMiscClass>(),
393         },
394     ),
395     (
396         "AtkNoOpObject",
397         Layout {
398             size: size_of::<AtkNoOpObject>(),
399             alignment: align_of::<AtkNoOpObject>(),
400         },
401     ),
402     (
403         "AtkNoOpObjectClass",
404         Layout {
405             size: size_of::<AtkNoOpObjectClass>(),
406             alignment: align_of::<AtkNoOpObjectClass>(),
407         },
408     ),
409     (
410         "AtkNoOpObjectFactory",
411         Layout {
412             size: size_of::<AtkNoOpObjectFactory>(),
413             alignment: align_of::<AtkNoOpObjectFactory>(),
414         },
415     ),
416     (
417         "AtkNoOpObjectFactoryClass",
418         Layout {
419             size: size_of::<AtkNoOpObjectFactoryClass>(),
420             alignment: align_of::<AtkNoOpObjectFactoryClass>(),
421         },
422     ),
423     (
424         "AtkObject",
425         Layout {
426             size: size_of::<AtkObject>(),
427             alignment: align_of::<AtkObject>(),
428         },
429     ),
430     (
431         "AtkObjectClass",
432         Layout {
433             size: size_of::<AtkObjectClass>(),
434             alignment: align_of::<AtkObjectClass>(),
435         },
436     ),
437     (
438         "AtkObjectFactory",
439         Layout {
440             size: size_of::<AtkObjectFactory>(),
441             alignment: align_of::<AtkObjectFactory>(),
442         },
443     ),
444     (
445         "AtkObjectFactoryClass",
446         Layout {
447             size: size_of::<AtkObjectFactoryClass>(),
448             alignment: align_of::<AtkObjectFactoryClass>(),
449         },
450     ),
451     (
452         "AtkPlug",
453         Layout {
454             size: size_of::<AtkPlug>(),
455             alignment: align_of::<AtkPlug>(),
456         },
457     ),
458     (
459         "AtkPlugClass",
460         Layout {
461             size: size_of::<AtkPlugClass>(),
462             alignment: align_of::<AtkPlugClass>(),
463         },
464     ),
465     (
466         "AtkPropertyValues",
467         Layout {
468             size: size_of::<AtkPropertyValues>(),
469             alignment: align_of::<AtkPropertyValues>(),
470         },
471     ),
472     (
473         "AtkRectangle",
474         Layout {
475             size: size_of::<AtkRectangle>(),
476             alignment: align_of::<AtkRectangle>(),
477         },
478     ),
479     (
480         "AtkRegistry",
481         Layout {
482             size: size_of::<AtkRegistry>(),
483             alignment: align_of::<AtkRegistry>(),
484         },
485     ),
486     (
487         "AtkRegistryClass",
488         Layout {
489             size: size_of::<AtkRegistryClass>(),
490             alignment: align_of::<AtkRegistryClass>(),
491         },
492     ),
493     (
494         "AtkRelation",
495         Layout {
496             size: size_of::<AtkRelation>(),
497             alignment: align_of::<AtkRelation>(),
498         },
499     ),
500     (
501         "AtkRelationClass",
502         Layout {
503             size: size_of::<AtkRelationClass>(),
504             alignment: align_of::<AtkRelationClass>(),
505         },
506     ),
507     (
508         "AtkRelationSet",
509         Layout {
510             size: size_of::<AtkRelationSet>(),
511             alignment: align_of::<AtkRelationSet>(),
512         },
513     ),
514     (
515         "AtkRelationSetClass",
516         Layout {
517             size: size_of::<AtkRelationSetClass>(),
518             alignment: align_of::<AtkRelationSetClass>(),
519         },
520     ),
521     (
522         "AtkRelationType",
523         Layout {
524             size: size_of::<AtkRelationType>(),
525             alignment: align_of::<AtkRelationType>(),
526         },
527     ),
528     (
529         "AtkRole",
530         Layout {
531             size: size_of::<AtkRole>(),
532             alignment: align_of::<AtkRole>(),
533         },
534     ),
535     (
536         "AtkScrollType",
537         Layout {
538             size: size_of::<AtkScrollType>(),
539             alignment: align_of::<AtkScrollType>(),
540         },
541     ),
542     (
543         "AtkSelectionIface",
544         Layout {
545             size: size_of::<AtkSelectionIface>(),
546             alignment: align_of::<AtkSelectionIface>(),
547         },
548     ),
549     (
550         "AtkSocket",
551         Layout {
552             size: size_of::<AtkSocket>(),
553             alignment: align_of::<AtkSocket>(),
554         },
555     ),
556     (
557         "AtkSocketClass",
558         Layout {
559             size: size_of::<AtkSocketClass>(),
560             alignment: align_of::<AtkSocketClass>(),
561         },
562     ),
563     (
564         "AtkState",
565         Layout {
566             size: size_of::<AtkState>(),
567             alignment: align_of::<AtkState>(),
568         },
569     ),
570     (
571         "AtkStateSet",
572         Layout {
573             size: size_of::<AtkStateSet>(),
574             alignment: align_of::<AtkStateSet>(),
575         },
576     ),
577     (
578         "AtkStateSetClass",
579         Layout {
580             size: size_of::<AtkStateSetClass>(),
581             alignment: align_of::<AtkStateSetClass>(),
582         },
583     ),
584     (
585         "AtkStateType",
586         Layout {
587             size: size_of::<AtkStateType>(),
588             alignment: align_of::<AtkStateType>(),
589         },
590     ),
591     (
592         "AtkStreamableContentIface",
593         Layout {
594             size: size_of::<AtkStreamableContentIface>(),
595             alignment: align_of::<AtkStreamableContentIface>(),
596         },
597     ),
598     (
599         "AtkTableCellIface",
600         Layout {
601             size: size_of::<AtkTableCellIface>(),
602             alignment: align_of::<AtkTableCellIface>(),
603         },
604     ),
605     (
606         "AtkTableIface",
607         Layout {
608             size: size_of::<AtkTableIface>(),
609             alignment: align_of::<AtkTableIface>(),
610         },
611     ),
612     (
613         "AtkTextAttribute",
614         Layout {
615             size: size_of::<AtkTextAttribute>(),
616             alignment: align_of::<AtkTextAttribute>(),
617         },
618     ),
619     (
620         "AtkTextBoundary",
621         Layout {
622             size: size_of::<AtkTextBoundary>(),
623             alignment: align_of::<AtkTextBoundary>(),
624         },
625     ),
626     (
627         "AtkTextClipType",
628         Layout {
629             size: size_of::<AtkTextClipType>(),
630             alignment: align_of::<AtkTextClipType>(),
631         },
632     ),
633     (
634         "AtkTextGranularity",
635         Layout {
636             size: size_of::<AtkTextGranularity>(),
637             alignment: align_of::<AtkTextGranularity>(),
638         },
639     ),
640     (
641         "AtkTextIface",
642         Layout {
643             size: size_of::<AtkTextIface>(),
644             alignment: align_of::<AtkTextIface>(),
645         },
646     ),
647     (
648         "AtkTextRange",
649         Layout {
650             size: size_of::<AtkTextRange>(),
651             alignment: align_of::<AtkTextRange>(),
652         },
653     ),
654     (
655         "AtkTextRectangle",
656         Layout {
657             size: size_of::<AtkTextRectangle>(),
658             alignment: align_of::<AtkTextRectangle>(),
659         },
660     ),
661     (
662         "AtkUtil",
663         Layout {
664             size: size_of::<AtkUtil>(),
665             alignment: align_of::<AtkUtil>(),
666         },
667     ),
668     (
669         "AtkUtilClass",
670         Layout {
671             size: size_of::<AtkUtilClass>(),
672             alignment: align_of::<AtkUtilClass>(),
673         },
674     ),
675     (
676         "AtkValueIface",
677         Layout {
678             size: size_of::<AtkValueIface>(),
679             alignment: align_of::<AtkValueIface>(),
680         },
681     ),
682     (
683         "AtkValueType",
684         Layout {
685             size: size_of::<AtkValueType>(),
686             alignment: align_of::<AtkValueType>(),
687         },
688     ),
689     (
690         "AtkWindowIface",
691         Layout {
692             size: size_of::<AtkWindowIface>(),
693             alignment: align_of::<AtkWindowIface>(),
694         },
695     ),
696 ];
697 
698 const RUST_CONSTANTS: &[(&str, &str)] = &[
699     ("(guint) ATK_HYPERLINK_IS_INLINE", "1"),
700     ("(gint) ATK_KEY_EVENT_LAST_DEFINED", "2"),
701     ("(gint) ATK_KEY_EVENT_PRESS", "0"),
702     ("(gint) ATK_KEY_EVENT_RELEASE", "1"),
703     ("(gint) ATK_LAYER_BACKGROUND", "1"),
704     ("(gint) ATK_LAYER_CANVAS", "2"),
705     ("(gint) ATK_LAYER_INVALID", "0"),
706     ("(gint) ATK_LAYER_MDI", "4"),
707     ("(gint) ATK_LAYER_OVERLAY", "6"),
708     ("(gint) ATK_LAYER_POPUP", "5"),
709     ("(gint) ATK_LAYER_WIDGET", "3"),
710     ("(gint) ATK_LAYER_WINDOW", "7"),
711     ("(gint) ATK_RELATION_CONTROLLED_BY", "1"),
712     ("(gint) ATK_RELATION_CONTROLLER_FOR", "2"),
713     ("(gint) ATK_RELATION_DESCRIBED_BY", "14"),
714     ("(gint) ATK_RELATION_DESCRIPTION_FOR", "15"),
715     ("(gint) ATK_RELATION_DETAILS", "17"),
716     ("(gint) ATK_RELATION_DETAILS_FOR", "18"),
717     ("(gint) ATK_RELATION_EMBEDDED_BY", "11"),
718     ("(gint) ATK_RELATION_EMBEDS", "10"),
719     ("(gint) ATK_RELATION_ERROR_FOR", "20"),
720     ("(gint) ATK_RELATION_ERROR_MESSAGE", "19"),
721     ("(gint) ATK_RELATION_FLOWS_FROM", "8"),
722     ("(gint) ATK_RELATION_FLOWS_TO", "7"),
723     ("(gint) ATK_RELATION_LABELLED_BY", "4"),
724     ("(gint) ATK_RELATION_LABEL_FOR", "3"),
725     ("(gint) ATK_RELATION_LAST_DEFINED", "21"),
726     ("(gint) ATK_RELATION_MEMBER_OF", "5"),
727     ("(gint) ATK_RELATION_NODE_CHILD_OF", "6"),
728     ("(gint) ATK_RELATION_NODE_PARENT_OF", "16"),
729     ("(gint) ATK_RELATION_NULL", "0"),
730     ("(gint) ATK_RELATION_PARENT_WINDOW_OF", "13"),
731     ("(gint) ATK_RELATION_POPUP_FOR", "12"),
732     ("(gint) ATK_RELATION_SUBWINDOW_OF", "9"),
733     ("(gint) ATK_ROLE_ACCEL_LABEL", "1"),
734     ("(gint) ATK_ROLE_ALERT", "2"),
735     ("(gint) ATK_ROLE_ANIMATION", "3"),
736     ("(gint) ATK_ROLE_APPLICATION", "73"),
737     ("(gint) ATK_ROLE_ARROW", "4"),
738     ("(gint) ATK_ROLE_ARTICLE", "107"),
739     ("(gint) ATK_ROLE_AUDIO", "104"),
740     ("(gint) ATK_ROLE_AUTOCOMPLETE", "74"),
741     ("(gint) ATK_ROLE_BLOCK_QUOTE", "103"),
742     ("(gint) ATK_ROLE_CALENDAR", "5"),
743     ("(gint) ATK_ROLE_CANVAS", "6"),
744     ("(gint) ATK_ROLE_CAPTION", "79"),
745     ("(gint) ATK_ROLE_CHART", "78"),
746     ("(gint) ATK_ROLE_CHECK_BOX", "7"),
747     ("(gint) ATK_ROLE_CHECK_MENU_ITEM", "8"),
748     ("(gint) ATK_ROLE_COLOR_CHOOSER", "9"),
749     ("(gint) ATK_ROLE_COLUMN_HEADER", "10"),
750     ("(gint) ATK_ROLE_COMBO_BOX", "11"),
751     ("(gint) ATK_ROLE_COMMENT", "95"),
752     ("(gint) ATK_ROLE_CONTENT_DELETION", "123"),
753     ("(gint) ATK_ROLE_CONTENT_INSERTION", "124"),
754     ("(gint) ATK_ROLE_DATE_EDITOR", "12"),
755     ("(gint) ATK_ROLE_DEFINITION", "106"),
756     ("(gint) ATK_ROLE_DESCRIPTION_LIST", "114"),
757     ("(gint) ATK_ROLE_DESCRIPTION_TERM", "115"),
758     ("(gint) ATK_ROLE_DESCRIPTION_VALUE", "116"),
759     ("(gint) ATK_ROLE_DESKTOP_FRAME", "14"),
760     ("(gint) ATK_ROLE_DESKTOP_ICON", "13"),
761     ("(gint) ATK_ROLE_DIAL", "15"),
762     ("(gint) ATK_ROLE_DIALOG", "16"),
763     ("(gint) ATK_ROLE_DIRECTORY_PANE", "17"),
764     ("(gint) ATK_ROLE_DOCUMENT_EMAIL", "94"),
765     ("(gint) ATK_ROLE_DOCUMENT_FRAME", "80"),
766     ("(gint) ATK_ROLE_DOCUMENT_PRESENTATION", "91"),
767     ("(gint) ATK_ROLE_DOCUMENT_SPREADSHEET", "90"),
768     ("(gint) ATK_ROLE_DOCUMENT_TEXT", "92"),
769     ("(gint) ATK_ROLE_DOCUMENT_WEB", "93"),
770     ("(gint) ATK_ROLE_DRAWING_AREA", "18"),
771     ("(gint) ATK_ROLE_EDITBAR", "75"),
772     ("(gint) ATK_ROLE_EMBEDDED", "76"),
773     ("(gint) ATK_ROLE_ENTRY", "77"),
774     ("(gint) ATK_ROLE_FILE_CHOOSER", "19"),
775     ("(gint) ATK_ROLE_FILLER", "20"),
776     ("(gint) ATK_ROLE_FONT_CHOOSER", "21"),
777     ("(gint) ATK_ROLE_FOOTER", "70"),
778     ("(gint) ATK_ROLE_FOOTNOTE", "122"),
779     ("(gint) ATK_ROLE_FORM", "85"),
780     ("(gint) ATK_ROLE_FRAME", "22"),
781     ("(gint) ATK_ROLE_GLASS_PANE", "23"),
782     ("(gint) ATK_ROLE_GROUPING", "97"),
783     ("(gint) ATK_ROLE_HEADER", "69"),
784     ("(gint) ATK_ROLE_HEADING", "81"),
785     ("(gint) ATK_ROLE_HTML_CONTAINER", "24"),
786     ("(gint) ATK_ROLE_ICON", "25"),
787     ("(gint) ATK_ROLE_IMAGE", "26"),
788     ("(gint) ATK_ROLE_IMAGE_MAP", "98"),
789     ("(gint) ATK_ROLE_INFO_BAR", "100"),
790     ("(gint) ATK_ROLE_INPUT_METHOD_WINDOW", "87"),
791     ("(gint) ATK_ROLE_INTERNAL_FRAME", "27"),
792     ("(gint) ATK_ROLE_INVALID", "0"),
793     ("(gint) ATK_ROLE_LABEL", "28"),
794     ("(gint) ATK_ROLE_LANDMARK", "108"),
795     ("(gint) ATK_ROLE_LAST_DEFINED", "125"),
796     ("(gint) ATK_ROLE_LAYERED_PANE", "29"),
797     ("(gint) ATK_ROLE_LEVEL_BAR", "101"),
798     ("(gint) ATK_ROLE_LINK", "86"),
799     ("(gint) ATK_ROLE_LIST", "30"),
800     ("(gint) ATK_ROLE_LIST_BOX", "96"),
801     ("(gint) ATK_ROLE_LIST_ITEM", "31"),
802     ("(gint) ATK_ROLE_LOG", "109"),
803     ("(gint) ATK_ROLE_MARQUEE", "110"),
804     ("(gint) ATK_ROLE_MATH", "111"),
805     ("(gint) ATK_ROLE_MATH_FRACTION", "118"),
806     ("(gint) ATK_ROLE_MATH_ROOT", "119"),
807     ("(gint) ATK_ROLE_MENU", "32"),
808     ("(gint) ATK_ROLE_MENU_BAR", "33"),
809     ("(gint) ATK_ROLE_MENU_ITEM", "34"),
810     ("(gint) ATK_ROLE_NOTIFICATION", "99"),
811     ("(gint) ATK_ROLE_OPTION_PANE", "35"),
812     ("(gint) ATK_ROLE_PAGE", "82"),
813     ("(gint) ATK_ROLE_PAGE_TAB", "36"),
814     ("(gint) ATK_ROLE_PAGE_TAB_LIST", "37"),
815     ("(gint) ATK_ROLE_PANEL", "38"),
816     ("(gint) ATK_ROLE_PARAGRAPH", "71"),
817     ("(gint) ATK_ROLE_PASSWORD_TEXT", "39"),
818     ("(gint) ATK_ROLE_POPUP_MENU", "40"),
819     ("(gint) ATK_ROLE_PROGRESS_BAR", "41"),
820     ("(gint) ATK_ROLE_PUSH_BUTTON", "42"),
821     ("(gint) ATK_ROLE_RADIO_BUTTON", "43"),
822     ("(gint) ATK_ROLE_RADIO_MENU_ITEM", "44"),
823     ("(gint) ATK_ROLE_RATING", "112"),
824     ("(gint) ATK_ROLE_REDUNDANT_OBJECT", "84"),
825     ("(gint) ATK_ROLE_ROOT_PANE", "45"),
826     ("(gint) ATK_ROLE_ROW_HEADER", "46"),
827     ("(gint) ATK_ROLE_RULER", "72"),
828     ("(gint) ATK_ROLE_SCROLL_BAR", "47"),
829     ("(gint) ATK_ROLE_SCROLL_PANE", "48"),
830     ("(gint) ATK_ROLE_SECTION", "83"),
831     ("(gint) ATK_ROLE_SEPARATOR", "49"),
832     ("(gint) ATK_ROLE_SLIDER", "50"),
833     ("(gint) ATK_ROLE_SPIN_BUTTON", "52"),
834     ("(gint) ATK_ROLE_SPLIT_PANE", "51"),
835     ("(gint) ATK_ROLE_STATIC", "117"),
836     ("(gint) ATK_ROLE_STATUSBAR", "53"),
837     ("(gint) ATK_ROLE_SUBSCRIPT", "120"),
838     ("(gint) ATK_ROLE_SUPERSCRIPT", "121"),
839     ("(gint) ATK_ROLE_TABLE", "54"),
840     ("(gint) ATK_ROLE_TABLE_CELL", "55"),
841     ("(gint) ATK_ROLE_TABLE_COLUMN_HEADER", "56"),
842     ("(gint) ATK_ROLE_TABLE_ROW", "88"),
843     ("(gint) ATK_ROLE_TABLE_ROW_HEADER", "57"),
844     ("(gint) ATK_ROLE_TEAR_OFF_MENU_ITEM", "58"),
845     ("(gint) ATK_ROLE_TERMINAL", "59"),
846     ("(gint) ATK_ROLE_TEXT", "60"),
847     ("(gint) ATK_ROLE_TIMER", "113"),
848     ("(gint) ATK_ROLE_TITLE_BAR", "102"),
849     ("(gint) ATK_ROLE_TOGGLE_BUTTON", "61"),
850     ("(gint) ATK_ROLE_TOOL_BAR", "62"),
851     ("(gint) ATK_ROLE_TOOL_TIP", "63"),
852     ("(gint) ATK_ROLE_TREE", "64"),
853     ("(gint) ATK_ROLE_TREE_ITEM", "89"),
854     ("(gint) ATK_ROLE_TREE_TABLE", "65"),
855     ("(gint) ATK_ROLE_UNKNOWN", "66"),
856     ("(gint) ATK_ROLE_VIDEO", "105"),
857     ("(gint) ATK_ROLE_VIEWPORT", "67"),
858     ("(gint) ATK_ROLE_WINDOW", "68"),
859     ("(gint) ATK_SCROLL_ANYWHERE", "6"),
860     ("(gint) ATK_SCROLL_BOTTOM_EDGE", "3"),
861     ("(gint) ATK_SCROLL_BOTTOM_RIGHT", "1"),
862     ("(gint) ATK_SCROLL_LEFT_EDGE", "4"),
863     ("(gint) ATK_SCROLL_RIGHT_EDGE", "5"),
864     ("(gint) ATK_SCROLL_TOP_EDGE", "2"),
865     ("(gint) ATK_SCROLL_TOP_LEFT", "0"),
866     ("(gint) ATK_STATE_ACTIVE", "1"),
867     ("(gint) ATK_STATE_ANIMATED", "37"),
868     ("(gint) ATK_STATE_ARMED", "2"),
869     ("(gint) ATK_STATE_BUSY", "3"),
870     ("(gint) ATK_STATE_CHECKABLE", "39"),
871     ("(gint) ATK_STATE_CHECKED", "4"),
872     ("(gint) ATK_STATE_DEFAULT", "36"),
873     ("(gint) ATK_STATE_DEFUNCT", "5"),
874     ("(gint) ATK_STATE_EDITABLE", "6"),
875     ("(gint) ATK_STATE_ENABLED", "7"),
876     ("(gint) ATK_STATE_EXPANDABLE", "8"),
877     ("(gint) ATK_STATE_EXPANDED", "9"),
878     ("(gint) ATK_STATE_FOCUSABLE", "10"),
879     ("(gint) ATK_STATE_FOCUSED", "11"),
880     ("(gint) ATK_STATE_HAS_POPUP", "40"),
881     ("(gint) ATK_STATE_HAS_TOOLTIP", "41"),
882     ("(gint) ATK_STATE_HORIZONTAL", "12"),
883     ("(gint) ATK_STATE_ICONIFIED", "13"),
884     ("(gint) ATK_STATE_INDETERMINATE", "30"),
885     ("(gint) ATK_STATE_INVALID", "0"),
886     ("(gint) ATK_STATE_INVALID_ENTRY", "33"),
887     ("(gint) ATK_STATE_LAST_DEFINED", "43"),
888     ("(gint) ATK_STATE_MANAGES_DESCENDANTS", "29"),
889     ("(gint) ATK_STATE_MODAL", "14"),
890     ("(gint) ATK_STATE_MULTISELECTABLE", "16"),
891     ("(gint) ATK_STATE_MULTI_LINE", "15"),
892     ("(gint) ATK_STATE_OPAQUE", "17"),
893     ("(gint) ATK_STATE_PRESSED", "18"),
894     ("(gint) ATK_STATE_READ_ONLY", "42"),
895     ("(gint) ATK_STATE_REQUIRED", "32"),
896     ("(gint) ATK_STATE_RESIZABLE", "19"),
897     ("(gint) ATK_STATE_SELECTABLE", "20"),
898     ("(gint) ATK_STATE_SELECTABLE_TEXT", "35"),
899     ("(gint) ATK_STATE_SELECTED", "21"),
900     ("(gint) ATK_STATE_SENSITIVE", "22"),
901     ("(gint) ATK_STATE_SHOWING", "23"),
902     ("(gint) ATK_STATE_SINGLE_LINE", "24"),
903     ("(gint) ATK_STATE_STALE", "25"),
904     ("(gint) ATK_STATE_SUPPORTS_AUTOCOMPLETION", "34"),
905     ("(gint) ATK_STATE_TRANSIENT", "26"),
906     ("(gint) ATK_STATE_TRUNCATED", "31"),
907     ("(gint) ATK_STATE_VERTICAL", "27"),
908     ("(gint) ATK_STATE_VISIBLE", "28"),
909     ("(gint) ATK_STATE_VISITED", "38"),
910     ("(gint) ATK_TEXT_ATTR_BG_COLOR", "18"),
911     ("(gint) ATK_TEXT_ATTR_BG_FULL_HEIGHT", "9"),
912     ("(gint) ATK_TEXT_ATTR_BG_STIPPLE", "20"),
913     ("(gint) ATK_TEXT_ATTR_DIRECTION", "23"),
914     ("(gint) ATK_TEXT_ATTR_EDITABLE", "5"),
915     ("(gint) ATK_TEXT_ATTR_FAMILY_NAME", "17"),
916     ("(gint) ATK_TEXT_ATTR_FG_COLOR", "19"),
917     ("(gint) ATK_TEXT_ATTR_FG_STIPPLE", "21"),
918     ("(gint) ATK_TEXT_ATTR_INDENT", "3"),
919     ("(gint) ATK_TEXT_ATTR_INVALID", "0"),
920     ("(gint) ATK_TEXT_ATTR_INVISIBLE", "4"),
921     ("(gint) ATK_TEXT_ATTR_JUSTIFICATION", "24"),
922     ("(gint) ATK_TEXT_ATTR_LANGUAGE", "16"),
923     ("(gint) ATK_TEXT_ATTR_LAST_DEFINED", "28"),
924     ("(gint) ATK_TEXT_ATTR_LEFT_MARGIN", "1"),
925     ("(gint) ATK_TEXT_ATTR_PIXELS_ABOVE_LINES", "6"),
926     ("(gint) ATK_TEXT_ATTR_PIXELS_BELOW_LINES", "7"),
927     ("(gint) ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP", "8"),
928     ("(gint) ATK_TEXT_ATTR_RIGHT_MARGIN", "2"),
929     ("(gint) ATK_TEXT_ATTR_RISE", "10"),
930     ("(gint) ATK_TEXT_ATTR_SCALE", "14"),
931     ("(gint) ATK_TEXT_ATTR_SIZE", "13"),
932     ("(gint) ATK_TEXT_ATTR_STRETCH", "25"),
933     ("(gint) ATK_TEXT_ATTR_STRIKETHROUGH", "12"),
934     ("(gint) ATK_TEXT_ATTR_STYLE", "27"),
935     ("(gint) ATK_TEXT_ATTR_UNDERLINE", "11"),
936     ("(gint) ATK_TEXT_ATTR_VARIANT", "26"),
937     ("(gint) ATK_TEXT_ATTR_WEIGHT", "15"),
938     ("(gint) ATK_TEXT_ATTR_WRAP_MODE", "22"),
939     ("(gint) ATK_TEXT_BOUNDARY_CHAR", "0"),
940     ("(gint) ATK_TEXT_BOUNDARY_LINE_END", "6"),
941     ("(gint) ATK_TEXT_BOUNDARY_LINE_START", "5"),
942     ("(gint) ATK_TEXT_BOUNDARY_SENTENCE_END", "4"),
943     ("(gint) ATK_TEXT_BOUNDARY_SENTENCE_START", "3"),
944     ("(gint) ATK_TEXT_BOUNDARY_WORD_END", "2"),
945     ("(gint) ATK_TEXT_BOUNDARY_WORD_START", "1"),
946     ("(gint) ATK_TEXT_CLIP_BOTH", "3"),
947     ("(gint) ATK_TEXT_CLIP_MAX", "2"),
948     ("(gint) ATK_TEXT_CLIP_MIN", "1"),
949     ("(gint) ATK_TEXT_CLIP_NONE", "0"),
950     ("(gint) ATK_TEXT_GRANULARITY_CHAR", "0"),
951     ("(gint) ATK_TEXT_GRANULARITY_LINE", "3"),
952     ("(gint) ATK_TEXT_GRANULARITY_PARAGRAPH", "4"),
953     ("(gint) ATK_TEXT_GRANULARITY_SENTENCE", "2"),
954     ("(gint) ATK_TEXT_GRANULARITY_WORD", "1"),
955     ("(gint) ATK_VALUE_ACCEPTABLE", "2"),
956     ("(gint) ATK_VALUE_BAD", "11"),
957     ("(gint) ATK_VALUE_BEST", "14"),
958     ("(gint) ATK_VALUE_GOOD", "12"),
959     ("(gint) ATK_VALUE_HIGH", "8"),
960     ("(gint) ATK_VALUE_LAST_DEFINED", "15"),
961     ("(gint) ATK_VALUE_LOW", "6"),
962     ("(gint) ATK_VALUE_MEDIUM", "7"),
963     ("(gint) ATK_VALUE_STRONG", "3"),
964     ("(gint) ATK_VALUE_VERY_BAD", "10"),
965     ("(gint) ATK_VALUE_VERY_GOOD", "13"),
966     ("(gint) ATK_VALUE_VERY_HIGH", "9"),
967     ("(gint) ATK_VALUE_VERY_LOW", "5"),
968     ("(gint) ATK_VALUE_VERY_STRONG", "4"),
969     ("(gint) ATK_VALUE_VERY_WEAK", "0"),
970     ("(gint) ATK_VALUE_WEAK", "1"),
971     ("(gint) ATK_XY_PARENT", "2"),
972     ("(gint) ATK_XY_SCREEN", "0"),
973     ("(gint) ATK_XY_WINDOW", "1"),
974 ];
975