Compare commits

...

498 Commits
1.8.3 ... 2.0.0

Author SHA1 Message Date
Matt Nadareski
9f229aad47 Bump version 2025-09-29 07:27:50 -04:00
Matt Nadareski
f6f6ea21b4 Sync README with help text 2025-09-28 21:47:37 -04:00
Matt Nadareski
ec416d5631 Document all local samples 2025-09-27 22:47:43 -04:00
Matt Nadareski
335cbca8fb Add clarification 2025-09-27 22:04:20 -04:00
Matt Nadareski
ab8d5ec475 Split unknown AddD field, fix TODO 2025-09-27 22:02:10 -04:00
Matt Nadareski
ef9f050fbf Signature is clearly a string 2025-09-27 21:47:55 -04:00
Matt Nadareski
46b1838d72 Clean up some things around AddD 2025-09-27 21:46:03 -04:00
HeroponRikiBestest
2b9a527743 Small fix just in case. (#25) 2025-09-27 12:59:02 -04:00
HeroponRikiBestest
cb41f8a8a6 Temporary fix for solid archive detection until SharpCompress makes another release. (#24) 2025-09-27 12:32:10 -04:00
Matt Nadareski
fcf003af7d Split Wise extraction to be smarter 2025-09-27 08:26:57 -04:00
Matt Nadareski
350924545c Fix bzip constants 2025-09-26 23:49:35 -04:00
Matt Nadareski
ae6bf0f2da Fix issues from manual testing 2025-09-26 22:52:09 -04:00
Matt Nadareski
7395d9842c Complete Spoon Installer extraction 2025-09-26 22:30:59 -04:00
Matt Nadareski
741a1e13d0 Add framework for Spoon Installer extraction 2025-09-26 22:27:27 -04:00
Matt Nadareski
447064afc1 Add Spoon Installer reader 2025-09-26 22:23:20 -04:00
Matt Nadareski
a443a6833a Add integer values for better research 2025-09-26 22:18:41 -04:00
Matt Nadareski
160239eba7 Add Spoon Installer models and notes 2025-09-26 22:12:27 -04:00
Matt Nadareski
04fb3fd363 Fix documentation issue 2025-09-26 22:02:35 -04:00
Matt Nadareski
ba60c9b516 Add extraction for Advanced Installer 2025-09-26 19:56:51 -04:00
Matt Nadareski
f8ddfcf5ae Add framework for Advanced Installer extraction 2025-09-26 19:43:39 -04:00
Matt Nadareski
c379bdcadc Fix description 2025-09-26 16:49:21 -04:00
Matt Nadareski
575caeda92 Make fixes from manual testing 2025-09-26 16:38:56 -04:00
Matt Nadareski
0d4dcf4a60 Start implementing Advanced Installer reader 2025-09-26 16:30:38 -04:00
Matt Nadareski
ddb14a69d0 Forgot to rename Writers folder 2025-09-26 16:29:16 -04:00
Matt Nadareski
f1ace61076 Introduce and use BaseMetadataSerializer 2025-09-26 16:00:33 -04:00
Matt Nadareski
0f5f866cd2 Rename IModelSerializer to ICrossModel 2025-09-26 15:48:36 -04:00
Matt Nadareski
bd866c5b05 Update package tags 2025-09-26 15:36:22 -04:00
Matt Nadareski
07ea1abbf8 Use correct block format for readme 2025-09-26 15:33:38 -04:00
Matt Nadareski
6853376f60 Unify type parameter naming 2025-09-26 15:28:53 -04:00
Matt Nadareski
0e67f0bff4 Move wrapper interfaces to better namespace 2025-09-26 15:20:49 -04:00
Matt Nadareski
6035c19f47 Move IPrinter interface to better namespace 2025-09-26 15:13:43 -04:00
Matt Nadareski
592a3d3505 Rename *Serializer interfaces to *Writer 2025-09-26 15:10:59 -04:00
Matt Nadareski
2c092ed665 Rename *Deserializer interfaces to *Reader 2025-09-26 15:02:43 -04:00
Matt Nadareski
2bd4a00df4 Rename Serializers to Writers 2025-09-26 14:59:45 -04:00
Matt Nadareski
f0639b28b9 Rename Deserializers to Readers 2025-09-26 14:57:20 -04:00
Matt Nadareski
775bab6656 Add AACS extension 2025-09-26 14:27:49 -04:00
Matt Nadareski
c82d865cd5 Move Extensions to Data path 2025-09-26 13:15:55 -04:00
Matt Nadareski
0b95b9509a Move Printers to Data path 2025-09-26 13:11:57 -04:00
Matt Nadareski
d8185e3970 Move Models to Data path 2025-09-26 13:06:18 -04:00
Matt Nadareski
b3a3766d77 Create and use Attributes namespace 2025-09-26 12:44:16 -04:00
Matt Nadareski
3681682fe8 Internal rename of OID namespace to have Data prefix 2025-09-26 12:29:52 -04:00
Matt Nadareski
12c292d038 Namespace reference cleanup 2025-09-26 12:27:10 -04:00
Matt Nadareski
5af4de2878 Migrate remaining models from Models 2025-09-26 12:09:34 -04:00
Matt Nadareski
2e7f18c407 Migrate non-executable models from Models 2025-09-26 11:57:18 -04:00
Matt Nadareski
48248b2832 Add namespace to the readme 2025-09-26 11:43:49 -04:00
Matt Nadareski
c6082fa7c7 Migrate support file models from Models 2025-09-26 11:42:28 -04:00
Matt Nadareski
3af19510a8 Migrate archive models from Models 2025-09-26 10:57:15 -04:00
Matt Nadareski
2a12b8132f Add README for Models namespace 2025-09-26 10:24:36 -04:00
Matt Nadareski
3daec985ba Migrate metadata models from Models 2025-09-26 10:20:48 -04:00
Matt Nadareski
4b79ee103c Simplify overlay address finding slightly 2025-09-25 21:34:41 -04:00
Matt Nadareski
077abd590a Use constants, add CFB detection to overlays and resources 2025-09-25 21:13:07 -04:00
Matt Nadareski
cab890b1d9 Remove erroneous duplicate code 2025-09-25 20:29:51 -04:00
Matt Nadareski
d3f0858ec4 Forgot the second adjustment 2025-09-25 20:28:25 -04:00
Matt Nadareski
97896b91d7 Cap overlay at 0x10000 bytes 2025-09-25 20:14:41 -04:00
Matt Nadareski
ca354b3b7f Comment about entry point data caching 2025-09-25 16:24:20 -04:00
Matt Nadareski
d035211a64 Off by one? 2025-09-25 16:20:15 -04:00
Matt Nadareski
75728a4d1d Handle large overlays in extraction 2025-09-25 14:07:01 -04:00
Matt Nadareski
265789ea84 Overlay address in PE should be long, fix caching 2025-09-25 13:55:44 -04:00
Matt Nadareski
4577311432 Adjust overlay address for PE using certificate table 2025-09-25 13:53:56 -04:00
Matt Nadareski
963c333c2e Cache the overlay length 2025-09-25 13:50:51 -04:00
Matt Nadareski
6eff6cf3b6 Add TODOs to handle large overlays 2025-09-25 13:41:51 -04:00
Matt Nadareski
c9794691bb Limit overlay caching to int.MaxValue 2025-09-25 13:40:29 -04:00
Matt Nadareski
9574232719 Bump version 2025-09-24 11:06:47 -04:00
Matt Nadareski
676bf584d6 Clean up some console writes 2025-09-24 10:55:39 -04:00
Matt Nadareski
0a4fd01ede Gate MS-CAB warning behind debug to avoid confusion 2025-09-24 10:51:27 -04:00
Matt Nadareski
6cb4023498 Update namespaces in README 2025-09-24 10:50:12 -04:00
Matt Nadareski
8f775dbb3b This should be ObjectIdentifier not strictly ASN.1 2025-09-24 10:47:00 -04:00
Matt Nadareski
91785eab1f Fix tests 2025-09-24 10:40:39 -04:00
Matt Nadareski
4f8751667a Namespace ASN models until Models is updated 2025-09-24 10:40:30 -04:00
Matt Nadareski
ad7508c464 Add some more OIDs 2025-09-24 10:11:21 -04:00
Matt Nadareski
97a9e141ae Add some more OIDs 2025-09-24 09:54:18 -04:00
Matt Nadareski
842a0c3daf Remove useless PathProcessor helper class 2025-09-24 09:43:27 -04:00
Matt Nadareski
b6acde9145 Make consistent with other deserializers 2025-09-24 09:27:24 -04:00
Matt Nadareski
b97dbc2ac5 Simplify extension code slightly 2025-09-24 09:22:23 -04:00
Matt Nadareski
e03852bd7e Simplify ASN.1 integration 2025-09-24 09:19:46 -04:00
Matt Nadareski
0db5de204e Rename TLV deserializer to be more consistent 2025-09-24 09:06:26 -04:00
Matt Nadareski
5fe3f14419 Make TypeLengthValue more model-like 2025-09-24 09:00:48 -04:00
Matt Nadareski
ffe1d9a82d Create and use TypeLengthValue deserializer 2025-09-24 08:54:25 -04:00
Matt Nadareski
11d6560290 Update IO to 1.7.5 2025-09-24 08:30:24 -04:00
Matt Nadareski
e29d8e6728 Integrate ASN.1 code from separate library 2025-09-24 08:25:11 -04:00
Matt Nadareski
918e81a4cb Move extensions to new namespace for cleanliness 2025-09-23 09:58:44 -04:00
Matt Nadareski
ad0ddede38 Fix reference issue 2025-09-22 21:21:43 -04:00
Matt Nadareski
e969b12884 Move wrapper factory up a level 2025-09-22 21:14:33 -04:00
Matt Nadareski
7a5475255f Fix the fake wrapper tests 2025-09-22 20:14:01 -04:00
Matt Nadareski
0ffd436de8 Update packages 2025-09-22 20:07:18 -04:00
Matt Nadareski
4f685187e9 COFF naming doesn't need to continue 2025-09-22 12:56:19 -04:00
Matt Nadareski
2b356b37b1 Sync NE overlay handling with PE 2025-09-22 10:08:46 -04:00
Matt Nadareski
7c56268eb1 Add PFF version 0 detection 2025-09-22 09:35:46 -04:00
Matt Nadareski
970a54e6e3 Add placeholder SFFS wrapper 2025-09-22 09:13:27 -04:00
Matt Nadareski
e35ddf0780 Always overwrite on output, ensure flushed streams 2025-09-21 21:10:40 -04:00
Matt Nadareski
bf35b7c10b Bump version 2025-09-21 12:35:37 -04:00
Matt Nadareski
4026b8ca09 Handle differently-encoded XMLs as textfiles 2025-09-21 12:10:58 -04:00
Matt Nadareski
6d2e2d8c3b Handle some invalid parsing cases that were missed previously 2025-09-21 11:44:58 -04:00
Matt Nadareski
a2b08157cc Fix issue with split resource tables 2025-09-21 11:23:53 -04:00
Matt Nadareski
0108ecf4c1 Bump version 2025-09-21 09:33:55 -04:00
Matt Nadareski
4921da0bb5 Fix issues from porting MPQ from BOS 2025-09-21 00:04:16 -04:00
Matt Nadareski
0c836bb3b1 Try one more thing? 2025-09-20 23:39:49 -04:00
Matt Nadareski
a8e41c1505 Try this 2025-09-20 23:24:12 -04:00
Matt Nadareski
f67e1c9d2b Bump version 2025-09-20 22:38:08 -04:00
Matt Nadareski
f0ce58a79e Move two things out of the lock 2025-09-20 22:32:54 -04:00
Matt Nadareski
b7f782c1b7 Update packages 2025-09-20 22:31:58 -04:00
Matt Nadareski
5e39e169b2 Clean up PE printing a bit 2025-09-20 20:17:38 -04:00
Matt Nadareski
104c5ccad4 XML resources and overlay 2025-09-20 19:48:45 -04:00
Matt Nadareski
d15b4d7d23 Bump version 2025-09-20 10:47:38 -04:00
Matt Nadareski
60e6a75d5e Make public again 2025-09-20 10:40:19 -04:00
Matt Nadareski
484415d0e5 Ensure the resource table has been parsed for version info 2025-09-20 10:36:09 -04:00
Matt Nadareski
0ef9b447c4 Remove extraneous semicolon 2025-09-20 10:34:08 -04:00
Matt Nadareski
8f64e2defd Minor cleanup to previous commit 2025-09-20 10:32:53 -04:00
HeroponRikiBestest
fbdadce129 Add Matroschka processing. (#23)
* Made changes

* Temporary hack to not rely on models without significantly changing current code. Revert all of this with offset-based reading later.

Also added unnecessary casting in wrapperfactory so serialization will build locally. Revert this, since I assume it somehow builds fine for GA/sabre/etc.

* small fixes

* Store matroschka section as PE extension

* Move extractor out of deserializer, remove weird hack

* Potential GA fix

* More potential GA fixes.

* I have no idea why GA hits that error but not me

* Giving up on GA for now

* fix locking issues

* Fix GA building; thank you sabre

* Minor improvements all around

* Catch some braced single-line if statements

* Use var more

* Seperate deserializer into helper methods

* Make file path reading much more sane

* Removed MatroschkaHeaderType enum

* Removed MatroschkaGapType enum, further simplify matgaphelper.

* Remove MatroschkaHasUnknown enum, further simplify Unknown value reading.

* Cache initial offset.

* Remove TryCreate patterns.

* Rename matroschka variable to package

* Newline after object

* Rename to obj

* Remove a few unecessary TODOs

* Seperate hexstring byte read to another line.

* Fix documentation.

* More private static

* Changed data.position setting to seeking. NTS: check if this broke anything later

* rename entries to obj

* MatroschkaEntry to var

* Newline

* Alphabetical

* More alphabetical.

* section to package

* Move private variables.

* Move to extension properties.

* Revert section finding.

* Remove uneeded _dataSource lock and access.

* combine lines and make var

* Combine two null checks.

* Packaged files, some past commits I think I forgot to push.

* Missed two

* newline

* space

* newline

* Combine two lines

* Removed comment

* Return false explicitly

* Change hashing string implementation

* Fix order.

* Use offset reading instead of filedataarray

* Change file reading around a little preemptively for BOS

---------

Co-authored-by: Matt Nadareski <mnadareski@outlook.com>
2025-09-20 10:00:54 -04:00
Matt Nadareski
d3e7abfaa3 Normalize ReadRangeFromSource use 2025-09-20 09:49:42 -04:00
Matt Nadareski
b2279e97b2 CHD is all big-endian 2025-09-18 21:18:43 -04:00
Matt Nadareski
7cf969336f Fix this bumble 2025-09-18 20:54:30 -04:00
Matt Nadareski
f73d48166a Source isn't needed here anymore 2025-09-18 09:46:01 -04:00
Matt Nadareski
53af618fe4 Proof-of-concept Wise section caching 2025-09-18 09:40:15 -04:00
Matt Nadareski
5d2cf58477 Fix this being finicky 2025-09-17 12:56:32 -04:00
Matt Nadareski
664e7dce28 Greater than but not equal 2025-09-17 10:30:35 -04:00
Matt Nadareski
14a8f00864 Clean up nonstandard deserializers 2025-09-16 23:24:49 -04:00
Matt Nadareski
0b889fdc06 Remove weird holdover property 2025-09-16 23:11:14 -04:00
Matt Nadareski
e336efc149 Do the same for serializers 2025-09-16 22:29:52 -04:00
Matt Nadareski
4cd52162eb Static implementations using reflection go away 2025-09-16 22:25:40 -04:00
Matt Nadareski
eab9fff711 One slipped through the cracks 2025-09-16 22:22:32 -04:00
Matt Nadareski
d4f3511060 These don't need to call the reflection one 2025-09-16 22:21:22 -04:00
Matt Nadareski
ed12bbb35c Avoid hidden reflection call for most cases 2025-09-16 22:20:13 -04:00
Matt Nadareski
aa4629fe99 MPQ needs a distinction 2025-09-16 22:12:18 -04:00
Matt Nadareski
1950f23cf4 This should actually be a different exception type 2025-09-16 22:08:50 -04:00
Matt Nadareski
ca7c88cef6 Add better summaries for things 2025-09-16 22:07:05 -04:00
Matt Nadareski
10848e6c51 Fix issue with seeking by introducing more constructors 2025-09-16 21:54:26 -04:00
Matt Nadareski
f5d0f065c1 Handle unknown AACS records a bit better for now 2025-09-16 20:11:41 -04:00
Matt Nadareski
17b0573b0b Handle memory-padded resources tables and non-local resources 2025-09-12 10:50:22 -04:00
Matt Nadareski
7f1d843d96 Minor bugfix in name retrieval 2025-09-12 09:28:27 -04:00
Matt Nadareski
cc4837c1d1 More partial classes for reasonable things 2025-09-12 09:09:40 -04:00
Matt Nadareski
588ee5bfe4 Make partial classes for extraction 2025-09-12 09:02:03 -04:00
Matt Nadareski
e9b1b2750f Fill out the placeholder 2025-09-11 12:32:44 -04:00
Matt Nadareski
1d6fa06e97 Placeholder for section table trailer data 2025-09-11 12:24:56 -04:00
Matt Nadareski
2c22924239 Seek to section table to match docs 2025-09-11 12:17:48 -04:00
Matt Nadareski
eb01dd1e25 Add note for later 2025-09-11 12:14:07 -04:00
Matt Nadareski
0a3cb79b1c Fix issue found in encrypted and obfuscated PE 2025-09-11 12:07:22 -04:00
Matt Nadareski
da9eace8cc Slight tweak to printing again 2025-09-11 11:47:07 -04:00
Matt Nadareski
526a02b8b6 Slight tweak to printing again 2025-09-11 11:44:58 -04:00
Matt Nadareski
658c7a1c3b Add another safeguard? 2025-09-11 11:10:11 -04:00
Matt Nadareski
af84474795 Fix invalid base relocation table parsing 2025-09-11 10:58:15 -04:00
Matt Nadareski
42913c6732 Invalid export should be null, not empty 2025-09-11 10:49:01 -04:00
Matt Nadareski
2cdf544518 Fix an oddly-reading format 2025-09-11 10:45:17 -04:00
Matt Nadareski
652ec58238 Fix certificate table info printing 2025-09-11 10:41:09 -04:00
Matt Nadareski
f8531daa5c Ensure overlay accounts for certificates properly 2025-09-11 10:40:09 -04:00
Matt Nadareski
e9e89b0b43 This has been consistently wrong 2025-09-11 10:33:10 -04:00
Matt Nadareski
55e788a894 Ignore invalid certificate entries 2025-09-11 10:21:51 -04:00
Matt Nadareski
b28bb93ccb Handle non-section data with valid RVA 2025-09-11 10:11:05 -04:00
Matt Nadareski
367aab0f83 Add placeholder for figuring something out later 2025-09-11 09:59:42 -04:00
Matt Nadareski
9dcf3b9e0a The offset needs to be passed all the way 2025-09-11 09:42:48 -04:00
Matt Nadareski
3c514110ce The offset needs to be passed fully 2025-09-11 09:29:46 -04:00
Matt Nadareski
c9b0c2dace Deliberately don't retain position 2025-09-11 09:27:56 -04:00
Matt Nadareski
d575b6977e Correctly parse resource data 2025-09-11 09:21:31 -04:00
Matt Nadareski
a00e6a5e2d Start cleaning up resource parsing more 2025-09-11 09:09:56 -04:00
Matt Nadareski
1b9ae83e8c Don't pad most tables to aligned size 2025-09-11 08:35:49 -04:00
Matt Nadareski
8b91eb1caf Bound the import and export tables 2025-09-11 08:33:59 -04:00
Matt Nadareski
2a6a7b5e9a Pass in the correct data 2025-09-11 08:14:24 -04:00
Matt Nadareski
a85943866e Start using table data only in already-bounded tables 2025-09-11 08:12:27 -04:00
Matt Nadareski
797fb519c1 Pass table data in, mostly unused 2025-09-11 07:49:17 -04:00
Matt Nadareski
3ba9d56363 Read table data directly 2025-09-11 07:44:28 -04:00
Matt Nadareski
04cd4e4056 Start wiring through size bounding on table reads 2025-09-11 07:41:17 -04:00
Matt Nadareski
348e170654 There 2025-09-10 21:54:10 -04:00
Matt Nadareski
f5a4ca6276 Finally figure out what I was doing 2025-09-10 21:37:05 -04:00
Matt Nadareski
672c010aa7 Fix a stupid issue 2025-09-10 21:04:09 -04:00
Matt Nadareski
2459d88951 Found the real issue 2025-09-10 20:46:32 -04:00
Matt Nadareski
350d1c8d31 I guess this can be null? 2025-09-10 20:29:26 -04:00
Matt Nadareski
98a3842a3e Fixx off-by-one error 2025-09-10 20:26:17 -04:00
Matt Nadareski
b52a4469ee Remove alignment, add TODO and comments 2025-09-10 11:21:34 -04:00
Matt Nadareski
e3143e21ba Fix comment to be more accurate 2025-09-10 11:18:53 -04:00
Matt Nadareski
1bf2181fd3 Make check a little nicer 2025-09-09 18:56:50 -04:00
Matt Nadareski
1460635aab Move hidden resources parsing to make method nicer 2025-09-09 18:52:35 -04:00
Matt Nadareski
935ec00c86 Notes about hidden resources 2025-09-09 17:15:25 -04:00
Matt Nadareski
473b6de09b Slight cleanup 2025-09-09 16:42:50 -04:00
Matt Nadareski
ba75f2ac2c Try to fix weird resource parsing 2025-09-09 14:54:54 -04:00
Matt Nadareski
a230b39fbc Make relocation block parsing safer 2025-09-09 13:51:40 -04:00
Matt Nadareski
8e963ac62a Fix a couple of potential logic bugs 2025-09-09 13:42:36 -04:00
Matt Nadareski
eaaa89847d Rename to pex and nex for readability 2025-09-09 13:11:27 -04:00
Matt Nadareski
ef76166978 Clean up a few more PE things 2025-09-09 13:11:09 -04:00
Matt Nadareski
72912586a1 Clean up COFF symbol table parsing 2025-09-09 12:18:46 -04:00
Matt Nadareski
fb241a4036 Make things easier to read, add some helpers 2025-09-09 09:57:53 -04:00
Matt Nadareski
368c8b0533 Add section table note 2025-09-09 09:37:03 -04:00
Matt Nadareski
4010325e65 Make note from Models 2025-09-09 09:31:53 -04:00
Matt Nadareski
11dd75ad95 Make import table easier to read 2025-09-08 23:21:45 -04:00
Matt Nadareski
d0480a1311 Make export table easier to read 2025-09-08 22:51:46 -04:00
Matt Nadareski
2be33b845d Be even more careful 2025-09-08 22:09:12 -04:00
Matt Nadareski
2ad42e3a0f Seek and ye shall find 2025-09-08 21:41:46 -04:00
Matt Nadareski
5d1f83800b Add SecuROM AddD deserializer 2025-09-08 21:20:47 -04:00
Matt Nadareski
30e89a7943 Clean this up 2025-09-08 21:13:34 -04:00
Matt Nadareski
61f5dc4cf2 Extract even more types of embedded data 2025-09-08 20:08:43 -04:00
Matt Nadareski
d056c179ed Add embedded UHA support 2025-09-08 08:51:40 -04:00
Matt Nadareski
b9c4bfc67e Expand the search window again 2025-09-08 08:17:01 -04:00
Matt Nadareski
6ab5ee0ae0 Add regions here for maybe future work 2025-09-08 08:03:07 -04:00
Matt Nadareski
94c1a86702 Add AssemblyName extension property to PE 2025-09-08 07:56:40 -04:00
Matt Nadareski
af6dd6a7fc Check for BZip2 and XZ in hidden places too 2025-09-08 07:52:41 -04:00
Matt Nadareski
45d4926d4c Toss the filename at the top of the infoprint output 2025-09-07 20:52:02 -04:00
Matt Nadareski
ce016c5eb0 Bump version 2025-09-06 08:18:43 -04:00
Matt Nadareski
2225c1f2d8 Update Nuget packages 2025-09-05 10:57:14 -04:00
Matt Nadareski
2d0c0d5845 Make a bunch of things cache more safer 2025-09-05 08:32:40 -04:00
Matt Nadareski
60f1756cbb Wrap places where ReadFrom was not being used but still could be parallel 2025-09-05 07:45:55 -04:00
Matt Nadareski
738a1d250a Add inherent locking the the data source in wrappers 2025-09-05 07:36:15 -04:00
Matt Nadareski
c8e65e1e30 Add section string lock 2025-09-03 13:46:12 -04:00
Matt Nadareski
ecb09ce6f2 Make sure source data isn't locked unnecessarily 2025-09-02 23:56:29 -04:00
Matt Nadareski
72a1484a71 More granular locks 2025-09-02 23:51:02 -04:00
Matt Nadareski
de31c10c7c Bump version 2025-09-02 19:22:47 -04:00
HeroponRikiBestest
84483c229c Final fixes. (#21) 2025-09-02 16:08:04 -04:00
Matt Nadareski
b7e35a8fa8 Virtual insanity 2025-09-02 15:53:14 -04:00
Matt Nadareski
8c190a26a5 Math.Max 2025-09-02 15:51:26 -04:00
Matt Nadareski
2e5705125b Ensure that the WISE section only reads section data 2025-09-02 15:01:28 -04:00
Matt Nadareski
daaa92def0 Deal with end offset data 2025-09-02 14:47:49 -04:00
Matt Nadareski
86ec97678e Prep for a different tomorrow 2025-09-02 14:45:00 -04:00
Matt Nadareski
d74b82dc55 Hacky hack hack 2025-09-02 14:30:20 -04:00
Matt Nadareski
821ade2006 That was funny 2025-09-02 13:27:52 -04:00
HeroponRikiBestest
3ee999dccd Fix wise version(?) check for pre-string bytes (#20)
Needed opposite range
2025-09-02 11:02:43 -04:00
Matt Nadareski
f91bda51e1 Non-nullable nullability 2025-09-02 09:01:19 -04:00
Matt Nadareski
47255fc331 Sync NE with PE Wise extraction 2025-09-02 08:00:51 -04:00
Matt Nadareski
f7488bed04 Make CExe helpers static 2025-09-02 07:56:19 -04:00
Matt Nadareski
a94b3a82c4 Update comment 2025-09-02 07:53:42 -04:00
Matt Nadareski
1c8f64f5e6 Search for MS-CAB in resources and overlay 2025-09-02 07:52:29 -04:00
Matt Nadareski
a015e4df3f Add tests for new deserializers and wrappers 2025-09-02 07:48:17 -04:00
Matt Nadareski
2489a49924 Implement Wise section header printer 2025-09-02 07:44:14 -04:00
Matt Nadareski
d418fbd60d Complete the circle of comments 2025-09-02 07:31:15 -04:00
Matt Nadareski
cc2e7704e6 Finding methods don't need debug logging 2025-09-02 07:23:16 -04:00
Matt Nadareski
a980a56dfa Make consistent with other files 2025-09-01 21:12:05 -04:00
Matt Nadareski
da588e3bc0 That was annoying 2025-09-01 21:11:54 -04:00
Matt Nadareski
8b6f45d9b7 Detangle Wise a bit more 2025-09-01 20:37:23 -04:00
Matt Nadareski
9bdfe33baf Move some Wise things around to make more sense in broader context 2025-09-01 20:27:46 -04:00
Matt Nadareski
13d338f615 Fix some issues with desynced wrappers 2025-09-01 18:56:51 -04:00
Matt Nadareski
36a8641c8d I definitely missed these 2025-09-01 18:50:31 -04:00
Matt Nadareski
7bde6f99fc Fix porting issue with Wise 2025-09-01 18:46:15 -04:00
Matt Nadareski
45428ce991 Fix limit issue 2025-09-01 18:42:40 -04:00
Matt Nadareski
8eb5898ef6 Handle some big TODOs 2025-09-01 18:38:43 -04:00
Matt Nadareski
556e1c972c Update packages and upstream changes 2025-09-01 16:43:21 -04:00
Matt Nadareski
df8f3e7122 Clean up usings 2025-08-31 22:08:03 -04:00
Matt Nadareski
da1d575806 MPQ decryption should live separately 2025-08-31 22:07:15 -04:00
Matt Nadareski
c4d40a1dde Fix a couple of missed issues in MPQ 2025-08-31 21:53:27 -04:00
Matt Nadareski
912de926d0 Fix various issues with parsing MPQ; simplify 2025-08-31 21:51:06 -04:00
Matt Nadareski
c60fc1e31f Remove outdated comments 2025-08-31 21:45:35 -04:00
Matt Nadareski
386e607887 Add BET/HET handling based on documentation, not tested 2025-08-31 01:20:33 -04:00
Matt Nadareski
94c9b8d057 Fix MPQ v1 parsing, add hash and block table decrypt 2025-08-31 01:03:15 -04:00
Matt Nadareski
5f81275b10 Add some project references 2025-08-29 14:03:25 -04:00
Matt Nadareski
37c484411b Reimplment MPQ extraction via StormLib 2025-08-29 13:37:54 -04:00
Matt Nadareski
ad1f890742 Add StormLib as submodule 2025-08-29 13:34:59 -04:00
Matt Nadareski
2924529fa7 Start bundling runtimes 2025-08-29 13:31:19 -04:00
Matt Nadareski
ebe675cae1 Add StormLib runtimes 2025-08-29 13:29:15 -04:00
Matt Nadareski
a40c666775 Bundle libraries 2025-08-29 12:59:33 -04:00
Matt Nadareski
2ea060d3b3 Readme 2025-08-29 12:55:21 -04:00
Matt Nadareski
f8a67839dd Clean up some TODOs 2025-08-29 12:34:59 -04:00
Matt Nadareski
2773b12c9b Fix odd write-size mismatches 2025-08-29 12:14:55 -04:00
Matt Nadareski
929e12f976 These values need to be signed 2025-08-29 11:48:19 -04:00
Matt Nadareski
8fbc6c4662 Remove erroneous check 2025-08-29 11:28:37 -04:00
Matt Nadareski
797378e9c8 Better error messages 2025-08-29 11:26:17 -04:00
Matt Nadareski
113464a7d1 Privatize Reader class 2025-08-29 11:09:45 -04:00
Matt Nadareski
a13c837202 Probably fix the MD5 bug in IS-CAB 2025-08-29 11:06:37 -04:00
Matt Nadareski
48765f1ae5 Fix IS-CAB deserialization bug 2025-08-29 10:44:51 -04:00
Matt Nadareski
091ee56368 Remove Extractor, finally 2025-08-29 10:20:51 -04:00
Matt Nadareski
015a971147 Be smarter about volume opening 2025-08-29 10:17:07 -04:00
Matt Nadareski
7575a01a28 Keep track of the data offset 2025-08-29 10:11:53 -04:00
Matt Nadareski
7aa14cafea This never gets set again 2025-08-29 10:10:52 -04:00
Matt Nadareski
db10721386 Privatize 2025-08-29 10:04:52 -04:00
Matt Nadareski
6112cf8d60 This needed a rename 2025-08-29 10:04:24 -04:00
Matt Nadareski
50caeba322 Sort some filename pattern stuff 2025-08-29 10:03:56 -04:00
Matt Nadareski
b3499984b3 Start porting some functionality 2025-08-29 09:58:40 -04:00
Matt Nadareski
a5609a7a82 More descriptive class name 2025-08-29 09:41:25 -04:00
Matt Nadareski
8626a87860 Start cleaning up duplicate and unnecessary code 2025-08-29 09:37:03 -04:00
Matt Nadareski
fa31cd0e98 Let's see how UnshieldSharp goes 2025-08-29 09:14:33 -04:00
Matt Nadareski
6b6b7c6289 Reduce complexity of MS-CAB extraction paths 2025-08-29 08:29:05 -04:00
Matt Nadareski
baa3b272ab Extraction tool can pretend everything works 2025-08-29 08:20:55 -04:00
Matt Nadareski
d7c4f244cc Make the if/else chain into a switch 2025-08-29 08:13:58 -04:00
Matt Nadareski
e21d226564 Use wrapper description to simplify cases 2025-08-29 08:08:02 -04:00
Matt Nadareski
6ff6a7d4a4 Uncomment MPQ, still not hooked back up 2025-08-29 08:03:01 -04:00
Matt Nadareski
daf19a561c Add UnshieldSharp to ExtractionTool directly 2025-08-29 08:01:27 -04:00
Matt Nadareski
26226a75ff Update nuget packages 2025-08-29 07:56:51 -04:00
Matt Nadareski
4473edf476 Comments cleanup 2025-08-29 07:54:20 -04:00
Matt Nadareski
54cf0a6470 Expand the search window for embedded data 2025-08-28 23:56:05 -04:00
Matt Nadareski
0eb8f7e538 Extract overlay data for NE 2025-08-28 23:52:09 -04:00
Matt Nadareski
23b72c65ba Forgot to use the resource offset 2025-08-28 23:02:25 -04:00
Matt Nadareski
db7d89600c Handle PKZIP SFX by extracting the archive portion 2025-08-28 23:01:55 -04:00
Matt Nadareski
67d51ad1d6 Handle RAR SFX by extracting the archive portion 2025-08-28 22:42:15 -04:00
Matt Nadareski
56b71cf7fe Overlay deals with real data only 2025-08-28 22:41:49 -04:00
Matt Nadareski
e0ec2a521f Handle 7z SFX by extracting the archive portion 2025-08-28 22:21:25 -04:00
Matt Nadareski
e8589ac7b5 Fix offset read issues in resource table 2025-08-28 21:52:35 -04:00
Matt Nadareski
21e425acee Split up PE parsing a bit for readability 2025-08-28 21:35:05 -04:00
Matt Nadareski
ee316052ae Add ExtractionTool to readme 2025-08-28 20:14:08 -04:00
Matt Nadareski
3463936ae0 Fix extracting SFX archives 2025-08-28 20:00:05 -04:00
Matt Nadareski
5ff947b279 Add non-model constructors for PKZIP 2025-08-28 19:59:24 -04:00
Matt Nadareski
fdf2ea84ec Fix intermittent 7z solid issues 2025-08-28 19:59:06 -04:00
Matt Nadareski
ad9b001b6a Downstream from IO 2025-08-28 19:47:34 -04:00
Matt Nadareski
1308571c10 Smarter handling 2025-08-28 15:53:16 -04:00
Matt Nadareski
b8cb3419c1 Fix odd resource parsing issues 2025-08-28 15:49:02 -04:00
Matt Nadareski
02533cf947 Somewhat add SFX support 2025-08-28 15:26:37 -04:00
Matt Nadareski
bf8bd04dc7 Fix missing package 2025-08-28 15:22:05 -04:00
Matt Nadareski
1894376ab6 Initial migration of ExtractionTool 2025-08-28 15:11:21 -04:00
Matt Nadareski
c789e4df44 Replace simpler gzip extract with more robust version 2025-08-28 14:17:15 -04:00
Matt Nadareski
884685de4a Fix GZip extraction 2025-08-28 14:15:39 -04:00
Matt Nadareski
7fda7be457 Fix significant issue with how view streams are used 2025-08-28 14:10:08 -04:00
Matt Nadareski
5daf759033 Add debug logging for tar extraction 2025-08-28 13:16:39 -04:00
Matt Nadareski
589ab0896a Replace SharpCompress with native extract for tar 2025-08-28 13:03:59 -04:00
Matt Nadareski
7645ab978f Fix obvious bug 2025-08-28 12:59:50 -04:00
Matt Nadareski
e6497289da Add experimental tar extraction 2025-08-28 12:56:43 -04:00
Matt Nadareski
95a9f4769d Workaround to read block data 2025-08-28 12:16:07 -04:00
Matt Nadareski
7917601f7a Slight formatting cleanup 2025-08-28 12:14:48 -04:00
Matt Nadareski
3400238fc5 Make tar printing a bit more comprehensive 2025-08-28 12:13:00 -04:00
Matt Nadareski
cbd335c6aa Add and update tests 2025-08-28 10:12:08 -04:00
Matt Nadareski
9feaadd32a Implement gzip parsing and printing 2025-08-28 09:56:52 -04:00
Matt Nadareski
2ec008b3b7 Add extension property to tar 2025-08-28 09:13:02 -04:00
Matt Nadareski
c9a462a1c6 Fix tar parsing and printing 2025-08-28 09:11:04 -04:00
Matt Nadareski
ab44aa7e68 Start implementing tar 2025-08-28 08:14:38 -04:00
Matt Nadareski
9b9d3176ec Slightly more work 2025-08-28 07:54:22 -04:00
Matt Nadareski
5dda3e2c81 Add shell deserializers for gzip and tar 2025-08-28 07:52:43 -04:00
Matt Nadareski
4b8dc12c98 Add PKZIP extension properties 2025-08-27 21:59:30 -04:00
Matt Nadareski
044e4c4c75 Fill out remaining models, add printing 2025-08-27 21:48:01 -04:00
Matt Nadareski
2149630865 Fill in the remaining extras that have models 2025-08-27 20:40:56 -04:00
Matt Nadareski
3d435a1d7e Start parsing some PKZIP extras 2025-08-27 19:20:07 -04:00
Matt Nadareski
f2d993a958 Fix UTF-8 encoded strings 2025-08-27 18:14:11 -04:00
Matt Nadareski
7bf75b8dc5 Minor cleanup 2025-08-27 17:59:11 -04:00
Matt Nadareski
dfbdce1dc8 Be more strictly correct about ZIP64 reading 2025-08-27 17:54:35 -04:00
Matt Nadareski
63f5566e65 Minor formatting fix 2025-08-27 16:45:20 -04:00
Matt Nadareski
4b0f43f6c0 Clean up PKZIP printing 2025-08-27 16:41:00 -04:00
Matt Nadareski
98e1ef7362 Rearrange code to make models updates easier 2025-08-27 15:49:31 -04:00
Matt Nadareski
4e0ffcb3c8 Return nothing and be happy 2025-08-27 13:04:01 -04:00
Matt Nadareski
a93a46d6c0 Start fixing PKZIP deserializing
This does a forward-reading approach on the archive instead of the "proper" way of reading from the end. This change introduces potential issues, as both "deleted" entries and normal ones will be included. It also makes it more difficult to determine if the archive is ZIP64 or not. But it is far more stable than the read-from-the-end approach of the old code.
2025-08-27 12:54:36 -04:00
Matt Nadareski
e163302522 Add part-finding helpers and tests 2025-08-26 21:14:25 -04:00
Matt Nadareski
838afc35c3 Order of operations 2025-08-26 06:52:47 -04:00
Matt Nadareski
3a62bfab57 Fix copy-paste 2025-08-26 06:45:21 -04:00
Matt Nadareski
560b3a246c Use file part count, not partial files 2025-08-26 06:41:01 -04:00
Matt Nadareski
4360916750 Handle archive parts 2025-08-25 22:20:24 -04:00
Matt Nadareski
3f31edc1c0 Fix return comments 2025-08-25 21:02:08 -04:00
Matt Nadareski
bd874d436b Slight renaming to be more accurate 2025-08-25 21:01:20 -04:00
Matt Nadareski
fbc47425f4 Use using to use usings 2025-08-25 20:57:35 -04:00
Matt Nadareski
c9df6ff059 Rename to be consistent 2025-08-25 20:53:25 -04:00
Matt Nadareski
ef6ff85e96 Port more PE extraction 2025-08-25 20:51:35 -04:00
Matt Nadareski
bb93792f57 Remove restriction from RAR 2025-08-25 13:25:07 -04:00
Matt Nadareski
1f7ab4fccb Simpler completeness checks 2025-08-25 13:23:49 -04:00
Matt Nadareski
2535e82618 Maybe fix multipart 7z, RAR, and PKZIP archives 2025-08-25 13:19:28 -04:00
Matt Nadareski
66d80c8523 Add basic PE extraction 2025-08-25 13:06:22 -04:00
Matt Nadareski
834a17fe82 Add region note 2025-08-25 12:50:16 -04:00
Matt Nadareski
ea85167e06 Upstream changes to string reading until IO updated 2025-08-25 12:45:45 -04:00
Matt Nadareski
e007a06dda Allow direct data source access 2025-08-23 21:31:13 -04:00
Matt Nadareski
02f9e1e935 Temporarily downstream class from IO 2025-08-23 21:29:22 -04:00
Matt Nadareski
21b7d431a7 More concise naming 2025-08-23 13:38:19 -04:00
Matt Nadareski
307b932f87 A couple more clarifications 2025-08-23 13:37:39 -04:00
Matt Nadareski
6983d1cd3c This can't be null anymore 2025-08-23 13:36:59 -04:00
Matt Nadareski
a193c9bb3c Remove unnecessary comment 2025-08-23 13:23:44 -04:00
Matt Nadareski
aa67c7ad6d Rename to be simpler 2025-08-23 13:19:26 -04:00
Matt Nadareski
70fc686249 DataSource is a Stream type now 2025-08-23 13:18:46 -04:00
Matt Nadareski
c87a456a46 Move things to base classes 2025-08-23 12:58:09 -04:00
Matt Nadareski
456bb1e95b Intermediary step for extractable shells 2025-08-23 12:23:44 -04:00
Matt Nadareski
b0b334103d Implement shell wrappers for extractable types without a current model 2025-08-23 11:55:54 -04:00
Matt Nadareski
78851e3b57 Pass through data source property, make private 2025-08-20 08:11:48 -04:00
Matt Nadareski
850a883e14 Methods to properties 2025-08-20 08:08:53 -04:00
Matt Nadareski
6e0ced5ffe One more GetEndOffset removal 2025-08-20 08:04:01 -04:00
Matt Nadareski
64cd8febaa This doesn't need private set 2025-08-20 08:00:45 -04:00
Matt Nadareski
6fbe1cffaa GetEndOffset really shouldn't be used 2025-08-20 07:54:52 -04:00
Matt Nadareski
601e781ef9 Data source shennanigans 2025-08-19 22:01:10 -04:00
Matt Nadareski
d26ad35573 Create a new DataSource helper class 2025-08-19 20:49:47 -04:00
Matt Nadareski
b70c510734 Be consistent with model 2025-08-19 20:25:56 -04:00
Matt Nadareski
29a7158488 Clarify that Matching is being used 2025-08-19 15:30:23 -04:00
Matt Nadareski
1227ca020a Fix CreateExecutableWrapper 2025-08-19 09:18:50 -04:00
Matt Nadareski
cd7e6ff98d Fix some logic bugs due to offsets 2025-08-19 09:09:33 -04:00
Matt Nadareski
510a0f77f6 Stop reinventing the wheel 2025-08-19 07:43:21 -04:00
Matt Nadareski
6d1dabb1db Handle only cases where long mattered 2025-08-19 07:41:29 -04:00
Matt Nadareski
2e337891da Fix logic bug with end of file check 2025-08-19 07:36:33 -04:00
Matt Nadareski
d49e18a83e Replace _byteArrayOffset with _initialPosition 2025-08-19 07:34:51 -04:00
Matt Nadareski
c14560ec18 Add initial position to wrapper, currently unused 2025-08-19 07:29:59 -04:00
Matt Nadareski
e3e31cd9f2 Separate files 2025-08-19 07:27:39 -04:00
Matt Nadareski
adf9627045 Stricter with COFF tables 2025-08-17 15:25:25 -04:00
Matt Nadareski
c7b03c7765 This should be a file offset 2025-08-17 15:20:51 -04:00
Matt Nadareski
b5f83215d5 Don't exit parsing unnecessarily 2025-08-17 15:04:38 -04:00
Matt Nadareski
96e3fc5533 Cleanups to PE deserialization 2025-08-17 14:53:03 -04:00
Matt Nadareski
828e7dda03 Add file-only info printing flag 2025-08-13 12:03:06 -04:00
Matt Nadareski
8ef50c30d5 Add and implement IExtractable 2025-08-11 11:39:15 -04:00
Matt Nadareski
cbe1d5b608 Resync NE overlay finding 2025-08-11 11:11:51 -04:00
Matt Nadareski
7123a9e986 Add more NE deserializers 2025-08-10 20:37:42 -04:00
Matt Nadareski
af5996b972 Fill out LE/LX methods at all 2025-08-01 09:04:30 -04:00
Matt Nadareski
15e947784b Use NE helpers 2025-08-01 08:56:14 -04:00
Matt Nadareski
1b382c201e Simplify references in NE 2025-08-01 08:43:01 -04:00
Matt Nadareski
8deca4fb0c Fill out NE methods more 2025-08-01 08:39:14 -04:00
Matt Nadareski
96c4372609 Add data-reading methods for NE 2025-08-01 08:19:41 -04:00
Matt Nadareski
ca7a109037 Add more NE extensions 2025-08-01 07:58:54 -04:00
Matt Nadareski
c54f5b3c5d Add MS-DOS stub extension for LE/LX 2025-07-31 14:35:35 -04:00
Matt Nadareski
652942ab9f Add extensions based on external need 2025-07-31 14:00:55 -04:00
Matt Nadareski
2cc19a9c36 Add some more IS-CAB extensions 2025-07-31 13:44:15 -04:00
Matt Nadareski
6ffb3f4bbd Add IS-CAB OpenVolume helper 2025-07-31 13:34:35 -04:00
Matt Nadareski
bab4278318 Better linking in IS-CAB open set 2025-07-31 13:26:10 -04:00
Matt Nadareski
013d18a426 Better file descriptor method 2025-07-31 13:23:45 -04:00
Matt Nadareski
e94e27910e Add a couple of IS-CAB extensions 2025-07-31 13:20:40 -04:00
Matt Nadareski
34cea6e74a Double-chain IS-CAB like MS-CAB 2025-07-31 13:18:29 -04:00
Matt Nadareski
640e160863 Slight cleanup to the PE deserializer 2025-07-31 12:06:51 -04:00
Matt Nadareski
3100963250 Fix build issue 2025-07-31 11:57:20 -04:00
Matt Nadareski
2086358762 Slight cleanup to the PE wrapper 2025-07-31 11:52:39 -04:00
Matt Nadareski
ae273c589d Use simpler extension where possible 2025-07-31 11:28:09 -04:00
Matt Nadareski
a229015fcd Move major version helper out of deserializer 2025-07-31 11:26:54 -04:00
Matt Nadareski
b001680674 Remove unnecessary code regions for XMID and XeMID 2025-07-31 11:12:35 -04:00
Matt Nadareski
e684133f72 Add InfoPrint to the readme 2025-07-31 11:08:11 -04:00
Matt Nadareski
2b020eecc7 Output hashes to separate file 2025-07-31 10:30:13 -04:00
Matt Nadareski
78f4d6faca Add file hashing option to InfoPrint 2025-07-31 10:26:03 -04:00
Matt Nadareski
f07b7a049e Ensure endianness of reads 2025-07-31 09:41:36 -04:00
Matt Nadareski
544637779c Exception debugging should use Error stream 2025-07-31 09:14:22 -04:00
Matt Nadareski
38b6427e4e Wire through include debug flag 2025-07-31 09:11:43 -04:00
Matt Nadareski
e36822a19c Add more extension properties; clean up 2025-07-31 08:57:35 -04:00
Matt Nadareski
e1a114976f Use correct mask for v3 CFB files 2025-07-30 16:56:15 -04:00
Matt Nadareski
5ba9ab3457 Fix DIFAT assumptions for directory entries 2025-07-30 16:28:54 -04:00
Matt Nadareski
36edf9ed54 Fix parsing of large DIFAT tables in CFB 2025-07-30 15:46:19 -04:00
Matt Nadareski
e788ffa851 Fix MS-CAB block continuation 2025-07-30 15:18:29 -04:00
Matt Nadareski
e0d819b88d Fix spanned blocks, previously skipped 2025-07-30 14:54:19 -04:00
Matt Nadareski
e3b216ad09 Wrap MS-ZIP compression in case of failure 2025-07-30 14:21:13 -04:00
Matt Nadareski
55d0fd452d Add new extension property for CFB 2025-07-30 11:33:49 -04:00
Matt Nadareski
089fd02b2e Sync remaining extraction bits for CFB 2025-07-30 11:32:25 -04:00
Matt Nadareski
8cfd820dcd Sync back extraction fixes for CFB 2025-07-30 11:29:27 -04:00
Matt Nadareski
67ed9860fe Sync back deserialization fixes for CFB 2025-07-30 11:26:04 -04:00
Matt Nadareski
ee924e3a34 Backport some CFB work 2025-07-30 11:04:25 -04:00
Matt Nadareski
9e5085ba79 Add CFB extraction placeholders 2025-07-30 08:31:00 -04:00
Matt Nadareski
dbfdbbff20 Fix CFB stream name handling 2025-07-30 08:21:20 -04:00
Matt Nadareski
21dc72bf11 Decode CFB stream names 2025-07-30 08:08:27 -04:00
Matt Nadareski
c8295c4724 Make CFB printing pretty again 2025-07-29 23:43:22 -04:00
Matt Nadareski
44b4dd3d1b Fix reading CFB v3 directory entries 2025-07-29 23:41:42 -04:00
Matt Nadareski
7e543c6acb Fix some issues with CFB deserialization 2025-07-29 23:08:37 -04:00
Matt Nadareski
63514d149f CFB directory entry names are UTF-16 2025-07-29 22:51:04 -04:00
Matt Nadareski
d7e559749d Normalize extraction methods
This does a few things:
- Ensures that all output directories are normalized for the current operating system
- Ensures that all output files are flushed in case of systematic issues
- Brings MS-CAB extraction up to the same return value quality as other extractors
2025-07-29 21:13:53 -04:00
Matt Nadareski
a2be40fcbc Add CHD version extension 2025-07-29 20:39:48 -04:00
Matt Nadareski
771df5c372 Fall back on OpenNext if needed 2025-07-29 11:52:59 -04:00
Matt Nadareski
2d3d6348ad Remove redundant code 2025-07-29 11:51:28 -04:00
Matt Nadareski
a2bf15f0bc Fix method ordering 2025-07-29 11:49:07 -04:00
Matt Nadareski
0aa25df88f More graceful handling of MS-CAB sets 2025-07-29 11:48:34 -04:00
Matt Nadareski
36afb1c0ee Split out MS-ZIP handling for cleaner code 2025-07-29 11:38:38 -04:00
Matt Nadareski
c9d61906fb Only derive the compression type once per folder 2025-07-29 11:26:23 -04:00
Matt Nadareski
d8440a01d3 Remove redundant check 2025-07-29 08:30:17 -04:00
Matt Nadareski
74d92312ef Split out MS-CAB ExtractFile logic 2025-07-29 08:26:53 -04:00
Matt Nadareski
0dc9823d2b Fix assumption about MS-CAB sets 2025-07-29 08:04:02 -04:00
Matt Nadareski
9c69737073 Fix comments to make more sense 2025-07-28 21:23:18 -04:00
Matt Nadareski
66187dcf04 Keep tweaking extraction 2025-07-28 21:20:47 -04:00
Matt Nadareski
79943560bc Keep tweaking extraction 2025-07-28 21:14:51 -04:00
Matt Nadareski
b3321f9c9a Keep tweaking extraction 2025-07-28 20:58:49 -04:00
Matt Nadareski
428c269a49 Keep tweaking extraction 2025-07-28 20:56:23 -04:00
Matt Nadareski
e84964a321 Add MS-CAB extract and decompression 2025-07-28 20:31:40 -04:00
Matt Nadareski
0394ea5356 Remove unused using 2025-07-28 19:43:53 -04:00
Matt Nadareski
852b086920 Add IS-CAB obfuscation code 2025-07-28 19:41:07 -04:00
Matt Nadareski
b7fceee2b7 Port more MS-CAB helpers from BOS 2025-07-28 15:22:28 -04:00
Matt Nadareski
ecf6c957c9 Port OpenNext/OpenPrevious from BOS 2025-07-28 15:13:19 -04:00
Matt Nadareski
5e0b0070ff Make MS-CAB doubly-linked 2025-07-28 12:45:23 -04:00
Matt Nadareski
9934bc31a3 Fix build 2025-07-28 12:31:03 -04:00
Matt Nadareski
7b4711f5cf Implement OpenSet for MS-CAB 2025-07-28 12:27:18 -04:00
Matt Nadareski
844066815d Add extension properties for MS-CAB 2025-07-28 12:09:28 -04:00
Matt Nadareski
3a6293e696 Port some code from UnshieldSharp 2025-07-28 11:57:54 -04:00
Matt Nadareski
3210b8601d Add IS-CAB CreateFilenamePattern from UnshieldSharp 2025-07-28 11:35:24 -04:00
Matt Nadareski
181788802d Move PathProcessors to the correct namespace 2025-07-28 10:27:11 -04:00
Matt Nadareski
4b627ce776 Move wrapper-specific helpers to correct namespace 2025-07-28 10:25:25 -04:00
Matt Nadareski
8b799bb5c8 Port Nitro decryption step 2025-07-28 08:47:26 -04:00
Matt Nadareski
5bc8336fce Move StringBuilderExtensions to better namespace 2025-07-27 20:56:15 -04:00
Matt Nadareski
4f9f8ddcec Fix build 2025-07-27 20:49:18 -04:00
Matt Nadareski
29f1f63ef8 Add nested dir support for Logiqx, fix existing dir support 2025-07-27 20:48:49 -04:00
Matt Nadareski
48ecdff5f7 Fix AlignToBoundary a bit 2025-07-24 10:56:31 -04:00
Matt Nadareski
411acd2d5a Add AlignToBoundary for byte arrays 2025-07-24 10:55:52 -04:00
Matt Nadareski
e6742fe889 Fix missed AlignToBoundary case 2025-07-24 10:47:21 -04:00
Matt Nadareski
b6561719a7 Add SecuROM DFA 2025-07-24 10:40:31 -04:00
Matt Nadareski
2bf3d6f9a6 Use more constants in GetFileType 2025-07-24 10:19:20 -04:00
Matt Nadareski
b2700b5975 Add MESS ListXML support 2025-07-24 09:36:37 -04:00
Matt Nadareski
95b28874da Add MESS ListXML support 2025-07-24 09:36:13 -04:00
Matt Nadareski
4934ee837c Be consistent about end-of-file newlines 2025-07-24 09:31:28 -04:00
Matt Nadareski
3cbfd5cd10 Add .NET Standard 2.0 and 2.1 2025-07-24 09:19:38 -04:00
Matt Nadareski
da28ce310b Update nuget packages 2025-07-24 09:16:11 -04:00
HeroponRikiBestest
ac6d93a3b9 Add extra validity checks for GCF (#17)
* Add extra validity checks for GCF

* Remove "for validity"
2025-07-12 15:49:35 -04:00
Matt Nadareski
104028204d Fix relocation table parsing issues (fixes #16) 2025-06-28 20:00:21 -04:00
Matt Nadareski
d3e61b42dd Attempt to fix export table name table 2025-06-24 17:14:25 -04:00
Matt Nadareski
6351cabb62 Add CMP tests for non-quote serialization 2025-05-28 09:51:45 -04:00
Matt Nadareski
ddef42126b Fix old .NET 2025-05-19 12:15:30 -04:00
Matt Nadareski
9dd39a7f02 Bump version 2025-05-19 12:13:35 -04:00
Matt Nadareski
ca7f7e97e7 Omit namespaces on XML writing 2025-05-19 12:12:05 -04:00
Matt Nadareski
8a40349b0c Write tests for ReadQuotedString, fix issues 2025-05-14 20:52:59 -04:00
Matt Nadareski
6ec6fa4973 Remove now-unused using 2025-05-13 11:26:17 -04:00
Matt Nadareski
f0644710e6 Remove faulty offset code 2025-05-13 09:44:59 -04:00
Matt Nadareski
34048726ab Fix cref formatting in summaries 2025-05-13 09:25:06 -04:00
Matt Nadareski
60ce6c9370 Handle offset sizes for Logiqx rom 2025-05-13 09:24:01 -04:00
Matt Nadareski
554fccc236 Update IO to 1.6.3 2025-05-12 08:26:42 -04:00
Matt Nadareski
7611c043c3 Fix how conditions are used for references 2025-02-25 21:17:17 -05:00
Matt Nadareski
976d793474 Fix currently non-affecting bug 2024-12-30 23:17:52 -05:00
Matt Nadareski
f0f997fadd Bump version 2024-12-30 22:51:13 -05:00
Matt Nadareski
0ce3c9892d Remove attempt at caching version info strings 2024-12-30 22:40:52 -05:00
Matt Nadareski
9743565285 Update copyright 2024-12-30 21:39:36 -05:00
Matt Nadareski
fcfe9e4790 Remove unnecessary action step 2024-12-30 21:39:30 -05:00
Matt Nadareski
be36432296 Update packages 2024-12-30 21:28:13 -05:00
Matt Nadareski
fb725bff19 Bump version 2024-12-30 20:55:30 -05:00
Matt Nadareski
2384cf9f9f Add source data lock on cached values 2024-12-30 20:47:12 -05:00
Matt Nadareski
1261930fd9 Ensure .NET versions are installed for testing 2024-12-19 10:53:19 -05:00
Matt Nadareski
120de4e49f Allow symbols to be packed 2024-12-18 08:05:16 -05:00
Matt Nadareski
354a51769b Bump version 2024-12-18 08:01:07 -05:00
Matt Nadareski
a9f937baa3 Find remaining non-explicit endinaness calls 2024-12-17 22:38:57 -05:00
Matt Nadareski
1790d82a6e Cap overlay checks to 16 MiB 2024-12-17 15:50:02 -05:00
Matt Nadareski
261c20e95a Get rid of erroneous double semicolons 2024-12-17 15:43:22 -05:00
Matt Nadareski
ed6556b1f0 Cache version info strings 2024-12-17 01:05:41 -05:00
Matt Nadareski
a86af8c32a Expand printed detections 2024-12-17 00:52:24 -05:00
Matt Nadareski
1670ab45a0 Fix SFO deserialization 2024-12-17 00:27:30 -05:00
Deterous
7dc4750f3b Add Deserializer for AppPkgHeader (#14)
* Add Deserializer for AppPkgHeader

* Fix typo

* add using System.Text

* Fix typo
2024-12-17 00:10:38 -05:00
Matt Nadareski
b5f366680d Explicit endianness in extensions 2024-12-17 00:00:28 -05:00
Matt Nadareski
fa9e9a0b2b Be explicit about endianness 2024-12-16 23:08:45 -05:00
Matt Nadareski
2239b82a4b Update packages 2024-12-16 15:00:44 -05:00
Matt Nadareski
3b631678f5 Port Quantum extraction (nw) 2024-12-13 14:30:38 -05:00
Matt Nadareski
2b111a9688 Port BFPK extraction 2024-12-13 14:25:32 -05:00
1401 changed files with 106533 additions and 17307 deletions

View File

@@ -16,7 +16,10 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: |
6.0.x
8.0.x
9.0.x
- name: Run tests
run: dotnet test
@@ -24,17 +27,11 @@ jobs:
- name: Run publish script
run: ./publish-nix.sh -d
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: 'Nuget Package'
path: '*.nupkg'
- name: Upload to rolling
uses: ncipollo/release-action@v1.14.0
with:
allowUpdates: True
artifacts: "*.nupkg,*.zip"
artifacts: "*.nupkg,*.snupkg,*.zip"
body: 'Last built commit: ${{ github.sha }}'
name: 'Rolling Release'
prerelease: True

View File

@@ -11,10 +11,13 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: |
6.0.x
8.0.x
9.0.x
- name: Build
run: dotnet build
- name: Run tests
run: dotnet test
run: dotnet test

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "SabreTools.Serialization/_EXTERNAL/stormlibsharp"]
path = SabreTools.Serialization/_EXTERNAL/stormlibsharp
url = https://github.com/robpaveza/stormlibsharp.git

14
.vscode/launch.json vendored
View File

@@ -4,6 +4,20 @@
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (ExtractionTool)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/ExtractionTool/bin/Debug/net9.0/ExtractionTool.dll",
"args": [],
"cwd": "${workspaceFolder}",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
"console": "internalConsole",
"stopAtEntry": false,
"justMyCode": false
},
{
"name": ".NET Core Launch (InfoPrint)",
"type": "coreclr",

View File

@@ -0,0 +1,73 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net20;net35;net40;net452;net462;net472;net48;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
<OutputType>Exe</OutputType>
<CheckEolTargetFramework>false</CheckEolTargetFramework>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Version>2.0.0</Version>
</PropertyGroup>
<!-- Support All Frameworks -->
<PropertyGroup Condition="$(TargetFramework.StartsWith(`net2`)) OR $(TargetFramework.StartsWith(`net3`)) OR $(TargetFramework.StartsWith(`net4`))">
<RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup Condition="$(TargetFramework.StartsWith(`netcoreapp`)) OR $(TargetFramework.StartsWith(`net5`))">
<RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup Condition="$(TargetFramework.StartsWith(`net6`)) OR $(TargetFramework.StartsWith(`net7`)) OR $(TargetFramework.StartsWith(`net8`)) OR $(TargetFramework.StartsWith(`net9`))">
<RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup Condition="$(RuntimeIdentifier.StartsWith(`osx-arm`))">
<TargetFrameworks>net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
</PropertyGroup>
<!-- Set a build flag for Windows specifically -->
<PropertyGroup Condition="'$(RuntimeIdentifier)'=='win-x86'">
<DefineConstants>$(DefineConstants);WINX86</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(RuntimeIdentifier)'=='win-x64'">
<DefineConstants>$(DefineConstants);WINX64</DefineConstants>
</PropertyGroup>
<!-- These are needed for dealing with native Windows DLLs -->
<ItemGroup Condition="'$(RuntimeIdentifier)'=='win-x86'">
<ContentWithTargetPath Include="..\SabreTools.Serialization\runtimes\win-x86\native\CascLib.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
<TargetPath>CascLib.dll</TargetPath>
</ContentWithTargetPath>
<ContentWithTargetPath Include="..\SabreTools.Serialization\runtimes\win-x86\native\StormLib.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
<TargetPath>StormLib.dll</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
<ItemGroup Condition="'$(RuntimeIdentifier)'=='win-x64'">
<ContentWithTargetPath Include="..\SabreTools.Serialization\runtimes\win-x64\native\CascLib.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
<TargetPath>CascLib.dll</TargetPath>
</ContentWithTargetPath>
<ContentWithTargetPath Include="..\SabreTools.Serialization\runtimes\win-x64\native\StormLib.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
<TargetPath>StormLib.dll</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SabreTools.Serialization\SabreTools.Serialization.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="SabreTools.IO" Version="1.7.5" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.9" Condition="!$(TargetFramework.StartsWith(`net2`)) AND !$(TargetFramework.StartsWith(`net3`)) AND !$(TargetFramework.StartsWith(`net40`)) AND !$(TargetFramework.StartsWith(`net452`))" />
</ItemGroup>
</Project>

129
ExtractionTool/Options.cs Normal file
View File

@@ -0,0 +1,129 @@
using System;
using System.Collections.Generic;
using System.IO;
namespace ExtractionTool
{
/// <summary>
/// Set of options for the test executable
/// </summary>
internal sealed class Options
{
#region Properties
/// <summary>
/// Enable debug output for relevant operations
/// </summary>
public bool Debug { get; private set; } = false;
/// <summary>
/// Set of input paths to use for operations
/// </summary>
public List<string> InputPaths { get; private set; } = [];
/// <summary>
/// Output path for archive extraction
/// </summary>
public string OutputPath { get; private set; } = string.Empty;
#endregion
/// <summary>
/// Parse commandline arguments into an Options object
/// </summary>
public static Options? ParseOptions(string[] args)
{
// If we have invalid arguments
if (args == null || args.Length == 0)
return null;
// Create an Options object
var options = new Options();
// Parse the options and paths
for (int index = 0; index < args.Length; index++)
{
string arg = args[index];
switch (arg)
{
case "-?":
case "-h":
case "--help":
return null;
case "-d":
case "--debug":
options.Debug = true;
break;
case "-o":
case "--outdir":
options.OutputPath = index + 1 < args.Length ? args[++index] : string.Empty;
break;
default:
options.InputPaths.Add(arg);
break;
}
}
// Validate we have any input paths to work on
if (options.InputPaths.Count == 0)
{
Console.WriteLine("At least one path is required!");
return null;
}
// Validate the output path
bool validPath = ValidateExtractionPath(options);
if (!validPath)
return null;
return options;
}
/// <summary>
/// Display help text
/// </summary>
public static void DisplayHelp()
{
Console.WriteLine("Extraction Tool");
Console.WriteLine();
Console.WriteLine("ExtractionTool.exe <options> file|directory ...");
Console.WriteLine();
Console.WriteLine("Options:");
Console.WriteLine("-?, -h, --help Display this help text and quit");
Console.WriteLine("-d, --debug Enable debug mode");
Console.WriteLine("-o, --outdir [PATH] Set output path for extraction (required)");
}
/// <summary>
/// Validate the extraction path
/// </summary>
private static bool ValidateExtractionPath(Options options)
{
// Null or empty output path
if (string.IsNullOrEmpty(options.OutputPath))
{
Console.WriteLine("Output directory required for extraction!");
Console.WriteLine();
return false;
}
// Malformed output path or invalid location
try
{
options.OutputPath = Path.GetFullPath(options.OutputPath);
Directory.CreateDirectory(options.OutputPath);
}
catch
{
Console.WriteLine("Output directory could not be created!");
Console.WriteLine();
return false;
}
return true;
}
}
}

250
ExtractionTool/Program.cs Normal file
View File

@@ -0,0 +1,250 @@
using System;
using System.IO;
using SabreTools.IO.Extensions;
using SabreTools.Serialization;
using SabreTools.Serialization.Wrappers;
namespace ExtractionTool
{
class Program
{
static void Main(string[] args)
{
#if NET462_OR_GREATER || NETCOREAPP
// Register the codepages
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
#endif
// Get the options from the arguments
var options = Options.ParseOptions(args);
// If we have an invalid state
if (options == null)
{
Options.DisplayHelp();
return;
}
// Loop through the input paths
foreach (string inputPath in options.InputPaths)
{
ExtractPath(inputPath, options.OutputPath, options.Debug);
}
}
/// <summary>
/// Wrapper to extract data for a single path
/// </summary>
/// <param name="path">File or directory path</param>
/// <param name="outputDirectory">Output directory path</param>
/// <param name="includeDebug">Enable including debug information</param>
private static void ExtractPath(string path, string outputDirectory, bool includeDebug)
{
// Normalize by getting the full path
path = Path.GetFullPath(path);
Console.WriteLine($"Checking possible path: {path}");
// Check if the file or directory exists
if (File.Exists(path))
{
ExtractFile(path, outputDirectory, includeDebug);
}
else if (Directory.Exists(path))
{
foreach (string file in IOExtensions.SafeEnumerateFiles(path, "*", SearchOption.AllDirectories))
{
ExtractFile(file, outputDirectory, includeDebug);
}
}
else
{
Console.WriteLine($"{path} does not exist, skipping...");
}
}
/// <summary>
/// Print information for a single file, if possible
/// </summary>
private static void ExtractFile(string file, string outputDirectory, bool includeDebug)
{
Console.WriteLine($"Attempting to extract all files from {file}");
using Stream stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
// Get the extension for certain checks
string extension = Path.GetExtension(file).ToLower().TrimStart('.');
// Get the first 16 bytes for matching
byte[] magic = new byte[16];
try
{
int read = stream.Read(magic, 0, 16);
stream.Seek(0, SeekOrigin.Begin);
}
catch (Exception ex)
{
if (includeDebug) Console.Error.WriteLine(ex);
return;
}
// Get the file type
WrapperType ft = WrapperFactory.GetFileType(magic, extension);
var wrapper = WrapperFactory.CreateWrapper(ft, stream);
// Create the output directory
Directory.CreateDirectory(outputDirectory);
// Print the preamble
Console.WriteLine($"Attempting to extract from '{wrapper?.Description() ?? "UNKNOWN"}'");
Console.WriteLine();
switch (wrapper)
{
// 7-zip
case SevenZip sz:
sz.Extract(outputDirectory, includeDebug);
break;
// BFPK archive
case BFPK bfpk:
bfpk.Extract(outputDirectory, includeDebug);
break;
// BSP
case BSP bsp:
bsp.Extract(outputDirectory, includeDebug);
break;
// bzip2
case BZip2 bzip2:
bzip2.Extract(outputDirectory, includeDebug);
break;
// CFB
case CFB cfb:
cfb.Extract(outputDirectory, includeDebug);
break;
// GCF
case GCF gcf:
gcf.Extract(outputDirectory, includeDebug);
break;
// gzip
case GZip gzip:
gzip.Extract(outputDirectory, includeDebug);
break;
// InstallShield Archive V3 (Z)
case InstallShieldArchiveV3 isv3:
isv3.Extract(outputDirectory, includeDebug);
break;
// IS-CAB archive
case InstallShieldCabinet iscab:
iscab.Extract(outputDirectory, includeDebug);
break;
// LZ-compressed file, KWAJ variant
case LZKWAJ kwaj:
kwaj.Extract(outputDirectory, includeDebug);
break;
// LZ-compressed file, QBasic variant
case LZQBasic qbasic:
qbasic.Extract(outputDirectory, includeDebug);
break;
// LZ-compressed file, SZDD variant
case LZSZDD szdd:
szdd.Extract(outputDirectory, includeDebug);
break;
// Microsoft Cabinet archive
case MicrosoftCabinet mscab:
mscab.Extract(outputDirectory, includeDebug);
break;
// MoPaQ (MPQ) archive
case MoPaQ mpq:
mpq.Extract(outputDirectory, includeDebug);
break;
// New Executable
case NewExecutable nex:
nex.Extract(outputDirectory, includeDebug);
break;
// PAK
case PAK pak:
pak.Extract(outputDirectory, includeDebug);
break;
// PFF
case PFF pff:
pff.Extract(outputDirectory, includeDebug);
break;
// PKZIP
case PKZIP pkzip:
pkzip.Extract(outputDirectory, includeDebug);
break;
// Portable Executable
case PortableExecutable pex:
pex.Extract(outputDirectory, includeDebug);
break;
// Quantum
case Quantum quantum:
quantum.Extract(outputDirectory, includeDebug);
break;
// RAR
case RAR rar:
rar.Extract(outputDirectory, includeDebug);
break;
// SGA
case SGA sga:
sga.Extract(outputDirectory, includeDebug);
break;
// Tape Archive
case TapeArchive tar:
tar.Extract(outputDirectory, includeDebug);
break;
// VBSP
case VBSP vbsp:
vbsp.Extract(outputDirectory, includeDebug);
break;
// VPK
case VPK vpk:
vpk.Extract(outputDirectory, includeDebug);
break;
// WAD3
case WAD3 wad:
wad.Extract(outputDirectory, includeDebug);
break;
// xz
case XZ xz:
xz.Extract(outputDirectory, includeDebug);
break;
// XZP
case XZP xzp:
xzp.Extract(outputDirectory, includeDebug);
break;
// Everything else
default:
Console.WriteLine("Not a supported extractable file format, skipping...");
Console.WriteLine();
break;
}
}
}
}

View File

@@ -4,12 +4,13 @@
<TargetFrameworks>net20;net35;net40;net452;net462;net472;net48;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
<OutputType>Exe</OutputType>
<CheckEolTargetFramework>false</CheckEolTargetFramework>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Version>1.8.3</Version>
<Version>2.0.0</Version>
</PropertyGroup>
<!-- Support All Frameworks -->
@@ -31,7 +32,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="SabreTools.IO" Version="1.6.1" />
<PackageReference Include="SabreTools.IO" Version="1.7.5" />
<PackageReference Include="SabreTools.Hashing" Version="1.5.0" />
</ItemGroup>
</Project>

View File

@@ -15,6 +15,16 @@ namespace InfoPrint
/// </summary>
public bool Debug { get; private set; } = false;
/// <summary>
/// Output information to file only, skip printing to console
/// </summary>
public bool FileOnly { get; private set; } = false;
/// <summary>
/// Print external file hashes
/// </summary>
public bool Hash { get; private set; } = false;
/// <summary>
/// Set of input paths to use for operations
/// </summary>
@@ -74,6 +84,16 @@ namespace InfoPrint
options.Debug = true;
break;
case "-c":
case "--hash":
options.Hash = true;
break;
case "-f":
case "--file":
options.FileOnly = true;
break;
case "-j":
case "--json":
#if NETCOREAPP
@@ -106,14 +126,16 @@ namespace InfoPrint
{
Console.WriteLine("Information Printing Program");
Console.WriteLine();
Console.WriteLine("infoprint.exe <options> file|directory ...");
Console.WriteLine("InfoPrint <options> file|directory ...");
Console.WriteLine();
Console.WriteLine("Options:");
Console.WriteLine("-?, -h, --help Display this help text and quit");
Console.WriteLine("-d, --debug Enable debug mode");
Console.WriteLine("-c, --hash Output file hashes");
Console.WriteLine("-f, --file Print to file only");
#if NETCOREAPP
Console.WriteLine("-j, --json Print info as JSON");
#endif
}
}
}
}

View File

@@ -1,5 +1,7 @@
using System;
using System.IO;
using System.Text;
using SabreTools.Hashing;
using SabreTools.IO.Extensions;
using SabreTools.Serialization;
using SabreTools.Serialization.Wrappers;
@@ -23,11 +25,7 @@ namespace InfoPrint
// Loop through the input paths
foreach (string inputPath in options.InputPaths)
{
#if NETFRAMEWORK
PrintPathInfo(inputPath, false, options.Debug);
#else
PrintPathInfo(inputPath, options.Json, options.Debug);
#endif
PrintPathInfo(inputPath, options);
}
}
@@ -35,22 +33,21 @@ namespace InfoPrint
/// Wrapper to print information for a single path
/// </summary>
/// <param name="path">File or directory path</param>
/// <param name="json">Enable JSON output, if supported</param>
/// <param name="debug">Enable debug output</param>
private static void PrintPathInfo(string path, bool json, bool debug)
/// <param name="options">User-defined options</param>
private static void PrintPathInfo(string path, Options options)
{
Console.WriteLine($"Checking possible path: {path}");
// Check if the file or directory exists
if (File.Exists(path))
{
PrintFileInfo(path, json, debug);
PrintFileInfo(path, options);
}
else if (Directory.Exists(path))
{
foreach (string file in IOExtensions.SafeEnumerateFiles(path, "*", SearchOption.AllDirectories))
{
PrintFileInfo(file, json, debug);
PrintFileInfo(file, options);
}
}
else
@@ -62,10 +59,31 @@ namespace InfoPrint
/// <summary>
/// Print information for a single file, if possible
/// </summary>
private static void PrintFileInfo(string file, bool json, bool debug)
/// <param name="file">File path</param>
/// <param name="options">User-defined options</param>
private static void PrintFileInfo(string file, Options options)
{
Console.WriteLine($"Attempting to print info for {file}");
// Get the base info output name
string filenameBase = $"info-{DateTime.Now:yyyy-MM-dd_HHmmss.ffff}";
// If we have the hash flag
if (options.Hash)
{
var hashBuilder = PrintHashInfo(file, options.Debug);
if (hashBuilder != null)
{
// Create the output data
string hashData = hashBuilder.ToString();
// Write the output data
using var hsw = new StreamWriter(File.OpenWrite($"{filenameBase}.hashes"));
hsw.WriteLine(hashData);
hsw.Flush();
}
}
try
{
using Stream stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
@@ -92,20 +110,17 @@ namespace InfoPrint
return;
}
// Get the base info output name
string filenameBase = $"info-{DateTime.Now:yyyy-MM-dd_HHmmss.ffff}";
#if NETCOREAPP
// If we have the JSON flag
if (json)
if (options.Json)
{
// Create the output data
string serializedData = wrapper.ExportJSON();
Console.WriteLine(serializedData);
// Write the output data
using var jsw = new StreamWriter(File.OpenWrite($"{filenameBase}.json"));
jsw.WriteLine(serializedData);
jsw.Flush();
}
#endif
@@ -117,16 +132,79 @@ namespace InfoPrint
return;
}
// Write the output data
Console.WriteLine(builder);
// Only print to console if enabled
if (!options.FileOnly)
Console.WriteLine(builder);
using var sw = new StreamWriter(File.OpenWrite($"{filenameBase}.txt"));
sw.WriteLine(file);
sw.WriteLine();
sw.WriteLine(builder.ToString());
sw.Flush();
}
catch (Exception ex)
{
Console.WriteLine(options.Debug ? ex : "[Exception opening file, please try again]");
Console.WriteLine();
}
}
/// <summary>
/// Print hash information for a single file, if possible
/// </summary>
/// <param name="file">File path</param>
/// <param name="debug">Enable debug output</param>
/// <returns>StringBuilder representing the hash information, if possible</returns>
private static StringBuilder? PrintHashInfo(string file, bool debug)
{
// Ignore missing files
if (!File.Exists(file))
return null;
Console.WriteLine($"Attempting to hash {file}, this may take a while...");
try
{
// Get all file hashes for flexibility
var hashes = HashTool.GetFileHashes(file);
if (hashes == null)
{
if (debug) Console.WriteLine($"Hashes for {file} could not be retrieved");
return null;
}
// Output subset of available hashes
var builder = new StringBuilder();
if (hashes.TryGetValue(HashType.CRC16, out string? crc16) && crc16 != null)
builder.AppendLine($"CRC-16 checksum: {crc16}");
if (hashes.TryGetValue(HashType.CRC32, out string? crc32) && crc32 != null)
builder.AppendLine($"CRC-32 checksum: {crc32}");
if (hashes.TryGetValue(HashType.MD2, out string? md2) && md2 != null)
builder.AppendLine($"MD2 hash: {md2}");
if (hashes.TryGetValue(HashType.MD4, out string? md4) && md4 != null)
builder.AppendLine($"MD4 hash: {md4}");
if (hashes.TryGetValue(HashType.MD5, out string? md5) && md5 != null)
builder.AppendLine($"MD5 hash: {md5}");
if (hashes.TryGetValue(HashType.RIPEMD128, out string? ripemd128) && ripemd128 != null)
builder.AppendLine($"RIPEMD-128 hash: {ripemd128}");
if (hashes.TryGetValue(HashType.RIPEMD160, out string? ripemd160) && ripemd160 != null)
builder.AppendLine($"RIPEMD-160 hash: {ripemd160}");
if (hashes.TryGetValue(HashType.SHA1, out string? sha1) && sha1 != null)
builder.AppendLine($"SHA-1 hash: {sha1}");
if (hashes.TryGetValue(HashType.SHA256, out string? sha256) && sha256 != null)
builder.AppendLine($"SHA-256 hash: {sha256}");
if (hashes.TryGetValue(HashType.SHA384, out string? sha384) && sha384 != null)
builder.AppendLine($"SHA-384 hash: {sha384}");
if (hashes.TryGetValue(HashType.SHA512, out string? sha512) && sha512 != null)
builder.AppendLine($"SHA-512 hash: {sha512}");
return builder;
}
catch (Exception ex)
{
Console.WriteLine(debug ? ex : "[Exception opening file, please try again]");
Console.WriteLine();
return null;
}
}
}
}
}

7
LICENSE Normal file
View File

@@ -0,0 +1,7 @@
Copyright (c) 2018-2025 Matt Nadareski
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

102
README.MD
View File

@@ -6,34 +6,103 @@ This library comprises of serializers that both read and write from files and st
Find the link to the Nuget package [here](https://www.nuget.org/packages/SabreTools.Serialization).
The following non-project libraries (or ports thereof) are used for file handling:
- [SharpCompress](https://github.com/adamhathcock/sharpcompress) - Common archive format extraction
- [StormLibSharp](https://github.com/robpaveza/stormlibsharp) - MoPaQ extraction [Unused in .NET Framework 2.0/3.5/4.0 and non-Windows builds due to Windows-specific libraries]
The following projects have influenced this library:
- [libmspack](https://github.com/kyz/libmspack) - Documentation around the MS-CAB format and associated compression methods.
- [Unshield](https://github.com/twogood/unshield/) - InstallShield CAB extraction tool that influenced internal handling
## Releases
For the most recent stable build, download the latest release here: [Releases Page](https://github.com/SabreTools/SabreTools.Serialization/releases)
For the latest WIP build here: [Rolling Release](https://github.com/SabreTools/SabreTools.Serialization/releases/tag/rolling)
## InfoPrint
**InfoPrint** is a reference implementation for the deserialization and printing features of the library, packaged as a standalone executable for all supported platforms. It will attempt to detect and display information about many supported file types, optionally both hashing the file and outputting the information to a JSON file (.NET Core 3.1 and above only).
```text
InfoPrint <options> file|directory ...
Options:
-?, -h, --help Display this help text and quit
-d, --debug Enable debug mode
-c, --hash Output file hashes
-f, --file Print to file only
-j, --json Print info as JSON
```
## ExtractionTool
**ExtractionTool** is a reference implementation for the extraction features of the library, packaged as a standalone executable for all supported platforms. It will attempt to detect and extract many supported file types. See the table below for supported extraction functionality.
```text
ExtractionTool.exe <options> file|directory ...
Options:
-?, -h, --help Display this help text and quit
-d, --debug Enable debug mode
-o, --outdir [PATH] Set output path for extraction (required)
```
| Format Name | Notes |
| --- | --- |
| 7-zip archive | .NET Framework 4.6.2 and greater |
| BFPK custom archive format | |
| bzip2 archive | .NET Framework 4.6.2 and greater |
| Compound File Binary (CFB) | Only CFB common pieces extractable. .NET Framework 4.0 and greater |
| gzip archive | |
| Half-Life Game Cache File (GCF) | |
| Half-Life Level (BSP) | |
| Half-Life Package File (PAK) | |
| Half-Life Texture Package File (WAD3) | |
| Half-Life 2 Level (VBSP) | |
| InstallShield Archive V3 (Z) | |
| InstallShield CAB | |
| Microsoft cabinet file | Does not support LZX or Quantum compression |
| Microsoft LZ-compressed files | KWAJ, QBasic, and SZDD variants |
| MoPaQ game data archive (MPQ) | Currently not working. Windows only. .NET Framework 4.5.2 and above |
| New Exectuable | Embedded archives and executables in the overlay and Wise installer |
| NovaLogic Game Archive Format (PFF) | |
| PKZIP and derived files (ZIP, etc.) | .NET Framework 4.6.2 and greater |
| Portable Executable | Embedded archives and executables in the resources and overlay, CExe-packed data, SFX archives (7-zip, PKZIP, and RAR), and Wise installer |
| Quantum archive (Q) | Currently not working |
| RAR archive (RAR) | .NET Framework 4.6.2 and greater |
| SGA game archive | |
| Tape archive (TAR) | |
| Valve Package File (VPK) | |
| XBox Package File (XZP) | |
| xz archive (XZ) | .NET Framework 4.6.2 and greater |
## Interfaces
Below is a table representing the various conversion interfaces that are implemented within this library.
| Interface Name | Source Type | Destination Type |
| --- | --- | --- |
| `IByteDeserializer` | `byte[]?` | Model |
| `IByteSerializer` | Model | `byte[]?` |
| `IFileDeserializer` | `string?` path | Model |
| `IFileSerializer` | Model | `string?` path |
| `IModelSerializer` | Model | Model |
| `IStreamDeserializer` | `Stream?` | Model |
| `IStreamSerializer` | Model | `Stream?` |
| `IStringDeserializer` | `string?` representation | Model |
| `IStringSerializer` | Model | `string?` representation |
| `SabreTools.Serialization.Interfaces.IByteReader<TModel>` | `byte[]?` | `TModel` |
| `SabreTools.Serialization.Interfaces.IByteWriter<TModel>` | `TModel` | `byte[]?` |
| `SabreTools.Serialization.Interfaces.ICrossModel<TSource, TDest>` | `TSource`/`TDest` | `TDest`/`TSource` |
| `SabreTools.Serialization.Interfaces.IFileReader<TModel>` | `string?` path | `TModel` |
| `SabreTools.Serialization.Interfaces.IFileWriter<TModel>` | `TModel` | `string?` path |
| `SabreTools.Serialization.Interfaces.IStreamReader<TModel>` | `Stream?` | `TModel` |
| `SabreTools.Serialization.Interfaces.IStreamWriter<TModel>` | `TModel` | `Stream?` |
| `SabreTools.Serialization.Interfaces.IStringReader<TModel>` | `string?` representation | `TModel` |
| `SabreTools.Serialization.Interfaces.IStringWriter<TModel>` | `TModel` | `string?` representation |
Below is a table representing the various non-conversion interfaces that are implemented within this library.
| Interface Name | Purpose |
| --- | --- |
| `IPrinter` | Provides a formatted output for a model |
| `IWrapper` / `IWrapper<T>` | Wraps a model or set of models to provide additional functionality |
| `SabreTools.Data.Printers.IPrinter<TModel>` | Provides a formatted output for a `TModel` |
| `SabreTools.Serialization.Wrappers.IExtractable` | Marks a wrapper as able to be extracted |
| `SabreTools.Serialization.Wrappers.IWrapper` | Represents an item with a description and JSON serializable state, allowing for extensions |
| `SabreTools.Serialization.Wrappers.IWrapper<TModel>` | Wraps a model with source data, allowing for extensions |
## Namespaces
@@ -41,8 +110,13 @@ Below is a table of all namespaces within the library and what they represent
| Namespace | Description |
| --- | --- |
| `SabreTools.Data.Attributes` | Common attributes for data marking and manipulation |
| `SabreTools.Data.Extensions` | Extension methods related to models |
| `SabreTools.Data.Models` | Models representing different file and structure types |
| `SabreTools.Data.ObjectIdentifier` | Object Identifier (OID) parsing |
| `SabreTools.Data.Printers` | Export model information in a formatted manner |
| `SabreTools.Serialization.CrossModel` | Convert between models; mainly used for metadata files converting to and from a common, `Dictionary`-based model |
| `SabreTools.Serialization.Deserializers` | Convert from external sources to models |
| `SabreTools.Serialization.Printers` | Export model information in a formatted manner |
| `SabreTools.Serialization.Serializers` | Convert from models to external sources |
| `SabreTools.Serialization.Interfaces` | Interfaces used commonly throughout the library |
| `SabreTools.Serialization.Readers` | Convert from external sources to models |
| `SabreTools.Serialization.Wrappers` | Classes that wrap serialization and models to allow for including extension properties |
| `SabreTools.Serialization.Writers` | Convert from models to external sources |

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.ArchiveDotOrg();
var serializer = new ArchiveDotOrg();
// Build the data
Models.ArchiveDotOrg.Files files = Build();
Data.Models.ArchiveDotOrg.Files files = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(files);
SabreTools.Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(files);
Assert.NotNull(metadata);
// Serialize back to original model
Models.ArchiveDotOrg.Files? newFiles = serializer.Deserialize(metadata);
Data.Models.ArchiveDotOrg.Files? newFiles = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newFiles);
@@ -30,9 +31,9 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.ArchiveDotOrg.Files Build()
private static Data.Models.ArchiveDotOrg.Files Build()
{
var file = new Models.ArchiveDotOrg.File
var file = new Data.Models.ArchiveDotOrg.File
{
Name = "XXXXXX",
Source = "XXXXXX",
@@ -96,7 +97,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Width = "XXXXXX",
};
return new Models.ArchiveDotOrg.Files
return new Data.Models.ArchiveDotOrg.Files
{
File = [file]
};
@@ -105,7 +106,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a File
/// </summary>
private static void Validate(Models.ArchiveDotOrg.File? file)
private static void Validate(Data.Models.ArchiveDotOrg.File? file)
{
Assert.NotNull(file);
Assert.Equal("XXXXXX", file.Name);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.AttractMode();
var serializer = new AttractMode();
// Build the data
Models.AttractMode.MetadataFile mf = Build();
Data.Models.AttractMode.MetadataFile mf = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.AttractMode.MetadataFile? newMf = serializer.Deserialize(metadata);
Data.Models.AttractMode.MetadataFile? newMf = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMf);
@@ -31,11 +32,11 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.AttractMode.MetadataFile Build()
private static Data.Models.AttractMode.MetadataFile Build()
{
string[] header = ["header"];
var row = new Models.AttractMode.Row
var row = new Data.Models.AttractMode.Row
{
Name = "XXXXXX",
Title = "XXXXXX",
@@ -61,7 +62,7 @@ namespace SabreTools.Serialization.Test.CrossModel
FileIsAvailable = "XXXXXX",
};
return new Models.AttractMode.MetadataFile
return new Data.Models.AttractMode.MetadataFile
{
Header = header,
Row = [row],
@@ -81,7 +82,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Row
/// </summary>
private static void Validate(Models.AttractMode.Row? row)
private static void Validate(Data.Models.AttractMode.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripGameTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.ClrMamePro();
var serializer = new ClrMamePro();
// Build the data
Models.ClrMamePro.MetadataFile mf = Build(game: true);
Data.Models.ClrMamePro.MetadataFile mf = Build(game: true);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.ClrMamePro.MetadataFile? newMf = serializer.Deserialize(metadata, game: true);
Data.Models.ClrMamePro.MetadataFile? newMf = serializer.Deserialize(metadata, game: true);
// Validate the data
Assert.NotNull(newMf);
@@ -32,17 +33,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripMachineTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.ClrMamePro();
var serializer = new ClrMamePro();
// Build the data
Models.ClrMamePro.MetadataFile mf = Build(game: false);
Data.Models.ClrMamePro.MetadataFile mf = Build(game: false);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.ClrMamePro.MetadataFile? newMf = serializer.Deserialize(metadata, game: false);
Data.Models.ClrMamePro.MetadataFile? newMf = serializer.Deserialize(metadata, game: false);
// Validate the data
Assert.NotNull(newMf);
@@ -55,9 +56,9 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.ClrMamePro.MetadataFile Build(bool game)
private static Data.Models.ClrMamePro.MetadataFile Build(bool game)
{
var cmp = new Models.ClrMamePro.ClrMamePro
var cmp = new Data.Models.ClrMamePro.ClrMamePro
{
Name = "XXXXXX",
Description = "XXXXXX",
@@ -76,7 +77,7 @@ namespace SabreTools.Serialization.Test.CrossModel
ForcePacking = "XXXXXX",
};
var release = new Models.ClrMamePro.Release
var release = new Data.Models.ClrMamePro.Release
{
Name = "XXXXXX",
Region = "XXXXXX",
@@ -85,19 +86,23 @@ namespace SabreTools.Serialization.Test.CrossModel
Default = "XXXXXX",
};
var biosset = new Models.ClrMamePro.BiosSet
var biosset = new Data.Models.ClrMamePro.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Models.ClrMamePro.Rom
var rom = new Data.Models.ClrMamePro.Rom
{
Name = "XXXXXX",
Size = "XXXXXX",
CRC = "XXXXXX",
MD2 = "XXXXXX",
MD4 = "XXXXXX",
MD5 = "XXXXXX",
RIPEMD128 = "XXXXXX",
RIPEMD160 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Status = "XXXXXX",
@@ -117,7 +122,7 @@ namespace SabreTools.Serialization.Test.CrossModel
MIA = "XXXXXX",
};
var disk = new Models.ClrMamePro.Disk
var disk = new Data.Models.ClrMamePro.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -127,17 +132,17 @@ namespace SabreTools.Serialization.Test.CrossModel
Flags = "XXXXXX",
};
var sample = new Models.ClrMamePro.Sample
var sample = new Data.Models.ClrMamePro.Sample
{
Name = "XXXXXX",
};
var archive = new Models.ClrMamePro.Archive
var archive = new Data.Models.ClrMamePro.Archive
{
Name = "XXXXXX",
};
var media = new Models.ClrMamePro.Media
var media = new Data.Models.ClrMamePro.Media
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -146,7 +151,7 @@ namespace SabreTools.Serialization.Test.CrossModel
SpamSum = "XXXXXX",
};
var chip = new Models.ClrMamePro.Chip
var chip = new Data.Models.ClrMamePro.Chip
{
Type = "XXXXXX",
Name = "XXXXXX",
@@ -154,7 +159,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Clock = "XXXXXX",
};
var video = new Models.ClrMamePro.Video
var video = new Data.Models.ClrMamePro.Video
{
Screen = "XXXXXX",
Orientation = "XXXXXX",
@@ -165,12 +170,12 @@ namespace SabreTools.Serialization.Test.CrossModel
Freq = "XXXXXX",
};
var sound = new Models.ClrMamePro.Sound
var sound = new Data.Models.ClrMamePro.Sound
{
Channels = "XXXXXX",
};
var input = new Models.ClrMamePro.Input
var input = new Data.Models.ClrMamePro.Input
{
Players = "XXXXXX",
Control = "XXXXXX",
@@ -180,14 +185,14 @@ namespace SabreTools.Serialization.Test.CrossModel
Service = "XXXXXX",
};
var dipswitch = new Models.ClrMamePro.DipSwitch
var dipswitch = new Data.Models.ClrMamePro.DipSwitch
{
Name = "XXXXXX",
Entry = ["XXXXXX"],
Default = "XXXXXX",
};
var driver = new Models.ClrMamePro.Driver
var driver = new Data.Models.ClrMamePro.Driver
{
Status = "XXXXXX",
Color = "XXXXXX",
@@ -197,9 +202,9 @@ namespace SabreTools.Serialization.Test.CrossModel
};
// TODO: This omits Set, should that have a separate case?
Models.ClrMamePro.GameBase gameBase = game
? new Models.ClrMamePro.Game()
: new Models.ClrMamePro.Machine();
Data.Models.ClrMamePro.GameBase gameBase = game
? new Data.Models.ClrMamePro.Game()
: new Data.Models.ClrMamePro.Machine();
gameBase.Name = "XXXXXX";
gameBase.Description = "XXXXXX";
gameBase.Year = "XXXXXX";
@@ -222,7 +227,7 @@ namespace SabreTools.Serialization.Test.CrossModel
gameBase.DipSwitch = [dipswitch];
gameBase.Driver = driver;
return new Models.ClrMamePro.MetadataFile
return new Data.Models.ClrMamePro.MetadataFile
{
ClrMamePro = cmp,
Game = [gameBase],
@@ -232,7 +237,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a ClrMamePro
/// </summary>
private static void Validate(Models.ClrMamePro.ClrMamePro? cmp)
private static void Validate(Data.Models.ClrMamePro.ClrMamePro? cmp)
{
Assert.NotNull(cmp);
Assert.Equal("XXXXXX", cmp.Name);
@@ -255,7 +260,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Models.ClrMamePro.GameBase? gb)
private static void Validate(Data.Models.ClrMamePro.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
@@ -316,7 +321,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Release
/// </summary>
private static void Validate(Models.ClrMamePro.Release? release)
private static void Validate(Data.Models.ClrMamePro.Release? release)
{
Assert.NotNull(release);
Assert.Equal("XXXXXX", release.Name);
@@ -329,7 +334,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Models.ClrMamePro.BiosSet? biosset)
private static void Validate(Data.Models.ClrMamePro.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
@@ -340,13 +345,17 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.ClrMamePro.Rom? rom)
private static void Validate(Data.Models.ClrMamePro.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.MD2);
Assert.Equal("XXXXXX", rom.MD4);
Assert.Equal("XXXXXX", rom.MD5);
Assert.Equal("XXXXXX", rom.RIPEMD128);
Assert.Equal("XXXXXX", rom.RIPEMD160);
Assert.Equal("XXXXXX", rom.SHA1);
Assert.Equal("XXXXXX", rom.Merge);
Assert.Equal("XXXXXX", rom.Status);
@@ -369,7 +378,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.ClrMamePro.Disk? disk)
private static void Validate(Data.Models.ClrMamePro.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -383,7 +392,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Models.ClrMamePro.Sample? sample)
private static void Validate(Data.Models.ClrMamePro.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
@@ -392,7 +401,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Archive
/// </summary>
private static void Validate(Models.ClrMamePro.Archive? archive)
private static void Validate(Data.Models.ClrMamePro.Archive? archive)
{
Assert.NotNull(archive);
Assert.Equal("XXXXXX", archive.Name);
@@ -401,7 +410,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Media
/// </summary>
private static void Validate(Models.ClrMamePro.Media? media)
private static void Validate(Data.Models.ClrMamePro.Media? media)
{
Assert.NotNull(media);
Assert.Equal("XXXXXX", media.Name);
@@ -414,7 +423,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Chip
/// </summary>
private static void Validate(Models.ClrMamePro.Chip? chip)
private static void Validate(Data.Models.ClrMamePro.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal("XXXXXX", chip.Type);
@@ -426,7 +435,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Video
/// </summary>
private static void Validate(Models.ClrMamePro.Video? video)
private static void Validate(Data.Models.ClrMamePro.Video? video)
{
Assert.NotNull(video);
Assert.Equal("XXXXXX", video.Screen);
@@ -441,7 +450,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Sound
/// </summary>
private static void Validate(Models.ClrMamePro.Sound? sound)
private static void Validate(Data.Models.ClrMamePro.Sound? sound)
{
Assert.NotNull(sound);
Assert.Equal("XXXXXX", sound.Channels);
@@ -450,7 +459,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Input
/// </summary>
private static void Validate(Models.ClrMamePro.Input? input)
private static void Validate(Data.Models.ClrMamePro.Input? input)
{
Assert.NotNull(input);
Assert.Equal("XXXXXX", input.Players);
@@ -464,7 +473,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Models.ClrMamePro.DipSwitch? dipswitch)
private static void Validate(Data.Models.ClrMamePro.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
@@ -479,7 +488,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Models.ClrMamePro.Driver? driver)
private static void Validate(Data.Models.ClrMamePro.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.DosCenter();
var serializer = new DosCenter();
// Build the data
Models.DosCenter.MetadataFile mf = Build();
Data.Models.DosCenter.MetadataFile mf = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.DosCenter.MetadataFile? newMf = serializer.Deserialize(metadata);
Data.Models.DosCenter.MetadataFile? newMf = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMf);
@@ -31,9 +32,9 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.DosCenter.MetadataFile Build()
private static Data.Models.DosCenter.MetadataFile Build()
{
var dc = new Models.DosCenter.DosCenter
var dc = new Data.Models.DosCenter.DosCenter
{
Name = "XXXXXX",
Description = "XXXXXX",
@@ -44,7 +45,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Comment = "XXXXXX",
};
var file = new Models.DosCenter.File
var file = new Data.Models.DosCenter.File
{
Name = "XXXXXX",
Size = "XXXXXX",
@@ -53,13 +54,13 @@ namespace SabreTools.Serialization.Test.CrossModel
Date = "XXXXXX",
};
var game = new Models.DosCenter.Game
var game = new Data.Models.DosCenter.Game
{
Name = "XXXXXX",
File = [file],
};
return new Models.DosCenter.MetadataFile
return new Data.Models.DosCenter.MetadataFile
{
DosCenter = dc,
Game = [game],
@@ -69,7 +70,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DosCenter
/// </summary>
private static void Validate(Models.DosCenter.DosCenter? cmp)
private static void Validate(Data.Models.DosCenter.DosCenter? cmp)
{
Assert.NotNull(cmp);
Assert.Equal("XXXXXX", cmp.Name);
@@ -84,7 +85,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Game
/// </summary>
private static void Validate(Models.DosCenter.Game? game)
private static void Validate(Data.Models.DosCenter.Game? game)
{
Assert.NotNull(game);
Assert.Equal("XXXXXX", game.Name);
@@ -97,7 +98,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a File
/// </summary>
private static void Validate(Models.DosCenter.File? rom)
private static void Validate(Data.Models.DosCenter.File? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.EverdriveSMDB();
var serializer = new EverdriveSMDB();
// Build the data
Models.EverdriveSMDB.MetadataFile mf = Build();
Data.Models.EverdriveSMDB.MetadataFile mf = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.EverdriveSMDB.MetadataFile? newMf = serializer.Deserialize(metadata);
Data.Models.EverdriveSMDB.MetadataFile? newMf = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMf);
@@ -30,9 +31,9 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.EverdriveSMDB.MetadataFile Build()
private static Data.Models.EverdriveSMDB.MetadataFile Build()
{
var row = new Models.EverdriveSMDB.Row
var row = new Data.Models.EverdriveSMDB.Row
{
SHA256 = "XXXXXX",
Name = "XXXXXX",
@@ -42,7 +43,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Size = "XXXXXX",
};
return new Models.EverdriveSMDB.MetadataFile
return new Data.Models.EverdriveSMDB.MetadataFile
{
Row = [row],
};
@@ -51,7 +52,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Row
/// </summary>
private static void Validate(Models.EverdriveSMDB.Row? row)
private static void Validate(Data.Models.EverdriveSMDB.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.SHA256);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using System;
using SabreTools.Hashing;
using Xunit;
@@ -10,17 +11,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripSFVTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.CRC32);
Data.Models.Hashfile.Hashfile hf = Build(HashType.CRC32);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.CRC32);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.CRC32);
// Validate the data
Assert.NotNull(newHf);
@@ -33,17 +34,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripMD2Test()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.MD2);
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD2);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD2);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD2);
// Validate the data
Assert.NotNull(newHf);
@@ -56,17 +57,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripMD4Test()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.MD4);
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD4);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD4);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD4);
// Validate the data
Assert.NotNull(newHf);
@@ -79,17 +80,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripMD5Test()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.MD5);
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD5);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD5);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD5);
// Validate the data
Assert.NotNull(newHf);
@@ -102,17 +103,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripSHA1Test()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SHA1);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA1);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA1);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA1);
// Validate the data
Assert.NotNull(newHf);
@@ -125,17 +126,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripSHA256Test()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SHA256);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA256);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA256);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA256);
// Validate the data
Assert.NotNull(newHf);
@@ -148,17 +149,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripSHA384Test()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SHA384);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA384);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA384);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA384);
// Validate the data
Assert.NotNull(newHf);
@@ -171,17 +172,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripSHA512Test()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SHA512);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA512);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA512);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA512);
// Validate the data
Assert.NotNull(newHf);
@@ -194,17 +195,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripSpamSumTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Hashfile();
var serializer = new Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SpamSum);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SpamSum);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SpamSum);
Data.Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SpamSum);
// Validate the data
Assert.NotNull(newHf);
@@ -216,19 +217,19 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Hashfile.Hashfile Build(HashType hashType)
private static Data.Models.Hashfile.Hashfile Build(HashType hashType)
{
return hashType switch
{
HashType.CRC32 => new Models.Hashfile.Hashfile { SFV = [new Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] },
HashType.MD2 => new Models.Hashfile.Hashfile { MD2 = [new Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.MD4 => new Models.Hashfile.Hashfile { MD4 = [new Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.MD5 => new Models.Hashfile.Hashfile { MD5 = [new Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA1 => new Models.Hashfile.Hashfile { SHA1 = [new Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA256 => new Models.Hashfile.Hashfile { SHA256 = [new Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA384 => new Models.Hashfile.Hashfile { SHA384 = [new Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA512 => new Models.Hashfile.Hashfile { SHA512 = [new Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SpamSum => new Models.Hashfile.Hashfile { SpamSum = [new Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.CRC32 => new Data.Models.Hashfile.Hashfile { SFV = [new Data.Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] },
HashType.MD2 => new Data.Models.Hashfile.Hashfile { MD2 = [new Data.Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.MD4 => new Data.Models.Hashfile.Hashfile { MD4 = [new Data.Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.MD5 => new Data.Models.Hashfile.Hashfile { MD5 = [new Data.Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA1 => new Data.Models.Hashfile.Hashfile { SHA1 = [new Data.Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA256 => new Data.Models.Hashfile.Hashfile { SHA256 = [new Data.Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA384 => new Data.Models.Hashfile.Hashfile { SHA384 = [new Data.Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA512 => new Data.Models.Hashfile.Hashfile { SHA512 = [new Data.Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SpamSum => new Data.Models.Hashfile.Hashfile { SpamSum = [new Data.Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] },
_ => throw new ArgumentOutOfRangeException(),
};
}
@@ -236,7 +237,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SFV
/// </summary>
private static void Validate(Models.Hashfile.SFV? sfv)
private static void Validate(Data.Models.Hashfile.SFV? sfv)
{
Assert.NotNull(sfv);
Assert.Equal("XXXXXX", sfv.File);
@@ -246,7 +247,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a MD2
/// </summary>
private static void Validate(Models.Hashfile.MD2? md2)
private static void Validate(Data.Models.Hashfile.MD2? md2)
{
Assert.NotNull(md2);
Assert.Equal("XXXXXX", md2.Hash);
@@ -256,7 +257,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a MD4
/// </summary>
private static void Validate(Models.Hashfile.MD4? md4)
private static void Validate(Data.Models.Hashfile.MD4? md4)
{
Assert.NotNull(md4);
Assert.Equal("XXXXXX", md4.Hash);
@@ -266,7 +267,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a MD5
/// </summary>
private static void Validate(Models.Hashfile.MD5? md5)
private static void Validate(Data.Models.Hashfile.MD5? md5)
{
Assert.NotNull(md5);
Assert.Equal("XXXXXX", md5.Hash);
@@ -276,7 +277,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SHA1
/// </summary>
private static void Validate(Models.Hashfile.SHA1? sha1)
private static void Validate(Data.Models.Hashfile.SHA1? sha1)
{
Assert.NotNull(sha1);
Assert.Equal("XXXXXX", sha1.Hash);
@@ -286,7 +287,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SHA256
/// </summary>
private static void Validate(Models.Hashfile.SHA256? sha256)
private static void Validate(Data.Models.Hashfile.SHA256? sha256)
{
Assert.NotNull(sha256);
Assert.Equal("XXXXXX", sha256.Hash);
@@ -296,7 +297,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SHA384
/// </summary>
private static void Validate(Models.Hashfile.SHA384? sha384)
private static void Validate(Data.Models.Hashfile.SHA384? sha384)
{
Assert.NotNull(sha384);
Assert.Equal("XXXXXX", sha384.Hash);
@@ -306,7 +307,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SHA512
/// </summary>
private static void Validate(Models.Hashfile.SHA512? sha512)
private static void Validate(Data.Models.Hashfile.SHA512? sha512)
{
Assert.NotNull(sha512);
Assert.Equal("XXXXXX", sha512.Hash);
@@ -316,7 +317,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SpamSum
/// </summary>
private static void Validate(Models.Hashfile.SpamSum? spamsum)
private static void Validate(Data.Models.Hashfile.SpamSum? spamsum)
{
Assert.NotNull(spamsum);
Assert.Equal("XXXXXX", spamsum.Hash);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Listrom();
var serializer = new Listrom();
// Build the data
Models.Listrom.MetadataFile mf = Build();
Data.Models.Listrom.MetadataFile mf = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Listrom.MetadataFile? newMf = serializer.Deserialize(metadata);
Data.Models.Listrom.MetadataFile? newMf = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMf);
@@ -32,9 +33,9 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Listrom.MetadataFile Build()
private static Data.Models.Listrom.MetadataFile Build()
{
var rom = new Models.Listrom.Row
var rom = new Data.Models.Listrom.Row
{
Name = "XXXXXX",
Size = "XXXXXX",
@@ -44,7 +45,7 @@ namespace SabreTools.Serialization.Test.CrossModel
NoGoodDumpKnown = false,
};
var disk = new Models.Listrom.Row
var disk = new Data.Models.Listrom.Row
{
Name = "XXXXXX",
Bad = false,
@@ -53,19 +54,19 @@ namespace SabreTools.Serialization.Test.CrossModel
NoGoodDumpKnown = true,
};
var device = new Models.Listrom.Set()
var device = new Data.Models.Listrom.Set()
{
Device = "XXXXXX",
Row = [rom],
};
var driver = new Models.Listrom.Set()
var driver = new Data.Models.Listrom.Set()
{
Driver = "XXXXXX",
Row = [disk],
};
return new Models.Listrom.MetadataFile
return new Data.Models.Listrom.MetadataFile
{
Set = [device, driver],
};
@@ -74,7 +75,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Set
/// </summary>
private static void ValidateDevice(Models.Listrom.Set? set)
private static void ValidateDevice(Data.Models.Listrom.Set? set)
{
Assert.NotNull(set);
Assert.Equal("XXXXXX", set.Device);
@@ -87,7 +88,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Set
/// </summary>
private static void ValidateDriver(Models.Listrom.Set? set)
private static void ValidateDriver(Data.Models.Listrom.Set? set)
{
Assert.NotNull(set);
Assert.Equal("XXXXXX", set.Driver);
@@ -100,7 +101,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateRom(Models.Listrom.Row? row)
private static void ValidateRom(Data.Models.Listrom.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);
@@ -114,7 +115,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateDisk(Models.Listrom.Row? row)
private static void ValidateDisk(Data.Models.Listrom.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripGameTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Listxml();
var serializer = new Listxml();
// Build the data
Models.Listxml.Mame mame = Build(game: true);
Data.Models.Listxml.Mame mame = Build(game: true);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mame);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mame);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Listxml.Mame? newMame = serializer.Deserialize(metadata);
Data.Models.Listxml.Mame? newMame = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMame);
@@ -35,17 +36,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripMachineTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Listxml();
var serializer = new Listxml();
// Build the data
Models.Listxml.Mame mame = Build(game: false);
Data.Models.Listxml.Mame mame = Build(game: false);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mame);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mame);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Listxml.Mame? newMame = serializer.Deserialize(metadata);
Data.Models.Listxml.Mame? newMame = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMame);
@@ -61,16 +62,16 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Listxml.Mame Build(bool game)
private static Data.Models.Listxml.Mame Build(bool game)
{
var biosset = new Models.Listxml.BiosSet
var biosset = new Data.Models.Listxml.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Models.Listxml.Rom
var rom = new Data.Models.Listxml.Rom
{
Name = "XXXXXX",
Bios = "XXXXXX",
@@ -86,7 +87,7 @@ namespace SabreTools.Serialization.Test.CrossModel
SoundOnly = "XXXXXX",
};
var disk = new Models.Listxml.Disk
var disk = new Data.Models.Listxml.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -99,17 +100,17 @@ namespace SabreTools.Serialization.Test.CrossModel
Optional = "XXXXXX",
};
var deviceref = new Models.Listxml.DeviceRef
var deviceref = new Data.Models.Listxml.DeviceRef
{
Name = "XXXXXX",
};
var sample = new Models.Listxml.Sample
var sample = new Data.Models.Listxml.Sample
{
Name = "XXXXXX",
};
var chip = new Models.Listxml.Chip
var chip = new Data.Models.Listxml.Chip
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -118,7 +119,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Clock = "XXXXXX",
};
var display = new Models.Listxml.Display
var display = new Data.Models.Listxml.Display
{
Tag = "XXXXXX",
Type = "XXXXXX",
@@ -136,7 +137,7 @@ namespace SabreTools.Serialization.Test.CrossModel
VBStart = "XXXXXX",
};
var video = new Models.Listxml.Video
var video = new Data.Models.Listxml.Video
{
Screen = "XXXXXX",
Orientation = "XXXXXX",
@@ -147,12 +148,12 @@ namespace SabreTools.Serialization.Test.CrossModel
Refresh = "XXXXXX",
};
var sound = new Models.Listxml.Sound
var sound = new Data.Models.Listxml.Sound
{
Channels = "XXXXXX",
};
var control = new Models.Listxml.Control
var control = new Data.Models.Listxml.Control
{
Type = "XXXXXX",
Player = "XXXXXX",
@@ -168,7 +169,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Ways3 = "XXXXXX",
};
var input = new Models.Listxml.Input
var input = new Data.Models.Listxml.Input
{
Service = "XXXXXX",
Tilt = "XXXXXX",
@@ -179,7 +180,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Control = [control],
};
var condition = new Models.Listxml.Condition
var condition = new Data.Models.Listxml.Condition
{
Tag = "XXXXXX",
Mask = "XXXXXX",
@@ -187,14 +188,14 @@ namespace SabreTools.Serialization.Test.CrossModel
Value = "XXXXXX",
};
var diplocation = new Models.Listxml.DipLocation
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var dipvalue = new Models.Listxml.DipValue
var dipvalue = new Data.Models.Listxml.DipValue
{
Name = "XXXXXX",
Value = "XXXXXX",
@@ -202,7 +203,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Condition = condition,
};
var dipswitch = new Models.Listxml.DipSwitch
var dipswitch = new Data.Models.Listxml.DipSwitch
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -212,14 +213,14 @@ namespace SabreTools.Serialization.Test.CrossModel
DipValue = [dipvalue],
};
var conflocation = new Models.Listxml.ConfLocation
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var confsetting = new Models.Listxml.ConfSetting
var confsetting = new Data.Models.Listxml.ConfSetting
{
Name = "XXXXXX",
Value = "XXXXXX",
@@ -227,7 +228,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Condition = condition,
};
var configuration = new Models.Listxml.Configuration
var configuration = new Data.Models.Listxml.Configuration
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -237,25 +238,25 @@ namespace SabreTools.Serialization.Test.CrossModel
ConfSetting = [confsetting],
};
var analog = new Models.Listxml.Analog
var analog = new Data.Models.Listxml.Analog
{
Mask = "XXXXXX",
};
var port = new Models.Listxml.Port
var port = new Data.Models.Listxml.Port
{
Tag = "XXXXXX",
Analog = [analog],
};
var adjuster = new Models.Listxml.Adjuster
var adjuster = new Data.Models.Listxml.Adjuster
{
Name = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var driver = new Models.Listxml.Driver
var driver = new Data.Models.Listxml.Driver
{
Status = "XXXXXX",
Color = "XXXXXX",
@@ -270,25 +271,25 @@ namespace SabreTools.Serialization.Test.CrossModel
Incomplete = "XXXXXX",
};
var feature = new Models.Listxml.Feature
var feature = new Data.Models.Listxml.Feature
{
Type = "XXXXXX",
Status = "XXXXXX",
Overall = "XXXXXX",
};
var instance = new Models.Listxml.Instance
var instance = new Data.Models.Listxml.Instance
{
Name = "XXXXXX",
BriefName = "XXXXXX",
};
var extension = new Models.Listxml.Extension
var extension = new Data.Models.Listxml.Extension
{
Name = "XXXXXX",
};
var device = new Models.Listxml.Device
var device = new Data.Models.Listxml.Device
{
Type = "XXXXXX",
Tag = "XXXXXX",
@@ -299,20 +300,20 @@ namespace SabreTools.Serialization.Test.CrossModel
Extension = [extension],
};
var slotOption = new Models.Listxml.SlotOption
var slotOption = new Data.Models.Listxml.SlotOption
{
Name = "XXXXXX",
DevName = "XXXXXX",
Default = "XXXXXX",
};
var slot = new Models.Listxml.Slot
var slot = new Data.Models.Listxml.Slot
{
Name = "XXXXXX",
SlotOption = [slotOption],
};
var softwarelist = new Models.Listxml.SoftwareList
var softwarelist = new Data.Models.Listxml.SoftwareList
{
Tag = "XXXXXX",
Name = "XXXXXX",
@@ -320,16 +321,16 @@ namespace SabreTools.Serialization.Test.CrossModel
Filter = "XXXXXX",
};
var ramoption = new Models.Listxml.RamOption
var ramoption = new Data.Models.Listxml.RamOption
{
Name = "XXXXXX",
Default = "XXXXXX",
Content = "XXXXXX",
};
Models.Listxml.GameBase gameBase = game
? new Models.Listxml.Game()
: new Models.Listxml.Machine();
Data.Models.Listxml.GameBase gameBase = game
? new Data.Models.Listxml.Game()
: new Data.Models.Listxml.Machine();
gameBase.Name = "XXXXXX";
gameBase.SourceFile = "XXXXXX";
gameBase.IsBios = "XXXXXX";
@@ -364,7 +365,7 @@ namespace SabreTools.Serialization.Test.CrossModel
gameBase.SoftwareList = [softwarelist];
gameBase.RamOption = [ramoption];
return new Models.Listxml.Mame
return new Data.Models.Listxml.Mame
{
Build = "XXXXXX",
Debug = "XXXXXX",
@@ -376,7 +377,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Models.Listxml.GameBase? gb)
private static void Validate(Data.Models.Listxml.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
@@ -470,7 +471,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Models.Listxml.BiosSet? biosset)
private static void Validate(Data.Models.Listxml.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
@@ -481,7 +482,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.Listxml.Rom? rom)
private static void Validate(Data.Models.Listxml.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
@@ -501,7 +502,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.Listxml.Disk? disk)
private static void Validate(Data.Models.Listxml.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -518,7 +519,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DeviceRef
/// </summary>
private static void Validate(Models.Listxml.DeviceRef? deviceref)
private static void Validate(Data.Models.Listxml.DeviceRef? deviceref)
{
Assert.NotNull(deviceref);
Assert.Equal("XXXXXX", deviceref.Name);
@@ -527,7 +528,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Models.Listxml.Sample? sample)
private static void Validate(Data.Models.Listxml.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
@@ -536,7 +537,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Chip
/// </summary>
private static void Validate(Models.Listxml.Chip? chip)
private static void Validate(Data.Models.Listxml.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal("XXXXXX", chip.Name);
@@ -549,7 +550,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Display
/// </summary>
private static void Validate(Models.Listxml.Display? display)
private static void Validate(Data.Models.Listxml.Display? display)
{
Assert.NotNull(display);
Assert.Equal("XXXXXX", display.Tag);
@@ -571,7 +572,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Video
/// </summary>
private static void Validate(Models.Listxml.Video? video)
private static void Validate(Data.Models.Listxml.Video? video)
{
Assert.NotNull(video);
Assert.Equal("XXXXXX", video.Screen);
@@ -586,7 +587,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Sound
/// </summary>
private static void Validate(Models.Listxml.Sound? sound)
private static void Validate(Data.Models.Listxml.Sound? sound)
{
Assert.NotNull(sound);
Assert.Equal("XXXXXX", sound.Channels);
@@ -595,7 +596,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Input
/// </summary>
private static void Validate(Models.Listxml.Input? input)
private static void Validate(Data.Models.Listxml.Input? input)
{
Assert.NotNull(input);
Assert.Equal("XXXXXX", input.Service);
@@ -613,7 +614,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Control
/// </summary>
private static void Validate(Models.Listxml.Control? control)
private static void Validate(Data.Models.Listxml.Control? control)
{
Assert.NotNull(control);
Assert.Equal("XXXXXX", control.Type);
@@ -633,7 +634,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Models.Listxml.DipSwitch? dipswitch)
private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
@@ -653,7 +654,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Condition
/// </summary>
private static void Validate(Models.Listxml.Condition? condition)
private static void Validate(Data.Models.Listxml.Condition? condition)
{
Assert.NotNull(condition);
Assert.Equal("XXXXXX", condition.Tag);
@@ -665,7 +666,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipLocation
/// </summary>
private static void Validate(Models.Listxml.DipLocation? diplocation)
private static void Validate(Data.Models.Listxml.DipLocation? diplocation)
{
Assert.NotNull(diplocation);
Assert.Equal("XXXXXX", diplocation.Name);
@@ -676,7 +677,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipValue
/// </summary>
private static void Validate(Models.Listxml.DipValue? dipvalue)
private static void Validate(Data.Models.Listxml.DipValue? dipvalue)
{
Assert.NotNull(dipvalue);
Assert.Equal("XXXXXX", dipvalue.Name);
@@ -688,7 +689,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Configuration
/// </summary>
private static void Validate(Models.Listxml.Configuration? configuration)
private static void Validate(Data.Models.Listxml.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.Name);
@@ -708,7 +709,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a ConfLocation
/// </summary>
private static void Validate(Models.Listxml.ConfLocation? conflocation)
private static void Validate(Data.Models.Listxml.ConfLocation? conflocation)
{
Assert.NotNull(conflocation);
Assert.Equal("XXXXXX", conflocation.Name);
@@ -719,7 +720,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a ConfSetting
/// </summary>
private static void Validate(Models.Listxml.ConfSetting? confsetting)
private static void Validate(Data.Models.Listxml.ConfSetting? confsetting)
{
Assert.NotNull(confsetting);
Assert.Equal("XXXXXX", confsetting.Name);
@@ -731,7 +732,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Port
/// </summary>
private static void Validate(Models.Listxml.Port? port)
private static void Validate(Data.Models.Listxml.Port? port)
{
Assert.NotNull(port);
Assert.Equal("XXXXXX", port.Tag);
@@ -744,7 +745,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Analog
/// </summary>
private static void Validate(Models.Listxml.Analog? analog)
private static void Validate(Data.Models.Listxml.Analog? analog)
{
Assert.NotNull(analog);
Assert.Equal("XXXXXX", analog.Mask);
@@ -753,7 +754,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Adjuster
/// </summary>
private static void Validate(Models.Listxml.Adjuster? adjuster)
private static void Validate(Data.Models.Listxml.Adjuster? adjuster)
{
Assert.NotNull(adjuster);
Assert.Equal("XXXXXX", adjuster.Name);
@@ -764,7 +765,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Models.Listxml.Driver? driver)
private static void Validate(Data.Models.Listxml.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);
@@ -783,7 +784,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Feature
/// </summary>
private static void Validate(Models.Listxml.Feature? feature)
private static void Validate(Data.Models.Listxml.Feature? feature)
{
Assert.NotNull(feature);
Assert.Equal("XXXXXX", feature.Type);
@@ -794,7 +795,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Device
/// </summary>
private static void Validate(Models.Listxml.Device? device)
private static void Validate(Data.Models.Listxml.Device? device)
{
Assert.NotNull(device);
Assert.Equal("XXXXXX", device.Type);
@@ -812,7 +813,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Instance
/// </summary>
private static void Validate(Models.Listxml.Instance? instance)
private static void Validate(Data.Models.Listxml.Instance? instance)
{
Assert.NotNull(instance);
Assert.Equal("XXXXXX", instance.Name);
@@ -822,7 +823,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Extension
/// </summary>
private static void Validate(Models.Listxml.Extension? extension)
private static void Validate(Data.Models.Listxml.Extension? extension)
{
Assert.NotNull(extension);
Assert.Equal("XXXXXX", extension.Name);
@@ -831,7 +832,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Slot
/// </summary>
private static void Validate(Models.Listxml.Slot? slot)
private static void Validate(Data.Models.Listxml.Slot? slot)
{
Assert.NotNull(slot);
Assert.Equal("XXXXXX", slot.Name);
@@ -844,7 +845,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SlotOption
/// </summary>
private static void Validate(Models.Listxml.SlotOption? slotoption)
private static void Validate(Data.Models.Listxml.SlotOption? slotoption)
{
Assert.NotNull(slotoption);
Assert.Equal("XXXXXX", slotoption.Name);
@@ -855,7 +856,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SoftwareList
/// </summary>
private static void Validate(Models.Listxml.SoftwareList? softwarelist)
private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist)
{
Assert.NotNull(softwarelist);
Assert.Equal("XXXXXX", softwarelist.Tag);
@@ -867,7 +868,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a RamOption
/// </summary>
private static void Validate(Models.Listxml.RamOption? ramoption)
private static void Validate(Data.Models.Listxml.RamOption? ramoption)
{
Assert.NotNull(ramoption);
Assert.Equal("XXXXXX", ramoption.Name);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripGameTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Logiqx();
var serializer = new Logiqx();
// Build the data
Models.Logiqx.Datafile df = Build(game: true);
Data.Models.Logiqx.Datafile df = Build(game: true);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(df);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(df);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Logiqx.Datafile? newDf = serializer.Deserialize(metadata, game: true);
Data.Models.Logiqx.Datafile? newDf = serializer.Deserialize(metadata, game: true);
// Validate the data
Assert.NotNull(newDf);
@@ -28,10 +29,11 @@ namespace SabreTools.Serialization.Test.CrossModel
Validate(newDf.Header);
Assert.NotNull(newDf.Game);
var newGame = Assert.Single(newDf.Game);
Validate(newGame);
Assert.Equal(2, newDf.Game.Length);
Validate(newDf.Game[0], nested: false);
Validate(newDf.Game[1], nested: true);
// TODO: Unsupported
// TODO: Unsupported for round-trip
Assert.Null(newDf.Dir);
}
@@ -39,17 +41,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripMachineTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.Logiqx();
var serializer = new Logiqx();
// Build the data
Models.Logiqx.Datafile df = Build(game: false);
Data.Models.Logiqx.Datafile df = Build(game: false);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(df);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(df);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Logiqx.Datafile? newDf = serializer.Deserialize(metadata, game: false);
Data.Models.Logiqx.Datafile? newDf = serializer.Deserialize(metadata, game: false);
// Validate the data
Assert.NotNull(newDf);
@@ -59,19 +61,20 @@ namespace SabreTools.Serialization.Test.CrossModel
Validate(newDf.Header);
Assert.NotNull(newDf.Game);
var newGame = Assert.Single(newDf.Game);
Validate(newGame);
Assert.Equal(2, newDf.Game.Length);
Validate(newDf.Game[0], nested: false);
Validate(newDf.Game[1], nested: true);
// TODO: Unsupported
// TODO: Unsupported for round-trip
Assert.Null(newDf.Dir);
}
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Logiqx.Datafile Build(bool game)
private static Data.Models.Logiqx.Datafile Build(bool game)
{
var clrmamepro = new Models.Logiqx.ClrMamePro
var clrmamepro = new Data.Models.Logiqx.ClrMamePro
{
Header = "XXXXXX",
ForceMerging = "XXXXXX",
@@ -79,7 +82,7 @@ namespace SabreTools.Serialization.Test.CrossModel
ForcePacking = "XXXXXX",
};
var romcenter = new Models.Logiqx.RomCenter
var romcenter = new Data.Models.Logiqx.RomCenter
{
Plugin = "XXXXXX",
RomMode = "XXXXXX",
@@ -90,7 +93,7 @@ namespace SabreTools.Serialization.Test.CrossModel
LockSampleMode = "XXXXXX",
};
var header = new Models.Logiqx.Header
var header = new Data.Models.Logiqx.Header
{
Id = "XXXXXX",
Name = "XXXXXX",
@@ -109,7 +112,7 @@ namespace SabreTools.Serialization.Test.CrossModel
RomCenter = romcenter,
};
var trurip = new Models.Logiqx.Trurip
var trurip = new Data.Models.Logiqx.Trurip
{
TitleID = "XXXXXX",
Publisher = "XXXXXX",
@@ -127,7 +130,7 @@ namespace SabreTools.Serialization.Test.CrossModel
RelatedTo = "XXXXXX",
};
var release = new Models.Logiqx.Release
var release = new Data.Models.Logiqx.Release
{
Name = "XXXXXX",
Region = "XXXXXX",
@@ -136,19 +139,23 @@ namespace SabreTools.Serialization.Test.CrossModel
Default = "XXXXXX",
};
var biosset = new Models.Logiqx.BiosSet
var biosset = new Data.Models.Logiqx.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Models.Logiqx.Rom
var rom = new Data.Models.Logiqx.Rom
{
Name = "XXXXXX",
Size = "XXXXXX",
CRC = "XXXXXX",
MD2 = "XXXXXX",
MD4 = "XXXXXX",
MD5 = "XXXXXX",
RIPEMD128 = "XXXXXX",
RIPEMD160 = "XXXXXX",
SHA1 = "XXXXXX",
SHA256 = "XXXXXX",
SHA384 = "XXXXXX",
@@ -165,7 +172,7 @@ namespace SabreTools.Serialization.Test.CrossModel
MIA = "XXXXXX",
};
var disk = new Models.Logiqx.Disk
var disk = new Data.Models.Logiqx.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -175,7 +182,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Region = "XXXXXX",
};
var media = new Models.Logiqx.Media
var media = new Data.Models.Logiqx.Media
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -184,22 +191,22 @@ namespace SabreTools.Serialization.Test.CrossModel
SpamSum = "XXXXXX",
};
var deviceRef = new Models.Logiqx.DeviceRef
var deviceRef = new Data.Models.Logiqx.DeviceRef
{
Name = "XXXXXX",
};
var sample = new Models.Logiqx.Sample
var sample = new Data.Models.Logiqx.Sample
{
Name = "XXXXXX",
};
var archive = new Models.Logiqx.Archive
var archive = new Data.Models.Logiqx.Archive
{
Name = "XXXXXX",
};
var driver = new Models.Logiqx.Driver
var driver = new Data.Models.Logiqx.Driver
{
Status = "XXXXXX",
Emulation = "XXXXXX",
@@ -211,7 +218,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Incomplete = "XXXXXX",
};
var softwarelist = new Models.Logiqx.SoftwareList
var softwarelist = new Data.Models.Logiqx.SoftwareList
{
Tag = "XXXXXX",
Name = "XXXXXX",
@@ -219,9 +226,9 @@ namespace SabreTools.Serialization.Test.CrossModel
Filter = "XXXXXX",
};
Models.Logiqx.GameBase gameBase = game
? new Models.Logiqx.Game()
: new Models.Logiqx.Machine();
Data.Models.Logiqx.GameBase gameBase = game
? new Data.Models.Logiqx.Game()
: new Data.Models.Logiqx.Machine();
gameBase.Name = "XXXXXX";
gameBase.SourceFile = "XXXXXX";
gameBase.IsBios = "XXXXXX";
@@ -253,21 +260,33 @@ namespace SabreTools.Serialization.Test.CrossModel
gameBase.Driver = driver;
gameBase.SoftwareList = [softwarelist];
return new Models.Logiqx.Datafile
var subdir = new Data.Models.Logiqx.Dir
{
Name = "XXXXXX",
Game = [gameBase],
};
var dir = new Data.Models.Logiqx.Dir
{
Name = "XXXXXX",
Subdir = [subdir],
};
return new Data.Models.Logiqx.Datafile
{
Build = "XXXXXX",
Debug = "XXXXXX",
SchemaLocation = "XXXXXX",
Header = header,
Game = [gameBase],
// Dir = [dir], // TODO: Unsupported
Dir = [dir],
};
}
/// <summary>
/// Validate a Header
/// </summary>
private static void Validate(Models.Logiqx.Header? header)
private static void Validate(Data.Models.Logiqx.Header? header)
{
Assert.NotNull(header);
Assert.Equal("XXXXXX", header.Id);
@@ -290,7 +309,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a ClrMamePro
/// </summary>
private static void Validate(Models.Logiqx.ClrMamePro? cmp)
private static void Validate(Data.Models.Logiqx.ClrMamePro? cmp)
{
Assert.NotNull(cmp);
Assert.Equal("XXXXXX", cmp.Header);
@@ -302,7 +321,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a RomCenter
/// </summary>
private static void Validate(Models.Logiqx.RomCenter? rc)
private static void Validate(Data.Models.Logiqx.RomCenter? rc)
{
Assert.NotNull(rc);
Assert.Equal("XXXXXX", rc.Plugin);
@@ -317,10 +336,13 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Models.Logiqx.GameBase? gb)
private static void Validate(Data.Models.Logiqx.GameBase? gb, bool nested)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
if (nested)
Assert.Equal("XXXXXX\\XXXXXX\\XXXXXX", gb.Name);
else
Assert.Equal("XXXXXX", gb.Name);
Assert.Equal("XXXXXX", gb.SourceFile);
Assert.Equal("XXXXXX", gb.IsBios);
Assert.Equal("XXXXXX", gb.IsDevice);
@@ -391,7 +413,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Trurip
/// </summary>
private static void Validate(Models.Logiqx.Trurip? trurip)
private static void Validate(Data.Models.Logiqx.Trurip? trurip)
{
Assert.NotNull(trurip);
Assert.Equal("XXXXXX", trurip.TitleID);
@@ -413,7 +435,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Release
/// </summary>
private static void Validate(Models.Logiqx.Release? release)
private static void Validate(Data.Models.Logiqx.Release? release)
{
Assert.NotNull(release);
Assert.Equal("XXXXXX", release.Name);
@@ -426,7 +448,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Models.Logiqx.BiosSet? biosset)
private static void Validate(Data.Models.Logiqx.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
@@ -437,13 +459,17 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.Logiqx.Rom? rom)
private static void Validate(Data.Models.Logiqx.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.MD2);
Assert.Equal("XXXXXX", rom.MD4);
Assert.Equal("XXXXXX", rom.MD5);
Assert.Equal("XXXXXX", rom.RIPEMD128);
Assert.Equal("XXXXXX", rom.RIPEMD160);
Assert.Equal("XXXXXX", rom.SHA1);
Assert.Equal("XXXXXX", rom.SHA256);
Assert.Equal("XXXXXX", rom.SHA384);
@@ -463,7 +489,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.Logiqx.Disk? disk)
private static void Validate(Data.Models.Logiqx.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -477,7 +503,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Media
/// </summary>
private static void Validate(Models.Logiqx.Media? media)
private static void Validate(Data.Models.Logiqx.Media? media)
{
Assert.NotNull(media);
Assert.Equal("XXXXXX", media.Name);
@@ -490,7 +516,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DeviceRef
/// </summary>
private static void Validate(Models.Logiqx.DeviceRef? deviceref)
private static void Validate(Data.Models.Logiqx.DeviceRef? deviceref)
{
Assert.NotNull(deviceref);
Assert.Equal("XXXXXX", deviceref.Name);
@@ -499,7 +525,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Models.Logiqx.Sample? sample)
private static void Validate(Data.Models.Logiqx.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
@@ -508,7 +534,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Archive
/// </summary>
private static void Validate(Models.Logiqx.Archive? archive)
private static void Validate(Data.Models.Logiqx.Archive? archive)
{
Assert.NotNull(archive);
Assert.Equal("XXXXXX", archive.Name);
@@ -517,7 +543,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Models.Logiqx.Driver? driver)
private static void Validate(Data.Models.Logiqx.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);
@@ -533,7 +559,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SoftwareList
/// </summary>
private static void Validate(Models.Logiqx.SoftwareList? softwarelist)
private static void Validate(Data.Models.Logiqx.SoftwareList? softwarelist)
{
Assert.NotNull(softwarelist);
Assert.Equal("XXXXXX", softwarelist.Tag);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripGameTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.M1();
var serializer = new M1();
// Build the data
Models.Listxml.M1 m1 = Build(game: true);
Data.Models.Listxml.M1 m1 = Build(game: true);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(m1);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(m1);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Listxml.M1? newM1 = serializer.Deserialize(metadata);
Data.Models.Listxml.M1? newM1 = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newM1);
@@ -33,17 +34,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripMachineTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.M1();
var serializer = new M1();
// Build the data
Models.Listxml.M1 m1 = Build(game: false);
Data.Models.Listxml.M1 m1 = Build(game: false);
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(m1);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(m1);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Listxml.M1? newM1 = serializer.Deserialize(metadata);
Data.Models.Listxml.M1? newM1 = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newM1);
@@ -57,16 +58,16 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Listxml.M1 Build(bool game)
private static Data.Models.Listxml.M1 Build(bool game)
{
var biosset = new Models.Listxml.BiosSet
var biosset = new Data.Models.Listxml.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Models.Listxml.Rom
var rom = new Data.Models.Listxml.Rom
{
Name = "XXXXXX",
Bios = "XXXXXX",
@@ -82,7 +83,7 @@ namespace SabreTools.Serialization.Test.CrossModel
SoundOnly = "XXXXXX",
};
var disk = new Models.Listxml.Disk
var disk = new Data.Models.Listxml.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -95,17 +96,17 @@ namespace SabreTools.Serialization.Test.CrossModel
Optional = "XXXXXX",
};
var deviceref = new Models.Listxml.DeviceRef
var deviceref = new Data.Models.Listxml.DeviceRef
{
Name = "XXXXXX",
};
var sample = new Models.Listxml.Sample
var sample = new Data.Models.Listxml.Sample
{
Name = "XXXXXX",
};
var chip = new Models.Listxml.Chip
var chip = new Data.Models.Listxml.Chip
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -114,7 +115,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Clock = "XXXXXX",
};
var display = new Models.Listxml.Display
var display = new Data.Models.Listxml.Display
{
Tag = "XXXXXX",
Type = "XXXXXX",
@@ -132,7 +133,7 @@ namespace SabreTools.Serialization.Test.CrossModel
VBStart = "XXXXXX",
};
var video = new Models.Listxml.Video
var video = new Data.Models.Listxml.Video
{
Screen = "XXXXXX",
Orientation = "XXXXXX",
@@ -143,12 +144,12 @@ namespace SabreTools.Serialization.Test.CrossModel
Refresh = "XXXXXX",
};
var sound = new Models.Listxml.Sound
var sound = new Data.Models.Listxml.Sound
{
Channels = "XXXXXX",
};
var control = new Models.Listxml.Control
var control = new Data.Models.Listxml.Control
{
Type = "XXXXXX",
Player = "XXXXXX",
@@ -164,7 +165,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Ways3 = "XXXXXX",
};
var input = new Models.Listxml.Input
var input = new Data.Models.Listxml.Input
{
Service = "XXXXXX",
Tilt = "XXXXXX",
@@ -175,7 +176,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Control = [control],
};
var condition = new Models.Listxml.Condition
var condition = new Data.Models.Listxml.Condition
{
Tag = "XXXXXX",
Mask = "XXXXXX",
@@ -183,14 +184,14 @@ namespace SabreTools.Serialization.Test.CrossModel
Value = "XXXXXX",
};
var diplocation = new Models.Listxml.DipLocation
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var dipvalue = new Models.Listxml.DipValue
var dipvalue = new Data.Models.Listxml.DipValue
{
Name = "XXXXXX",
Value = "XXXXXX",
@@ -198,7 +199,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Condition = condition,
};
var dipswitch = new Models.Listxml.DipSwitch
var dipswitch = new Data.Models.Listxml.DipSwitch
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -208,14 +209,14 @@ namespace SabreTools.Serialization.Test.CrossModel
DipValue = [dipvalue],
};
var conflocation = new Models.Listxml.ConfLocation
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var confsetting = new Models.Listxml.ConfSetting
var confsetting = new Data.Models.Listxml.ConfSetting
{
Name = "XXXXXX",
Value = "XXXXXX",
@@ -223,7 +224,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Condition = condition,
};
var configuration = new Models.Listxml.Configuration
var configuration = new Data.Models.Listxml.Configuration
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -233,25 +234,25 @@ namespace SabreTools.Serialization.Test.CrossModel
ConfSetting = [confsetting],
};
var analog = new Models.Listxml.Analog
var analog = new Data.Models.Listxml.Analog
{
Mask = "XXXXXX",
};
var port = new Models.Listxml.Port
var port = new Data.Models.Listxml.Port
{
Tag = "XXXXXX",
Analog = [analog],
};
var adjuster = new Models.Listxml.Adjuster
var adjuster = new Data.Models.Listxml.Adjuster
{
Name = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var driver = new Models.Listxml.Driver
var driver = new Data.Models.Listxml.Driver
{
Status = "XXXXXX",
Color = "XXXXXX",
@@ -266,25 +267,25 @@ namespace SabreTools.Serialization.Test.CrossModel
Incomplete = "XXXXXX",
};
var feature = new Models.Listxml.Feature
var feature = new Data.Models.Listxml.Feature
{
Type = "XXXXXX",
Status = "XXXXXX",
Overall = "XXXXXX",
};
var instance = new Models.Listxml.Instance
var instance = new Data.Models.Listxml.Instance
{
Name = "XXXXXX",
BriefName = "XXXXXX",
};
var extension = new Models.Listxml.Extension
var extension = new Data.Models.Listxml.Extension
{
Name = "XXXXXX",
};
var device = new Models.Listxml.Device
var device = new Data.Models.Listxml.Device
{
Type = "XXXXXX",
Tag = "XXXXXX",
@@ -295,20 +296,20 @@ namespace SabreTools.Serialization.Test.CrossModel
Extension = [extension],
};
var slotOption = new Models.Listxml.SlotOption
var slotOption = new Data.Models.Listxml.SlotOption
{
Name = "XXXXXX",
DevName = "XXXXXX",
Default = "XXXXXX",
};
var slot = new Models.Listxml.Slot
var slot = new Data.Models.Listxml.Slot
{
Name = "XXXXXX",
SlotOption = [slotOption],
};
var softwarelist = new Models.Listxml.SoftwareList
var softwarelist = new Data.Models.Listxml.SoftwareList
{
Tag = "XXXXXX",
Name = "XXXXXX",
@@ -316,16 +317,16 @@ namespace SabreTools.Serialization.Test.CrossModel
Filter = "XXXXXX",
};
var ramoption = new Models.Listxml.RamOption
var ramoption = new Data.Models.Listxml.RamOption
{
Name = "XXXXXX",
Default = "XXXXXX",
Content = "XXXXXX",
};
Models.Listxml.GameBase gameBase = game
? new Models.Listxml.Game()
: new Models.Listxml.Machine();
Data.Models.Listxml.GameBase gameBase = game
? new Data.Models.Listxml.Game()
: new Data.Models.Listxml.Machine();
gameBase.Name = "XXXXXX";
gameBase.SourceFile = "XXXXXX";
gameBase.IsBios = "XXXXXX";
@@ -360,7 +361,7 @@ namespace SabreTools.Serialization.Test.CrossModel
gameBase.SoftwareList = [softwarelist];
gameBase.RamOption = [ramoption];
return new Models.Listxml.M1
return new Data.Models.Listxml.M1
{
Version = "XXXXXX",
Game = [gameBase],
@@ -370,7 +371,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Models.Listxml.GameBase? gb)
private static void Validate(Data.Models.Listxml.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
@@ -464,7 +465,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Models.Listxml.BiosSet? biosset)
private static void Validate(Data.Models.Listxml.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
@@ -475,7 +476,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.Listxml.Rom? rom)
private static void Validate(Data.Models.Listxml.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
@@ -495,7 +496,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.Listxml.Disk? disk)
private static void Validate(Data.Models.Listxml.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -512,7 +513,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DeviceRef
/// </summary>
private static void Validate(Models.Listxml.DeviceRef? deviceref)
private static void Validate(Data.Models.Listxml.DeviceRef? deviceref)
{
Assert.NotNull(deviceref);
Assert.Equal("XXXXXX", deviceref.Name);
@@ -521,7 +522,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Models.Listxml.Sample? sample)
private static void Validate(Data.Models.Listxml.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
@@ -530,7 +531,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Chip
/// </summary>
private static void Validate(Models.Listxml.Chip? chip)
private static void Validate(Data.Models.Listxml.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal("XXXXXX", chip.Name);
@@ -543,7 +544,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Display
/// </summary>
private static void Validate(Models.Listxml.Display? display)
private static void Validate(Data.Models.Listxml.Display? display)
{
Assert.NotNull(display);
Assert.Equal("XXXXXX", display.Tag);
@@ -565,7 +566,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Video
/// </summary>
private static void Validate(Models.Listxml.Video? video)
private static void Validate(Data.Models.Listxml.Video? video)
{
Assert.NotNull(video);
Assert.Equal("XXXXXX", video.Screen);
@@ -580,7 +581,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Sound
/// </summary>
private static void Validate(Models.Listxml.Sound? sound)
private static void Validate(Data.Models.Listxml.Sound? sound)
{
Assert.NotNull(sound);
Assert.Equal("XXXXXX", sound.Channels);
@@ -589,7 +590,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Input
/// </summary>
private static void Validate(Models.Listxml.Input? input)
private static void Validate(Data.Models.Listxml.Input? input)
{
Assert.NotNull(input);
Assert.Equal("XXXXXX", input.Service);
@@ -607,7 +608,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Control
/// </summary>
private static void Validate(Models.Listxml.Control? control)
private static void Validate(Data.Models.Listxml.Control? control)
{
Assert.NotNull(control);
Assert.Equal("XXXXXX", control.Type);
@@ -627,7 +628,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Models.Listxml.DipSwitch? dipswitch)
private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
@@ -647,7 +648,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Condition
/// </summary>
private static void Validate(Models.Listxml.Condition? condition)
private static void Validate(Data.Models.Listxml.Condition? condition)
{
Assert.NotNull(condition);
Assert.Equal("XXXXXX", condition.Tag);
@@ -659,7 +660,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipLocation
/// </summary>
private static void Validate(Models.Listxml.DipLocation? diplocation)
private static void Validate(Data.Models.Listxml.DipLocation? diplocation)
{
Assert.NotNull(diplocation);
Assert.Equal("XXXXXX", diplocation.Name);
@@ -670,7 +671,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipValue
/// </summary>
private static void Validate(Models.Listxml.DipValue? dipvalue)
private static void Validate(Data.Models.Listxml.DipValue? dipvalue)
{
Assert.NotNull(dipvalue);
Assert.Equal("XXXXXX", dipvalue.Name);
@@ -682,7 +683,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Configuration
/// </summary>
private static void Validate(Models.Listxml.Configuration? configuration)
private static void Validate(Data.Models.Listxml.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.Name);
@@ -702,7 +703,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a ConfLocation
/// </summary>
private static void Validate(Models.Listxml.ConfLocation? conflocation)
private static void Validate(Data.Models.Listxml.ConfLocation? conflocation)
{
Assert.NotNull(conflocation);
Assert.Equal("XXXXXX", conflocation.Name);
@@ -713,7 +714,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a ConfSetting
/// </summary>
private static void Validate(Models.Listxml.ConfSetting? confsetting)
private static void Validate(Data.Models.Listxml.ConfSetting? confsetting)
{
Assert.NotNull(confsetting);
Assert.Equal("XXXXXX", confsetting.Name);
@@ -725,7 +726,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Port
/// </summary>
private static void Validate(Models.Listxml.Port? port)
private static void Validate(Data.Models.Listxml.Port? port)
{
Assert.NotNull(port);
Assert.Equal("XXXXXX", port.Tag);
@@ -738,7 +739,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Analog
/// </summary>
private static void Validate(Models.Listxml.Analog? analog)
private static void Validate(Data.Models.Listxml.Analog? analog)
{
Assert.NotNull(analog);
Assert.Equal("XXXXXX", analog.Mask);
@@ -747,7 +748,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Adjuster
/// </summary>
private static void Validate(Models.Listxml.Adjuster? adjuster)
private static void Validate(Data.Models.Listxml.Adjuster? adjuster)
{
Assert.NotNull(adjuster);
Assert.Equal("XXXXXX", adjuster.Name);
@@ -758,7 +759,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Models.Listxml.Driver? driver)
private static void Validate(Data.Models.Listxml.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);
@@ -777,7 +778,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Feature
/// </summary>
private static void Validate(Models.Listxml.Feature? feature)
private static void Validate(Data.Models.Listxml.Feature? feature)
{
Assert.NotNull(feature);
Assert.Equal("XXXXXX", feature.Type);
@@ -788,7 +789,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Device
/// </summary>
private static void Validate(Models.Listxml.Device? device)
private static void Validate(Data.Models.Listxml.Device? device)
{
Assert.NotNull(device);
Assert.Equal("XXXXXX", device.Type);
@@ -806,7 +807,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Instance
/// </summary>
private static void Validate(Models.Listxml.Instance? instance)
private static void Validate(Data.Models.Listxml.Instance? instance)
{
Assert.NotNull(instance);
Assert.Equal("XXXXXX", instance.Name);
@@ -816,7 +817,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Extension
/// </summary>
private static void Validate(Models.Listxml.Extension? extension)
private static void Validate(Data.Models.Listxml.Extension? extension)
{
Assert.NotNull(extension);
Assert.Equal("XXXXXX", extension.Name);
@@ -825,7 +826,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Slot
/// </summary>
private static void Validate(Models.Listxml.Slot? slot)
private static void Validate(Data.Models.Listxml.Slot? slot)
{
Assert.NotNull(slot);
Assert.Equal("XXXXXX", slot.Name);
@@ -838,7 +839,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SlotOption
/// </summary>
private static void Validate(Models.Listxml.SlotOption? slotoption)
private static void Validate(Data.Models.Listxml.SlotOption? slotoption)
{
Assert.NotNull(slotoption);
Assert.Equal("XXXXXX", slotoption.Name);
@@ -849,7 +850,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SoftwareList
/// </summary>
private static void Validate(Models.Listxml.SoftwareList? softwarelist)
private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist)
{
Assert.NotNull(softwarelist);
Assert.Equal("XXXXXX", softwarelist.Tag);
@@ -861,7 +862,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a RamOption
/// </summary>
private static void Validate(Models.Listxml.RamOption? ramoption)
private static void Validate(Data.Models.Listxml.RamOption? ramoption)
{
Assert.NotNull(ramoption);
Assert.Equal("XXXXXX", ramoption.Name);

View File

@@ -0,0 +1,873 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
{
public class MessTests
{
[Fact]
public void RoundTripGameTest()
{
// Get the cross-model serializer
var serializer = new Mess();
// Build the data
Data.Models.Listxml.Mess m1 = Build(game: true);
// Serialize to generic model
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(m1);
Assert.NotNull(metadata);
// Serialize back to original model
Data.Models.Listxml.Mess? newMess = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMess);
Assert.Equal("XXXXXX", newMess.Version);
Assert.NotNull(newMess.Game);
var newGame = Assert.Single(newMess.Game);
Validate(newGame);
}
[Fact]
public void RoundTripMachineTest()
{
// Get the cross-model serializer
var serializer = new Mess();
// Build the data
Data.Models.Listxml.Mess m1 = Build(game: false);
// Serialize to generic model
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(m1);
Assert.NotNull(metadata);
// Serialize back to original model
Data.Models.Listxml.Mess? newMess = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMess);
Assert.Equal("XXXXXX", newMess.Version);
Assert.NotNull(newMess.Game);
var newGame = Assert.Single(newMess.Game);
Validate(newGame);
}
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Data.Models.Listxml.Mess Build(bool game)
{
var biosset = new Data.Models.Listxml.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Data.Models.Listxml.Rom
{
Name = "XXXXXX",
Bios = "XXXXXX",
Size = "XXXXXX",
CRC = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Offset = "XXXXXX",
Status = "XXXXXX",
Optional = "XXXXXX",
Dispose = "XXXXXX",
SoundOnly = "XXXXXX",
};
var disk = new Data.Models.Listxml.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Index = "XXXXXX",
Writable = "XXXXXX",
Status = "XXXXXX",
Optional = "XXXXXX",
};
var deviceref = new Data.Models.Listxml.DeviceRef
{
Name = "XXXXXX",
};
var sample = new Data.Models.Listxml.Sample
{
Name = "XXXXXX",
};
var chip = new Data.Models.Listxml.Chip
{
Name = "XXXXXX",
Tag = "XXXXXX",
Type = "XXXXXX",
SoundOnly = "XXXXXX",
Clock = "XXXXXX",
};
var display = new Data.Models.Listxml.Display
{
Tag = "XXXXXX",
Type = "XXXXXX",
Rotate = "XXXXXX",
FlipX = "XXXXXX",
Width = "XXXXXX",
Height = "XXXXXX",
Refresh = "XXXXXX",
PixClock = "XXXXXX",
HTotal = "XXXXXX",
HBEnd = "XXXXXX",
HBStart = "XXXXXX",
VTotal = "XXXXXX",
VBEnd = "XXXXXX",
VBStart = "XXXXXX",
};
var video = new Data.Models.Listxml.Video
{
Screen = "XXXXXX",
Orientation = "XXXXXX",
Width = "XXXXXX",
Height = "XXXXXX",
AspectX = "XXXXXX",
AspectY = "XXXXXX",
Refresh = "XXXXXX",
};
var sound = new Data.Models.Listxml.Sound
{
Channels = "XXXXXX",
};
var control = new Data.Models.Listxml.Control
{
Type = "XXXXXX",
Player = "XXXXXX",
Buttons = "XXXXXX",
ReqButtons = "XXXXXX",
Minimum = "XXXXXX",
Maximum = "XXXXXX",
Sensitivity = "XXXXXX",
KeyDelta = "XXXXXX",
Reverse = "XXXXXX",
Ways = "XXXXXX",
Ways2 = "XXXXXX",
Ways3 = "XXXXXX",
};
var input = new Data.Models.Listxml.Input
{
Service = "XXXXXX",
Tilt = "XXXXXX",
Players = "XXXXXX",
//ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
Buttons = "XXXXXX",
Coins = "XXXXXX",
Control = [control],
};
var condition = new Data.Models.Listxml.Condition
{
Tag = "XXXXXX",
Mask = "XXXXXX",
Relation = "XXXXXX",
Value = "XXXXXX",
};
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var dipvalue = new Data.Models.Listxml.DipValue
{
Name = "XXXXXX",
Value = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var dipswitch = new Data.Models.Listxml.DipSwitch
{
Name = "XXXXXX",
Tag = "XXXXXX",
Mask = "XXXXXX",
Condition = condition,
DipLocation = [diplocation],
DipValue = [dipvalue],
};
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var confsetting = new Data.Models.Listxml.ConfSetting
{
Name = "XXXXXX",
Value = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var configuration = new Data.Models.Listxml.Configuration
{
Name = "XXXXXX",
Tag = "XXXXXX",
Mask = "XXXXXX",
Condition = condition,
ConfLocation = [conflocation],
ConfSetting = [confsetting],
};
var analog = new Data.Models.Listxml.Analog
{
Mask = "XXXXXX",
};
var port = new Data.Models.Listxml.Port
{
Tag = "XXXXXX",
Analog = [analog],
};
var adjuster = new Data.Models.Listxml.Adjuster
{
Name = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var driver = new Data.Models.Listxml.Driver
{
Status = "XXXXXX",
Color = "XXXXXX",
Sound = "XXXXXX",
PaletteSize = "XXXXXX",
Emulation = "XXXXXX",
Cocktail = "XXXXXX",
SaveState = "XXXXXX",
RequiresArtwork = "XXXXXX",
Unofficial = "XXXXXX",
NoSoundHardware = "XXXXXX",
Incomplete = "XXXXXX",
};
var feature = new Data.Models.Listxml.Feature
{
Type = "XXXXXX",
Status = "XXXXXX",
Overall = "XXXXXX",
};
var instance = new Data.Models.Listxml.Instance
{
Name = "XXXXXX",
BriefName = "XXXXXX",
};
var extension = new Data.Models.Listxml.Extension
{
Name = "XXXXXX",
};
var device = new Data.Models.Listxml.Device
{
Type = "XXXXXX",
Tag = "XXXXXX",
FixedImage = "XXXXXX",
Mandatory = "XXXXXX",
Interface = "XXXXXX",
Instance = instance,
Extension = [extension],
};
var slotOption = new Data.Models.Listxml.SlotOption
{
Name = "XXXXXX",
DevName = "XXXXXX",
Default = "XXXXXX",
};
var slot = new Data.Models.Listxml.Slot
{
Name = "XXXXXX",
SlotOption = [slotOption],
};
var softwarelist = new Data.Models.Listxml.SoftwareList
{
Tag = "XXXXXX",
Name = "XXXXXX",
Status = "XXXXXX",
Filter = "XXXXXX",
};
var ramoption = new Data.Models.Listxml.RamOption
{
Name = "XXXXXX",
Default = "XXXXXX",
Content = "XXXXXX",
};
Data.Models.Listxml.GameBase gameBase = game
? new Data.Models.Listxml.Game()
: new Data.Models.Listxml.Machine();
gameBase.Name = "XXXXXX";
gameBase.SourceFile = "XXXXXX";
gameBase.IsBios = "XXXXXX";
gameBase.IsDevice = "XXXXXX";
gameBase.IsMechanical = "XXXXXX";
gameBase.Runnable = "XXXXXX";
gameBase.CloneOf = "XXXXXX";
gameBase.RomOf = "XXXXXX";
gameBase.SampleOf = "XXXXXX";
gameBase.Description = "XXXXXX";
gameBase.Year = "XXXXXX";
gameBase.Manufacturer = "XXXXXX";
gameBase.History = "XXXXXX";
gameBase.BiosSet = [biosset];
gameBase.Rom = [rom];
gameBase.Disk = [disk];
gameBase.DeviceRef = [deviceref];
gameBase.Sample = [sample];
gameBase.Chip = [chip];
gameBase.Display = [display];
gameBase.Video = [video];
gameBase.Sound = sound;
gameBase.Input = input;
gameBase.DipSwitch = [dipswitch];
gameBase.Configuration = [configuration];
gameBase.Port = [port];
gameBase.Adjuster = [adjuster];
gameBase.Driver = driver;
gameBase.Feature = [feature];
gameBase.Device = [device];
gameBase.Slot = [slot];
gameBase.SoftwareList = [softwarelist];
gameBase.RamOption = [ramoption];
return new Data.Models.Listxml.Mess
{
Version = "XXXXXX",
Game = [gameBase],
};
}
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Data.Models.Listxml.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
Assert.Equal("XXXXXX", gb.SourceFile);
Assert.Equal("XXXXXX", gb.IsBios);
Assert.Equal("XXXXXX", gb.IsDevice);
Assert.Equal("XXXXXX", gb.IsMechanical);
Assert.Equal("XXXXXX", gb.Runnable);
Assert.Equal("XXXXXX", gb.CloneOf);
Assert.Equal("XXXXXX", gb.RomOf);
Assert.Equal("XXXXXX", gb.SampleOf);
Assert.Equal("XXXXXX", gb.Description);
Assert.Equal("XXXXXX", gb.Year);
Assert.Equal("XXXXXX", gb.Manufacturer);
Assert.Equal("XXXXXX", gb.History);
Assert.NotNull(gb.BiosSet);
var biosset = Assert.Single(gb.BiosSet);
Validate(biosset);
Assert.NotNull(gb.Rom);
var rom = Assert.Single(gb.Rom);
Validate(rom);
Assert.NotNull(gb.Disk);
var disk = Assert.Single(gb.Disk);
Validate(disk);
Assert.NotNull(gb.DeviceRef);
var deviceref = Assert.Single(gb.DeviceRef);
Validate(deviceref);
Assert.NotNull(gb.Sample);
var sample = Assert.Single(gb.Sample);
Validate(sample);
Assert.NotNull(gb.Chip);
var chip = Assert.Single(gb.Chip);
Validate(chip);
Assert.NotNull(gb.Display);
var display = Assert.Single(gb.Display);
Validate(display);
Assert.NotNull(gb.Video);
var video = Assert.Single(gb.Video);
Validate(video);
Validate(gb.Sound);
Validate(gb.Input);
Assert.NotNull(gb.DipSwitch);
var dipswitch = Assert.Single(gb.DipSwitch);
Validate(dipswitch);
Assert.NotNull(gb.Configuration);
var configuration = Assert.Single(gb.Configuration);
Validate(configuration);
Assert.NotNull(gb.Port);
var port = Assert.Single(gb.Port);
Validate(port);
Assert.NotNull(gb.Adjuster);
var adjuster = Assert.Single(gb.Adjuster);
Validate(adjuster);
Validate(gb.Driver);
Assert.NotNull(gb.Feature);
var feature = Assert.Single(gb.Feature);
Validate(feature);
Assert.NotNull(gb.Device);
var device = Assert.Single(gb.Device);
Validate(device);
Assert.NotNull(gb.Slot);
var slot = Assert.Single(gb.Slot);
Validate(slot);
Assert.NotNull(gb.SoftwareList);
var softwarelist = Assert.Single(gb.SoftwareList);
Validate(softwarelist);
Assert.NotNull(gb.RamOption);
var ramoption = Assert.Single(gb.RamOption);
Validate(ramoption);
}
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Data.Models.Listxml.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
Assert.Equal("XXXXXX", biosset.Description);
Assert.Equal("XXXXXX", biosset.Default);
}
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Data.Models.Listxml.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Bios);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.SHA1);
Assert.Equal("XXXXXX", rom.Merge);
Assert.Equal("XXXXXX", rom.Region);
Assert.Equal("XXXXXX", rom.Offset);
Assert.Equal("XXXXXX", rom.Status);
Assert.Equal("XXXXXX", rom.Optional);
Assert.Equal("XXXXXX", rom.Dispose);
Assert.Equal("XXXXXX", rom.SoundOnly);
}
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Data.Models.Listxml.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("XXXXXX", disk.Region);
Assert.Equal("XXXXXX", disk.Index);
Assert.Equal("XXXXXX", disk.Writable);
Assert.Equal("XXXXXX", disk.Status);
Assert.Equal("XXXXXX", disk.Optional);
}
/// <summary>
/// Validate a DeviceRef
/// </summary>
private static void Validate(Data.Models.Listxml.DeviceRef? deviceref)
{
Assert.NotNull(deviceref);
Assert.Equal("XXXXXX", deviceref.Name);
}
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Data.Models.Listxml.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
}
/// <summary>
/// Validate a Chip
/// </summary>
private static void Validate(Data.Models.Listxml.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal("XXXXXX", chip.Name);
Assert.Equal("XXXXXX", chip.Tag);
Assert.Equal("XXXXXX", chip.Type);
Assert.Equal("XXXXXX", chip.SoundOnly);
Assert.Equal("XXXXXX", chip.Clock);
}
/// <summary>
/// Validate a Display
/// </summary>
private static void Validate(Data.Models.Listxml.Display? display)
{
Assert.NotNull(display);
Assert.Equal("XXXXXX", display.Tag);
Assert.Equal("XXXXXX", display.Type);
Assert.Equal("XXXXXX", display.Rotate);
Assert.Equal("XXXXXX", display.FlipX);
Assert.Equal("XXXXXX", display.Width);
Assert.Equal("XXXXXX", display.Height);
Assert.Equal("XXXXXX", display.Refresh);
Assert.Equal("XXXXXX", display.PixClock);
Assert.Equal("XXXXXX", display.HTotal);
Assert.Equal("XXXXXX", display.HBEnd);
Assert.Equal("XXXXXX", display.HBStart);
Assert.Equal("XXXXXX", display.VTotal);
Assert.Equal("XXXXXX", display.VBEnd);
Assert.Equal("XXXXXX", display.VBStart);
}
/// <summary>
/// Validate a Video
/// </summary>
private static void Validate(Data.Models.Listxml.Video? video)
{
Assert.NotNull(video);
Assert.Equal("XXXXXX", video.Screen);
Assert.Equal("XXXXXX", video.Orientation);
Assert.Equal("XXXXXX", video.Width);
Assert.Equal("XXXXXX", video.Height);
Assert.Equal("XXXXXX", video.AspectX);
Assert.Equal("XXXXXX", video.AspectY);
Assert.Equal("XXXXXX", video.Refresh);
}
/// <summary>
/// Validate a Sound
/// </summary>
private static void Validate(Data.Models.Listxml.Sound? sound)
{
Assert.NotNull(sound);
Assert.Equal("XXXXXX", sound.Channels);
}
/// <summary>
/// Validate a Input
/// </summary>
private static void Validate(Data.Models.Listxml.Input? input)
{
Assert.NotNull(input);
Assert.Equal("XXXXXX", input.Service);
Assert.Equal("XXXXXX", input.Tilt);
Assert.Equal("XXXXXX", input.Players);
//Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
Assert.Equal("XXXXXX", input.Buttons);
Assert.Equal("XXXXXX", input.Coins);
Assert.NotNull(input.Control);
var control = Assert.Single(input.Control);
Validate(control);
}
/// <summary>
/// Validate a Control
/// </summary>
private static void Validate(Data.Models.Listxml.Control? control)
{
Assert.NotNull(control);
Assert.Equal("XXXXXX", control.Type);
Assert.Equal("XXXXXX", control.Player);
Assert.Equal("XXXXXX", control.Buttons);
Assert.Equal("XXXXXX", control.ReqButtons);
Assert.Equal("XXXXXX", control.Minimum);
Assert.Equal("XXXXXX", control.Maximum);
Assert.Equal("XXXXXX", control.Sensitivity);
Assert.Equal("XXXXXX", control.KeyDelta);
Assert.Equal("XXXXXX", control.Reverse);
Assert.Equal("XXXXXX", control.Ways);
Assert.Equal("XXXXXX", control.Ways2);
Assert.Equal("XXXXXX", control.Ways3);
}
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
Assert.Equal("XXXXXX", dipswitch.Tag);
Assert.Equal("XXXXXX", dipswitch.Mask);
Validate(dipswitch.Condition);
Assert.NotNull(dipswitch.DipLocation);
var diplocation = Assert.Single(dipswitch.DipLocation);
Validate(diplocation);
Assert.NotNull(dipswitch.DipValue);
var dipvalue = Assert.Single(dipswitch.DipValue);
Validate(dipvalue);
}
/// <summary>
/// Validate a Condition
/// </summary>
private static void Validate(Data.Models.Listxml.Condition? condition)
{
Assert.NotNull(condition);
Assert.Equal("XXXXXX", condition.Tag);
Assert.Equal("XXXXXX", condition.Mask);
Assert.Equal("XXXXXX", condition.Relation);
Assert.Equal("XXXXXX", condition.Value);
}
/// <summary>
/// Validate a DipLocation
/// </summary>
private static void Validate(Data.Models.Listxml.DipLocation? diplocation)
{
Assert.NotNull(diplocation);
Assert.Equal("XXXXXX", diplocation.Name);
Assert.Equal("XXXXXX", diplocation.Number);
Assert.Equal("XXXXXX", diplocation.Inverted);
}
/// <summary>
/// Validate a DipValue
/// </summary>
private static void Validate(Data.Models.Listxml.DipValue? dipvalue)
{
Assert.NotNull(dipvalue);
Assert.Equal("XXXXXX", dipvalue.Name);
Assert.Equal("XXXXXX", dipvalue.Value);
Assert.Equal("XXXXXX", dipvalue.Default);
Validate(dipvalue.Condition);
}
/// <summary>
/// Validate a Configuration
/// </summary>
private static void Validate(Data.Models.Listxml.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.Name);
Assert.Equal("XXXXXX", configuration.Tag);
Assert.Equal("XXXXXX", configuration.Mask);
Validate(configuration.Condition);
Assert.NotNull(configuration.ConfLocation);
var conflocation = Assert.Single(configuration.ConfLocation);
Validate(conflocation);
Assert.NotNull(configuration.ConfSetting);
var confsetting = Assert.Single(configuration.ConfSetting);
Validate(confsetting);
}
/// <summary>
/// Validate a ConfLocation
/// </summary>
private static void Validate(Data.Models.Listxml.ConfLocation? conflocation)
{
Assert.NotNull(conflocation);
Assert.Equal("XXXXXX", conflocation.Name);
Assert.Equal("XXXXXX", conflocation.Number);
Assert.Equal("XXXXXX", conflocation.Inverted);
}
/// <summary>
/// Validate a ConfSetting
/// </summary>
private static void Validate(Data.Models.Listxml.ConfSetting? confsetting)
{
Assert.NotNull(confsetting);
Assert.Equal("XXXXXX", confsetting.Name);
Assert.Equal("XXXXXX", confsetting.Value);
Assert.Equal("XXXXXX", confsetting.Default);
Validate(confsetting.Condition);
}
/// <summary>
/// Validate a Port
/// </summary>
private static void Validate(Data.Models.Listxml.Port? port)
{
Assert.NotNull(port);
Assert.Equal("XXXXXX", port.Tag);
Assert.NotNull(port.Analog);
var analog = Assert.Single(port.Analog);
Validate(analog);
}
/// <summary>
/// Validate a Analog
/// </summary>
private static void Validate(Data.Models.Listxml.Analog? analog)
{
Assert.NotNull(analog);
Assert.Equal("XXXXXX", analog.Mask);
}
/// <summary>
/// Validate a Adjuster
/// </summary>
private static void Validate(Data.Models.Listxml.Adjuster? adjuster)
{
Assert.NotNull(adjuster);
Assert.Equal("XXXXXX", adjuster.Name);
Assert.Equal("XXXXXX", adjuster.Default);
Validate(adjuster.Condition);
}
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Data.Models.Listxml.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);
Assert.Equal("XXXXXX", driver.Color);
Assert.Equal("XXXXXX", driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("XXXXXX", driver.Emulation);
Assert.Equal("XXXXXX", driver.Cocktail);
Assert.Equal("XXXXXX", driver.SaveState);
Assert.Equal("XXXXXX", driver.RequiresArtwork);
Assert.Equal("XXXXXX", driver.Unofficial);
Assert.Equal("XXXXXX", driver.NoSoundHardware);
Assert.Equal("XXXXXX", driver.Incomplete);
}
/// <summary>
/// Validate a Feature
/// </summary>
private static void Validate(Data.Models.Listxml.Feature? feature)
{
Assert.NotNull(feature);
Assert.Equal("XXXXXX", feature.Type);
Assert.Equal("XXXXXX", feature.Status);
Assert.Equal("XXXXXX", feature.Overall);
}
/// <summary>
/// Validate a Device
/// </summary>
private static void Validate(Data.Models.Listxml.Device? device)
{
Assert.NotNull(device);
Assert.Equal("XXXXXX", device.Type);
Assert.Equal("XXXXXX", device.Tag);
Assert.Equal("XXXXXX", device.FixedImage);
Assert.Equal("XXXXXX", device.Mandatory);
Assert.Equal("XXXXXX", device.Interface);
Validate(device.Instance);
Assert.NotNull(device.Extension);
var extension = Assert.Single(device.Extension);
Validate(extension);
}
/// <summary>
/// Validate a Instance
/// </summary>
private static void Validate(Data.Models.Listxml.Instance? instance)
{
Assert.NotNull(instance);
Assert.Equal("XXXXXX", instance.Name);
Assert.Equal("XXXXXX", instance.BriefName);
}
/// <summary>
/// Validate a Extension
/// </summary>
private static void Validate(Data.Models.Listxml.Extension? extension)
{
Assert.NotNull(extension);
Assert.Equal("XXXXXX", extension.Name);
}
/// <summary>
/// Validate a Slot
/// </summary>
private static void Validate(Data.Models.Listxml.Slot? slot)
{
Assert.NotNull(slot);
Assert.Equal("XXXXXX", slot.Name);
Assert.NotNull(slot.SlotOption);
var slotoption = Assert.Single(slot.SlotOption);
Validate(slotoption);
}
/// <summary>
/// Validate a SlotOption
/// </summary>
private static void Validate(Data.Models.Listxml.SlotOption? slotoption)
{
Assert.NotNull(slotoption);
Assert.Equal("XXXXXX", slotoption.Name);
Assert.Equal("XXXXXX", slotoption.DevName);
Assert.Equal("XXXXXX", slotoption.Default);
}
/// <summary>
/// Validate a SoftwareList
/// </summary>
private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist)
{
Assert.NotNull(softwarelist);
Assert.Equal("XXXXXX", softwarelist.Tag);
Assert.Equal("XXXXXX", softwarelist.Name);
Assert.Equal("XXXXXX", softwarelist.Status);
Assert.Equal("XXXXXX", softwarelist.Filter);
}
/// <summary>
/// Validate a RamOption
/// </summary>
private static void Validate(Data.Models.Listxml.RamOption? ramoption)
{
Assert.NotNull(ramoption);
Assert.Equal("XXXXXX", ramoption.Name);
Assert.Equal("XXXXXX", ramoption.Default);
Assert.Equal("XXXXXX", ramoption.Content);
}
}
}

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.OfflineList();
var serializer = new OfflineList();
// Build the data
Models.OfflineList.Dat dat = Build();
Data.Models.OfflineList.Dat dat = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(dat);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(dat);
Assert.NotNull(metadata);
// Serialize back to original model
Models.OfflineList.Dat? newDat = serializer.Deserialize(metadata);
Data.Models.OfflineList.Dat? newDat = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newDat);
@@ -31,89 +32,89 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.OfflineList.Dat Build()
private static Data.Models.OfflineList.Dat Build()
{
var infos = new Models.OfflineList.Infos
var infos = new Data.Models.OfflineList.Infos
{
Title = new Models.OfflineList.Title
Title = new Data.Models.OfflineList.Title
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Location = new Models.OfflineList.Location
Location = new Data.Models.OfflineList.Location
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Publisher = new Models.OfflineList.Publisher
Publisher = new Data.Models.OfflineList.Publisher
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
SourceRom = new Models.OfflineList.SourceRom
SourceRom = new Data.Models.OfflineList.SourceRom
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
SaveType = new Models.OfflineList.SaveType
SaveType = new Data.Models.OfflineList.SaveType
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
RomSize = new Models.OfflineList.RomSize
RomSize = new Data.Models.OfflineList.RomSize
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
ReleaseNumber = new Models.OfflineList.ReleaseNumber
ReleaseNumber = new Data.Models.OfflineList.ReleaseNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
ImageNumber = new Models.OfflineList.ImageNumber
ImageNumber = new Data.Models.OfflineList.ImageNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
LanguageNumber = new Models.OfflineList.LanguageNumber
LanguageNumber = new Data.Models.OfflineList.LanguageNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Comment = new Models.OfflineList.Comment
Comment = new Data.Models.OfflineList.Comment
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
RomCRC = new Models.OfflineList.RomCRC
RomCRC = new Data.Models.OfflineList.RomCRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Im1CRC = new Models.OfflineList.Im1CRC
Im1CRC = new Data.Models.OfflineList.Im1CRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Im2CRC = new Models.OfflineList.Im2CRC
Im2CRC = new Data.Models.OfflineList.Im2CRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Languages = new Models.OfflineList.Languages
Languages = new Data.Models.OfflineList.Languages
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
@@ -121,32 +122,32 @@ namespace SabreTools.Serialization.Test.CrossModel
},
};
var canopen = new Models.OfflineList.CanOpen
var canopen = new Data.Models.OfflineList.CanOpen
{
Extension = ["XXXXXX"],
};
var daturl = new Models.OfflineList.DatUrl
var daturl = new Data.Models.OfflineList.DatUrl
{
FileName = "XXXXXX",
Content = "XXXXXX",
};
var newdat = new Models.OfflineList.NewDat
var newdat = new Data.Models.OfflineList.NewDat
{
DatVersionUrl = "XXXXXX",
DatUrl = daturl,
ImUrl = "XXXXXX",
};
var find = new Models.OfflineList.Find
var find = new Data.Models.OfflineList.Find
{
Operation = "XXXXXX",
Value = "XXXXXX",
Content = "XXXXXX",
};
var to = new Models.OfflineList.To
var to = new Data.Models.OfflineList.To
{
Value = "XXXXXX",
Default = "XXXXXX",
@@ -154,12 +155,12 @@ namespace SabreTools.Serialization.Test.CrossModel
Find = [find],
};
var search = new Models.OfflineList.Search
var search = new Data.Models.OfflineList.Search
{
To = [to],
};
var configuration = new Models.OfflineList.Configuration
var configuration = new Data.Models.OfflineList.Configuration
{
DatName = "XXXXXX",
ImFolder = "XXXXXX",
@@ -174,18 +175,18 @@ namespace SabreTools.Serialization.Test.CrossModel
RomTitle = "XXXXXX",
};
var fileromcrc = new Models.OfflineList.FileRomCRC
var fileromcrc = new Data.Models.OfflineList.FileRomCRC
{
Extension = "XXXXXX",
Content = "XXXXXX",
};
var files = new Models.OfflineList.Files
var files = new Data.Models.OfflineList.Files
{
RomCRC = [fileromcrc],
};
var game = new Models.OfflineList.Game
var game = new Data.Models.OfflineList.Game
{
ImageNumber = "XXXXXX",
ReleaseNumber = "XXXXXX",
@@ -203,12 +204,12 @@ namespace SabreTools.Serialization.Test.CrossModel
DuplicateID = "XXXXXX",
};
var games = new Models.OfflineList.Games
var games = new Data.Models.OfflineList.Games
{
Game = [game],
};
var image = new Models.OfflineList.Image
var image = new Data.Models.OfflineList.Image
{
X = "XXXXXX",
Y = "XXXXXX",
@@ -216,19 +217,19 @@ namespace SabreTools.Serialization.Test.CrossModel
Height = "XXXXXX",
};
var images = new Models.OfflineList.Images
var images = new Data.Models.OfflineList.Images
{
Width = "XXXXXX",
Height = "XXXXXX",
Image = [image],
};
var gui = new Models.OfflineList.GUI
var gui = new Data.Models.OfflineList.GUI
{
Images = images,
};
return new Models.OfflineList.Dat
return new Data.Models.OfflineList.Dat
{
NoNamespaceSchemaLocation = "XXXXXX",
Configuration = configuration,
@@ -240,7 +241,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Configuration
/// </summary>
private static void Validate(Models.OfflineList.Configuration? configuration)
private static void Validate(Data.Models.OfflineList.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.DatName);
@@ -259,7 +260,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Infos
/// </summary>
private static void Validate(Models.OfflineList.Infos? infos)
private static void Validate(Data.Models.OfflineList.Infos? infos)
{
Assert.NotNull(infos);
Validate(infos.Title);
@@ -281,7 +282,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a InfoBase
/// </summary>
private static void Validate(Models.OfflineList.InfoBase? info)
private static void Validate(Data.Models.OfflineList.InfoBase? info)
{
Assert.NotNull(info);
Assert.Equal("XXXXXX", info.Visible);
@@ -292,7 +293,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a CanOpen
/// </summary>
private static void Validate(Models.OfflineList.CanOpen? canopen)
private static void Validate(Data.Models.OfflineList.CanOpen? canopen)
{
Assert.NotNull(canopen);
Assert.NotNull(canopen.Extension);
@@ -303,7 +304,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a NewDat
/// </summary>
private static void Validate(Models.OfflineList.NewDat? newdat)
private static void Validate(Data.Models.OfflineList.NewDat? newdat)
{
Assert.NotNull(newdat);
Assert.Equal("XXXXXX", newdat.DatVersionUrl);
@@ -314,7 +315,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DatUrl
/// </summary>
private static void Validate(Models.OfflineList.DatUrl? daturl)
private static void Validate(Data.Models.OfflineList.DatUrl? daturl)
{
Assert.NotNull(daturl);
Assert.Equal("XXXXXX", daturl.FileName);
@@ -324,7 +325,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Search
/// </summary>
private static void Validate(Models.OfflineList.Search? search)
private static void Validate(Data.Models.OfflineList.Search? search)
{
Assert.NotNull(search);
Assert.NotNull(search.To);
@@ -335,7 +336,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a To
/// </summary>
private static void Validate(Models.OfflineList.To? to)
private static void Validate(Data.Models.OfflineList.To? to)
{
Assert.NotNull(to);
Assert.Equal("XXXXXX", to.Value);
@@ -350,7 +351,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Find
/// </summary>
private static void Validate(Models.OfflineList.Find? find)
private static void Validate(Data.Models.OfflineList.Find? find)
{
Assert.NotNull(find);
Assert.Equal("XXXXXX", find.Operation);
@@ -361,7 +362,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Games
/// </summary>
private static void Validate(Models.OfflineList.Games? games)
private static void Validate(Data.Models.OfflineList.Games? games)
{
Assert.NotNull(games);
Assert.NotNull(games.Game);
@@ -372,7 +373,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Game
/// </summary>
private static void Validate(Models.OfflineList.Game? game)
private static void Validate(Data.Models.OfflineList.Game? game)
{
Assert.NotNull(game);
Assert.Equal("XXXXXX", game.ImageNumber);
@@ -394,7 +395,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Files
/// </summary>
private static void Validate(Models.OfflineList.Files? files)
private static void Validate(Data.Models.OfflineList.Files? files)
{
Assert.NotNull(files);
Assert.NotNull(files.RomCRC);
@@ -405,7 +406,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a FileRomCRC
/// </summary>
private static void Validate(Models.OfflineList.FileRomCRC? fileromcrc)
private static void Validate(Data.Models.OfflineList.FileRomCRC? fileromcrc)
{
Assert.NotNull(fileromcrc);
Assert.Equal("XXXXXX", fileromcrc.Extension);
@@ -415,7 +416,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a GUI
/// </summary>
private static void Validate(Models.OfflineList.GUI? gui)
private static void Validate(Data.Models.OfflineList.GUI? gui)
{
Assert.NotNull(gui);
Validate(gui.Images);
@@ -424,7 +425,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Images
/// </summary>
private static void Validate(Models.OfflineList.Images? images)
private static void Validate(Data.Models.OfflineList.Images? images)
{
Assert.NotNull(images);
Assert.Equal("XXXXXX", images.Width);
@@ -438,7 +439,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Image
/// </summary>
private static void Validate(Models.OfflineList.Image? image)
private static void Validate(Data.Models.OfflineList.Image? image)
{
Assert.NotNull(image);
Assert.Equal("XXXXXX", image.X);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.OpenMSX();
var serializer = new OpenMSX();
// Build the data
Models.OpenMSX.SoftwareDb sdb = Build();
Data.Models.OpenMSX.SoftwareDb sdb = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(sdb);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(sdb);
Assert.NotNull(metadata);
// Serialize back to original model
Models.OpenMSX.SoftwareDb? newSdb = serializer.Deserialize(metadata);
Data.Models.OpenMSX.SoftwareDb? newSdb = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newSdb);
@@ -32,15 +33,15 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.OpenMSX.SoftwareDb Build()
private static Data.Models.OpenMSX.SoftwareDb Build()
{
var original = new Models.OpenMSX.Original
var original = new Data.Models.OpenMSX.Original
{
Value = "XXXXXX",
Content = "XXXXXX",
};
var rom = new Models.OpenMSX.Rom
var rom = new Data.Models.OpenMSX.Rom
{
Start = "XXXXXX",
Type = "XXXXXX",
@@ -48,13 +49,13 @@ namespace SabreTools.Serialization.Test.CrossModel
Remark = "XXXXXX",
};
var dump_rom = new Models.OpenMSX.Dump
var dump_rom = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = rom,
};
var megarom = new Models.OpenMSX.MegaRom
var megarom = new Data.Models.OpenMSX.MegaRom
{
Start = "XXXXXX",
Type = "XXXXXX",
@@ -62,13 +63,13 @@ namespace SabreTools.Serialization.Test.CrossModel
Remark = "XXXXXX",
};
var dump_megarom = new Models.OpenMSX.Dump
var dump_megarom = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = megarom,
};
var sccpluscart = new Models.OpenMSX.SCCPlusCart
var sccpluscart = new Data.Models.OpenMSX.SCCPlusCart
{
Start = "XXXXXX",
Type = "XXXXXX",
@@ -76,13 +77,13 @@ namespace SabreTools.Serialization.Test.CrossModel
Remark = "XXXXXX",
};
var dump_sccpluscart = new Models.OpenMSX.Dump
var dump_sccpluscart = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = sccpluscart,
};
var software = new Models.OpenMSX.Software
var software = new Data.Models.OpenMSX.Software
{
Title = "XXXXXX",
GenMSXID = "XXXXXX",
@@ -93,7 +94,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Dump = [dump_rom, dump_megarom, dump_sccpluscart],
};
return new Models.OpenMSX.SoftwareDb
return new Data.Models.OpenMSX.SoftwareDb
{
Timestamp = "XXXXXX",
Software = [software],
@@ -103,7 +104,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Software
/// </summary>
private static void Validate(Models.OpenMSX.Software? software)
private static void Validate(Data.Models.OpenMSX.Software? software)
{
Assert.NotNull(software);
Assert.Equal("XXXXXX", software.Title);
@@ -124,7 +125,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Dump
/// </summary>
private static void Validate(Models.OpenMSX.Dump? dump)
private static void Validate(Data.Models.OpenMSX.Dump? dump)
{
Assert.NotNull(dump);
Validate(dump.Original);
@@ -134,7 +135,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Original
/// </summary>
private static void Validate(Models.OpenMSX.Original? original)
private static void Validate(Data.Models.OpenMSX.Original? original)
{
Assert.NotNull(original);
Assert.Equal("XXXXXX", original.Value);
@@ -144,7 +145,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a RomBase
/// </summary>
private static void Validate(Models.OpenMSX.RomBase? rombase)
private static void Validate(Data.Models.OpenMSX.RomBase? rombase)
{
Assert.NotNull(rombase);
Assert.Equal("XXXXXX", rombase.Start);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.RomCenter();
var serializer = new RomCenter();
// Build the data
Models.RomCenter.MetadataFile mf = Build();
Data.Models.RomCenter.MetadataFile mf = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.RomCenter.MetadataFile? newMf = serializer.Deserialize(metadata);
Data.Models.RomCenter.MetadataFile? newMf = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMf);
@@ -31,9 +32,9 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.RomCenter.MetadataFile Build()
private static Data.Models.RomCenter.MetadataFile Build()
{
var credits = new Models.RomCenter.Credits
var credits = new Data.Models.RomCenter.Credits
{
Author = "XXXXXX",
Version = "XXXXXX",
@@ -44,7 +45,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Comment = "XXXXXX",
};
var dat = new Models.RomCenter.Dat
var dat = new Data.Models.RomCenter.Dat
{
Version = "XXXXXX",
Plugin = "XXXXXX",
@@ -52,13 +53,13 @@ namespace SabreTools.Serialization.Test.CrossModel
Merge = "XXXXXX",
};
var emulator = new Models.RomCenter.Emulator
var emulator = new Data.Models.RomCenter.Emulator
{
RefName = "XXXXXX",
Version = "XXXXXX",
};
var rom = new Models.RomCenter.Rom
var rom = new Data.Models.RomCenter.Rom
{
ParentName = "XXXXXX",
ParentDescription = "XXXXXX",
@@ -71,12 +72,12 @@ namespace SabreTools.Serialization.Test.CrossModel
MergeName = "XXXXXX",
};
var games = new Models.RomCenter.Games
var games = new Data.Models.RomCenter.Games
{
Rom = [rom],
};
return new Models.RomCenter.MetadataFile
return new Data.Models.RomCenter.MetadataFile
{
Credits = credits,
Dat = dat,
@@ -88,7 +89,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Credits
/// </summary>
private static void Validate(Models.RomCenter.Credits? credits)
private static void Validate(Data.Models.RomCenter.Credits? credits)
{
Assert.NotNull(credits);
Assert.Equal("XXXXXX", credits.Author);
@@ -103,7 +104,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Dat
/// </summary>
private static void Validate(Models.RomCenter.Dat? dat)
private static void Validate(Data.Models.RomCenter.Dat? dat)
{
Assert.NotNull(dat);
Assert.Equal("XXXXXX", dat.Version);
@@ -115,7 +116,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Emulator
/// </summary>
private static void Validate(Models.RomCenter.Emulator? emulator)
private static void Validate(Data.Models.RomCenter.Emulator? emulator)
{
Assert.NotNull(emulator);
Assert.Equal("XXXXXX", emulator.RefName);
@@ -125,7 +126,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Games
/// </summary>
private static void Validate(Models.RomCenter.Games? games)
private static void Validate(Data.Models.RomCenter.Games? games)
{
Assert.NotNull(games);
Assert.NotNull(games.Rom);
@@ -136,7 +137,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.RomCenter.Rom? rom)
private static void Validate(Data.Models.RomCenter.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.ParentName);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.SeparatedValue();
var serializer = new SeparatedValue();
// Build the data
Models.SeparatedValue.MetadataFile mf = Build();
Data.Models.SeparatedValue.MetadataFile mf = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.SeparatedValue.MetadataFile? newMf = serializer.Deserialize(metadata);
Data.Models.SeparatedValue.MetadataFile? newMf = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMf);
@@ -34,11 +35,11 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.SeparatedValue.MetadataFile Build()
private static Data.Models.SeparatedValue.MetadataFile Build()
{
string[] header = ["header"];
var disk = new Models.SeparatedValue.Row
var disk = new Data.Models.SeparatedValue.Row
{
FileName = "XXXXXX",
InternalName = "XXXXXX",
@@ -52,7 +53,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Status = "XXXXXX",
};
var media = new Models.SeparatedValue.Row
var media = new Data.Models.SeparatedValue.Row
{
FileName = "XXXXXX",
InternalName = "XXXXXX",
@@ -67,7 +68,7 @@ namespace SabreTools.Serialization.Test.CrossModel
SpamSum = "XXXXXX",
};
var rom = new Models.SeparatedValue.Row
var rom = new Data.Models.SeparatedValue.Row
{
FileName = "XXXXXX",
InternalName = "XXXXXX",
@@ -87,7 +88,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Status = "XXXXXX",
};
return new Models.SeparatedValue.MetadataFile
return new Data.Models.SeparatedValue.MetadataFile
{
Header = header,
Row = [disk, media, rom],
@@ -107,7 +108,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateDisk(Models.SeparatedValue.Row? row)
private static void ValidateDisk(Data.Models.SeparatedValue.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.FileName);
@@ -132,7 +133,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateMedia(Models.SeparatedValue.Row? row)
private static void ValidateMedia(Data.Models.SeparatedValue.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.FileName);
@@ -157,7 +158,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateRom(Models.SeparatedValue.Row? row)
private static void ValidateRom(Data.Models.SeparatedValue.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.FileName);

View File

@@ -1,3 +1,4 @@
using SabreTools.Serialization.CrossModel;
using Xunit;
namespace SabreTools.Serialization.Test.CrossModel
@@ -8,17 +9,17 @@ namespace SabreTools.Serialization.Test.CrossModel
public void RoundTripTest()
{
// Get the cross-model serializer
var serializer = new Serialization.CrossModel.SoftwareList();
var serializer = new SoftwareList();
// Build the data
Models.SoftwareList.SoftwareList sl = Build();
Data.Models.SoftwareList.SoftwareList sl = Build();
// Serialize to generic model
Models.Metadata.MetadataFile? metadata = serializer.Serialize(sl);
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(sl);
Assert.NotNull(metadata);
// Serialize back to original model
Models.SoftwareList.SoftwareList? newSl = serializer.Deserialize(metadata);
Data.Models.SoftwareList.SoftwareList? newSl = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newSl);
@@ -34,27 +35,27 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.SoftwareList.SoftwareList Build()
private static Data.Models.SoftwareList.SoftwareList Build()
{
var info = new Models.SoftwareList.Info
var info = new Data.Models.SoftwareList.Info
{
Name = "XXXXXX",
Value = "XXXXXX",
};
var sharedfeat = new Models.SoftwareList.SharedFeat
var sharedfeat = new Data.Models.SoftwareList.SharedFeat
{
Name = "XXXXXX",
Value = "XXXXXX",
};
var feature = new Models.SoftwareList.Feature
var feature = new Data.Models.SoftwareList.Feature
{
Name = "XXXXXX",
Value = "XXXXXX",
};
var rom = new Models.SoftwareList.Rom
var rom = new Data.Models.SoftwareList.Rom
{
Name = "XXXXXX",
Size = "XXXXXX",
@@ -67,7 +68,7 @@ namespace SabreTools.Serialization.Test.CrossModel
LoadFlag = "XXXXXX",
};
var dataarea = new Models.SoftwareList.DataArea
var dataarea = new Data.Models.SoftwareList.DataArea
{
Name = "XXXXXX",
Size = "XXXXXX",
@@ -76,7 +77,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Rom = [rom],
};
var disk = new Models.SoftwareList.Disk
var disk = new Data.Models.SoftwareList.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -85,20 +86,20 @@ namespace SabreTools.Serialization.Test.CrossModel
Writeable = "XXXXXX",
};
var diskarea = new Models.SoftwareList.DiskArea
var diskarea = new Data.Models.SoftwareList.DiskArea
{
Name = "XXXXXX",
Disk = [disk],
};
var dipvalue = new Models.SoftwareList.DipValue
var dipvalue = new Data.Models.SoftwareList.DipValue
{
Name = "XXXXXX",
Value = "XXXXXX",
Default = "XXXXXX",
};
var dipswitch = new Models.SoftwareList.DipSwitch
var dipswitch = new Data.Models.SoftwareList.DipSwitch
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -106,7 +107,7 @@ namespace SabreTools.Serialization.Test.CrossModel
DipValue = [dipvalue],
};
var part = new Models.SoftwareList.Part
var part = new Data.Models.SoftwareList.Part
{
Name = "XXXXXX",
Interface = "XXXXXX",
@@ -116,7 +117,7 @@ namespace SabreTools.Serialization.Test.CrossModel
DipSwitch = [dipswitch],
};
var software = new Models.SoftwareList.Software
var software = new Data.Models.SoftwareList.Software
{
Name = "XXXXXX",
CloneOf = "XXXXXX",
@@ -130,7 +131,7 @@ namespace SabreTools.Serialization.Test.CrossModel
Part = [part],
};
return new Models.SoftwareList.SoftwareList
return new Data.Models.SoftwareList.SoftwareList
{
Name = "XXXXXX",
Description = "XXXXXX",
@@ -142,7 +143,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Software
/// </summary>
private static void Validate(Models.SoftwareList.Software? software)
private static void Validate(Data.Models.SoftwareList.Software? software)
{
Assert.NotNull(software);
Assert.Equal("XXXXXX", software.Name);
@@ -169,7 +170,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Info
/// </summary>
private static void Validate(Models.SoftwareList.Info? info)
private static void Validate(Data.Models.SoftwareList.Info? info)
{
Assert.NotNull(info);
Assert.Equal("XXXXXX", info.Name);
@@ -179,7 +180,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a SharedFeat
/// </summary>
private static void Validate(Models.SoftwareList.SharedFeat? sharedfeat)
private static void Validate(Data.Models.SoftwareList.SharedFeat? sharedfeat)
{
Assert.NotNull(sharedfeat);
Assert.Equal("XXXXXX", sharedfeat.Name);
@@ -189,7 +190,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Part
/// </summary>
private static void Validate(Models.SoftwareList.Part? part)
private static void Validate(Data.Models.SoftwareList.Part? part)
{
Assert.NotNull(part);
Assert.Equal("XXXXXX", part.Name);
@@ -215,7 +216,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Feature
/// </summary>
private static void Validate(Models.SoftwareList.Feature? feature)
private static void Validate(Data.Models.SoftwareList.Feature? feature)
{
Assert.NotNull(feature);
Assert.Equal("XXXXXX", feature.Name);
@@ -225,7 +226,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DataArea
/// </summary>
private static void Validate(Models.SoftwareList.DataArea? dataarea)
private static void Validate(Data.Models.SoftwareList.DataArea? dataarea)
{
Assert.NotNull(dataarea);
Assert.Equal("XXXXXX", dataarea.Name);
@@ -241,7 +242,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.SoftwareList.Rom? rom)
private static void Validate(Data.Models.SoftwareList.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
@@ -258,7 +259,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DiskArea
/// </summary>
private static void Validate(Models.SoftwareList.DiskArea? diskarea)
private static void Validate(Data.Models.SoftwareList.DiskArea? diskarea)
{
Assert.NotNull(diskarea);
Assert.Equal("XXXXXX", diskarea.Name);
@@ -271,7 +272,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.SoftwareList.Disk? disk)
private static void Validate(Data.Models.SoftwareList.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -284,7 +285,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Models.SoftwareList.DipSwitch? dipswitch)
private static void Validate(Data.Models.SoftwareList.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
@@ -299,7 +300,7 @@ namespace SabreTools.Serialization.Test.CrossModel
/// <summary>
/// Validate a DipValue
/// </summary>
private static void Validate(Models.SoftwareList.DipValue? dipvalue)
private static void Validate(Data.Models.SoftwareList.DipValue? dipvalue)
{
Assert.NotNull(dipvalue);
Assert.Equal("XXXXXX", dipvalue.Name);

View File

@@ -0,0 +1,213 @@
using System;
using SabreTools.Data.Extensions;
using SabreTools.Data.Models.ASN1;
using Xunit;
namespace SabreTools.Serialization.Test.Extensions
{
public class TypeLengthValueTests
{
#region Formatting
[Fact]
public void Format_EOC()
{
string expected = "Type: V_ASN1_EOC";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_EOC, Length = 0, Value = null };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ZeroLength()
{
string expected = "Type: V_ASN1_NULL, Length: 0";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_NULL, Length = 0, Value = null };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_InvalidConstructed()
{
string expected = "Type: V_ASN1_OBJECT, V_ASN1_CONSTRUCTED, Length: 1, Value: [INVALID DATA TYPE]";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_OBJECT | ASN1Type.V_ASN1_CONSTRUCTED, Length = 1, Value = (object?)false };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidConstructed()
{
string expected = "Type: V_ASN1_OBJECT, V_ASN1_CONSTRUCTED, Length: 3, Value:\n Type: V_ASN1_BOOLEAN, Length: 1, Value: True";
var boolTlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_BOOLEAN, Length = 1, Value = new byte[] { 0x01 } };
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_OBJECT | ASN1Type.V_ASN1_CONSTRUCTED, Length = 3, Value = new Data.Models.ASN1.TypeLengthValue[] { boolTlv } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_InvalidDataType()
{
string expected = "Type: V_ASN1_OBJECT, Length: 1, Value: [INVALID DATA TYPE]";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_OBJECT, Length = 1, Value = (object?)false };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_InvalidLength()
{
string expected = "Type: V_ASN1_NULL, Length: 1, Value: [NO DATA]";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_NULL, Length = 1, Value = Array.Empty<byte>() };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_InvalidBooleanLength()
{
string expected = "Type: V_ASN1_BOOLEAN, Length: 2 [Expected length of 1], Value: True";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_BOOLEAN, Length = 2, Value = new byte[] { 0x01 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_InvalidBooleanArrayLength()
{
string expected = "Type: V_ASN1_BOOLEAN, Length: 1 [Expected value length of 1], Value: True";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_BOOLEAN, Length = 1, Value = new byte[] { 0x01, 0x00 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidBoolean()
{
string expected = "Type: V_ASN1_BOOLEAN, Length: 1, Value: True";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_BOOLEAN, Length = 1, Value = new byte[] { 0x01 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidInteger()
{
string expected = "Type: V_ASN1_INTEGER, Length: 1, Value: 1";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_INTEGER, Length = 1, Value = new byte[] { 0x01 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidBitString_NoBits()
{
string expected = "Type: V_ASN1_BIT_STRING, Length: 1, Value with 0 unused bits";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_BIT_STRING, Length = 1, Value = new byte[] { 0x00 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidBitString_Bits()
{
string expected = "Type: V_ASN1_BIT_STRING, Length: 1, Value with 1 unused bits: 01";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_BIT_STRING, Length = 1, Value = new byte[] { 0x01, 0x01 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidOctetString()
{
string expected = "Type: V_ASN1_OCTET_STRING, Length: 1, Value: 01";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_OCTET_STRING, Length = 1, Value = new byte[] { 0x01 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidObject()
{
string expected = "Type: V_ASN1_OBJECT, Length: 3, Value: 0.1.2.3 (/ITU-T/1/2/3)";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_OBJECT, Length = 3, Value = new byte[] { 0x01, 0x02, 0x03 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidUTF8String()
{
string expected = "Type: V_ASN1_UTF8STRING, Length: 3, Value: ABC";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_UTF8STRING, Length = 3, Value = new byte[] { 0x41, 0x42, 0x43 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidPrintableString()
{
string expected = "Type: V_ASN1_PRINTABLESTRING, Length: 3, Value: ABC";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_PRINTABLESTRING, Length = 3, Value = new byte[] { 0x41, 0x42, 0x43 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidTeletexString()
{
string expected = "Type: V_ASN1_TELETEXSTRING, Length: 3, Value: ABC";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_TELETEXSTRING, Length = 3, Value = new byte[] { 0x41, 0x42, 0x43 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidIA5String()
{
string expected = "Type: V_ASN1_IA5STRING, Length: 3, Value: ABC";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_IA5STRING, Length = 3, Value = new byte[] { 0x41, 0x42, 0x43 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_InvalidUTCTime()
{
string expected = "Type: V_ASN1_UTCTIME, Length: 3, Value: ABC";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_UTCTIME, Length = 3, Value = new byte[] { 0x41, 0x42, 0x43 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidUTCTime()
{
string expected = "Type: V_ASN1_UTCTIME, Length: 3, Value: 1980-01-01 00:00:00";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_UTCTIME, Length = 3, Value = new byte[] { 0x31, 0x39, 0x38, 0x30, 0x2D, 0x30, 0x31, 0x2D, 0x30, 0x31, 0x20, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidBmpString()
{
string expected = "Type: V_ASN1_BMPSTRING, Length: 6, Value: ABC";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_BMPSTRING, Length = 6, Value = new byte[] { 0x41, 0x00, 0x42, 0x00, 0x43, 0x00 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
[Fact]
public void Format_ValidUnformatted()
{
string expected = "Type: V_ASN1_OBJECT_DESCRIPTOR, Length: 1, Value: 01";
var tlv = new Data.Models.ASN1.TypeLengthValue { Type = ASN1Type.V_ASN1_OBJECT_DESCRIPTOR, Length = 1, Value = new byte[] { 0x01 } };
string actual = tlv.Format();
Assert.Equal(expected, actual);
}
#endregion
}
}

View File

@@ -0,0 +1,111 @@
using SabreTools.Data.ObjectIdentifier;
using Xunit;
namespace SabreTools.Serialization.Test.ObjectIdentifier
{
// These tests are known to be incomplete due to the sheer number
// of possible OIDs that exist. The tests below are a minimal
// representation of functionality to guarantee proper behavior
// not necessarily absolute outputs
public class ParserTests
{
#region ASN.1
[Fact]
public void ASN1Notation_AlwaysNull()
{
ulong[]? values = null;
string? actual = Parser.ParseOIDToASN1Notation(values);
Assert.Null(actual);
}
#endregion
#region Dot Notation
[Fact]
public void DotNotation_NullValues_Null()
{
ulong[]? values = null;
string? actual = Parser.ParseOIDToDotNotation(values);
Assert.Null(actual);
}
[Fact]
public void DotNotation_EmptyValues_Null()
{
ulong[]? values = [];
string? actual = Parser.ParseOIDToDotNotation(values);
Assert.Null(actual);
}
[Fact]
public void DotNotation_Values_Formatted()
{
string expected = "0.1.2.3";
ulong[]? values = [0, 1, 2, 3];
string? actual = Parser.ParseOIDToDotNotation(values);
Assert.Equal(expected, actual);
}
#endregion
#region Modified OID-IRI
[Fact]
public void ModifiedOIDIRI_NullValues_Null()
{
ulong[]? values = null;
string? actual = Parser.ParseOIDToModifiedOIDIRI(values);
Assert.Null(actual);
}
[Fact]
public void ModifiedOIDIRI_EmptyValues_Null()
{
ulong[]? values = [];
string? actual = Parser.ParseOIDToModifiedOIDIRI(values);
Assert.Null(actual);
}
[Fact]
public void ModifiedOIDIRI_Values_Formatted()
{
string expected = "/ITU-T/[question]/2/3";
ulong[]? values = [0, 1, 2, 3];
string? actual = Parser.ParseOIDToModifiedOIDIRI(values);
Assert.Equal(expected, actual);
}
#endregion
#region OID-IRI
[Fact]
public void OIDIRI_NullValues_Null()
{
ulong[]? values = null;
string? actual = Parser.ParseOIDToOIDIRINotation(values);
Assert.Null(actual);
}
[Fact]
public void OIDIRI_EmptyValues_Null()
{
ulong[]? values = [];
string? actual = Parser.ParseOIDToOIDIRINotation(values);
Assert.Null(actual);
}
[Fact]
public void OIDIRI_Values_Formatted()
{
string expected = "/ITU-T/1/2/3";
ulong[]? values = [0, 1, 2, 3];
string? actual = Parser.ParseOIDToOIDIRINotation(values);
Assert.Equal(expected, actual);
}
#endregion
}
}

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class AACSTests
{

View File

@@ -0,0 +1,152 @@
using System.IO;
using System.Linq;
using SabreTools.Data.Models.ASN1;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class AbstractSyntaxNotationOneTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void ValidMinimalStream_NotNull()
{
Stream data = new MemoryStream([0x00]);
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data);
Assert.NotNull(actual);
var actualSingle = Assert.Single(actual);
Assert.Equal(ASN1Type.V_ASN1_EOC, actualSingle.Type);
Assert.Equal(default, actualSingle.Length);
Assert.Null(actualSingle.Value);
}
[Fact]
public void ValidBoolean_NotNull()
{
Stream data = new MemoryStream([0x01, 0x01, 0x01]);
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data);
Assert.NotNull(actual);
var actualSingle = Assert.Single(actual);
Assert.Equal(ASN1Type.V_ASN1_BOOLEAN, actualSingle.Type);
Assert.Equal(1UL, actualSingle.Length);
Assert.NotNull(actualSingle.Value);
byte[]? valueAsArray = actualSingle.Value as byte[];
Assert.NotNull(valueAsArray);
byte actualValue = Assert.Single(valueAsArray);
Assert.Equal(0x01, actualValue);
}
[Theory]
[InlineData(new byte[] { 0x26, 0x81, 0x03, 0x01, 0x01, 0x01 })]
[InlineData(new byte[] { 0x26, 0x82, 0x00, 0x03, 0x01, 0x01, 0x01 })]
[InlineData(new byte[] { 0x26, 0x83, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01 })]
[InlineData(new byte[] { 0x26, 0x84, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01 })]
[InlineData(new byte[] { 0x26, 0x85, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01 })]
[InlineData(new byte[] { 0x26, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01 })]
[InlineData(new byte[] { 0x26, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01 })]
[InlineData(new byte[] { 0x26, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01 })]
public void ComplexValue_NotNull(byte[] arr)
{
Stream data = new MemoryStream(arr);
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data);
Assert.NotNull(actual);
var actualSingle = Assert.Single(actual);
Assert.Equal(ASN1Type.V_ASN1_CONSTRUCTED | ASN1Type.V_ASN1_OBJECT, actualSingle.Type);
Assert.Equal(3UL, actualSingle.Length);
Assert.NotNull(actualSingle.Value);
TypeLengthValue[]? valueAsArray = actualSingle.Value as TypeLengthValue[];
Assert.NotNull(valueAsArray);
TypeLengthValue actualSub = Assert.Single(valueAsArray);
Assert.Equal(ASN1Type.V_ASN1_BOOLEAN, actualSub.Type);
Assert.Equal(1UL, actualSub.Length);
Assert.NotNull(actualSub.Value);
}
[Theory]
[InlineData(new byte[] { 0x26, 0x80 })]
[InlineData(new byte[] { 0x26, 0x89 })]
public void ComplexValueInvalidLength_Null(byte[] arr)
{
Stream data = new MemoryStream(arr);
var deserializer = new AbstractSyntaxNotationOne();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
}
}

View File

@@ -0,0 +1,73 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class AdvancedInstallerTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new AdvancedInstaller();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new AdvancedInstaller();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new AdvancedInstaller();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new AdvancedInstaller();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new AdvancedInstaller();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new AdvancedInstaller();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
}
}

View File

@@ -0,0 +1,73 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class AppPkgHeaderTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new AppPkgHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new AppPkgHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new AppPkgHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new AppPkgHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new AppPkgHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new AppPkgHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
}
}

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class ArchiveDotOrgTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.ArchiveDotOrg();
var serializer = new Serialization.Serializers.ArchiveDotOrg();
var deserializer = new ArchiveDotOrg();
var serializer = new SabreTools.Serialization.Writers.ArchiveDotOrg();
// Build the data
Models.ArchiveDotOrg.Files files = Build();
Data.Models.ArchiveDotOrg.Files files = Build();
// Serialize to stream
Stream? actual = serializer.Serialize(files);
Assert.NotNull(actual);
// Serialize back to original model
Models.ArchiveDotOrg.Files? newFiles = deserializer.Deserialize(actual);
Data.Models.ArchiveDotOrg.Files? newFiles = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newFiles);
@@ -98,9 +97,9 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.ArchiveDotOrg.Files Build()
private static Data.Models.ArchiveDotOrg.Files Build()
{
var file = new Models.ArchiveDotOrg.File
var file = new Data.Models.ArchiveDotOrg.File
{
Name = "XXXXXX",
Source = "XXXXXX",
@@ -164,7 +163,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Width = "XXXXXX",
};
return new Models.ArchiveDotOrg.Files
return new Data.Models.ArchiveDotOrg.Files
{
File = [file]
};
@@ -173,7 +172,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a File
/// </summary>
private static void Validate(Models.ArchiveDotOrg.File? file)
private static void Validate(Data.Models.ArchiveDotOrg.File? file)
{
Assert.NotNull(file);
Assert.Equal("XXXXXX", file.Name);

View File

@@ -1,10 +1,10 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class AttractModeTests
{
@@ -75,18 +75,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripShortTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.AttractMode();
var serializer = new Serialization.Serializers.AttractMode();
var deserializer = new AttractMode();
var serializer = new SabreTools.Serialization.Writers.AttractMode();
// Build the data
Models.AttractMode.MetadataFile mf = Build();
Data.Models.AttractMode.MetadataFile mf = Build();
// Serialize to stream
Stream? actual = serializer.Serialize(mf, longHeader: false);
Stream? actual = serializer.SerializeStream(mf, longHeader: false);
Assert.NotNull(actual);
// Serialize back to original model
Models.AttractMode.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.AttractMode.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -100,18 +100,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripLongTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.AttractMode();
var serializer = new Serialization.Serializers.AttractMode();
var deserializer = new AttractMode();
var serializer = new SabreTools.Serialization.Writers.AttractMode();
// Build the data
Models.AttractMode.MetadataFile mf = Build();
Data.Models.AttractMode.MetadataFile mf = Build();
// Serialize to stream
Stream? actual = serializer.Serialize(mf, longHeader: true);
Stream? actual = serializer.SerializeStream(mf, longHeader: true);
Assert.NotNull(actual);
// Serialize back to original model
Models.AttractMode.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.AttractMode.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -124,11 +124,11 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.AttractMode.MetadataFile Build()
private static Data.Models.AttractMode.MetadataFile Build()
{
string[] header = ["header"];
var row = new Models.AttractMode.Row
var row = new Data.Models.AttractMode.Row
{
Name = "XXXXXX",
Title = "XXXXXX",
@@ -154,7 +154,7 @@ namespace SabreTools.Serialization.Test.Deserializers
FileIsAvailable = "XXXXXX",
};
return new Models.AttractMode.MetadataFile
return new Data.Models.AttractMode.MetadataFile
{
Header = header,
Row = [row],
@@ -168,15 +168,15 @@ namespace SabreTools.Serialization.Test.Deserializers
{
Assert.NotNull(header);
if (longHeader)
Assert.True(Serialization.Serializers.AttractMode.HeaderArrayWithRomname.SequenceEqual(header));
Assert.True(SabreTools.Serialization.Writers.AttractMode.HeaderArrayWithRomname.SequenceEqual(header));
else
Assert.True(Serialization.Serializers.AttractMode.HeaderArrayWithoutRomname.SequenceEqual(header));
Assert.True(SabreTools.Serialization.Writers.AttractMode.HeaderArrayWithoutRomname.SequenceEqual(header));
}
/// <summary>
/// Validate a Row
/// </summary>
private static void Validate(Models.AttractMode.Row? row, bool longHeader)
private static void Validate(Data.Models.AttractMode.Row? row, bool longHeader)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class BDPlusTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class BFPKTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class BSPTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class CFBTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class CHDTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class CIATests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class CatalogTests
{

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class ClrMameProTests
{
@@ -75,18 +74,43 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripGameTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.ClrMamePro();
var serializer = new Serialization.Serializers.ClrMamePro();
var deserializer = new ClrMamePro();
var serializer = new SabreTools.Serialization.Writers.ClrMamePro();
// Build the data
Models.ClrMamePro.MetadataFile mf = Build(game: true);
Data.Models.ClrMamePro.MetadataFile mf = Build(game: true);
// Serialize to stream
Stream? actual = serializer.Serialize(mf);
Stream? actual = serializer.SerializeStream(mf);
Assert.NotNull(actual);
// Serialize back to original model
Models.ClrMamePro.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.ClrMamePro.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
Validate(newMf.ClrMamePro);
Assert.NotNull(newMf.Game);
var newGame = Assert.Single(newMf.Game);
Validate(newGame);
}
[Fact]
public void RoundTripGameWithoutQuotesTest()
{
// Get the serializer and deserializer
var deserializer = new ClrMamePro();
var serializer = new SabreTools.Serialization.Writers.ClrMamePro();
// Build the data
Data.Models.ClrMamePro.MetadataFile mf = Build(game: true);
// Serialize to stream
Stream? actual = serializer.SerializeStream(mf, quotes: false);
Assert.NotNull(actual);
// Serialize back to original model
Data.Models.ClrMamePro.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -100,18 +124,43 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripMachineTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.ClrMamePro();
var serializer = new Serialization.Serializers.ClrMamePro();
var deserializer = new ClrMamePro();
var serializer = new SabreTools.Serialization.Writers.ClrMamePro();
// Build the data
Models.ClrMamePro.MetadataFile mf = Build(game: false);
Data.Models.ClrMamePro.MetadataFile mf = Build(game: false);
// Serialize to stream
Stream? actual = serializer.Serialize(mf);
Stream? actual = serializer.SerializeStream(mf);
Assert.NotNull(actual);
// Serialize back to original model
Models.ClrMamePro.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.ClrMamePro.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
Validate(newMf.ClrMamePro);
Assert.NotNull(newMf.Game);
var newGame = Assert.Single(newMf.Game);
Validate(newGame);
}
[Fact]
public void RoundTripMachineWithoutQuotesTest()
{
// Get the serializer and deserializer
var deserializer = new ClrMamePro();
var serializer = new SabreTools.Serialization.Writers.ClrMamePro();
// Build the data
Data.Models.ClrMamePro.MetadataFile mf = Build(game: false);
// Serialize to stream
Stream? actual = serializer.SerializeStream(mf, quotes: false);
Assert.NotNull(actual);
// Serialize back to original model
Data.Models.ClrMamePro.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -124,9 +173,9 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.ClrMamePro.MetadataFile Build(bool game)
private static Data.Models.ClrMamePro.MetadataFile Build(bool game)
{
var cmp = new Models.ClrMamePro.ClrMamePro
var cmp = new Data.Models.ClrMamePro.ClrMamePro
{
Name = "XXXXXX",
Description = "XXXXXX",
@@ -145,7 +194,7 @@ namespace SabreTools.Serialization.Test.Deserializers
ForcePacking = "XXXXXX",
};
var release = new Models.ClrMamePro.Release
var release = new Data.Models.ClrMamePro.Release
{
Name = "XXXXXX",
Region = "XXXXXX",
@@ -154,19 +203,23 @@ namespace SabreTools.Serialization.Test.Deserializers
Default = "XXXXXX",
};
var biosset = new Models.ClrMamePro.BiosSet
var biosset = new Data.Models.ClrMamePro.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Models.ClrMamePro.Rom
var rom = new Data.Models.ClrMamePro.Rom
{
Name = "XXXXXX",
Size = "XXXXXX",
CRC = "XXXXXX",
MD2 = "XXXXXX",
MD4 = "XXXXXX",
MD5 = "XXXXXX",
RIPEMD128 = "XXXXXX",
RIPEMD160 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Status = "XXXXXX",
@@ -186,7 +239,7 @@ namespace SabreTools.Serialization.Test.Deserializers
MIA = "XXXXXX",
};
var disk = new Models.ClrMamePro.Disk
var disk = new Data.Models.ClrMamePro.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -196,17 +249,17 @@ namespace SabreTools.Serialization.Test.Deserializers
Flags = "XXXXXX",
};
var sample = new Models.ClrMamePro.Sample
var sample = new Data.Models.ClrMamePro.Sample
{
Name = "XXXXXX",
};
var archive = new Models.ClrMamePro.Archive
var archive = new Data.Models.ClrMamePro.Archive
{
Name = "XXXXXX",
};
var media = new Models.ClrMamePro.Media
var media = new Data.Models.ClrMamePro.Media
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -215,7 +268,7 @@ namespace SabreTools.Serialization.Test.Deserializers
SpamSum = "XXXXXX",
};
var chip = new Models.ClrMamePro.Chip
var chip = new Data.Models.ClrMamePro.Chip
{
Type = "XXXXXX",
Name = "XXXXXX",
@@ -223,7 +276,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Clock = "XXXXXX",
};
var video = new Models.ClrMamePro.Video
var video = new Data.Models.ClrMamePro.Video
{
Screen = "XXXXXX",
Orientation = "XXXXXX",
@@ -234,12 +287,12 @@ namespace SabreTools.Serialization.Test.Deserializers
Freq = "XXXXXX",
};
var sound = new Models.ClrMamePro.Sound
var sound = new Data.Models.ClrMamePro.Sound
{
Channels = "XXXXXX",
};
var input = new Models.ClrMamePro.Input
var input = new Data.Models.ClrMamePro.Input
{
Players = "XXXXXX",
Control = "XXXXXX",
@@ -249,14 +302,14 @@ namespace SabreTools.Serialization.Test.Deserializers
Service = "XXXXXX",
};
var dipswitch = new Models.ClrMamePro.DipSwitch
var dipswitch = new Data.Models.ClrMamePro.DipSwitch
{
Name = "XXXXXX",
Entry = ["XXXXXX"],
Default = "XXXXXX",
};
var driver = new Models.ClrMamePro.Driver
var driver = new Data.Models.ClrMamePro.Driver
{
Status = "XXXXXX",
Color = "XXXXXX",
@@ -266,9 +319,9 @@ namespace SabreTools.Serialization.Test.Deserializers
};
// TODO: This omits Set, should that have a separate case?
Models.ClrMamePro.GameBase gameBase = game
? new Models.ClrMamePro.Game()
: new Models.ClrMamePro.Machine();
Data.Models.ClrMamePro.GameBase gameBase = game
? new Data.Models.ClrMamePro.Game()
: new Data.Models.ClrMamePro.Machine();
gameBase.Name = "XXXXXX";
gameBase.Description = "XXXXXX";
gameBase.Year = "XXXXXX";
@@ -291,7 +344,7 @@ namespace SabreTools.Serialization.Test.Deserializers
gameBase.DipSwitch = [dipswitch];
gameBase.Driver = driver;
return new Models.ClrMamePro.MetadataFile
return new Data.Models.ClrMamePro.MetadataFile
{
ClrMamePro = cmp,
Game = [gameBase],
@@ -301,7 +354,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a ClrMamePro
/// </summary>
private static void Validate(Models.ClrMamePro.ClrMamePro? cmp)
private static void Validate(Data.Models.ClrMamePro.ClrMamePro? cmp)
{
Assert.NotNull(cmp);
Assert.Equal("XXXXXX", cmp.Name);
@@ -324,7 +377,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Models.ClrMamePro.GameBase? gb)
private static void Validate(Data.Models.ClrMamePro.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
@@ -385,7 +438,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Release
/// </summary>
private static void Validate(Models.ClrMamePro.Release? release)
private static void Validate(Data.Models.ClrMamePro.Release? release)
{
Assert.NotNull(release);
Assert.Equal("XXXXXX", release.Name);
@@ -398,7 +451,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Models.ClrMamePro.BiosSet? biosset)
private static void Validate(Data.Models.ClrMamePro.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
@@ -409,13 +462,17 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.ClrMamePro.Rom? rom)
private static void Validate(Data.Models.ClrMamePro.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.MD2);
Assert.Equal("XXXXXX", rom.MD4);
Assert.Equal("XXXXXX", rom.MD5);
Assert.Equal("XXXXXX", rom.RIPEMD128);
Assert.Equal("XXXXXX", rom.RIPEMD160);
Assert.Equal("XXXXXX", rom.SHA1);
Assert.Equal("XXXXXX", rom.Merge);
Assert.Equal("XXXXXX", rom.Status);
@@ -438,7 +495,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.ClrMamePro.Disk? disk)
private static void Validate(Data.Models.ClrMamePro.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -452,7 +509,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Models.ClrMamePro.Sample? sample)
private static void Validate(Data.Models.ClrMamePro.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
@@ -461,7 +518,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Archive
/// </summary>
private static void Validate(Models.ClrMamePro.Archive? archive)
private static void Validate(Data.Models.ClrMamePro.Archive? archive)
{
Assert.NotNull(archive);
Assert.Equal("XXXXXX", archive.Name);
@@ -470,7 +527,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Media
/// </summary>
private static void Validate(Models.ClrMamePro.Media? media)
private static void Validate(Data.Models.ClrMamePro.Media? media)
{
Assert.NotNull(media);
Assert.Equal("XXXXXX", media.Name);
@@ -483,7 +540,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Chip
/// </summary>
private static void Validate(Models.ClrMamePro.Chip? chip)
private static void Validate(Data.Models.ClrMamePro.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal("XXXXXX", chip.Type);
@@ -495,7 +552,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Video
/// </summary>
private static void Validate(Models.ClrMamePro.Video? video)
private static void Validate(Data.Models.ClrMamePro.Video? video)
{
Assert.NotNull(video);
Assert.Equal("XXXXXX", video.Screen);
@@ -510,7 +567,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Sound
/// </summary>
private static void Validate(Models.ClrMamePro.Sound? sound)
private static void Validate(Data.Models.ClrMamePro.Sound? sound)
{
Assert.NotNull(sound);
Assert.Equal("XXXXXX", sound.Channels);
@@ -519,7 +576,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Input
/// </summary>
private static void Validate(Models.ClrMamePro.Input? input)
private static void Validate(Data.Models.ClrMamePro.Input? input)
{
Assert.NotNull(input);
Assert.Equal("XXXXXX", input.Players);
@@ -533,7 +590,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Models.ClrMamePro.DipSwitch? dipswitch)
private static void Validate(Data.Models.ClrMamePro.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
@@ -548,7 +605,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Models.ClrMamePro.Driver? driver)
private static void Validate(Data.Models.ClrMamePro.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);

View File

@@ -0,0 +1,118 @@
using System;
using System.IO;
using System.Linq;
using System.Text;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class CueSheetTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new CueSheet();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new CueSheet();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new CueSheet();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new CueSheet();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new CueSheet();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new CueSheet();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
#region ReadQuotedString
[Fact]
public void ReadQuotedString_EmptyReader_Throws()
{
byte[] data = Encoding.UTF8.GetBytes(string.Empty);
var stream = new MemoryStream(data);
var reader = new StreamReader(stream, Encoding.UTF8);
Assert.Throws<ArgumentNullException>(() => CueSheet.ReadQuotedString(reader));
}
[Fact]
public void ReadQuotedString_NoQuotes_Correct()
{
byte[] data = Encoding.UTF8.GetBytes("Test1 Test2");
var stream = new MemoryStream(data);
var reader = new StreamReader(stream, Encoding.UTF8);
string? actual = CueSheet.ReadQuotedString(reader);
Assert.Equal("Test1 Test2", actual);
}
[Fact]
public void ReadQuotedString_SingleLineQuotes_Correct()
{
byte[] data = Encoding.UTF8.GetBytes("\"Test1 Test2\"");
var stream = new MemoryStream(data);
var reader = new StreamReader(stream, Encoding.UTF8);
string? actual = CueSheet.ReadQuotedString(reader);
Assert.Equal("\"Test1 Test2\"", actual);
}
[Fact]
public void ReadQuotedString_MultiLineQuotes_Correct()
{
byte[] data = Encoding.UTF8.GetBytes("\"Test1\nTest2\"");
var stream = new MemoryStream(data);
var reader = new StreamReader(stream, Encoding.UTF8);
string? actual = CueSheet.ReadQuotedString(reader);
Assert.Equal("\"Test1\nTest2\"", actual);
}
#endregion
}
}

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class DosCenterTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.DosCenter();
var serializer = new Serialization.Serializers.DosCenter();
var deserializer = new DosCenter();
var serializer = new SabreTools.Serialization.Writers.DosCenter();
// Build the data
Models.DosCenter.MetadataFile mf = Build();
Data.Models.DosCenter.MetadataFile mf = Build();
// Serialize to stream
Stream? actual = serializer.Serialize(mf);
Stream? actual = serializer.SerializeStream(mf);
Assert.NotNull(actual);
// Serialize back to original model
Models.DosCenter.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.DosCenter.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -99,9 +98,9 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.DosCenter.MetadataFile Build()
private static Data.Models.DosCenter.MetadataFile Build()
{
var dc = new Models.DosCenter.DosCenter
var dc = new Data.Models.DosCenter.DosCenter
{
Name = "XXXXXX",
Description = "XXXXXX",
@@ -112,7 +111,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Comment = "XXXXXX",
};
var file = new Models.DosCenter.File
var file = new Data.Models.DosCenter.File
{
Name = "XXXXXX",
Size = "XXXXXX",
@@ -121,13 +120,13 @@ namespace SabreTools.Serialization.Test.Deserializers
Date = "XXXXXX XXXXXX",
};
var game = new Models.DosCenter.Game
var game = new Data.Models.DosCenter.Game
{
Name = "XXXXXX",
File = [file],
};
return new Models.DosCenter.MetadataFile
return new Data.Models.DosCenter.MetadataFile
{
DosCenter = dc,
Game = [game],
@@ -137,7 +136,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DosCenter
/// </summary>
private static void Validate(Models.DosCenter.DosCenter? cmp)
private static void Validate(Data.Models.DosCenter.DosCenter? cmp)
{
Assert.NotNull(cmp);
Assert.Equal("XXXXXX", cmp.Name);
@@ -152,7 +151,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Game
/// </summary>
private static void Validate(Models.DosCenter.Game? game)
private static void Validate(Data.Models.DosCenter.Game? game)
{
Assert.NotNull(game);
Assert.Equal("XXXXXX", game.Name);
@@ -165,7 +164,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a File
/// </summary>
private static void Validate(Models.DosCenter.File? rom)
private static void Validate(Data.Models.DosCenter.File? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class EverdriveSMDBTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.EverdriveSMDB();
var serializer = new Serialization.Serializers.EverdriveSMDB();
var deserializer = new EverdriveSMDB();
var serializer = new SabreTools.Serialization.Writers.EverdriveSMDB();
// Build the data
Models.EverdriveSMDB.MetadataFile mf = Build();
Data.Models.EverdriveSMDB.MetadataFile mf = Build();
// Serialize to stream
Stream? actual = serializer.Serialize(mf);
Stream? actual = serializer.SerializeStream(mf);
Assert.NotNull(actual);
// Serialize back to original model
Models.EverdriveSMDB.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.EverdriveSMDB.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -98,9 +97,9 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.EverdriveSMDB.MetadataFile Build()
private static Data.Models.EverdriveSMDB.MetadataFile Build()
{
var row = new Models.EverdriveSMDB.Row
var row = new Data.Models.EverdriveSMDB.Row
{
SHA256 = "XXXXXX",
Name = "XXXXXX",
@@ -110,7 +109,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Size = "XXXXXX",
};
return new Models.EverdriveSMDB.MetadataFile
return new Data.Models.EverdriveSMDB.MetadataFile
{
Row = [row],
};
@@ -119,7 +118,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Row
/// </summary>
private static void Validate(Models.EverdriveSMDB.Row? row)
private static void Validate(Data.Models.EverdriveSMDB.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.SHA256);

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class GCFTests
{

View File

@@ -1,18 +1,18 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class CueSheetTests
public class GZipTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new CueSheet();
var deserializer = new GZip();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
@@ -23,7 +23,7 @@ namespace SabreTools.Serialization.Test.Deserializers
{
byte[]? data = [];
int offset = 0;
var deserializer = new CueSheet();
var deserializer = new GZip();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
@@ -34,7 +34,7 @@ namespace SabreTools.Serialization.Test.Deserializers
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new CueSheet();
var deserializer = new GZip();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
@@ -44,7 +44,7 @@ namespace SabreTools.Serialization.Test.Deserializers
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new CueSheet();
var deserializer = new GZip();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
@@ -54,7 +54,7 @@ namespace SabreTools.Serialization.Test.Deserializers
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new CueSheet();
var deserializer = new GZip();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
@@ -64,7 +64,7 @@ namespace SabreTools.Serialization.Test.Deserializers
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new CueSheet();
var deserializer = new GZip();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);

View File

@@ -2,10 +2,10 @@ using System;
using System.IO;
using System.Linq;
using SabreTools.Hashing;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class HashfileTests
{
@@ -76,18 +76,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripSFVTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.CRC32);
Data.Models.Hashfile.Hashfile hf = Build(HashType.CRC32);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.CRC32);
Stream? actual = serializer.SerializeStream(hf, HashType.CRC32);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.CRC32);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.CRC32);
// Validate the data
Assert.NotNull(newHf);
@@ -100,18 +100,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripMD2Test()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.MD2);
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD2);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.MD2);
Stream? actual = serializer.SerializeStream(hf, HashType.MD2);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD2);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD2);
// Validate the data
Assert.NotNull(newHf);
@@ -124,18 +124,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripMD4Test()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.MD4);
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD4);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.MD4);
Stream? actual = serializer.SerializeStream(hf, HashType.MD4);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD4);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD4);
// Validate the data
Assert.NotNull(newHf);
@@ -148,18 +148,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripMD5Test()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.MD5);
Data.Models.Hashfile.Hashfile hf = Build(HashType.MD5);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.MD5);
Stream? actual = serializer.SerializeStream(hf, HashType.MD5);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD5);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD5);
// Validate the data
Assert.NotNull(newHf);
@@ -172,18 +172,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripSHA1Test()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SHA1);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA1);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.SHA1);
Stream? actual = serializer.SerializeStream(hf, HashType.SHA1);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA1);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA1);
// Validate the data
Assert.NotNull(newHf);
@@ -196,18 +196,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripSHA256Test()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SHA256);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA256);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.SHA256);
Stream? actual = serializer.SerializeStream(hf, HashType.SHA256);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA256);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA256);
// Validate the data
Assert.NotNull(newHf);
@@ -220,18 +220,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripSHA384Test()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SHA384);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA384);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.SHA384);
Stream? actual = serializer.SerializeStream(hf, HashType.SHA384);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA384);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA384);
// Validate the data
Assert.NotNull(newHf);
@@ -244,18 +244,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripSHA512Test()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SHA512);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SHA512);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.SHA512);
Stream? actual = serializer.SerializeStream(hf, HashType.SHA512);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA512);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA512);
// Validate the data
Assert.NotNull(newHf);
@@ -268,18 +268,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripSpamSumTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Hashfile();
var serializer = new Serialization.Serializers.Hashfile();
var deserializer = new Hashfile();
var serializer = new SabreTools.Serialization.Writers.Hashfile();
// Build the data
Models.Hashfile.Hashfile hf = Build(HashType.SpamSum);
Data.Models.Hashfile.Hashfile hf = Build(HashType.SpamSum);
// Serialize to stream
Stream? actual = serializer.Serialize(hf, HashType.SpamSum);
Stream? actual = serializer.SerializeStream(hf, HashType.SpamSum);
Assert.NotNull(actual);
// Serialize back to original model
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SpamSum);
Data.Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SpamSum);
// Validate the data
Assert.NotNull(newHf);
@@ -291,19 +291,19 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Hashfile.Hashfile Build(HashType hashType)
private static Data.Models.Hashfile.Hashfile Build(HashType hashType)
{
return hashType switch
{
HashType.CRC32 => new Models.Hashfile.Hashfile { SFV = [new Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] },
HashType.MD2 => new Models.Hashfile.Hashfile { MD2 = [new Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.MD4 => new Models.Hashfile.Hashfile { MD4 = [new Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.MD5 => new Models.Hashfile.Hashfile { MD5 = [new Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA1 => new Models.Hashfile.Hashfile { SHA1 = [new Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA256 => new Models.Hashfile.Hashfile { SHA256 = [new Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA384 => new Models.Hashfile.Hashfile { SHA384 = [new Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA512 => new Models.Hashfile.Hashfile { SHA512 = [new Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SpamSum => new Models.Hashfile.Hashfile { SpamSum = [new Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.CRC32 => new Data.Models.Hashfile.Hashfile { SFV = [new Data.Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] },
HashType.MD2 => new Data.Models.Hashfile.Hashfile { MD2 = [new Data.Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.MD4 => new Data.Models.Hashfile.Hashfile { MD4 = [new Data.Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.MD5 => new Data.Models.Hashfile.Hashfile { MD5 = [new Data.Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA1 => new Data.Models.Hashfile.Hashfile { SHA1 = [new Data.Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA256 => new Data.Models.Hashfile.Hashfile { SHA256 = [new Data.Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA384 => new Data.Models.Hashfile.Hashfile { SHA384 = [new Data.Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SHA512 => new Data.Models.Hashfile.Hashfile { SHA512 = [new Data.Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] },
HashType.SpamSum => new Data.Models.Hashfile.Hashfile { SpamSum = [new Data.Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] },
_ => throw new ArgumentOutOfRangeException(),
};
}
@@ -311,7 +311,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SFV
/// </summary>
private static void Validate(Models.Hashfile.SFV? sfv)
private static void Validate(Data.Models.Hashfile.SFV? sfv)
{
Assert.NotNull(sfv);
Assert.Equal("XXXXXX", sfv.File);
@@ -321,7 +321,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a MD2
/// </summary>
private static void Validate(Models.Hashfile.MD2? md2)
private static void Validate(Data.Models.Hashfile.MD2? md2)
{
Assert.NotNull(md2);
Assert.Equal("XXXXXX", md2.Hash);
@@ -331,7 +331,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a MD4
/// </summary>
private static void Validate(Models.Hashfile.MD4? md4)
private static void Validate(Data.Models.Hashfile.MD4? md4)
{
Assert.NotNull(md4);
Assert.Equal("XXXXXX", md4.Hash);
@@ -341,7 +341,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a MD5
/// </summary>
private static void Validate(Models.Hashfile.MD5? md5)
private static void Validate(Data.Models.Hashfile.MD5? md5)
{
Assert.NotNull(md5);
Assert.Equal("XXXXXX", md5.Hash);
@@ -351,7 +351,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SHA1
/// </summary>
private static void Validate(Models.Hashfile.SHA1? sha1)
private static void Validate(Data.Models.Hashfile.SHA1? sha1)
{
Assert.NotNull(sha1);
Assert.Equal("XXXXXX", sha1.Hash);
@@ -361,7 +361,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SHA256
/// </summary>
private static void Validate(Models.Hashfile.SHA256? sha256)
private static void Validate(Data.Models.Hashfile.SHA256? sha256)
{
Assert.NotNull(sha256);
Assert.Equal("XXXXXX", sha256.Hash);
@@ -371,7 +371,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SHA384
/// </summary>
private static void Validate(Models.Hashfile.SHA384? sha384)
private static void Validate(Data.Models.Hashfile.SHA384? sha384)
{
Assert.NotNull(sha384);
Assert.Equal("XXXXXX", sha384.Hash);
@@ -381,7 +381,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SHA512
/// </summary>
private static void Validate(Models.Hashfile.SHA512? sha512)
private static void Validate(Data.Models.Hashfile.SHA512? sha512)
{
Assert.NotNull(sha512);
Assert.Equal("XXXXXX", sha512.Hash);
@@ -391,7 +391,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SpamSum
/// </summary>
private static void Validate(Models.Hashfile.SpamSum? spamsum)
private static void Validate(Data.Models.Hashfile.SpamSum? spamsum)
{
Assert.NotNull(spamsum);
Assert.Equal("XXXXXX", spamsum.Hash);

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class IRDTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class InstallShieldArchiveV3Tests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class InstallShieldCabinetTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class LZKWAJTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class LZQBasicTests

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class LZSZDDTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class LinearExecutableTests
{

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class ListromTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Listrom();
var serializer = new Serialization.Serializers.Listrom();
var deserializer = new Listrom();
var serializer = new SabreTools.Serialization.Writers.Listrom();
// Build the data
Models.Listrom.MetadataFile mf = Build();
Data.Models.Listrom.MetadataFile mf = Build();
// Serialize to stream
Stream? actual = serializer.Serialize(mf);
Stream? actual = serializer.SerializeStream(mf);
Assert.NotNull(actual);
// Serialize back to original model
Models.Listrom.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.Listrom.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -100,9 +99,9 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Listrom.MetadataFile Build()
private static Data.Models.Listrom.MetadataFile Build()
{
var romGood = new Models.Listrom.Row
var romGood = new Data.Models.Listrom.Row
{
Name = "XXXXXX",
Size = "12345",
@@ -112,7 +111,7 @@ namespace SabreTools.Serialization.Test.Deserializers
NoGoodDumpKnown = false,
};
var romBad = new Models.Listrom.Row
var romBad = new Data.Models.Listrom.Row
{
Name = "XXXXXX",
Size = "12345",
@@ -122,7 +121,7 @@ namespace SabreTools.Serialization.Test.Deserializers
NoGoodDumpKnown = false,
};
var diskGoodMd5 = new Models.Listrom.Row
var diskGoodMd5 = new Data.Models.Listrom.Row
{
Name = "XXXXXX",
Bad = false,
@@ -131,7 +130,7 @@ namespace SabreTools.Serialization.Test.Deserializers
NoGoodDumpKnown = false,
};
var diskGoodSha1 = new Models.Listrom.Row
var diskGoodSha1 = new Data.Models.Listrom.Row
{
Name = "XXXXXX",
Bad = false,
@@ -140,7 +139,7 @@ namespace SabreTools.Serialization.Test.Deserializers
NoGoodDumpKnown = false,
};
var diskBad = new Models.Listrom.Row
var diskBad = new Data.Models.Listrom.Row
{
Name = "XXXXXX",
Bad = false,
@@ -149,19 +148,19 @@ namespace SabreTools.Serialization.Test.Deserializers
NoGoodDumpKnown = true,
};
var device = new Models.Listrom.Set()
var device = new Data.Models.Listrom.Set()
{
Device = "XXXXXX",
Row = [romGood, romBad],
};
var driver = new Models.Listrom.Set()
var driver = new Data.Models.Listrom.Set()
{
Driver = "XXXXXX",
Row = [diskGoodMd5, diskGoodSha1, diskBad],
};
return new Models.Listrom.MetadataFile
return new Data.Models.Listrom.MetadataFile
{
Set = [device, driver],
};
@@ -170,7 +169,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Set
/// </summary>
private static void ValidateDevice(Models.Listrom.Set? set)
private static void ValidateDevice(Data.Models.Listrom.Set? set)
{
Assert.NotNull(set);
Assert.Equal("XXXXXX", set.Device);
@@ -185,7 +184,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Set
/// </summary>
private static void ValidateDriver(Models.Listrom.Set? set)
private static void ValidateDriver(Data.Models.Listrom.Set? set)
{
Assert.NotNull(set);
Assert.Equal("XXXXXX", set.Driver);
@@ -201,7 +200,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateGoodRom(Models.Listrom.Row? row)
private static void ValidateGoodRom(Data.Models.Listrom.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);
@@ -215,7 +214,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateBadRom(Models.Listrom.Row? row)
private static void ValidateBadRom(Data.Models.Listrom.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);
@@ -229,7 +228,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateGoodMd5Disk(Models.Listrom.Row? row)
private static void ValidateGoodMd5Disk(Data.Models.Listrom.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);
@@ -242,7 +241,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateGoodSha1Disk(Models.Listrom.Row? row)
private static void ValidateGoodSha1Disk(Data.Models.Listrom.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);
@@ -255,7 +254,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateBadDisk(Models.Listrom.Row? row)
private static void ValidateBadDisk(Data.Models.Listrom.Row? row)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.Name);

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class ListxmlTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripGameTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Listxml();
var serializer = new Serialization.Serializers.Listxml();
var deserializer = new Listxml();
var serializer = new SabreTools.Serialization.Writers.Listxml();
// Build the data
Models.Listxml.Mame mame = Build(game: true);
Data.Models.Listxml.Mame mame = Build(game: true);
// Serialize to stream
Stream? actual = serializer.Serialize(mame);
Assert.NotNull(actual);
// Serialize back to original model
Models.Listxml.Mame? newMame = deserializer.Deserialize(actual);
Data.Models.Listxml.Mame? newMame = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMame);
@@ -103,18 +102,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripMachineTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Listxml();
var serializer = new Serialization.Serializers.Listxml();
var deserializer = new Listxml();
var serializer = new SabreTools.Serialization.Writers.Listxml();
// Build the data
Models.Listxml.Mame mame = Build(game: false);
Data.Models.Listxml.Mame mame = Build(game: false);
// Serialize to stream
Stream? actual = serializer.Serialize(mame);
Assert.NotNull(actual);
// Serialize back to original model
Models.Listxml.Mame? newMame = deserializer.Deserialize(actual);
Data.Models.Listxml.Mame? newMame = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMame);
@@ -130,16 +129,16 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Listxml.Mame Build(bool game)
private static Data.Models.Listxml.Mame Build(bool game)
{
var biosset = new Models.Listxml.BiosSet
var biosset = new Data.Models.Listxml.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Models.Listxml.Rom
var rom = new Data.Models.Listxml.Rom
{
Name = "XXXXXX",
Bios = "XXXXXX",
@@ -155,7 +154,7 @@ namespace SabreTools.Serialization.Test.Deserializers
SoundOnly = "XXXXXX",
};
var disk = new Models.Listxml.Disk
var disk = new Data.Models.Listxml.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -168,17 +167,17 @@ namespace SabreTools.Serialization.Test.Deserializers
Optional = "XXXXXX",
};
var deviceref = new Models.Listxml.DeviceRef
var deviceref = new Data.Models.Listxml.DeviceRef
{
Name = "XXXXXX",
};
var sample = new Models.Listxml.Sample
var sample = new Data.Models.Listxml.Sample
{
Name = "XXXXXX",
};
var chip = new Models.Listxml.Chip
var chip = new Data.Models.Listxml.Chip
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -187,7 +186,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Clock = "XXXXXX",
};
var display = new Models.Listxml.Display
var display = new Data.Models.Listxml.Display
{
Tag = "XXXXXX",
Type = "XXXXXX",
@@ -205,7 +204,7 @@ namespace SabreTools.Serialization.Test.Deserializers
VBStart = "XXXXXX",
};
var video = new Models.Listxml.Video
var video = new Data.Models.Listxml.Video
{
Screen = "XXXXXX",
Orientation = "XXXXXX",
@@ -216,12 +215,12 @@ namespace SabreTools.Serialization.Test.Deserializers
Refresh = "XXXXXX",
};
var sound = new Models.Listxml.Sound
var sound = new Data.Models.Listxml.Sound
{
Channels = "XXXXXX",
};
var control = new Models.Listxml.Control
var control = new Data.Models.Listxml.Control
{
Type = "XXXXXX",
Player = "XXXXXX",
@@ -237,7 +236,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Ways3 = "XXXXXX",
};
var input = new Models.Listxml.Input
var input = new Data.Models.Listxml.Input
{
Service = "XXXXXX",
Tilt = "XXXXXX",
@@ -248,7 +247,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Control = [control],
};
var condition = new Models.Listxml.Condition
var condition = new Data.Models.Listxml.Condition
{
Tag = "XXXXXX",
Mask = "XXXXXX",
@@ -256,14 +255,14 @@ namespace SabreTools.Serialization.Test.Deserializers
Value = "XXXXXX",
};
var diplocation = new Models.Listxml.DipLocation
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var dipvalue = new Models.Listxml.DipValue
var dipvalue = new Data.Models.Listxml.DipValue
{
Name = "XXXXXX",
Value = "XXXXXX",
@@ -271,7 +270,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Condition = condition,
};
var dipswitch = new Models.Listxml.DipSwitch
var dipswitch = new Data.Models.Listxml.DipSwitch
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -281,14 +280,14 @@ namespace SabreTools.Serialization.Test.Deserializers
DipValue = [dipvalue],
};
var conflocation = new Models.Listxml.ConfLocation
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var confsetting = new Models.Listxml.ConfSetting
var confsetting = new Data.Models.Listxml.ConfSetting
{
Name = "XXXXXX",
Value = "XXXXXX",
@@ -296,7 +295,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Condition = condition,
};
var configuration = new Models.Listxml.Configuration
var configuration = new Data.Models.Listxml.Configuration
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -306,25 +305,25 @@ namespace SabreTools.Serialization.Test.Deserializers
ConfSetting = [confsetting],
};
var analog = new Models.Listxml.Analog
var analog = new Data.Models.Listxml.Analog
{
Mask = "XXXXXX",
};
var port = new Models.Listxml.Port
var port = new Data.Models.Listxml.Port
{
Tag = "XXXXXX",
Analog = [analog],
};
var adjuster = new Models.Listxml.Adjuster
var adjuster = new Data.Models.Listxml.Adjuster
{
Name = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var driver = new Models.Listxml.Driver
var driver = new Data.Models.Listxml.Driver
{
Status = "XXXXXX",
Color = "XXXXXX",
@@ -339,25 +338,25 @@ namespace SabreTools.Serialization.Test.Deserializers
Incomplete = "XXXXXX",
};
var feature = new Models.Listxml.Feature
var feature = new Data.Models.Listxml.Feature
{
Type = "XXXXXX",
Status = "XXXXXX",
Overall = "XXXXXX",
};
var instance = new Models.Listxml.Instance
var instance = new Data.Models.Listxml.Instance
{
Name = "XXXXXX",
BriefName = "XXXXXX",
};
var extension = new Models.Listxml.Extension
var extension = new Data.Models.Listxml.Extension
{
Name = "XXXXXX",
};
var device = new Models.Listxml.Device
var device = new Data.Models.Listxml.Device
{
Type = "XXXXXX",
Tag = "XXXXXX",
@@ -368,20 +367,20 @@ namespace SabreTools.Serialization.Test.Deserializers
Extension = [extension],
};
var slotOption = new Models.Listxml.SlotOption
var slotOption = new Data.Models.Listxml.SlotOption
{
Name = "XXXXXX",
DevName = "XXXXXX",
Default = "XXXXXX",
};
var slot = new Models.Listxml.Slot
var slot = new Data.Models.Listxml.Slot
{
Name = "XXXXXX",
SlotOption = [slotOption],
};
var softwarelist = new Models.Listxml.SoftwareList
var softwarelist = new Data.Models.Listxml.SoftwareList
{
Tag = "XXXXXX",
Name = "XXXXXX",
@@ -389,16 +388,16 @@ namespace SabreTools.Serialization.Test.Deserializers
Filter = "XXXXXX",
};
var ramoption = new Models.Listxml.RamOption
var ramoption = new Data.Models.Listxml.RamOption
{
Name = "XXXXXX",
Default = "XXXXXX",
Content = "XXXXXX",
};
Models.Listxml.GameBase gameBase = game
? new Models.Listxml.Game()
: new Models.Listxml.Machine();
Data.Models.Listxml.GameBase gameBase = game
? new Data.Models.Listxml.Game()
: new Data.Models.Listxml.Machine();
gameBase.Name = "XXXXXX";
gameBase.SourceFile = "XXXXXX";
gameBase.IsBios = "XXXXXX";
@@ -433,7 +432,7 @@ namespace SabreTools.Serialization.Test.Deserializers
gameBase.SoftwareList = [softwarelist];
gameBase.RamOption = [ramoption];
return new Models.Listxml.Mame
return new Data.Models.Listxml.Mame
{
Build = "XXXXXX",
Debug = "XXXXXX",
@@ -445,7 +444,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Models.Listxml.GameBase? gb)
private static void Validate(Data.Models.Listxml.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
@@ -539,7 +538,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Models.Listxml.BiosSet? biosset)
private static void Validate(Data.Models.Listxml.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
@@ -550,7 +549,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.Listxml.Rom? rom)
private static void Validate(Data.Models.Listxml.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
@@ -570,7 +569,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.Listxml.Disk? disk)
private static void Validate(Data.Models.Listxml.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -587,7 +586,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DeviceRef
/// </summary>
private static void Validate(Models.Listxml.DeviceRef? deviceref)
private static void Validate(Data.Models.Listxml.DeviceRef? deviceref)
{
Assert.NotNull(deviceref);
Assert.Equal("XXXXXX", deviceref.Name);
@@ -596,7 +595,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Models.Listxml.Sample? sample)
private static void Validate(Data.Models.Listxml.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
@@ -605,7 +604,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Chip
/// </summary>
private static void Validate(Models.Listxml.Chip? chip)
private static void Validate(Data.Models.Listxml.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal("XXXXXX", chip.Name);
@@ -618,7 +617,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Display
/// </summary>
private static void Validate(Models.Listxml.Display? display)
private static void Validate(Data.Models.Listxml.Display? display)
{
Assert.NotNull(display);
Assert.Equal("XXXXXX", display.Tag);
@@ -640,7 +639,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Video
/// </summary>
private static void Validate(Models.Listxml.Video? video)
private static void Validate(Data.Models.Listxml.Video? video)
{
Assert.NotNull(video);
Assert.Equal("XXXXXX", video.Screen);
@@ -655,7 +654,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Sound
/// </summary>
private static void Validate(Models.Listxml.Sound? sound)
private static void Validate(Data.Models.Listxml.Sound? sound)
{
Assert.NotNull(sound);
Assert.Equal("XXXXXX", sound.Channels);
@@ -664,7 +663,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Input
/// </summary>
private static void Validate(Models.Listxml.Input? input)
private static void Validate(Data.Models.Listxml.Input? input)
{
Assert.NotNull(input);
Assert.Equal("XXXXXX", input.Service);
@@ -682,7 +681,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Control
/// </summary>
private static void Validate(Models.Listxml.Control? control)
private static void Validate(Data.Models.Listxml.Control? control)
{
Assert.NotNull(control);
Assert.Equal("XXXXXX", control.Type);
@@ -702,7 +701,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Models.Listxml.DipSwitch? dipswitch)
private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
@@ -722,7 +721,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Condition
/// </summary>
private static void Validate(Models.Listxml.Condition? condition)
private static void Validate(Data.Models.Listxml.Condition? condition)
{
Assert.NotNull(condition);
Assert.Equal("XXXXXX", condition.Tag);
@@ -734,7 +733,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipLocation
/// </summary>
private static void Validate(Models.Listxml.DipLocation? diplocation)
private static void Validate(Data.Models.Listxml.DipLocation? diplocation)
{
Assert.NotNull(diplocation);
Assert.Equal("XXXXXX", diplocation.Name);
@@ -745,7 +744,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipValue
/// </summary>
private static void Validate(Models.Listxml.DipValue? dipvalue)
private static void Validate(Data.Models.Listxml.DipValue? dipvalue)
{
Assert.NotNull(dipvalue);
Assert.Equal("XXXXXX", dipvalue.Name);
@@ -757,7 +756,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Configuration
/// </summary>
private static void Validate(Models.Listxml.Configuration? configuration)
private static void Validate(Data.Models.Listxml.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.Name);
@@ -777,7 +776,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a ConfLocation
/// </summary>
private static void Validate(Models.Listxml.ConfLocation? conflocation)
private static void Validate(Data.Models.Listxml.ConfLocation? conflocation)
{
Assert.NotNull(conflocation);
Assert.Equal("XXXXXX", conflocation.Name);
@@ -788,7 +787,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a ConfSetting
/// </summary>
private static void Validate(Models.Listxml.ConfSetting? confsetting)
private static void Validate(Data.Models.Listxml.ConfSetting? confsetting)
{
Assert.NotNull(confsetting);
Assert.Equal("XXXXXX", confsetting.Name);
@@ -800,7 +799,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Port
/// </summary>
private static void Validate(Models.Listxml.Port? port)
private static void Validate(Data.Models.Listxml.Port? port)
{
Assert.NotNull(port);
Assert.Equal("XXXXXX", port.Tag);
@@ -813,7 +812,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Analog
/// </summary>
private static void Validate(Models.Listxml.Analog? analog)
private static void Validate(Data.Models.Listxml.Analog? analog)
{
Assert.NotNull(analog);
Assert.Equal("XXXXXX", analog.Mask);
@@ -822,7 +821,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Adjuster
/// </summary>
private static void Validate(Models.Listxml.Adjuster? adjuster)
private static void Validate(Data.Models.Listxml.Adjuster? adjuster)
{
Assert.NotNull(adjuster);
Assert.Equal("XXXXXX", adjuster.Name);
@@ -833,7 +832,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Models.Listxml.Driver? driver)
private static void Validate(Data.Models.Listxml.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);
@@ -852,7 +851,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Feature
/// </summary>
private static void Validate(Models.Listxml.Feature? feature)
private static void Validate(Data.Models.Listxml.Feature? feature)
{
Assert.NotNull(feature);
Assert.Equal("XXXXXX", feature.Type);
@@ -863,7 +862,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Device
/// </summary>
private static void Validate(Models.Listxml.Device? device)
private static void Validate(Data.Models.Listxml.Device? device)
{
Assert.NotNull(device);
Assert.Equal("XXXXXX", device.Type);
@@ -881,7 +880,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Instance
/// </summary>
private static void Validate(Models.Listxml.Instance? instance)
private static void Validate(Data.Models.Listxml.Instance? instance)
{
Assert.NotNull(instance);
Assert.Equal("XXXXXX", instance.Name);
@@ -891,7 +890,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Extension
/// </summary>
private static void Validate(Models.Listxml.Extension? extension)
private static void Validate(Data.Models.Listxml.Extension? extension)
{
Assert.NotNull(extension);
Assert.Equal("XXXXXX", extension.Name);
@@ -900,7 +899,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Slot
/// </summary>
private static void Validate(Models.Listxml.Slot? slot)
private static void Validate(Data.Models.Listxml.Slot? slot)
{
Assert.NotNull(slot);
Assert.Equal("XXXXXX", slot.Name);
@@ -913,7 +912,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SlotOption
/// </summary>
private static void Validate(Models.Listxml.SlotOption? slotoption)
private static void Validate(Data.Models.Listxml.SlotOption? slotoption)
{
Assert.NotNull(slotoption);
Assert.Equal("XXXXXX", slotoption.Name);
@@ -924,7 +923,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SoftwareList
/// </summary>
private static void Validate(Models.Listxml.SoftwareList? softwarelist)
private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist)
{
Assert.NotNull(softwarelist);
Assert.Equal("XXXXXX", softwarelist.Tag);
@@ -936,7 +935,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a RamOption
/// </summary>
private static void Validate(Models.Listxml.RamOption? ramoption)
private static void Validate(Data.Models.Listxml.RamOption? ramoption)
{
Assert.NotNull(ramoption);
Assert.Equal("XXXXXX", ramoption.Name);

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class LogiqxTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripGameTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Logiqx();
var serializer = new Serialization.Serializers.Logiqx();
var deserializer = new Logiqx();
var serializer = new SabreTools.Serialization.Writers.Logiqx();
// Build the data
Models.Logiqx.Datafile df = Build(game: true);
Data.Models.Logiqx.Datafile df = Build(game: true);
// Serialize to stream
Stream? metadata = serializer.Serialize(df);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Logiqx.Datafile? newDf = deserializer.Deserialize(metadata);
Data.Models.Logiqx.Datafile? newDf = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newDf);
@@ -107,18 +106,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripMachineTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.Logiqx();
var serializer = new Serialization.Serializers.Logiqx();
var deserializer = new Logiqx();
var serializer = new SabreTools.Serialization.Writers.Logiqx();
// Build the data
Models.Logiqx.Datafile df = Build(game: false);
Data.Models.Logiqx.Datafile df = Build(game: false);
// Serialize to stream
Stream? metadata = serializer.Serialize(df);
Assert.NotNull(metadata);
// Serialize back to original model
Models.Logiqx.Datafile? newDf = deserializer.Deserialize(metadata);
Data.Models.Logiqx.Datafile? newDf = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newDf);
@@ -138,9 +137,9 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Logiqx.Datafile Build(bool game)
private static Data.Models.Logiqx.Datafile Build(bool game)
{
var clrmamepro = new Models.Logiqx.ClrMamePro
var clrmamepro = new Data.Models.Logiqx.ClrMamePro
{
Header = "XXXXXX",
ForceMerging = "XXXXXX",
@@ -148,7 +147,7 @@ namespace SabreTools.Serialization.Test.Deserializers
ForcePacking = "XXXXXX",
};
var romcenter = new Models.Logiqx.RomCenter
var romcenter = new Data.Models.Logiqx.RomCenter
{
Plugin = "XXXXXX",
RomMode = "XXXXXX",
@@ -159,7 +158,7 @@ namespace SabreTools.Serialization.Test.Deserializers
LockSampleMode = "XXXXXX",
};
var header = new Models.Logiqx.Header
var header = new Data.Models.Logiqx.Header
{
Id = "XXXXXX",
Name = "XXXXXX",
@@ -178,7 +177,7 @@ namespace SabreTools.Serialization.Test.Deserializers
RomCenter = romcenter,
};
var trurip = new Models.Logiqx.Trurip
var trurip = new Data.Models.Logiqx.Trurip
{
TitleID = "XXXXXX",
Publisher = "XXXXXX",
@@ -196,7 +195,7 @@ namespace SabreTools.Serialization.Test.Deserializers
RelatedTo = "XXXXXX",
};
var release = new Models.Logiqx.Release
var release = new Data.Models.Logiqx.Release
{
Name = "XXXXXX",
Region = "XXXXXX",
@@ -205,19 +204,23 @@ namespace SabreTools.Serialization.Test.Deserializers
Default = "XXXXXX",
};
var biosset = new Models.Logiqx.BiosSet
var biosset = new Data.Models.Logiqx.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Models.Logiqx.Rom
var rom = new Data.Models.Logiqx.Rom
{
Name = "XXXXXX",
Size = "XXXXXX",
CRC = "XXXXXX",
MD2 = "XXXXXX",
MD4 = "XXXXXX",
MD5 = "XXXXXX",
RIPEMD128 = "XXXXXX",
RIPEMD160 = "XXXXXX",
SHA1 = "XXXXXX",
SHA256 = "XXXXXX",
SHA384 = "XXXXXX",
@@ -234,7 +237,7 @@ namespace SabreTools.Serialization.Test.Deserializers
MIA = "XXXXXX",
};
var disk = new Models.Logiqx.Disk
var disk = new Data.Models.Logiqx.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -244,7 +247,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Region = "XXXXXX",
};
var media = new Models.Logiqx.Media
var media = new Data.Models.Logiqx.Media
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -253,22 +256,22 @@ namespace SabreTools.Serialization.Test.Deserializers
SpamSum = "XXXXXX",
};
var deviceRef = new Models.Logiqx.DeviceRef
var deviceRef = new Data.Models.Logiqx.DeviceRef
{
Name = "XXXXXX",
};
var sample = new Models.Logiqx.Sample
var sample = new Data.Models.Logiqx.Sample
{
Name = "XXXXXX",
};
var archive = new Models.Logiqx.Archive
var archive = new Data.Models.Logiqx.Archive
{
Name = "XXXXXX",
};
var driver = new Models.Logiqx.Driver
var driver = new Data.Models.Logiqx.Driver
{
Status = "XXXXXX",
Emulation = "XXXXXX",
@@ -280,7 +283,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Incomplete = "XXXXXX",
};
var softwarelist = new Models.Logiqx.SoftwareList
var softwarelist = new Data.Models.Logiqx.SoftwareList
{
Tag = "XXXXXX",
Name = "XXXXXX",
@@ -288,9 +291,9 @@ namespace SabreTools.Serialization.Test.Deserializers
Filter = "XXXXXX",
};
Models.Logiqx.GameBase gameBase = game
? new Models.Logiqx.Game()
: new Models.Logiqx.Machine();
Data.Models.Logiqx.GameBase gameBase = game
? new Data.Models.Logiqx.Game()
: new Data.Models.Logiqx.Machine();
gameBase.Name = "XXXXXX";
gameBase.SourceFile = "XXXXXX";
gameBase.IsBios = "XXXXXX";
@@ -322,7 +325,7 @@ namespace SabreTools.Serialization.Test.Deserializers
gameBase.Driver = driver;
gameBase.SoftwareList = [softwarelist];
return new Models.Logiqx.Datafile
return new Data.Models.Logiqx.Datafile
{
Build = "XXXXXX",
Debug = "XXXXXX",
@@ -336,7 +339,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Header
/// </summary>
private static void Validate(Models.Logiqx.Header? header)
private static void Validate(Data.Models.Logiqx.Header? header)
{
Assert.NotNull(header);
Assert.Equal("XXXXXX", header.Id);
@@ -359,7 +362,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a ClrMamePro
/// </summary>
private static void Validate(Models.Logiqx.ClrMamePro? cmp)
private static void Validate(Data.Models.Logiqx.ClrMamePro? cmp)
{
Assert.NotNull(cmp);
Assert.Equal("XXXXXX", cmp.Header);
@@ -371,7 +374,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a RomCenter
/// </summary>
private static void Validate(Models.Logiqx.RomCenter? rc)
private static void Validate(Data.Models.Logiqx.RomCenter? rc)
{
Assert.NotNull(rc);
Assert.Equal("XXXXXX", rc.Plugin);
@@ -386,7 +389,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Models.Logiqx.GameBase? gb)
private static void Validate(Data.Models.Logiqx.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
@@ -460,7 +463,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Trurip
/// </summary>
private static void Validate(Models.Logiqx.Trurip? trurip)
private static void Validate(Data.Models.Logiqx.Trurip? trurip)
{
Assert.NotNull(trurip);
Assert.Equal("XXXXXX", trurip.TitleID);
@@ -482,7 +485,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Release
/// </summary>
private static void Validate(Models.Logiqx.Release? release)
private static void Validate(Data.Models.Logiqx.Release? release)
{
Assert.NotNull(release);
Assert.Equal("XXXXXX", release.Name);
@@ -495,7 +498,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Models.Logiqx.BiosSet? biosset)
private static void Validate(Data.Models.Logiqx.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
@@ -506,13 +509,17 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.Logiqx.Rom? rom)
private static void Validate(Data.Models.Logiqx.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.MD2);
Assert.Equal("XXXXXX", rom.MD4);
Assert.Equal("XXXXXX", rom.MD5);
Assert.Equal("XXXXXX", rom.RIPEMD128);
Assert.Equal("XXXXXX", rom.RIPEMD160);
Assert.Equal("XXXXXX", rom.SHA1);
Assert.Equal("XXXXXX", rom.SHA256);
Assert.Equal("XXXXXX", rom.SHA384);
@@ -532,7 +539,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.Logiqx.Disk? disk)
private static void Validate(Data.Models.Logiqx.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -546,7 +553,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Media
/// </summary>
private static void Validate(Models.Logiqx.Media? media)
private static void Validate(Data.Models.Logiqx.Media? media)
{
Assert.NotNull(media);
Assert.Equal("XXXXXX", media.Name);
@@ -559,7 +566,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DeviceRef
/// </summary>
private static void Validate(Models.Logiqx.DeviceRef? deviceref)
private static void Validate(Data.Models.Logiqx.DeviceRef? deviceref)
{
Assert.NotNull(deviceref);
Assert.Equal("XXXXXX", deviceref.Name);
@@ -568,7 +575,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Models.Logiqx.Sample? sample)
private static void Validate(Data.Models.Logiqx.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
@@ -577,7 +584,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Archive
/// </summary>
private static void Validate(Models.Logiqx.Archive? archive)
private static void Validate(Data.Models.Logiqx.Archive? archive)
{
Assert.NotNull(archive);
Assert.Equal("XXXXXX", archive.Name);
@@ -586,7 +593,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Models.Logiqx.Driver? driver)
private static void Validate(Data.Models.Logiqx.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);
@@ -602,7 +609,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SoftwareList
/// </summary>
private static void Validate(Models.Logiqx.SoftwareList? softwarelist)
private static void Validate(Data.Models.Logiqx.SoftwareList? softwarelist)
{
Assert.NotNull(softwarelist);
Assert.Equal("XXXXXX", softwarelist.Tag);

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class M1Tests
{
@@ -74,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripGameTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.M1();
var serializer = new Serialization.Serializers.M1();
var deserializer = new M1();
var serializer = new SabreTools.Serialization.Writers.M1();
// Build the data
Models.Listxml.M1 m1 = Build(game: true);
Data.Models.Listxml.M1 m1 = Build(game: true);
// Serialize to generic model
Stream? metadata = serializer.Serialize(m1);
Assert.NotNull(metadata);
// Serialize to stream
Models.Listxml.M1? newM1 = deserializer.Deserialize(metadata);
Data.Models.Listxml.M1? newM1 = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newM1);
@@ -100,18 +100,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripMachineTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.M1();
var serializer = new Serialization.Serializers.M1();
var deserializer = new M1();
var serializer = new SabreTools.Serialization.Writers.M1();
// Build the data
Models.Listxml.M1 m1 = Build(game: false);
Data.Models.Listxml.M1 m1 = Build(game: false);
// Serialize to generic model
Stream? metadata = serializer.Serialize(m1);
Assert.NotNull(metadata);
// Serialize to stream
Models.Listxml.M1? newM1 = deserializer.Deserialize(metadata);
Data.Models.Listxml.M1? newM1 = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newM1);
@@ -125,16 +125,16 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.Listxml.M1 Build(bool game)
private static Data.Models.Listxml.M1 Build(bool game)
{
var biosset = new Models.Listxml.BiosSet
var biosset = new Data.Models.Listxml.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Models.Listxml.Rom
var rom = new Data.Models.Listxml.Rom
{
Name = "XXXXXX",
Bios = "XXXXXX",
@@ -150,7 +150,7 @@ namespace SabreTools.Serialization.Test.Deserializers
SoundOnly = "XXXXXX",
};
var disk = new Models.Listxml.Disk
var disk = new Data.Models.Listxml.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -163,17 +163,17 @@ namespace SabreTools.Serialization.Test.Deserializers
Optional = "XXXXXX",
};
var deviceref = new Models.Listxml.DeviceRef
var deviceref = new Data.Models.Listxml.DeviceRef
{
Name = "XXXXXX",
};
var sample = new Models.Listxml.Sample
var sample = new Data.Models.Listxml.Sample
{
Name = "XXXXXX",
};
var chip = new Models.Listxml.Chip
var chip = new Data.Models.Listxml.Chip
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -182,7 +182,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Clock = "XXXXXX",
};
var display = new Models.Listxml.Display
var display = new Data.Models.Listxml.Display
{
Tag = "XXXXXX",
Type = "XXXXXX",
@@ -200,7 +200,7 @@ namespace SabreTools.Serialization.Test.Deserializers
VBStart = "XXXXXX",
};
var video = new Models.Listxml.Video
var video = new Data.Models.Listxml.Video
{
Screen = "XXXXXX",
Orientation = "XXXXXX",
@@ -211,12 +211,12 @@ namespace SabreTools.Serialization.Test.Deserializers
Refresh = "XXXXXX",
};
var sound = new Models.Listxml.Sound
var sound = new Data.Models.Listxml.Sound
{
Channels = "XXXXXX",
};
var control = new Models.Listxml.Control
var control = new Data.Models.Listxml.Control
{
Type = "XXXXXX",
Player = "XXXXXX",
@@ -232,7 +232,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Ways3 = "XXXXXX",
};
var input = new Models.Listxml.Input
var input = new Data.Models.Listxml.Input
{
Service = "XXXXXX",
Tilt = "XXXXXX",
@@ -243,7 +243,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Control = [control],
};
var condition = new Models.Listxml.Condition
var condition = new Data.Models.Listxml.Condition
{
Tag = "XXXXXX",
Mask = "XXXXXX",
@@ -251,14 +251,14 @@ namespace SabreTools.Serialization.Test.Deserializers
Value = "XXXXXX",
};
var diplocation = new Models.Listxml.DipLocation
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var dipvalue = new Models.Listxml.DipValue
var dipvalue = new Data.Models.Listxml.DipValue
{
Name = "XXXXXX",
Value = "XXXXXX",
@@ -266,7 +266,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Condition = condition,
};
var dipswitch = new Models.Listxml.DipSwitch
var dipswitch = new Data.Models.Listxml.DipSwitch
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -276,14 +276,14 @@ namespace SabreTools.Serialization.Test.Deserializers
DipValue = [dipvalue],
};
var conflocation = new Models.Listxml.ConfLocation
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var confsetting = new Models.Listxml.ConfSetting
var confsetting = new Data.Models.Listxml.ConfSetting
{
Name = "XXXXXX",
Value = "XXXXXX",
@@ -291,7 +291,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Condition = condition,
};
var configuration = new Models.Listxml.Configuration
var configuration = new Data.Models.Listxml.Configuration
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -301,25 +301,25 @@ namespace SabreTools.Serialization.Test.Deserializers
ConfSetting = [confsetting],
};
var analog = new Models.Listxml.Analog
var analog = new Data.Models.Listxml.Analog
{
Mask = "XXXXXX",
};
var port = new Models.Listxml.Port
var port = new Data.Models.Listxml.Port
{
Tag = "XXXXXX",
Analog = [analog],
};
var adjuster = new Models.Listxml.Adjuster
var adjuster = new Data.Models.Listxml.Adjuster
{
Name = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var driver = new Models.Listxml.Driver
var driver = new Data.Models.Listxml.Driver
{
Status = "XXXXXX",
Color = "XXXXXX",
@@ -334,25 +334,25 @@ namespace SabreTools.Serialization.Test.Deserializers
Incomplete = "XXXXXX",
};
var feature = new Models.Listxml.Feature
var feature = new Data.Models.Listxml.Feature
{
Type = "XXXXXX",
Status = "XXXXXX",
Overall = "XXXXXX",
};
var instance = new Models.Listxml.Instance
var instance = new Data.Models.Listxml.Instance
{
Name = "XXXXXX",
BriefName = "XXXXXX",
};
var extension = new Models.Listxml.Extension
var extension = new Data.Models.Listxml.Extension
{
Name = "XXXXXX",
};
var device = new Models.Listxml.Device
var device = new Data.Models.Listxml.Device
{
Type = "XXXXXX",
Tag = "XXXXXX",
@@ -363,20 +363,20 @@ namespace SabreTools.Serialization.Test.Deserializers
Extension = [extension],
};
var slotOption = new Models.Listxml.SlotOption
var slotOption = new Data.Models.Listxml.SlotOption
{
Name = "XXXXXX",
DevName = "XXXXXX",
Default = "XXXXXX",
};
var slot = new Models.Listxml.Slot
var slot = new Data.Models.Listxml.Slot
{
Name = "XXXXXX",
SlotOption = [slotOption],
};
var softwarelist = new Models.Listxml.SoftwareList
var softwarelist = new Data.Models.Listxml.SoftwareList
{
Tag = "XXXXXX",
Name = "XXXXXX",
@@ -384,16 +384,16 @@ namespace SabreTools.Serialization.Test.Deserializers
Filter = "XXXXXX",
};
var ramoption = new Models.Listxml.RamOption
var ramoption = new Data.Models.Listxml.RamOption
{
Name = "XXXXXX",
Default = "XXXXXX",
Content = "XXXXXX",
};
Models.Listxml.GameBase gameBase = game
? new Models.Listxml.Game()
: new Models.Listxml.Machine();
Data.Models.Listxml.GameBase gameBase = game
? new Data.Models.Listxml.Game()
: new Data.Models.Listxml.Machine();
gameBase.Name = "XXXXXX";
gameBase.SourceFile = "XXXXXX";
gameBase.IsBios = "XXXXXX";
@@ -428,7 +428,7 @@ namespace SabreTools.Serialization.Test.Deserializers
gameBase.SoftwareList = [softwarelist];
gameBase.RamOption = [ramoption];
return new Models.Listxml.M1
return new Data.Models.Listxml.M1
{
Version = "XXXXXX",
Game = [gameBase],
@@ -438,7 +438,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Models.Listxml.GameBase? gb)
private static void Validate(Data.Models.Listxml.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
@@ -532,7 +532,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Models.Listxml.BiosSet? biosset)
private static void Validate(Data.Models.Listxml.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
@@ -543,7 +543,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.Listxml.Rom? rom)
private static void Validate(Data.Models.Listxml.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
@@ -563,7 +563,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.Listxml.Disk? disk)
private static void Validate(Data.Models.Listxml.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -580,7 +580,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DeviceRef
/// </summary>
private static void Validate(Models.Listxml.DeviceRef? deviceref)
private static void Validate(Data.Models.Listxml.DeviceRef? deviceref)
{
Assert.NotNull(deviceref);
Assert.Equal("XXXXXX", deviceref.Name);
@@ -589,7 +589,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Models.Listxml.Sample? sample)
private static void Validate(Data.Models.Listxml.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
@@ -598,7 +598,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Chip
/// </summary>
private static void Validate(Models.Listxml.Chip? chip)
private static void Validate(Data.Models.Listxml.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal("XXXXXX", chip.Name);
@@ -611,7 +611,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Display
/// </summary>
private static void Validate(Models.Listxml.Display? display)
private static void Validate(Data.Models.Listxml.Display? display)
{
Assert.NotNull(display);
Assert.Equal("XXXXXX", display.Tag);
@@ -633,7 +633,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Video
/// </summary>
private static void Validate(Models.Listxml.Video? video)
private static void Validate(Data.Models.Listxml.Video? video)
{
Assert.NotNull(video);
Assert.Equal("XXXXXX", video.Screen);
@@ -648,7 +648,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Sound
/// </summary>
private static void Validate(Models.Listxml.Sound? sound)
private static void Validate(Data.Models.Listxml.Sound? sound)
{
Assert.NotNull(sound);
Assert.Equal("XXXXXX", sound.Channels);
@@ -657,7 +657,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Input
/// </summary>
private static void Validate(Models.Listxml.Input? input)
private static void Validate(Data.Models.Listxml.Input? input)
{
Assert.NotNull(input);
Assert.Equal("XXXXXX", input.Service);
@@ -675,7 +675,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Control
/// </summary>
private static void Validate(Models.Listxml.Control? control)
private static void Validate(Data.Models.Listxml.Control? control)
{
Assert.NotNull(control);
Assert.Equal("XXXXXX", control.Type);
@@ -695,7 +695,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Models.Listxml.DipSwitch? dipswitch)
private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
@@ -715,7 +715,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Condition
/// </summary>
private static void Validate(Models.Listxml.Condition? condition)
private static void Validate(Data.Models.Listxml.Condition? condition)
{
Assert.NotNull(condition);
Assert.Equal("XXXXXX", condition.Tag);
@@ -727,7 +727,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipLocation
/// </summary>
private static void Validate(Models.Listxml.DipLocation? diplocation)
private static void Validate(Data.Models.Listxml.DipLocation? diplocation)
{
Assert.NotNull(diplocation);
Assert.Equal("XXXXXX", diplocation.Name);
@@ -738,7 +738,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipValue
/// </summary>
private static void Validate(Models.Listxml.DipValue? dipvalue)
private static void Validate(Data.Models.Listxml.DipValue? dipvalue)
{
Assert.NotNull(dipvalue);
Assert.Equal("XXXXXX", dipvalue.Name);
@@ -750,7 +750,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Configuration
/// </summary>
private static void Validate(Models.Listxml.Configuration? configuration)
private static void Validate(Data.Models.Listxml.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.Name);
@@ -770,7 +770,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a ConfLocation
/// </summary>
private static void Validate(Models.Listxml.ConfLocation? conflocation)
private static void Validate(Data.Models.Listxml.ConfLocation? conflocation)
{
Assert.NotNull(conflocation);
Assert.Equal("XXXXXX", conflocation.Name);
@@ -781,7 +781,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a ConfSetting
/// </summary>
private static void Validate(Models.Listxml.ConfSetting? confsetting)
private static void Validate(Data.Models.Listxml.ConfSetting? confsetting)
{
Assert.NotNull(confsetting);
Assert.Equal("XXXXXX", confsetting.Name);
@@ -793,7 +793,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Port
/// </summary>
private static void Validate(Models.Listxml.Port? port)
private static void Validate(Data.Models.Listxml.Port? port)
{
Assert.NotNull(port);
Assert.Equal("XXXXXX", port.Tag);
@@ -806,7 +806,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Analog
/// </summary>
private static void Validate(Models.Listxml.Analog? analog)
private static void Validate(Data.Models.Listxml.Analog? analog)
{
Assert.NotNull(analog);
Assert.Equal("XXXXXX", analog.Mask);
@@ -815,7 +815,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Adjuster
/// </summary>
private static void Validate(Models.Listxml.Adjuster? adjuster)
private static void Validate(Data.Models.Listxml.Adjuster? adjuster)
{
Assert.NotNull(adjuster);
Assert.Equal("XXXXXX", adjuster.Name);
@@ -826,7 +826,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Models.Listxml.Driver? driver)
private static void Validate(Data.Models.Listxml.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);
@@ -845,7 +845,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Feature
/// </summary>
private static void Validate(Models.Listxml.Feature? feature)
private static void Validate(Data.Models.Listxml.Feature? feature)
{
Assert.NotNull(feature);
Assert.Equal("XXXXXX", feature.Type);
@@ -856,7 +856,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Device
/// </summary>
private static void Validate(Models.Listxml.Device? device)
private static void Validate(Data.Models.Listxml.Device? device)
{
Assert.NotNull(device);
Assert.Equal("XXXXXX", device.Type);
@@ -874,7 +874,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Instance
/// </summary>
private static void Validate(Models.Listxml.Instance? instance)
private static void Validate(Data.Models.Listxml.Instance? instance)
{
Assert.NotNull(instance);
Assert.Equal("XXXXXX", instance.Name);
@@ -884,7 +884,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Extension
/// </summary>
private static void Validate(Models.Listxml.Extension? extension)
private static void Validate(Data.Models.Listxml.Extension? extension)
{
Assert.NotNull(extension);
Assert.Equal("XXXXXX", extension.Name);
@@ -893,7 +893,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Slot
/// </summary>
private static void Validate(Models.Listxml.Slot? slot)
private static void Validate(Data.Models.Listxml.Slot? slot)
{
Assert.NotNull(slot);
Assert.Equal("XXXXXX", slot.Name);
@@ -906,7 +906,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SlotOption
/// </summary>
private static void Validate(Models.Listxml.SlotOption? slotoption)
private static void Validate(Data.Models.Listxml.SlotOption? slotoption)
{
Assert.NotNull(slotoption);
Assert.Equal("XXXXXX", slotoption.Name);
@@ -917,7 +917,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SoftwareList
/// </summary>
private static void Validate(Models.Listxml.SoftwareList? softwarelist)
private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist)
{
Assert.NotNull(softwarelist);
Assert.Equal("XXXXXX", softwarelist.Tag);
@@ -929,7 +929,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a RamOption
/// </summary>
private static void Validate(Models.Listxml.RamOption? ramoption)
private static void Validate(Data.Models.Listxml.RamOption? ramoption)
{
Assert.NotNull(ramoption);
Assert.Equal("XXXXXX", ramoption.Name);

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class MSDOSTests
{

View File

@@ -0,0 +1,940 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class MessTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new Mess();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new Mess();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new Mess();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new Mess();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new Mess();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new Mess();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void RoundTripGameTest()
{
// Get the serializer and deserializer
var deserializer = new Mess();
var serializer = new SabreTools.Serialization.Writers.Mess();
// Build the data
Data.Models.Listxml.Mess m1 = Build(game: true);
// Serialize to generic model
Stream? metadata = serializer.Serialize(m1);
Assert.NotNull(metadata);
// Serialize to stream
Data.Models.Listxml.Mess? newMess = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMess);
Assert.Equal("XXXXXX", newMess.Version);
Assert.NotNull(newMess.Game);
var newGame = Assert.Single(newMess.Game);
Validate(newGame);
}
[Fact]
public void RoundTripMachineTest()
{
// Get the serializer and deserializer
var deserializer = new Mess();
var serializer = new SabreTools.Serialization.Writers.Mess();
// Build the data
Data.Models.Listxml.Mess m1 = Build(game: false);
// Serialize to generic model
Stream? metadata = serializer.Serialize(m1);
Assert.NotNull(metadata);
// Serialize to stream
Data.Models.Listxml.Mess? newMess = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMess);
Assert.Equal("XXXXXX", newMess.Version);
Assert.NotNull(newMess.Game);
var newGame = Assert.Single(newMess.Game);
Validate(newGame);
}
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Data.Models.Listxml.Mess Build(bool game)
{
var biosset = new Data.Models.Listxml.BiosSet
{
Name = "XXXXXX",
Description = "XXXXXX",
Default = "XXXXXX",
};
var rom = new Data.Models.Listxml.Rom
{
Name = "XXXXXX",
Bios = "XXXXXX",
Size = "XXXXXX",
CRC = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Offset = "XXXXXX",
Status = "XXXXXX",
Optional = "XXXXXX",
Dispose = "XXXXXX",
SoundOnly = "XXXXXX",
};
var disk = new Data.Models.Listxml.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
SHA1 = "XXXXXX",
Merge = "XXXXXX",
Region = "XXXXXX",
Index = "XXXXXX",
Writable = "XXXXXX",
Status = "XXXXXX",
Optional = "XXXXXX",
};
var deviceref = new Data.Models.Listxml.DeviceRef
{
Name = "XXXXXX",
};
var sample = new Data.Models.Listxml.Sample
{
Name = "XXXXXX",
};
var chip = new Data.Models.Listxml.Chip
{
Name = "XXXXXX",
Tag = "XXXXXX",
Type = "XXXXXX",
SoundOnly = "XXXXXX",
Clock = "XXXXXX",
};
var display = new Data.Models.Listxml.Display
{
Tag = "XXXXXX",
Type = "XXXXXX",
Rotate = "XXXXXX",
FlipX = "XXXXXX",
Width = "XXXXXX",
Height = "XXXXXX",
Refresh = "XXXXXX",
PixClock = "XXXXXX",
HTotal = "XXXXXX",
HBEnd = "XXXXXX",
HBStart = "XXXXXX",
VTotal = "XXXXXX",
VBEnd = "XXXXXX",
VBStart = "XXXXXX",
};
var video = new Data.Models.Listxml.Video
{
Screen = "XXXXXX",
Orientation = "XXXXXX",
Width = "XXXXXX",
Height = "XXXXXX",
AspectX = "XXXXXX",
AspectY = "XXXXXX",
Refresh = "XXXXXX",
};
var sound = new Data.Models.Listxml.Sound
{
Channels = "XXXXXX",
};
var control = new Data.Models.Listxml.Control
{
Type = "XXXXXX",
Player = "XXXXXX",
Buttons = "XXXXXX",
ReqButtons = "XXXXXX",
Minimum = "XXXXXX",
Maximum = "XXXXXX",
Sensitivity = "XXXXXX",
KeyDelta = "XXXXXX",
Reverse = "XXXXXX",
Ways = "XXXXXX",
Ways2 = "XXXXXX",
Ways3 = "XXXXXX",
};
var input = new Data.Models.Listxml.Input
{
Service = "XXXXXX",
Tilt = "XXXXXX",
Players = "XXXXXX",
//ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
Buttons = "XXXXXX",
Coins = "XXXXXX",
Control = [control],
};
var condition = new Data.Models.Listxml.Condition
{
Tag = "XXXXXX",
Mask = "XXXXXX",
Relation = "XXXXXX",
Value = "XXXXXX",
};
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var dipvalue = new Data.Models.Listxml.DipValue
{
Name = "XXXXXX",
Value = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var dipswitch = new Data.Models.Listxml.DipSwitch
{
Name = "XXXXXX",
Tag = "XXXXXX",
Mask = "XXXXXX",
Condition = condition,
DipLocation = [diplocation],
DipValue = [dipvalue],
};
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "XXXXXX",
Number = "XXXXXX",
Inverted = "XXXXXX",
};
var confsetting = new Data.Models.Listxml.ConfSetting
{
Name = "XXXXXX",
Value = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var configuration = new Data.Models.Listxml.Configuration
{
Name = "XXXXXX",
Tag = "XXXXXX",
Mask = "XXXXXX",
Condition = condition,
ConfLocation = [conflocation],
ConfSetting = [confsetting],
};
var analog = new Data.Models.Listxml.Analog
{
Mask = "XXXXXX",
};
var port = new Data.Models.Listxml.Port
{
Tag = "XXXXXX",
Analog = [analog],
};
var adjuster = new Data.Models.Listxml.Adjuster
{
Name = "XXXXXX",
Default = "XXXXXX",
Condition = condition,
};
var driver = new Data.Models.Listxml.Driver
{
Status = "XXXXXX",
Color = "XXXXXX",
Sound = "XXXXXX",
PaletteSize = "XXXXXX",
Emulation = "XXXXXX",
Cocktail = "XXXXXX",
SaveState = "XXXXXX",
RequiresArtwork = "XXXXXX",
Unofficial = "XXXXXX",
NoSoundHardware = "XXXXXX",
Incomplete = "XXXXXX",
};
var feature = new Data.Models.Listxml.Feature
{
Type = "XXXXXX",
Status = "XXXXXX",
Overall = "XXXXXX",
};
var instance = new Data.Models.Listxml.Instance
{
Name = "XXXXXX",
BriefName = "XXXXXX",
};
var extension = new Data.Models.Listxml.Extension
{
Name = "XXXXXX",
};
var device = new Data.Models.Listxml.Device
{
Type = "XXXXXX",
Tag = "XXXXXX",
FixedImage = "XXXXXX",
Mandatory = "XXXXXX",
Interface = "XXXXXX",
Instance = instance,
Extension = [extension],
};
var slotOption = new Data.Models.Listxml.SlotOption
{
Name = "XXXXXX",
DevName = "XXXXXX",
Default = "XXXXXX",
};
var slot = new Data.Models.Listxml.Slot
{
Name = "XXXXXX",
SlotOption = [slotOption],
};
var softwarelist = new Data.Models.Listxml.SoftwareList
{
Tag = "XXXXXX",
Name = "XXXXXX",
Status = "XXXXXX",
Filter = "XXXXXX",
};
var ramoption = new Data.Models.Listxml.RamOption
{
Name = "XXXXXX",
Default = "XXXXXX",
Content = "XXXXXX",
};
Data.Models.Listxml.GameBase gameBase = game
? new Data.Models.Listxml.Game()
: new Data.Models.Listxml.Machine();
gameBase.Name = "XXXXXX";
gameBase.SourceFile = "XXXXXX";
gameBase.IsBios = "XXXXXX";
gameBase.IsDevice = "XXXXXX";
gameBase.IsMechanical = "XXXXXX";
gameBase.Runnable = "XXXXXX";
gameBase.CloneOf = "XXXXXX";
gameBase.RomOf = "XXXXXX";
gameBase.SampleOf = "XXXXXX";
gameBase.Description = "XXXXXX";
gameBase.Year = "XXXXXX";
gameBase.Manufacturer = "XXXXXX";
gameBase.History = "XXXXXX";
gameBase.BiosSet = [biosset];
gameBase.Rom = [rom];
gameBase.Disk = [disk];
gameBase.DeviceRef = [deviceref];
gameBase.Sample = [sample];
gameBase.Chip = [chip];
gameBase.Display = [display];
gameBase.Video = [video];
gameBase.Sound = sound;
gameBase.Input = input;
gameBase.DipSwitch = [dipswitch];
gameBase.Configuration = [configuration];
gameBase.Port = [port];
gameBase.Adjuster = [adjuster];
gameBase.Driver = driver;
gameBase.Feature = [feature];
gameBase.Device = [device];
gameBase.Slot = [slot];
gameBase.SoftwareList = [softwarelist];
gameBase.RamOption = [ramoption];
return new Data.Models.Listxml.Mess
{
Version = "XXXXXX",
Game = [gameBase],
};
}
/// <summary>
/// Validate a GameBase
/// </summary>
private static void Validate(Data.Models.Listxml.GameBase? gb)
{
Assert.NotNull(gb);
Assert.Equal("XXXXXX", gb.Name);
Assert.Equal("XXXXXX", gb.SourceFile);
Assert.Equal("XXXXXX", gb.IsBios);
Assert.Equal("XXXXXX", gb.IsDevice);
Assert.Equal("XXXXXX", gb.IsMechanical);
Assert.Equal("XXXXXX", gb.Runnable);
Assert.Equal("XXXXXX", gb.CloneOf);
Assert.Equal("XXXXXX", gb.RomOf);
Assert.Equal("XXXXXX", gb.SampleOf);
Assert.Equal("XXXXXX", gb.Description);
Assert.Equal("XXXXXX", gb.Year);
Assert.Equal("XXXXXX", gb.Manufacturer);
Assert.Equal("XXXXXX", gb.History);
Assert.NotNull(gb.BiosSet);
var biosset = Assert.Single(gb.BiosSet);
Validate(biosset);
Assert.NotNull(gb.Rom);
var rom = Assert.Single(gb.Rom);
Validate(rom);
Assert.NotNull(gb.Disk);
var disk = Assert.Single(gb.Disk);
Validate(disk);
Assert.NotNull(gb.DeviceRef);
var deviceref = Assert.Single(gb.DeviceRef);
Validate(deviceref);
Assert.NotNull(gb.Sample);
var sample = Assert.Single(gb.Sample);
Validate(sample);
Assert.NotNull(gb.Chip);
var chip = Assert.Single(gb.Chip);
Validate(chip);
Assert.NotNull(gb.Display);
var display = Assert.Single(gb.Display);
Validate(display);
Assert.NotNull(gb.Video);
var video = Assert.Single(gb.Video);
Validate(video);
Validate(gb.Sound);
Validate(gb.Input);
Assert.NotNull(gb.DipSwitch);
var dipswitch = Assert.Single(gb.DipSwitch);
Validate(dipswitch);
Assert.NotNull(gb.Configuration);
var configuration = Assert.Single(gb.Configuration);
Validate(configuration);
Assert.NotNull(gb.Port);
var port = Assert.Single(gb.Port);
Validate(port);
Assert.NotNull(gb.Adjuster);
var adjuster = Assert.Single(gb.Adjuster);
Validate(adjuster);
Validate(gb.Driver);
Assert.NotNull(gb.Feature);
var feature = Assert.Single(gb.Feature);
Validate(feature);
Assert.NotNull(gb.Device);
var device = Assert.Single(gb.Device);
Validate(device);
Assert.NotNull(gb.Slot);
var slot = Assert.Single(gb.Slot);
Validate(slot);
Assert.NotNull(gb.SoftwareList);
var softwarelist = Assert.Single(gb.SoftwareList);
Validate(softwarelist);
Assert.NotNull(gb.RamOption);
var ramoption = Assert.Single(gb.RamOption);
Validate(ramoption);
}
/// <summary>
/// Validate a BiosSet
/// </summary>
private static void Validate(Data.Models.Listxml.BiosSet? biosset)
{
Assert.NotNull(biosset);
Assert.Equal("XXXXXX", biosset.Name);
Assert.Equal("XXXXXX", biosset.Description);
Assert.Equal("XXXXXX", biosset.Default);
}
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Data.Models.Listxml.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Bios);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.SHA1);
Assert.Equal("XXXXXX", rom.Merge);
Assert.Equal("XXXXXX", rom.Region);
Assert.Equal("XXXXXX", rom.Offset);
Assert.Equal("XXXXXX", rom.Status);
Assert.Equal("XXXXXX", rom.Optional);
Assert.Equal("XXXXXX", rom.Dispose);
Assert.Equal("XXXXXX", rom.SoundOnly);
}
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Data.Models.Listxml.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
Assert.Equal("XXXXXX", disk.MD5);
Assert.Equal("XXXXXX", disk.SHA1);
Assert.Equal("XXXXXX", disk.Merge);
Assert.Equal("XXXXXX", disk.Region);
Assert.Equal("XXXXXX", disk.Index);
Assert.Equal("XXXXXX", disk.Writable);
Assert.Equal("XXXXXX", disk.Status);
Assert.Equal("XXXXXX", disk.Optional);
}
/// <summary>
/// Validate a DeviceRef
/// </summary>
private static void Validate(Data.Models.Listxml.DeviceRef? deviceref)
{
Assert.NotNull(deviceref);
Assert.Equal("XXXXXX", deviceref.Name);
}
/// <summary>
/// Validate a Sample
/// </summary>
private static void Validate(Data.Models.Listxml.Sample? sample)
{
Assert.NotNull(sample);
Assert.Equal("XXXXXX", sample.Name);
}
/// <summary>
/// Validate a Chip
/// </summary>
private static void Validate(Data.Models.Listxml.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal("XXXXXX", chip.Name);
Assert.Equal("XXXXXX", chip.Tag);
Assert.Equal("XXXXXX", chip.Type);
Assert.Equal("XXXXXX", chip.SoundOnly);
Assert.Equal("XXXXXX", chip.Clock);
}
/// <summary>
/// Validate a Display
/// </summary>
private static void Validate(Data.Models.Listxml.Display? display)
{
Assert.NotNull(display);
Assert.Equal("XXXXXX", display.Tag);
Assert.Equal("XXXXXX", display.Type);
Assert.Equal("XXXXXX", display.Rotate);
Assert.Equal("XXXXXX", display.FlipX);
Assert.Equal("XXXXXX", display.Width);
Assert.Equal("XXXXXX", display.Height);
Assert.Equal("XXXXXX", display.Refresh);
Assert.Equal("XXXXXX", display.PixClock);
Assert.Equal("XXXXXX", display.HTotal);
Assert.Equal("XXXXXX", display.HBEnd);
Assert.Equal("XXXXXX", display.HBStart);
Assert.Equal("XXXXXX", display.VTotal);
Assert.Equal("XXXXXX", display.VBEnd);
Assert.Equal("XXXXXX", display.VBStart);
}
/// <summary>
/// Validate a Video
/// </summary>
private static void Validate(Data.Models.Listxml.Video? video)
{
Assert.NotNull(video);
Assert.Equal("XXXXXX", video.Screen);
Assert.Equal("XXXXXX", video.Orientation);
Assert.Equal("XXXXXX", video.Width);
Assert.Equal("XXXXXX", video.Height);
Assert.Equal("XXXXXX", video.AspectX);
Assert.Equal("XXXXXX", video.AspectY);
Assert.Equal("XXXXXX", video.Refresh);
}
/// <summary>
/// Validate a Sound
/// </summary>
private static void Validate(Data.Models.Listxml.Sound? sound)
{
Assert.NotNull(sound);
Assert.Equal("XXXXXX", sound.Channels);
}
/// <summary>
/// Validate a Input
/// </summary>
private static void Validate(Data.Models.Listxml.Input? input)
{
Assert.NotNull(input);
Assert.Equal("XXXXXX", input.Service);
Assert.Equal("XXXXXX", input.Tilt);
Assert.Equal("XXXXXX", input.Players);
//Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
Assert.Equal("XXXXXX", input.Buttons);
Assert.Equal("XXXXXX", input.Coins);
Assert.NotNull(input.Control);
var control = Assert.Single(input.Control);
Validate(control);
}
/// <summary>
/// Validate a Control
/// </summary>
private static void Validate(Data.Models.Listxml.Control? control)
{
Assert.NotNull(control);
Assert.Equal("XXXXXX", control.Type);
Assert.Equal("XXXXXX", control.Player);
Assert.Equal("XXXXXX", control.Buttons);
Assert.Equal("XXXXXX", control.ReqButtons);
Assert.Equal("XXXXXX", control.Minimum);
Assert.Equal("XXXXXX", control.Maximum);
Assert.Equal("XXXXXX", control.Sensitivity);
Assert.Equal("XXXXXX", control.KeyDelta);
Assert.Equal("XXXXXX", control.Reverse);
Assert.Equal("XXXXXX", control.Ways);
Assert.Equal("XXXXXX", control.Ways2);
Assert.Equal("XXXXXX", control.Ways3);
}
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
Assert.Equal("XXXXXX", dipswitch.Tag);
Assert.Equal("XXXXXX", dipswitch.Mask);
Validate(dipswitch.Condition);
Assert.NotNull(dipswitch.DipLocation);
var diplocation = Assert.Single(dipswitch.DipLocation);
Validate(diplocation);
Assert.NotNull(dipswitch.DipValue);
var dipvalue = Assert.Single(dipswitch.DipValue);
Validate(dipvalue);
}
/// <summary>
/// Validate a Condition
/// </summary>
private static void Validate(Data.Models.Listxml.Condition? condition)
{
Assert.NotNull(condition);
Assert.Equal("XXXXXX", condition.Tag);
Assert.Equal("XXXXXX", condition.Mask);
Assert.Equal("XXXXXX", condition.Relation);
Assert.Equal("XXXXXX", condition.Value);
}
/// <summary>
/// Validate a DipLocation
/// </summary>
private static void Validate(Data.Models.Listxml.DipLocation? diplocation)
{
Assert.NotNull(diplocation);
Assert.Equal("XXXXXX", diplocation.Name);
Assert.Equal("XXXXXX", diplocation.Number);
Assert.Equal("XXXXXX", diplocation.Inverted);
}
/// <summary>
/// Validate a DipValue
/// </summary>
private static void Validate(Data.Models.Listxml.DipValue? dipvalue)
{
Assert.NotNull(dipvalue);
Assert.Equal("XXXXXX", dipvalue.Name);
Assert.Equal("XXXXXX", dipvalue.Value);
Assert.Equal("XXXXXX", dipvalue.Default);
Validate(dipvalue.Condition);
}
/// <summary>
/// Validate a Configuration
/// </summary>
private static void Validate(Data.Models.Listxml.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.Name);
Assert.Equal("XXXXXX", configuration.Tag);
Assert.Equal("XXXXXX", configuration.Mask);
Validate(configuration.Condition);
Assert.NotNull(configuration.ConfLocation);
var conflocation = Assert.Single(configuration.ConfLocation);
Validate(conflocation);
Assert.NotNull(configuration.ConfSetting);
var confsetting = Assert.Single(configuration.ConfSetting);
Validate(confsetting);
}
/// <summary>
/// Validate a ConfLocation
/// </summary>
private static void Validate(Data.Models.Listxml.ConfLocation? conflocation)
{
Assert.NotNull(conflocation);
Assert.Equal("XXXXXX", conflocation.Name);
Assert.Equal("XXXXXX", conflocation.Number);
Assert.Equal("XXXXXX", conflocation.Inverted);
}
/// <summary>
/// Validate a ConfSetting
/// </summary>
private static void Validate(Data.Models.Listxml.ConfSetting? confsetting)
{
Assert.NotNull(confsetting);
Assert.Equal("XXXXXX", confsetting.Name);
Assert.Equal("XXXXXX", confsetting.Value);
Assert.Equal("XXXXXX", confsetting.Default);
Validate(confsetting.Condition);
}
/// <summary>
/// Validate a Port
/// </summary>
private static void Validate(Data.Models.Listxml.Port? port)
{
Assert.NotNull(port);
Assert.Equal("XXXXXX", port.Tag);
Assert.NotNull(port.Analog);
var analog = Assert.Single(port.Analog);
Validate(analog);
}
/// <summary>
/// Validate a Analog
/// </summary>
private static void Validate(Data.Models.Listxml.Analog? analog)
{
Assert.NotNull(analog);
Assert.Equal("XXXXXX", analog.Mask);
}
/// <summary>
/// Validate a Adjuster
/// </summary>
private static void Validate(Data.Models.Listxml.Adjuster? adjuster)
{
Assert.NotNull(adjuster);
Assert.Equal("XXXXXX", adjuster.Name);
Assert.Equal("XXXXXX", adjuster.Default);
Validate(adjuster.Condition);
}
/// <summary>
/// Validate a Driver
/// </summary>
private static void Validate(Data.Models.Listxml.Driver? driver)
{
Assert.NotNull(driver);
Assert.Equal("XXXXXX", driver.Status);
Assert.Equal("XXXXXX", driver.Color);
Assert.Equal("XXXXXX", driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("XXXXXX", driver.Emulation);
Assert.Equal("XXXXXX", driver.Cocktail);
Assert.Equal("XXXXXX", driver.SaveState);
Assert.Equal("XXXXXX", driver.RequiresArtwork);
Assert.Equal("XXXXXX", driver.Unofficial);
Assert.Equal("XXXXXX", driver.NoSoundHardware);
Assert.Equal("XXXXXX", driver.Incomplete);
}
/// <summary>
/// Validate a Feature
/// </summary>
private static void Validate(Data.Models.Listxml.Feature? feature)
{
Assert.NotNull(feature);
Assert.Equal("XXXXXX", feature.Type);
Assert.Equal("XXXXXX", feature.Status);
Assert.Equal("XXXXXX", feature.Overall);
}
/// <summary>
/// Validate a Device
/// </summary>
private static void Validate(Data.Models.Listxml.Device? device)
{
Assert.NotNull(device);
Assert.Equal("XXXXXX", device.Type);
Assert.Equal("XXXXXX", device.Tag);
Assert.Equal("XXXXXX", device.FixedImage);
Assert.Equal("XXXXXX", device.Mandatory);
Assert.Equal("XXXXXX", device.Interface);
Validate(device.Instance);
Assert.NotNull(device.Extension);
var extension = Assert.Single(device.Extension);
Validate(extension);
}
/// <summary>
/// Validate a Instance
/// </summary>
private static void Validate(Data.Models.Listxml.Instance? instance)
{
Assert.NotNull(instance);
Assert.Equal("XXXXXX", instance.Name);
Assert.Equal("XXXXXX", instance.BriefName);
}
/// <summary>
/// Validate a Extension
/// </summary>
private static void Validate(Data.Models.Listxml.Extension? extension)
{
Assert.NotNull(extension);
Assert.Equal("XXXXXX", extension.Name);
}
/// <summary>
/// Validate a Slot
/// </summary>
private static void Validate(Data.Models.Listxml.Slot? slot)
{
Assert.NotNull(slot);
Assert.Equal("XXXXXX", slot.Name);
Assert.NotNull(slot.SlotOption);
var slotoption = Assert.Single(slot.SlotOption);
Validate(slotoption);
}
/// <summary>
/// Validate a SlotOption
/// </summary>
private static void Validate(Data.Models.Listxml.SlotOption? slotoption)
{
Assert.NotNull(slotoption);
Assert.Equal("XXXXXX", slotoption.Name);
Assert.Equal("XXXXXX", slotoption.DevName);
Assert.Equal("XXXXXX", slotoption.Default);
}
/// <summary>
/// Validate a SoftwareList
/// </summary>
private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist)
{
Assert.NotNull(softwarelist);
Assert.Equal("XXXXXX", softwarelist.Tag);
Assert.Equal("XXXXXX", softwarelist.Name);
Assert.Equal("XXXXXX", softwarelist.Status);
Assert.Equal("XXXXXX", softwarelist.Filter);
}
/// <summary>
/// Validate a RamOption
/// </summary>
private static void Validate(Data.Models.Listxml.RamOption? ramoption)
{
Assert.NotNull(ramoption);
Assert.Equal("XXXXXX", ramoption.Name);
Assert.Equal("XXXXXX", ramoption.Default);
Assert.Equal("XXXXXX", ramoption.Content);
}
}
}

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class MicrosoftCabinetTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class MoPaQTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class N3DSTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class NCFTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class NewExecutableTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class NitroTests
{

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class OfflineListTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.OfflineList();
var serializer = new Serialization.Serializers.OfflineList();
var deserializer = new OfflineList();
var serializer = new SabreTools.Serialization.Writers.OfflineList();
// Build the data
Models.OfflineList.Dat dat = Build();
Data.Models.OfflineList.Dat dat = Build();
// Serialize to stream
Stream? metadata = serializer.Serialize(dat);
Assert.NotNull(metadata);
// Serialize back to original model
Models.OfflineList.Dat? newDat = deserializer.Deserialize(metadata);
Data.Models.OfflineList.Dat? newDat = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newDat);
@@ -99,89 +98,89 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.OfflineList.Dat Build()
private static Data.Models.OfflineList.Dat Build()
{
var infos = new Models.OfflineList.Infos
var infos = new Data.Models.OfflineList.Infos
{
Title = new Models.OfflineList.Title
Title = new Data.Models.OfflineList.Title
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Location = new Models.OfflineList.Location
Location = new Data.Models.OfflineList.Location
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Publisher = new Models.OfflineList.Publisher
Publisher = new Data.Models.OfflineList.Publisher
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
SourceRom = new Models.OfflineList.SourceRom
SourceRom = new Data.Models.OfflineList.SourceRom
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
SaveType = new Models.OfflineList.SaveType
SaveType = new Data.Models.OfflineList.SaveType
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
RomSize = new Models.OfflineList.RomSize
RomSize = new Data.Models.OfflineList.RomSize
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
ReleaseNumber = new Models.OfflineList.ReleaseNumber
ReleaseNumber = new Data.Models.OfflineList.ReleaseNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
ImageNumber = new Models.OfflineList.ImageNumber
ImageNumber = new Data.Models.OfflineList.ImageNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
LanguageNumber = new Models.OfflineList.LanguageNumber
LanguageNumber = new Data.Models.OfflineList.LanguageNumber
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Comment = new Models.OfflineList.Comment
Comment = new Data.Models.OfflineList.Comment
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
RomCRC = new Models.OfflineList.RomCRC
RomCRC = new Data.Models.OfflineList.RomCRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Im1CRC = new Models.OfflineList.Im1CRC
Im1CRC = new Data.Models.OfflineList.Im1CRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Im2CRC = new Models.OfflineList.Im2CRC
Im2CRC = new Data.Models.OfflineList.Im2CRC
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
Default = "XXXXXX",
},
Languages = new Models.OfflineList.Languages
Languages = new Data.Models.OfflineList.Languages
{
Visible = "XXXXXX",
InNamingOption = "XXXXXX",
@@ -189,32 +188,32 @@ namespace SabreTools.Serialization.Test.Deserializers
},
};
var canopen = new Models.OfflineList.CanOpen
var canopen = new Data.Models.OfflineList.CanOpen
{
Extension = ["XXXXXX"],
};
var daturl = new Models.OfflineList.DatUrl
var daturl = new Data.Models.OfflineList.DatUrl
{
FileName = "XXXXXX",
Content = "XXXXXX",
};
var newdat = new Models.OfflineList.NewDat
var newdat = new Data.Models.OfflineList.NewDat
{
DatVersionUrl = "XXXXXX",
DatUrl = daturl,
ImUrl = "XXXXXX",
};
var find = new Models.OfflineList.Find
var find = new Data.Models.OfflineList.Find
{
Operation = "XXXXXX",
Value = "XXXXXX",
Content = "XXXXXX",
};
var to = new Models.OfflineList.To
var to = new Data.Models.OfflineList.To
{
Value = "XXXXXX",
Default = "XXXXXX",
@@ -222,12 +221,12 @@ namespace SabreTools.Serialization.Test.Deserializers
Find = [find],
};
var search = new Models.OfflineList.Search
var search = new Data.Models.OfflineList.Search
{
To = [to],
};
var configuration = new Models.OfflineList.Configuration
var configuration = new Data.Models.OfflineList.Configuration
{
DatName = "XXXXXX",
ImFolder = "XXXXXX",
@@ -242,18 +241,18 @@ namespace SabreTools.Serialization.Test.Deserializers
RomTitle = "XXXXXX",
};
var fileromcrc = new Models.OfflineList.FileRomCRC
var fileromcrc = new Data.Models.OfflineList.FileRomCRC
{
Extension = "XXXXXX",
Content = "XXXXXX",
};
var files = new Models.OfflineList.Files
var files = new Data.Models.OfflineList.Files
{
RomCRC = [fileromcrc],
};
var game = new Models.OfflineList.Game
var game = new Data.Models.OfflineList.Game
{
ImageNumber = "XXXXXX",
ReleaseNumber = "XXXXXX",
@@ -271,12 +270,12 @@ namespace SabreTools.Serialization.Test.Deserializers
DuplicateID = "XXXXXX",
};
var games = new Models.OfflineList.Games
var games = new Data.Models.OfflineList.Games
{
Game = [game],
};
var image = new Models.OfflineList.Image
var image = new Data.Models.OfflineList.Image
{
X = "XXXXXX",
Y = "XXXXXX",
@@ -284,19 +283,19 @@ namespace SabreTools.Serialization.Test.Deserializers
Height = "XXXXXX",
};
var images = new Models.OfflineList.Images
var images = new Data.Models.OfflineList.Images
{
Width = "XXXXXX",
Height = "XXXXXX",
Image = [image],
};
var gui = new Models.OfflineList.GUI
var gui = new Data.Models.OfflineList.GUI
{
Images = images,
};
return new Models.OfflineList.Dat
return new Data.Models.OfflineList.Dat
{
NoNamespaceSchemaLocation = "XXXXXX",
Configuration = configuration,
@@ -308,7 +307,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Configuration
/// </summary>
private static void Validate(Models.OfflineList.Configuration? configuration)
private static void Validate(Data.Models.OfflineList.Configuration? configuration)
{
Assert.NotNull(configuration);
Assert.Equal("XXXXXX", configuration.DatName);
@@ -327,7 +326,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Infos
/// </summary>
private static void Validate(Models.OfflineList.Infos? infos)
private static void Validate(Data.Models.OfflineList.Infos? infos)
{
Assert.NotNull(infos);
Validate(infos.Title);
@@ -349,7 +348,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a InfoBase
/// </summary>
private static void Validate(Models.OfflineList.InfoBase? info)
private static void Validate(Data.Models.OfflineList.InfoBase? info)
{
Assert.NotNull(info);
Assert.Equal("XXXXXX", info.Visible);
@@ -360,7 +359,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a CanOpen
/// </summary>
private static void Validate(Models.OfflineList.CanOpen? canopen)
private static void Validate(Data.Models.OfflineList.CanOpen? canopen)
{
Assert.NotNull(canopen);
Assert.NotNull(canopen.Extension);
@@ -371,7 +370,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a NewDat
/// </summary>
private static void Validate(Models.OfflineList.NewDat? newdat)
private static void Validate(Data.Models.OfflineList.NewDat? newdat)
{
Assert.NotNull(newdat);
Assert.Equal("XXXXXX", newdat.DatVersionUrl);
@@ -382,7 +381,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DatUrl
/// </summary>
private static void Validate(Models.OfflineList.DatUrl? daturl)
private static void Validate(Data.Models.OfflineList.DatUrl? daturl)
{
Assert.NotNull(daturl);
Assert.Equal("XXXXXX", daturl.FileName);
@@ -392,7 +391,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Search
/// </summary>
private static void Validate(Models.OfflineList.Search? search)
private static void Validate(Data.Models.OfflineList.Search? search)
{
Assert.NotNull(search);
Assert.NotNull(search.To);
@@ -403,7 +402,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a To
/// </summary>
private static void Validate(Models.OfflineList.To? to)
private static void Validate(Data.Models.OfflineList.To? to)
{
Assert.NotNull(to);
Assert.Equal("XXXXXX", to.Value);
@@ -418,7 +417,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Find
/// </summary>
private static void Validate(Models.OfflineList.Find? find)
private static void Validate(Data.Models.OfflineList.Find? find)
{
Assert.NotNull(find);
Assert.Equal("XXXXXX", find.Operation);
@@ -429,7 +428,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Games
/// </summary>
private static void Validate(Models.OfflineList.Games? games)
private static void Validate(Data.Models.OfflineList.Games? games)
{
Assert.NotNull(games);
Assert.NotNull(games.Game);
@@ -440,7 +439,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Game
/// </summary>
private static void Validate(Models.OfflineList.Game? game)
private static void Validate(Data.Models.OfflineList.Game? game)
{
Assert.NotNull(game);
Assert.Equal("XXXXXX", game.ImageNumber);
@@ -462,7 +461,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Files
/// </summary>
private static void Validate(Models.OfflineList.Files? files)
private static void Validate(Data.Models.OfflineList.Files? files)
{
Assert.NotNull(files);
Assert.NotNull(files.RomCRC);
@@ -473,7 +472,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a FileRomCRC
/// </summary>
private static void Validate(Models.OfflineList.FileRomCRC? fileromcrc)
private static void Validate(Data.Models.OfflineList.FileRomCRC? fileromcrc)
{
Assert.NotNull(fileromcrc);
Assert.Equal("XXXXXX", fileromcrc.Extension);
@@ -483,7 +482,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a GUI
/// </summary>
private static void Validate(Models.OfflineList.GUI? gui)
private static void Validate(Data.Models.OfflineList.GUI? gui)
{
Assert.NotNull(gui);
Validate(gui.Images);
@@ -492,7 +491,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Images
/// </summary>
private static void Validate(Models.OfflineList.Images? images)
private static void Validate(Data.Models.OfflineList.Images? images)
{
Assert.NotNull(images);
Assert.Equal("XXXXXX", images.Width);
@@ -506,7 +505,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Image
/// </summary>
private static void Validate(Models.OfflineList.Image? image)
private static void Validate(Data.Models.OfflineList.Image? image)
{
Assert.NotNull(image);
Assert.Equal("XXXXXX", image.X);

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class OpenMSXTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.OpenMSX();
var serializer = new Serialization.Serializers.OpenMSX();
var deserializer = new OpenMSX();
var serializer = new SabreTools.Serialization.Writers.OpenMSX();
// Build the data
Models.OpenMSX.SoftwareDb sdb = Build();
Data.Models.OpenMSX.SoftwareDb sdb = Build();
// Serialize to stream
Stream? metadata = serializer.Serialize(sdb);
Assert.NotNull(metadata);
// Serialize back to original model
Models.OpenMSX.SoftwareDb? newSdb = deserializer.Deserialize(metadata);
Data.Models.OpenMSX.SoftwareDb? newSdb = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newSdb);
@@ -100,15 +99,15 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.OpenMSX.SoftwareDb Build()
private static Data.Models.OpenMSX.SoftwareDb Build()
{
var original = new Models.OpenMSX.Original
var original = new Data.Models.OpenMSX.Original
{
Value = "XXXXXX",
Content = "XXXXXX",
};
var rom = new Models.OpenMSX.Rom
var rom = new Data.Models.OpenMSX.Rom
{
Start = "XXXXXX",
Type = "XXXXXX",
@@ -116,13 +115,13 @@ namespace SabreTools.Serialization.Test.Deserializers
Remark = "XXXXXX",
};
var dump_rom = new Models.OpenMSX.Dump
var dump_rom = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = rom,
};
var megarom = new Models.OpenMSX.MegaRom
var megarom = new Data.Models.OpenMSX.MegaRom
{
Start = "XXXXXX",
Type = "XXXXXX",
@@ -130,13 +129,13 @@ namespace SabreTools.Serialization.Test.Deserializers
Remark = "XXXXXX",
};
var dump_megarom = new Models.OpenMSX.Dump
var dump_megarom = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = megarom,
};
var sccpluscart = new Models.OpenMSX.SCCPlusCart
var sccpluscart = new Data.Models.OpenMSX.SCCPlusCart
{
Start = "XXXXXX",
Type = "XXXXXX",
@@ -144,13 +143,13 @@ namespace SabreTools.Serialization.Test.Deserializers
Remark = "XXXXXX",
};
var dump_sccpluscart = new Models.OpenMSX.Dump
var dump_sccpluscart = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = sccpluscart,
};
var software = new Models.OpenMSX.Software
var software = new Data.Models.OpenMSX.Software
{
Title = "XXXXXX",
GenMSXID = "XXXXXX",
@@ -161,7 +160,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Dump = [dump_rom, dump_megarom, dump_sccpluscart],
};
return new Models.OpenMSX.SoftwareDb
return new Data.Models.OpenMSX.SoftwareDb
{
Timestamp = "XXXXXX",
Software = [software],
@@ -171,7 +170,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Software
/// </summary>
private static void Validate(Models.OpenMSX.Software? software)
private static void Validate(Data.Models.OpenMSX.Software? software)
{
Assert.NotNull(software);
Assert.Equal("XXXXXX", software.Title);
@@ -192,7 +191,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Dump
/// </summary>
private static void Validate(Models.OpenMSX.Dump? dump)
private static void Validate(Data.Models.OpenMSX.Dump? dump)
{
Assert.NotNull(dump);
Validate(dump.Original);
@@ -202,7 +201,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Original
/// </summary>
private static void Validate(Models.OpenMSX.Original? original)
private static void Validate(Data.Models.OpenMSX.Original? original)
{
Assert.NotNull(original);
Assert.Equal("XXXXXX", original.Value);
@@ -212,7 +211,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a RomBase
/// </summary>
private static void Validate(Models.OpenMSX.RomBase? rombase)
private static void Validate(Data.Models.OpenMSX.RomBase? rombase)
{
Assert.NotNull(rombase);
Assert.Equal("XXXXXX", rombase.Start);

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class PAKTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class PFFTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class PICTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class PKZIPTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class PlayJAudioTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class PlayJPlaylistTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class PortableExecutableTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class QuantumTests
{

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class RomCenterTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.RomCenter();
var serializer = new Serialization.Serializers.RomCenter();
var deserializer = new RomCenter();
var serializer = new SabreTools.Serialization.Writers.RomCenter();
// Build the data
Models.RomCenter.MetadataFile mf = Build();
Data.Models.RomCenter.MetadataFile mf = Build();
// Serialize to stream
Stream? metadata = serializer.Serialize(mf);
Stream? metadata = serializer.SerializeStream(mf);
Assert.NotNull(metadata);
// Serialize back to original model
Models.RomCenter.MetadataFile? newMf = deserializer.Deserialize(metadata);
Data.Models.RomCenter.MetadataFile? newMf = deserializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newMf);
@@ -99,9 +98,9 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.RomCenter.MetadataFile Build()
private static Data.Models.RomCenter.MetadataFile Build()
{
var credits = new Models.RomCenter.Credits
var credits = new Data.Models.RomCenter.Credits
{
Author = "XXXXXX",
Version = "XXXXXX",
@@ -112,7 +111,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Comment = "XXXXXX",
};
var dat = new Models.RomCenter.Dat
var dat = new Data.Models.RomCenter.Dat
{
Version = "XXXXXX",
Plugin = "XXXXXX",
@@ -120,13 +119,13 @@ namespace SabreTools.Serialization.Test.Deserializers
Merge = "XXXXXX",
};
var emulator = new Models.RomCenter.Emulator
var emulator = new Data.Models.RomCenter.Emulator
{
RefName = "XXXXXX",
Version = "XXXXXX",
};
var rom = new Models.RomCenter.Rom
var rom = new Data.Models.RomCenter.Rom
{
ParentName = "XXXXXX",
ParentDescription = "XXXXXX",
@@ -139,12 +138,12 @@ namespace SabreTools.Serialization.Test.Deserializers
MergeName = "XXXXXX",
};
var games = new Models.RomCenter.Games
var games = new Data.Models.RomCenter.Games
{
Rom = [rom],
};
return new Models.RomCenter.MetadataFile
return new Data.Models.RomCenter.MetadataFile
{
Credits = credits,
Dat = dat,
@@ -156,7 +155,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Credits
/// </summary>
private static void Validate(Models.RomCenter.Credits? credits)
private static void Validate(Data.Models.RomCenter.Credits? credits)
{
Assert.NotNull(credits);
Assert.Equal("XXXXXX", credits.Author);
@@ -171,7 +170,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Dat
/// </summary>
private static void Validate(Models.RomCenter.Dat? dat)
private static void Validate(Data.Models.RomCenter.Dat? dat)
{
Assert.NotNull(dat);
Assert.Equal("XXXXXX", dat.Version);
@@ -183,7 +182,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Emulator
/// </summary>
private static void Validate(Models.RomCenter.Emulator? emulator)
private static void Validate(Data.Models.RomCenter.Emulator? emulator)
{
Assert.NotNull(emulator);
Assert.Equal("XXXXXX", emulator.RefName);
@@ -193,7 +192,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Games
/// </summary>
private static void Validate(Models.RomCenter.Games? games)
private static void Validate(Data.Models.RomCenter.Games? games)
{
Assert.NotNull(games);
Assert.NotNull(games.Rom);
@@ -204,7 +203,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.RomCenter.Rom? rom)
private static void Validate(Data.Models.RomCenter.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.ParentName);

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class SFBTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class SFOTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class SGATests
{

View File

@@ -1,10 +1,10 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class SeparatedValueTests
{
@@ -75,18 +75,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripShortTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.SeparatedValue();
var serializer = new Serialization.Serializers.SeparatedValue();
var deserializer = new SeparatedValue();
var serializer = new SabreTools.Serialization.Writers.SeparatedValue();
// Build the data
Models.SeparatedValue.MetadataFile mf = Build();
Data.Models.SeparatedValue.MetadataFile mf = Build();
// Serialize to stream
Stream? actual = Serialization.Serializers.SeparatedValue.SerializeStream(mf, longHeader: false);
Stream? actual = serializer.SerializeStream(mf, ',', longHeader: false);
Assert.NotNull(actual);
// Serialize back to original model
Models.SeparatedValue.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.SeparatedValue.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -103,18 +103,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripLongTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.SeparatedValue();
var serializer = new Serialization.Serializers.SeparatedValue();
var deserializer = new SeparatedValue();
var serializer = new SabreTools.Serialization.Writers.SeparatedValue();
// Build the data
Models.SeparatedValue.MetadataFile mf = Build();
Data.Models.SeparatedValue.MetadataFile mf = Build();
// Serialize to stream
Stream? actual = Serialization.Serializers.SeparatedValue.SerializeStream(mf, longHeader: true);
Stream? actual = serializer.SerializeStream(mf, ',', longHeader: true);
Assert.NotNull(actual);
// Serialize back to original model
Models.SeparatedValue.MetadataFile? newMf = deserializer.Deserialize(actual);
Data.Models.SeparatedValue.MetadataFile? newMf = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newMf);
@@ -130,11 +130,11 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.SeparatedValue.MetadataFile Build()
private static Data.Models.SeparatedValue.MetadataFile Build()
{
string[] header = ["header"];
var disk = new Models.SeparatedValue.Row
var disk = new Data.Models.SeparatedValue.Row
{
FileName = "XXXXXX",
InternalName = "XXXXXX",
@@ -148,7 +148,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Status = "XXXXXX",
};
var media = new Models.SeparatedValue.Row
var media = new Data.Models.SeparatedValue.Row
{
FileName = "XXXXXX",
InternalName = "XXXXXX",
@@ -163,7 +163,7 @@ namespace SabreTools.Serialization.Test.Deserializers
SpamSum = "XXXXXX",
};
var rom = new Models.SeparatedValue.Row
var rom = new Data.Models.SeparatedValue.Row
{
FileName = "XXXXXX",
InternalName = "XXXXXX",
@@ -183,7 +183,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Status = "XXXXXX",
};
return new Models.SeparatedValue.MetadataFile
return new Data.Models.SeparatedValue.MetadataFile
{
Header = header,
Row = [disk, media, rom],
@@ -197,15 +197,15 @@ namespace SabreTools.Serialization.Test.Deserializers
{
Assert.NotNull(header);
if (longHeader)
Assert.True(Serialization.Serializers.SeparatedValue.HeaderArrayExtended.SequenceEqual(header));
Assert.True(SabreTools.Serialization.Writers.SeparatedValue.HeaderArrayExtended.SequenceEqual(header));
else
Assert.True(Serialization.Serializers.SeparatedValue.HeaderArrayStandard.SequenceEqual(header));
Assert.True(SabreTools.Serialization.Writers.SeparatedValue.HeaderArrayStandard.SequenceEqual(header));
}
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateDisk(Models.SeparatedValue.Row? row, bool longHeader)
private static void ValidateDisk(Data.Models.SeparatedValue.Row? row, bool longHeader)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.FileName);
@@ -239,7 +239,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateMedia(Models.SeparatedValue.Row? row, bool longHeader)
private static void ValidateMedia(Data.Models.SeparatedValue.Row? row, bool longHeader)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.FileName);
@@ -273,7 +273,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Row
/// </summary>
private static void ValidateRom(Models.SeparatedValue.Row? row, bool longHeader)
private static void ValidateRom(Data.Models.SeparatedValue.Row? row, bool longHeader)
{
Assert.NotNull(row);
Assert.Equal("XXXXXX", row.FileName);

View File

@@ -1,10 +1,9 @@
using System;
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class SoftwareListTests
{
@@ -75,18 +74,18 @@ namespace SabreTools.Serialization.Test.Deserializers
public void RoundTripTest()
{
// Get the serializer and deserializer
var deserializer = new Serialization.Deserializers.SoftwareList();
var serializer = new Serialization.Serializers.SoftwareList();
var deserializer = new SoftwareList();
var serializer = new SabreTools.Serialization.Writers.SoftwareList();
// Build the data
Models.SoftwareList.SoftwareList sl = Build();
Data.Models.SoftwareList.SoftwareList sl = Build();
// Serialize to stream
Stream? actual = serializer.Serialize(sl);
Assert.NotNull(actual);
// Serialize back to original model
Models.SoftwareList.SoftwareList? newSl = deserializer.Deserialize(actual);
Data.Models.SoftwareList.SoftwareList? newSl = deserializer.Deserialize(actual);
// Validate the data
Assert.NotNull(newSl);
@@ -102,27 +101,27 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
private static Models.SoftwareList.SoftwareList Build()
private static Data.Models.SoftwareList.SoftwareList Build()
{
var info = new Models.SoftwareList.Info
var info = new Data.Models.SoftwareList.Info
{
Name = "XXXXXX",
Value = "XXXXXX",
};
var sharedfeat = new Models.SoftwareList.SharedFeat
var sharedfeat = new Data.Models.SoftwareList.SharedFeat
{
Name = "XXXXXX",
Value = "XXXXXX",
};
var feature = new Models.SoftwareList.Feature
var feature = new Data.Models.SoftwareList.Feature
{
Name = "XXXXXX",
Value = "XXXXXX",
};
var rom = new Models.SoftwareList.Rom
var rom = new Data.Models.SoftwareList.Rom
{
Name = "XXXXXX",
Size = "XXXXXX",
@@ -135,7 +134,7 @@ namespace SabreTools.Serialization.Test.Deserializers
LoadFlag = "XXXXXX",
};
var dataarea = new Models.SoftwareList.DataArea
var dataarea = new Data.Models.SoftwareList.DataArea
{
Name = "XXXXXX",
Size = "XXXXXX",
@@ -144,7 +143,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Rom = [rom],
};
var disk = new Models.SoftwareList.Disk
var disk = new Data.Models.SoftwareList.Disk
{
Name = "XXXXXX",
MD5 = "XXXXXX",
@@ -153,20 +152,20 @@ namespace SabreTools.Serialization.Test.Deserializers
Writeable = "XXXXXX",
};
var diskarea = new Models.SoftwareList.DiskArea
var diskarea = new Data.Models.SoftwareList.DiskArea
{
Name = "XXXXXX",
Disk = [disk],
};
var dipvalue = new Models.SoftwareList.DipValue
var dipvalue = new Data.Models.SoftwareList.DipValue
{
Name = "XXXXXX",
Value = "XXXXXX",
Default = "XXXXXX",
};
var dipswitch = new Models.SoftwareList.DipSwitch
var dipswitch = new Data.Models.SoftwareList.DipSwitch
{
Name = "XXXXXX",
Tag = "XXXXXX",
@@ -174,7 +173,7 @@ namespace SabreTools.Serialization.Test.Deserializers
DipValue = [dipvalue],
};
var part = new Models.SoftwareList.Part
var part = new Data.Models.SoftwareList.Part
{
Name = "XXXXXX",
Interface = "XXXXXX",
@@ -184,7 +183,7 @@ namespace SabreTools.Serialization.Test.Deserializers
DipSwitch = [dipswitch],
};
var software = new Models.SoftwareList.Software
var software = new Data.Models.SoftwareList.Software
{
Name = "XXXXXX",
CloneOf = "XXXXXX",
@@ -198,7 +197,7 @@ namespace SabreTools.Serialization.Test.Deserializers
Part = [part],
};
return new Models.SoftwareList.SoftwareList
return new Data.Models.SoftwareList.SoftwareList
{
Name = "XXXXXX",
Description = "XXXXXX",
@@ -210,7 +209,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Software
/// </summary>
private static void Validate(Models.SoftwareList.Software? software)
private static void Validate(Data.Models.SoftwareList.Software? software)
{
Assert.NotNull(software);
Assert.Equal("XXXXXX", software.Name);
@@ -237,7 +236,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Info
/// </summary>
private static void Validate(Models.SoftwareList.Info? info)
private static void Validate(Data.Models.SoftwareList.Info? info)
{
Assert.NotNull(info);
Assert.Equal("XXXXXX", info.Name);
@@ -247,7 +246,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a SharedFeat
/// </summary>
private static void Validate(Models.SoftwareList.SharedFeat? sharedfeat)
private static void Validate(Data.Models.SoftwareList.SharedFeat? sharedfeat)
{
Assert.NotNull(sharedfeat);
Assert.Equal("XXXXXX", sharedfeat.Name);
@@ -257,7 +256,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Part
/// </summary>
private static void Validate(Models.SoftwareList.Part? part)
private static void Validate(Data.Models.SoftwareList.Part? part)
{
Assert.NotNull(part);
Assert.Equal("XXXXXX", part.Name);
@@ -283,7 +282,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Feature
/// </summary>
private static void Validate(Models.SoftwareList.Feature? feature)
private static void Validate(Data.Models.SoftwareList.Feature? feature)
{
Assert.NotNull(feature);
Assert.Equal("XXXXXX", feature.Name);
@@ -293,7 +292,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DataArea
/// </summary>
private static void Validate(Models.SoftwareList.DataArea? dataarea)
private static void Validate(Data.Models.SoftwareList.DataArea? dataarea)
{
Assert.NotNull(dataarea);
Assert.Equal("XXXXXX", dataarea.Name);
@@ -309,7 +308,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Rom
/// </summary>
private static void Validate(Models.SoftwareList.Rom? rom)
private static void Validate(Data.Models.SoftwareList.Rom? rom)
{
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
@@ -326,7 +325,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DiskArea
/// </summary>
private static void Validate(Models.SoftwareList.DiskArea? diskarea)
private static void Validate(Data.Models.SoftwareList.DiskArea? diskarea)
{
Assert.NotNull(diskarea);
Assert.Equal("XXXXXX", diskarea.Name);
@@ -339,7 +338,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a Disk
/// </summary>
private static void Validate(Models.SoftwareList.Disk? disk)
private static void Validate(Data.Models.SoftwareList.Disk? disk)
{
Assert.NotNull(disk);
Assert.Equal("XXXXXX", disk.Name);
@@ -352,7 +351,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipSwitch
/// </summary>
private static void Validate(Models.SoftwareList.DipSwitch? dipswitch)
private static void Validate(Data.Models.SoftwareList.DipSwitch? dipswitch)
{
Assert.NotNull(dipswitch);
Assert.Equal("XXXXXX", dipswitch.Name);
@@ -367,7 +366,7 @@ namespace SabreTools.Serialization.Test.Deserializers
/// <summary>
/// Validate a DipValue
/// </summary>
private static void Validate(Models.SoftwareList.DipValue? dipvalue)
private static void Validate(Data.Models.SoftwareList.DipValue? dipvalue)
{
Assert.NotNull(dipvalue);
Assert.Equal("XXXXXX", dipvalue.Name);

View File

@@ -0,0 +1,73 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class TapeArchiveTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new TapeArchive();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new TapeArchive();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new TapeArchive();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new TapeArchive();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new TapeArchive();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new TapeArchive();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
}
}

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class VBSPTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class VPKTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class WAD3Tests
{

View File

@@ -0,0 +1,73 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class WiseOverlayHeaderTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new WiseOverlayHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new WiseOverlayHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new WiseOverlayHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new WiseOverlayHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new WiseOverlayHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new WiseOverlayHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
}
}

View File

@@ -0,0 +1,73 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class WiseScriptTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new WiseScript();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new WiseScript();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new WiseScript();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new WiseScript();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new WiseScript();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new WiseScript();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
}
}

View File

@@ -0,0 +1,73 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Readers
{
public class WiseSectionHeaderTests
{
[Fact]
public void NullArray_Null()
{
byte[]? data = null;
int offset = 0;
var deserializer = new WiseSectionHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void EmptyArray_Null()
{
byte[]? data = [];
int offset = 0;
var deserializer = new WiseSectionHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void InvalidArray_Null()
{
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
int offset = 0;
var deserializer = new WiseSectionHeader();
var actual = deserializer.Deserialize(data, offset);
Assert.Null(actual);
}
[Fact]
public void NullStream_Null()
{
Stream? data = null;
var deserializer = new WiseSectionHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void EmptyStream_Null()
{
Stream? data = new MemoryStream([]);
var deserializer = new WiseSectionHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
[Fact]
public void InvalidStream_Null()
{
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
var deserializer = new WiseSectionHeader();
var actual = deserializer.Deserialize(data);
Assert.Null(actual);
}
}
}

View File

@@ -1,8 +1,8 @@
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class XMIDTests
{

View File

@@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class XZPTests
{

View File

@@ -1,7 +1,7 @@
using SabreTools.Serialization.Deserializers;
using SabreTools.Serialization.Readers;
using Xunit;
namespace SabreTools.Serialization.Test.Deserializers
namespace SabreTools.Serialization.Test.Readers
{
public class XeMIDTests
{

View File

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0;net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<IsPackable>false</IsPackable>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
@@ -12,25 +12,24 @@
</ItemGroup>
<ItemGroup>
<None Remove="TestData\*" />
<None Remove="TestData\**" />
</ItemGroup>
<ItemGroup>
<Content Include="TestData\*">
<Content Include="TestData\**">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="SabreTools.Hashing" Version="1.4.0" />
<PackageReference Include="SabreTools.Models" Version="1.5.7" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="SabreTools.Hashing" Version="1.5.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>

View File

@@ -0,0 +1 @@
This is a fake file for testing

View File

@@ -0,0 +1 @@
This is a fake file for testing

View File

@@ -0,0 +1 @@
This is a fake file for testing

View File

@@ -0,0 +1 @@
This is a fake file for testing

Some files were not shown because too many files have changed in this diff Show More