parent
8efdd857a0
commit
a498bf0c9e
7 changed files with 252 additions and 1 deletions
@ -1,5 +1,7 @@ |
||||
#!/bin/sh |
||||
cd project |
||||
rm -rf testdata |
||||
mkdir testdata |
||||
PIGEON_PATH="./testdata" go test -coverprofile coverage.out |
||||
PIGEON_PATH="./testdata" go tool cover -html=coverage.out |
||||
cd - |
||||
|
@ -0,0 +1,129 @@ |
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 0 |
||||
kind FILE.ET9C7B9N82XR0F021CXEWSPDH23H4CHMX866WWA3R2PXEFZM67PG |
||||
lipmaa NONE |
||||
prev NONE |
||||
|
||||
a:"b" |
||||
|
||||
signature TKVXZ5EJV0GRDY60V2ZHN4ART60FYYJ99SJQGXAK8AF80X1ZFQCR18P5JVJZWMFME5Q7WF1999MH13V2ZYMVBX4XZGGR537FVFXWG10 |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 1 |
||||
kind a |
||||
lipmaa NONE |
||||
prev TEXT.0HG26KBTYFD3FW8K72GFJJ5CV9KXSDRG2WJS15P3XQ5V56XNX8E0 |
||||
|
||||
FILE.7Z2CSZKMB1RE5G6SKXRZ63ZGCNP8VVEM3K0XFMYKETRDQSM5WBSG:"b" |
||||
|
||||
signature DPBY0XEKZPMFT0DM7JFFZVPZG4FR248SQVAXJ7T3T7QB1QYV3MKKS1V9FHWK9P33MECKBE4AYV4V70X9M9Z292JFC0DXBHH0HSJHM1R |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 2 |
||||
kind a |
||||
lipmaa NONE |
||||
prev TEXT.BJEPB3TPZM2ZSQWHYB4N5ECMF0S9H4VKH0WYE1QY5T911YYZEA5G |
||||
|
||||
b:FILE.HDDSVC617PS44NP856N3CJN91HPJXEHHHE93595BJC9VJN6KANFG |
||||
|
||||
signature P6DK52KZ2KWHDJJ7Y7GZA2VGDRNQ9FDBFTDJY1ME6V21BDCCKYMFF3TEZ5EENJMRR4B8NCS0W4354WG88ZSW421RKW38JR8BPVQVC1R |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 3 |
||||
kind a8df9e36-7c32-431c-af4c-855b6c398c87 |
||||
lipmaa NONE |
||||
prev TEXT.TCZ4GCD45ETX73EEGRHPFX1BBPNBG70S03GC6V0F2QE07SCQ18T0 |
||||
|
||||
foo:"fe3d0f08-13a3-47eb-b605-cc9c1dd1811c" |
||||
|
||||
signature R4RZ2DXD624C5TT0JCS1CP8ZA89KVMP8C2X39H7N0H6T4CPZNHGN5DA1B6B7B35V4WBB6X6XGNRBYMXJHD50BHRR3SMGDFCJ8YM8G20 |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 4 |
||||
kind dcf7d089-b5ef-4f8b-8fe7-c176e7c7605b |
||||
lipmaa TEXT.BJEPB3TPZM2ZSQWHYB4N5ECMF0S9H4VKH0WYE1QY5T911YYZEA5G |
||||
prev TEXT.94NPGGDTM456TFBJTQH2YFSQ2W46AJ9GGVYYYGXHGTR9A27ZPG2G |
||||
|
||||
foo:"bar" |
||||
|
||||
signature 95TCVY0CP01NZVHQSR8CNXDGYW9BK4CJADXQGA1R5G5Y8HD05N8MZ4KTSSAGP785BXQYMYMBVJEV1NMC0GF651RHQYGP57XR716JG3G |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 5 |
||||
kind 485d10d6-87b3-4f1f-baf3-752796afec64 |
||||
lipmaa NONE |
||||
prev TEXT.HWR2DNDWJYP60348W0M78QF4H0B5B7X6NT6KVS9GNJSP207PDB9G |
||||
|
||||
foo:"16c4ad9b-34cc-4c37-a4c9-3ab0161ea4b5" |
||||
|
||||
signature 0NPJG4A0VWP0HPS2SV3DJH696QMWBWZZ27CKCTX5JK8WJ1JE818PPJGRJRAC4QQ7K10GT2Z2Q19R3YKQFF1S0HFHYSPCC64079WZA38 |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 6 |
||||
kind 74be7129-06b8-4cb6-8aa9-d549710cd657 |
||||
lipmaa NONE |
||||
prev TEXT.YEBFRRM6HCX514HBHBTB3AK2HF5B71MPDMB5HNQW4ACYETQYDNZ0 |
||||
|
||||
foo:"123" |
||||
|
||||
signature HD7VNKTMARQ3294C6KDGXV4BP0GKFWEXBC5R8RHWF8VKBMFXDB2NCX4XQN6Q524ZWPNTM0HGSHSAX359GCAEFE0P688S4825RY2P418 |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 7 |
||||
kind f06d3a2b-a1c0-4bf5-83e7-29409ac0c9b4 |
||||
lipmaa NONE |
||||
prev TEXT.XQRKXB46M6HZAWTADNXWFTHQS8PGEPDZ581J40REFNT3YWG8YZ70 |
||||
|
||||
foo:"123" |
||||
|
||||
signature ZYHVXQGZ9G78AD69A9SFMF281B4WHX05AG8TEKBKSFH706HXNYRTPH9G5VP01ZC515MMP69KPV41THB7DG9XJT90ZRX99KZ1WGJQM2R |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 8 |
||||
kind a4df2c79-17ef-4c90-ba11-3021fe23269c |
||||
lipmaa TEXT.HWR2DNDWJYP60348W0M78QF4H0B5B7X6NT6KVS9GNJSP207PDB9G |
||||
prev TEXT.49S2F3Y6AXHDD8F62RKXPFWC2BYBV5D16VQY34F40NTQFZW1R0G0 |
||||
|
||||
foo:"bar" |
||||
|
||||
signature W57NQEX8HD3DQG1F8G6SD8960QRP0HYPWXCKTN6AZ5SXZCWABPBWHM84EFDH5MJTJ4YYVZHC5RC01382DAW19EDCCXCG3KM2XCRH620 |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 9 |
||||
kind a2c49e15-befd-4a62-8a7d-f4a28d052c38 |
||||
lipmaa NONE |
||||
prev TEXT.NRK3MEG982X5N76RFF4F9WC405452YNZFCH5WTP9G8ERRTYNN3V0 |
||||
|
||||
foo:"3b39df57-9dee-4a66-8d49-ee4944631f33" |
||||
|
||||
signature ATRMAPBKQ7VZWRDSX4ASSVZ3D9CKSS3PZ8ZP229H96MA9DGD7RM5TA1E4CZD42BWK6Q9XJ1C1KDY2BMXJ8Z3Z780YDZEWWJYYTQHW1R |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 10 |
||||
kind 7a1a2b5a-32c2-4b3f-b287-42e4a73e340d |
||||
lipmaa NONE |
||||
prev TEXT.FKH08FA04MCC7RPYN1GZZT0VAGHAW0VRHQD6QZX3C6YCTAZM9WE0 |
||||
|
||||
foo:"bar" |
||||
|
||||
signature 3F774WW8NVA3HAQRV7M4CWKBYH86QB8F9QPQ6FV96MG6S9KHBG519WKPNBZR7YRFFBWHZZ50RSKP9YVDHW9K3XXHERQ8BDXYKAR8Y2G |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 11 |
||||
kind c8cfac48-460f-47c6-a6b3-34daa431fcab |
||||
lipmaa NONE |
||||
prev TEXT.DQH1TX6QM3223PNX4Y352AQSDJM91SMFYJFG6PPC182ZW9PYR70G |
||||
|
||||
foo:"450024fc-ea1c-4144-b7b9-16c60ff00e45" |
||||
|
||||
signature AT3VWBJXP7NZBGADPWGX0PVHPKS0W14SAY12XZHYQ3EF025641M29P46ZNYM3M4Q0HKZYH4GSMRR7RTC7R5V3K5AXKH68SJ4B094E0R |
||||
|
||||
author USER.PJC0W5XRFX4JBFPX929PQETB58VM7A4P5RDMW7Y8E9P4CRZDWEBG |
||||
depth 12 |
||||
kind 6ecac9f1-e5dc-4274-a0fd-633c2cd56832 |
||||
lipmaa TEXT.NRK3MEG982X5N76RFF4F9WC405452YNZFCH5WTP9G8ERRTYNN3V0 |
||||
prev TEXT.Y3K7WH4R9W9EBTZB27NJCYR6VBKYTHZX97Y05841VPM5G50ZYG00 |
||||
|
||||
foo:"fc1a7066-2af2-4437-98e3-dbc33e67d7c6" |
||||
|
||||
signature CGC4PHDQBSR7ZWS5NY3KZ7YJ342K30QB3DKHDS78GD4H2F5J196424GBQD04EDMYX8M4J971VJ7JQ1N1QZDV24ABDY02TW0QDP82P1G |
@ -0,0 +1,79 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"bufio" |
||||
"errors" |
||||
"fmt" |
||||
"strings" |
||||
) |
||||
|
||||
type pigeonBodyItem struct { |
||||
key string |
||||
value string |
||||
} |
||||
|
||||
type pigeonMessage struct { |
||||
author string |
||||
depth int |
||||
kind string |
||||
lipmaa string |
||||
prev string |
||||
body [256]pigeonBodyItem |
||||
signature string |
||||
} |
||||
|
||||
type parserMode int |
||||
|
||||
const ( |
||||
parsingHeader parserMode = iota |
||||
parsingBody parserMode = iota |
||||
parsingFooter parserMode = iota |
||||
parsingDone parserMode = iota |
||||
) |
||||
|
||||
type parserState struct { |
||||
mode parserMode |
||||
scanner *bufio.Scanner |
||||
} |
||||
|
||||
func newState(message string) parserState { |
||||
return parserState{ |
||||
mode: parsingHeader, |
||||
scanner: bufio.NewScanner(strings.NewReader(message)), |
||||
} |
||||
} |
||||
|
||||
func parseMessage(message string) ([]pigeonMessage, error) { |
||||
state := newState(message) |
||||
|
||||
for state.scanner.Scan() { |
||||
switch state.mode { |
||||
case parsingHeader: |
||||
parseHeader(state) |
||||
case parsingBody: |
||||
parseBody(state) |
||||
case parsingFooter: |
||||
parseFooter(state) |
||||
} |
||||
} |
||||
return []pigeonMessage{}, errors.New("whatever") |
||||
} |
||||
|
||||
func parseHeader(state parserState) { |
||||
t := state.scanner.Text() |
||||
chunks := strings.Split(t, " ") |
||||
switch len(chunks) { |
||||
case 2: |
||||
fmt.Printf("=== KEY: %s | VALUE: %s\n", chunks[0], chunks[1]) |
||||
default: |
||||
fmt.Printf("WHATS THIS?? %s\n", chunks[0]) |
||||
} |
||||
} |
||||
|
||||
func parseBody(state parserState) { |
||||
panic("Not done yet") |
||||
} |
||||
|
||||
func parseFooter(state parserState) { |
||||
panic("Not done yet") |
||||
} |
@ -0,0 +1,25 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"io/ioutil" |
||||
"log" |
||||
"testing" |
||||
) |
||||
|
||||
func TestParser(t *testing.T) { |
||||
content, err1 := ioutil.ReadFile("../fixture.pgn") |
||||
if err1 != nil { |
||||
log.Fatal(err1) |
||||
} |
||||
output, err2 := parseMessage(string(content)) |
||||
|
||||
if err2 != nil { |
||||
log.Fatal(err2) |
||||
} |
||||
|
||||
fixtureSize := 13 |
||||
length := len(output) |
||||
if length != fixtureSize { |
||||
t.Fatalf("Expected %d items, got %d", fixtureSize, length) |
||||
} |
||||
} |
Loading…
Reference in new issue