xref: /aosp_15_r20/build/blueprint/parser/modify_test.go (revision 1fa6dee971e1612fa5cc0aa5ca2d35a22e2c34a3)
1*1fa6dee9SAndroid Build Coastguard Worker// Copyright 2018 Google Inc. All rights reserved.
2*1fa6dee9SAndroid Build Coastguard Worker//
3*1fa6dee9SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*1fa6dee9SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*1fa6dee9SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*1fa6dee9SAndroid Build Coastguard Worker//
7*1fa6dee9SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*1fa6dee9SAndroid Build Coastguard Worker//
9*1fa6dee9SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*1fa6dee9SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*1fa6dee9SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*1fa6dee9SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*1fa6dee9SAndroid Build Coastguard Worker// limitations under the License.
14*1fa6dee9SAndroid Build Coastguard Worker
15*1fa6dee9SAndroid Build Coastguard Workerpackage parser
16*1fa6dee9SAndroid Build Coastguard Worker
17*1fa6dee9SAndroid Build Coastguard Workerimport (
18*1fa6dee9SAndroid Build Coastguard Worker	"bytes"
19*1fa6dee9SAndroid Build Coastguard Worker	"testing"
20*1fa6dee9SAndroid Build Coastguard Worker)
21*1fa6dee9SAndroid Build Coastguard Worker
22*1fa6dee9SAndroid Build Coastguard Workerfunc TestPatchList(t *testing.T) {
23*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap := func(err error) {
24*1fa6dee9SAndroid Build Coastguard Worker		t.Helper()
25*1fa6dee9SAndroid Build Coastguard Worker		if _, ok := err.(PatchOverlapError); !ok {
26*1fa6dee9SAndroid Build Coastguard Worker			t.Error("missing PatchOverlapError")
27*1fa6dee9SAndroid Build Coastguard Worker		}
28*1fa6dee9SAndroid Build Coastguard Worker	}
29*1fa6dee9SAndroid Build Coastguard Worker
30*1fa6dee9SAndroid Build Coastguard Worker	expectOk := func(err error) {
31*1fa6dee9SAndroid Build Coastguard Worker		t.Helper()
32*1fa6dee9SAndroid Build Coastguard Worker		if err != nil {
33*1fa6dee9SAndroid Build Coastguard Worker			t.Error(err)
34*1fa6dee9SAndroid Build Coastguard Worker		}
35*1fa6dee9SAndroid Build Coastguard Worker	}
36*1fa6dee9SAndroid Build Coastguard Worker
37*1fa6dee9SAndroid Build Coastguard Worker	in := []byte("abcdefghijklmnopqrstuvwxyz")
38*1fa6dee9SAndroid Build Coastguard Worker
39*1fa6dee9SAndroid Build Coastguard Worker	patchlist := PatchList{}
40*1fa6dee9SAndroid Build Coastguard Worker	expectOk(patchlist.Add(0, 3, "ABC"))
41*1fa6dee9SAndroid Build Coastguard Worker	expectOk(patchlist.Add(12, 15, "MNO"))
42*1fa6dee9SAndroid Build Coastguard Worker	expectOk(patchlist.Add(24, 26, "Z"))
43*1fa6dee9SAndroid Build Coastguard Worker	expectOk(patchlist.Add(15, 15, "_"))
44*1fa6dee9SAndroid Build Coastguard Worker
45*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap(patchlist.Add(0, 3, "x"))
46*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap(patchlist.Add(12, 13, "x"))
47*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap(patchlist.Add(13, 14, "x"))
48*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap(patchlist.Add(14, 15, "x"))
49*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap(patchlist.Add(11, 13, "x"))
50*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap(patchlist.Add(12, 15, "x"))
51*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap(patchlist.Add(11, 15, "x"))
52*1fa6dee9SAndroid Build Coastguard Worker	expectOverlap(patchlist.Add(15, 15, "x"))
53*1fa6dee9SAndroid Build Coastguard Worker
54*1fa6dee9SAndroid Build Coastguard Worker	if t.Failed() {
55*1fa6dee9SAndroid Build Coastguard Worker		return
56*1fa6dee9SAndroid Build Coastguard Worker	}
57*1fa6dee9SAndroid Build Coastguard Worker
58*1fa6dee9SAndroid Build Coastguard Worker	buf := new(bytes.Buffer)
59*1fa6dee9SAndroid Build Coastguard Worker	patchlist.Apply(bytes.NewReader(in), buf)
60*1fa6dee9SAndroid Build Coastguard Worker	expected := "ABCdefghijklMNO_pqrstuvwxZ"
61*1fa6dee9SAndroid Build Coastguard Worker	got := buf.String()
62*1fa6dee9SAndroid Build Coastguard Worker	if got != expected {
63*1fa6dee9SAndroid Build Coastguard Worker		t.Errorf("expected %q, got %q", expected, got)
64*1fa6dee9SAndroid Build Coastguard Worker	}
65*1fa6dee9SAndroid Build Coastguard Worker}
66