From 15111f9607277b94b298dbefbe309666b7103f08 Mon Sep 17 00:00:00 2001 From: Stephen Crawley Date: Sun, 10 Sep 2017 19:39:19 +1000 Subject: [PATCH] Adding a test utility to parse and dump a 'magic' file. --- .../j256/simplemagic/entries/MagicEntry.java | 22 ++++++++++++- .../simplemagic/entries/MagicEntryDumper.java | 32 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/j256/simplemagic/entries/MagicEntryDumper.java diff --git a/src/main/java/com/j256/simplemagic/entries/MagicEntry.java b/src/main/java/com/j256/simplemagic/entries/MagicEntry.java index b4f6997..a61138a 100644 --- a/src/main/java/com/j256/simplemagic/entries/MagicEntry.java +++ b/src/main/java/com/j256/simplemagic/entries/MagicEntry.java @@ -125,7 +125,22 @@ public String toString() { return sb.toString(); } - /** + public String toString2() { + StringBuilder sb = new StringBuilder(toString() + ",addOffset " + addOffset + + ",offset " + offset + ",offsetInfo " + offsetInfo + + ",matcher " + matcher.getClass().getSimpleName() + + ",andValue " + andValue + ",unsignedType " + unsignedType + + ",formatSpacePrefix " + formatSpacePrefix + + ",clearFormat " + clearFormat); + if (children != null) { + for (MagicEntry entry: children) { + sb.append("\n").append(entry.toString2()); + } + } + return sb.toString(); + } + + /** * Main processing method which can go recursive. */ private ContentData matchBytes(byte[] bytes, int prevOffset, int level, ContentData contentData) { @@ -257,5 +272,10 @@ public Integer getOffset(byte[] bytes) { return (int) (val + add); } } + + public String toString() { + return "[" + offset + "," + converter.getClass().getSimpleName() + + "," + isId3 + "," + size + "," + add + "]"; + } } } diff --git a/src/test/java/com/j256/simplemagic/entries/MagicEntryDumper.java b/src/test/java/com/j256/simplemagic/entries/MagicEntryDumper.java new file mode 100644 index 0000000..4bf7e5a --- /dev/null +++ b/src/test/java/com/j256/simplemagic/entries/MagicEntryDumper.java @@ -0,0 +1,32 @@ +package com.j256.simplemagic.entries; + +import java.io.FileReader; +import java.lang.reflect.Field; +import java.util.List; + +import com.j256.simplemagic.ContentInfoUtil; +import com.j256.simplemagic.ContentInfoUtil.ErrorCallBack; + +public class MagicEntryDumper { + + public static void main(String[] args) throws Exception { + ErrorCallBack handler = new ErrorCallBack() { + @Override + public void error(String line, String details, Exception e) { + System.err.println(line + ":" + details); + } + }; + ContentInfoUtil util = args.length == 0 ? new ContentInfoUtil(handler) : + new ContentInfoUtil(new FileReader(args[0]), handler); + Field entriesField = ContentInfoUtil.class.getDeclaredField("magicEntries"); + entriesField.setAccessible(true); + MagicEntries entries = (MagicEntries) entriesField.get(util); + Field entryListField = MagicEntries.class.getDeclaredField("entryList"); + entryListField.setAccessible(true); + @SuppressWarnings("unchecked") + List entryList = (List) entryListField.get(entries); + for (MagicEntry entry: entryList) { + System.out.println(entry.toString2()); + } + } +}