Home | History | Annotate | Download | only in xml
      1 // Copyright 2018 Google Inc. All rights reserved.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 package xml
     16 
     17 import (
     18 	"android/soong/android"
     19 	"io/ioutil"
     20 	"os"
     21 	"testing"
     22 )
     23 
     24 func testXml(t *testing.T, bp string) *android.TestContext {
     25 	config, buildDir := setup(t)
     26 	defer teardown(buildDir)
     27 	ctx := android.NewTestArchContext()
     28 	ctx.RegisterModuleType("prebuilt_etc", android.ModuleFactoryAdaptor(android.PrebuiltEtcFactory))
     29 	ctx.RegisterModuleType("prebuilt_etc_xml", android.ModuleFactoryAdaptor(PrebuiltEtcXmlFactory))
     30 	ctx.Register()
     31 	mockFiles := map[string][]byte{
     32 		"Android.bp": []byte(bp),
     33 		"foo.xml":    nil,
     34 		"foo.dtd":    nil,
     35 		"bar.xml":    nil,
     36 		"bar.xsd":    nil,
     37 	}
     38 	ctx.MockFileSystem(mockFiles)
     39 	_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
     40 	android.FailIfErrored(t, errs)
     41 	_, errs = ctx.PrepareBuildActions(config)
     42 	android.FailIfErrored(t, errs)
     43 
     44 	return ctx
     45 }
     46 
     47 func setup(t *testing.T) (config android.Config, buildDir string) {
     48 	buildDir, err := ioutil.TempDir("", "soong_xml_test")
     49 	if err != nil {
     50 		t.Fatal(err)
     51 	}
     52 
     53 	config = android.TestArchConfig(buildDir, nil)
     54 
     55 	return
     56 }
     57 
     58 func teardown(buildDir string) {
     59 	os.RemoveAll(buildDir)
     60 }
     61 
     62 // Minimal test
     63 func TestPrebuiltEtcXml(t *testing.T) {
     64 	ctx := testXml(t, `
     65 		prebuilt_etc_xml {
     66 			name: "foo.xml",
     67 			src: "foo.xml",
     68 			schema: "foo.dtd",
     69 		}
     70 		prebuilt_etc_xml {
     71 			name: "bar.xml",
     72 			src: "bar.xml",
     73 			schema: "bar.xsd",
     74 		}
     75 	`)
     76 
     77 	xmllint := ctx.ModuleForTests("foo.xml", "android_common").Rule("xmllint")
     78 	input := xmllint.Input.String()
     79 	if input != "foo.xml" {
     80 		t.Errorf("input expected %q != got %q", "foo.xml", input)
     81 	}
     82 	schema := xmllint.Args["dtd"]
     83 	if schema != "foo.dtd" {
     84 		t.Errorf("dtd expected %q != got %q", "foo.dtdl", schema)
     85 	}
     86 }
     87