Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Android/tools/tools/treble/build/treble_build/local/   (Android Betriebssystem Version 17©)  Datei vom 26.5.2026 mit Größe 4 kB image not shown  

Quelle  git_test.go   Sprache: unbekannt

 
Spracherkennung für: .go vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

// Copyright (C) 2022 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package local

import (
 "bytes"
 "context"
 "reflect"
 "testing"

 "tools/treble/build/report/app"
)

// Test cases for local GIT.
type TestCmd struct {
 err  error
 text string
}
type gitTestCli struct {
 revParse   *TestCmd
 remoteUrl  *TestCmd
 tree       *TestCmd
 commit     *TestCmd
 diffBranch *TestCmd
}

func (g *gitTestCli) ProjectInfo(ctx context.Context, gitDir, workDir string) (*bytes.Buffer, error) {
 return bytes.NewBufferString(g.revParse.text), g.revParse.err
}
func (g *gitTestCli) RemoteUrl(ctx context.Context, gitDir, workDir, remote string) (*bytes.Buffer, error) {
 return bytes.NewBufferString(g.remoteUrl.text), g.remoteUrl.err
}
func (g *gitTestCli) Tree(ctx context.Context, gitDir, workDir, revision string) (*bytes.Buffer, error) {
 return bytes.NewBufferString(g.tree.text), g.tree.err
}
func (g *gitTestCli) CommitInfo(ctx context.Context, gitDir, workDir, sha string) (*bytes.Buffer, error) {
 return bytes.NewBufferString(g.commit.text), g.tree.err
}
func (g *gitTestCli) DiffBranches(ctx context.Context, gitDir, workDir, upstream, sha string) (*bytes.Buffer, error) {
 return bytes.NewBufferString(g.diffBranch.text), g.tree.err
}

func Test_git(t *testing.T) {

 type projectTest struct {
  revCmd    *TestCmd
  remoteCmd *TestCmd
  treeCmd   *TestCmd
  res       *app.GitProject
 }

 type commitTest struct {
  sha string
  cmd *TestCmd
  res *app.GitCommit
 }

 tests := []struct {
  path     string
  gitDir   string
  remote   string
  revision string
  getFiles bool
  project  projectTest
  commit   commitTest
 }{
  {
   path:     "work/dir",
   gitDir:   "",
   remote:   "origin",
   revision: "sha_revision",
   getFiles: true,
   project: projectTest{
    revCmd:    &TestCmd{text: "/abs/path/to/work/dir\nsha_revision\n", err: nil},
    remoteCmd: &TestCmd{text: "http://url/workdir", err: nil},
    treeCmd:   &TestCmd{text: "", err: nil},
    res: &app.GitProject{
     RepoDir:   "work/dir",
     WorkDir:   "/abs/path/to/work/dir",
     GitDir:    ".git",
     Remote:    "origin",
     RemoteUrl: "http://url/workdir",
     Revision:  "sha_revision",
     Files:     make(map[string]*app.GitTreeObj)},
   },
   // Test empty commit
   commit: commitTest{
    sha: "commit_sha",
    cmd: &TestCmd{text: "commit_sha", err: nil},
    res: &app.GitCommit{Sha: "commit_sha", Files: []app.GitCommitFile{}},
   },
  },
  {
   path:     "work/dir",
   gitDir:   "",
   remote:   "origin",
   revision: "sha_revision",
   getFiles: true,
   project: projectTest{
    revCmd:    &TestCmd{text: "/abs/path/to/work/dir\nsha_revision\n", err: nil},
    remoteCmd: &TestCmd{text: "http://url/workdir", err: nil},
    treeCmd:   &TestCmd{text: "100644 blob 0000000000000000000000000000000000000001 file.1\n", err: nil},
    res: &app.GitProject{
     RepoDir:   "work/dir",
     WorkDir:   "/abs/path/to/work/dir",
     GitDir:    ".git",
     Remote:    "origin",
     RemoteUrl: "http://url/workdir",
     Revision:  "sha_revision",
     Files: map[string]*app.GitTreeObj{"file.1": &app.GitTreeObj{Permissions: "100644", Type: "blob",
      Sha: "0000000000000000000000000000000000000001", Filename: "file.1"}}},
   },
   commit: commitTest{
    sha: "HEAD",
    cmd: &TestCmd{text: "sha_for_head\nR removed.1\nA added.1\nM modified.1\n", err: nil},
    res: &app.GitCommit{
     Sha: "sha_for_head",
     Files: []app.GitCommitFile{
      {Filename: "removed.1", Type: app.GitFileRemoved},
      {Filename: "added.1", Type: app.GitFileAdded},
      {Filename: "modified.1", Type: app.GitFileModified},
     },
    },
   },
  },
 }
 for _, test := range tests {
  git := &gitCli{git: &gitTestCli{
   revParse:  test.project.revCmd,
   remoteUrl: test.project.remoteCmd,
   tree:      test.project.treeCmd,
   commit:    test.commit.cmd,
  }}

  proj, err := git.Project(nil, test.path, test.gitDir, test.remote, test.revision)
  if err != nil {
   t.Fatal("Failed to parse project")
  }
  if test.getFiles {
   _ = git.PopulateFiles(nil, proj, "")
  }
  if !reflect.DeepEqual(*proj, *test.project.res) {
   t.Errorf("Project = %+v; want %+v", *proj, *test.project.res)
  }
  if test.commit.cmd != nil {
   c, err := git.CommitInfo(nil, proj, test.commit.sha)
   if err != nil {
    t.Errorf("Failed to get; %v", test)
   } else {
    if !reflect.DeepEqual(*c, *test.commit.res) {
     t.Errorf("Commit = %v; want %v", c, *test.commit.res)
    }
   }
  }
 }

}

[Dauer der Verarbeitung: 0.1 Sekunden, vorverarbeitet 2026-06-27]