package parser import ( "reflect" "sort" "strings" "testing" ) func TestDNSMasqParser(t *testing.T) { tests := []struct { Name string Test string Want []string WantIgnored int }{ { "data", ` local-data: "junk1.doubleclick.net A 127.0.0.1" local-data: "junk2.doubleclick.net A 127.0.0.1" local-data: "junk2.doubleclick.net CNAME doubleclick.net." local-data: "junk6.doubleclick.net AAAA ::1" local-data: "doubleclick.net A 127.0.0.1" local-data: "ad.junk1.doubleclick.net A 127.0.0.1" local-data: "adjunk.google.com A 127.0.0.1"`, []string{"ad.junk1.doubleclick.net", "adjunk.google.com", "doubleclick.net", "junk1.doubleclick.net", "junk2.doubleclick.net", "junk6.doubleclick.net"}, 0, }, { "zone", ` local-zone: "doubleclick.net" reject local-zone: "adjunk.google.com" reject`, []string{"adjunk.google.com", "doubleclick.net"}, 0, }, { "address", ` address=/ziyu.net/0.0.0.0 address=/zlp6s.pw/0.0.0.0 address=/zm232.com/0.0.0.0 `, []string{"ziyu.net", "zlp6s.pw", "zm232.com"}, 0, }, } for _, test := range tests { t.Run(test.Name, func(it *testing.T) { parsed, ignored, err := ParseDomains(strings.NewReader(test.Test)) if err != nil { t.Fatal(err) return } sort.Strings(parsed) if !reflect.DeepEqual(parsed, test.Want) { t.Errorf("expected ParseDomains(dnsmasq) to return\n\t%v, got\n\t%v", test.Want, parsed) } if ignored != test.WantIgnored { t.Errorf("expected %d ignored, got %d", test.WantIgnored, ignored) } }) } } func TestMOSDNSParser(t *testing.T) { test := `domain:0019x.com domain:002777.xyz domain:003store.com domain:00404850.xyz` want := []string{"0019x.com", "002777.xyz", "003store.com", "00404850.xyz"} parsed, _, err := ParseDomains(strings.NewReader(test)) if err != nil { t.Fatal(err) return } sort.Strings(parsed) if !reflect.DeepEqual(parsed, want) { t.Errorf("expected ParseDomains(domains) to return %v, got %v", want, parsed) } } func TestSmartDNSParser(t *testing.T) { test := `# Title:AdRules SmartDNS List # Update: 2025-10-07 02:05:08(GMT+8) address /0.myikas.com/# address /0.net.easyjet.com/# address /0.nextyourcontent.com/# address /0019x.com/#` want := []string{"0.myikas.com", "0.net.easyjet.com", "0.nextyourcontent.com", "0019x.com"} parsed, _, err := ParseDomains(strings.NewReader(test)) if err != nil { t.Fatal(err) return } sort.Strings(parsed) if !reflect.DeepEqual(parsed, want) { t.Errorf("expected ParseDomains(domains) to return %v, got %v", want, parsed) } }