• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

damienbod / angular-auth-oidc-client / 8332521723

18 Mar 2024 07:29PM UTC coverage: 92.928% (-4.1%) from 97.057%
8332521723

Pull #1848

github

web-flow
Merge e22aee67b into 6c778a4a2
Pull Request #1848: moving to strict mode

700 of 818 branches covered (85.57%)

Branch coverage included in aggregate %.

228 of 293 new or added lines in 48 files covered. (77.82%)

11 existing lines in 6 files now uncovered.

2559 of 2689 relevant lines covered (95.17%)

8.26 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.59
/projects/angular-auth-oidc-client/src/lib/utils/equality/equality.service.ts
1
import { Injectable } from '@angular/core';
2

3
@Injectable({ providedIn: 'root' })
4
export class EqualityService {
1✔
5
  isStringEqualOrNonOrderedArrayEqual(
6
    value1: string | any[],
7
    value2: string | any[]
8
  ): boolean {
9
    if (this.isNullOrUndefined(value1)) {
13!
UNCOV
10
      return false;
×
11
    }
12

13
    if (this.isNullOrUndefined(value2)) {
13!
UNCOV
14
      return false;
×
15
    }
16

17
    if (this.oneValueIsStringAndTheOtherIsArray(value1, value2)) {
13✔
18
      return false;
2✔
19
    }
20

21
    if (this.bothValuesAreStrings(value1, value2)) {
11✔
22
      return value1 === value2;
6✔
23
    }
24

25
    return this.arraysHaveEqualContent(value1 as any[], value2 as any[]);
5✔
26
  }
27

28
  areEqual(
29
    value1: string | any[] | any | null | undefined,
30
    value2: string | any[] | any | null | undefined
31
  ): boolean {
32
    if (!value1 || !value2) {
18✔
33
      return false;
6✔
34
    }
35

36
    if (this.bothValuesAreArrays(value1, value2)) {
12✔
37
      return this.arraysStrictEqual(value1 as any[], value2 as any[]);
3✔
38
    }
39

40
    if (this.bothValuesAreStrings(value1, value2)) {
9✔
41
      return value1 === value2;
2✔
42
    }
43

44
    if (this.bothValuesAreObjects(value1, value2)) {
7✔
45
      return (
2✔
46
        JSON.stringify(value1).toLowerCase() ===
47
        JSON.stringify(value2).toLowerCase()
48
      );
49
    }
50

51
    if (this.oneValueIsStringAndTheOtherIsArray(value1, value2)) {
5✔
52
      if (Array.isArray(value1) && this.valueIsString(value2)) {
4✔
53
        return value1[0] === value2;
2✔
54
      }
55
      if (Array.isArray(value2) && this.valueIsString(value1)) {
2✔
56
        return value2[0] === value1;
2✔
57
      }
58
    }
59

60
    return value1 === value2;
1✔
61
  }
62

63
  private oneValueIsStringAndTheOtherIsArray(
64
    value1: string | any | any[],
65
    value2: string | any | any[]
66
  ): boolean {
67
    return (
18✔
68
      (Array.isArray(value1) && this.valueIsString(value2)) ||
49✔
69
      (Array.isArray(value2) && this.valueIsString(value1))
70
    );
71
  }
72

73
  private bothValuesAreObjects(
74
    value1: string | any | any[],
75
    value2: string | any | any[]
76
  ): boolean {
77
    return this.valueIsObject(value1) && this.valueIsObject(value2);
7✔
78
  }
79

80
  private bothValuesAreStrings(
81
    value1: string | any | any[],
82
    value2: string | any | any[]
83
  ): boolean {
84
    return this.valueIsString(value1) && this.valueIsString(value2);
20✔
85
  }
86

87
  private bothValuesAreArrays(
88
    value1: string | any | any[],
89
    value2: string | any | any[]
90
  ): boolean {
91
    return Array.isArray(value1) && Array.isArray(value2);
12✔
92
  }
93

94
  private valueIsString(value: any): boolean {
95
    return typeof value === 'string' || value instanceof String;
50✔
96
  }
97

98
  private valueIsObject(value: any): boolean {
99
    return typeof value === 'object';
11✔
100
  }
101

102
  private arraysStrictEqual(arr1: Array<string>, arr2: Array<string>): boolean {
103
    if (arr1.length !== arr2.length) {
3✔
104
      return false;
1✔
105
    }
106

107
    for (let i = arr1.length; i--; ) {
2✔
108
      if (arr1[i] !== arr2[i]) {
3✔
109
        return false;
1✔
110
      }
111
    }
112

113
    return true;
1✔
114
  }
115

116
  private arraysHaveEqualContent(
117
    arr1: Array<string>,
118
    arr2: Array<string>
119
  ): boolean {
120
    if (arr1.length !== arr2.length) {
5✔
121
      return false;
1✔
122
    }
123

124
    return arr1.some((v) => arr2.includes(v));
4✔
125
  }
126

127
  private isNullOrUndefined(val: any): boolean {
128
    return val === null || val === undefined;
26✔
129
  }
130
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc